emacs-diffs
[Top][All Lists]
Advanced

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

feature/tree-sitter 77d5a0cf9f 5/5: Merge remote-tracking branch 'origin


From: Yuan Fu
Subject: feature/tree-sitter 77d5a0cf9f 5/5: Merge remote-tracking branch 'origin/master' into feature/tree-sitter
Date: Mon, 29 Aug 2022 14:43:27 -0400 (EDT)

branch: feature/tree-sitter
commit 77d5a0cf9fc4a6dc44f0c6ee5e3295e0eea08273
Merge: e98b4715bb df2f6fb7fc
Author: Yuan Fu <yuan@debian-BULLSEYE-live-builder-AMD64>
Commit: Yuan Fu <yuan@debian-BULLSEYE-live-builder-AMD64>

    Merge remote-tracking branch 'origin/master' into feature/tree-sitter
---
 .dir-locals.el                                     |    1 +
 .gitignore                                         |    6 +
 CONTRIBUTE                                         |   36 +-
 ChangeLog.2                                        |    6 +-
 ChangeLog.3                                        | 2342 +++++--
 Makefile.in                                        |   35 +-
 admin/MAINTAINERS                                  |    1 +
 admin/admin.el                                     |    9 +-
 admin/authors.el                                   |    3 +-
 admin/automerge                                    |    2 +-
 admin/check-doc-strings                            |    8 +-
 admin/coccinelle/window.cocci                      |    6 -
 admin/emake                                        |    5 +-
 admin/gitmerge.el                                  |    8 +-
 admin/make-tarball.txt                             |   57 +-
 admin/merge-gnulib                                 |    2 +-
 admin/notes/multi-tty                              |    2 +-
 admin/notes/spelling                               |    2 +-
 admin/nt/dist-build/README-scripts                 |    2 +-
 admin/nt/dist-build/build-zips.sh                  |    2 +-
 admin/quick-install-emacs                          |    4 +-
 admin/unidata/blocks.awk                           |   11 +-
 admin/unidata/unidata-gen.el                       |    4 +-
 admin/update_autogen                               |   14 +-
 autogen.sh                                         |    2 +-
 build-aux/config.guess                             |    9 +-
 build-aux/config.sub                               |    6 +-
 config.bat                                         |    1 +
 configure.ac                                       | 1545 ++---
 doc/emacs/ChangeLog.1                              |    2 +-
 doc/emacs/abbrevs.texi                             |    6 +-
 doc/emacs/buffers.texi                             |   13 +-
 doc/emacs/custom.texi                              |    8 +
 doc/emacs/dired.texi                               |  115 +-
 doc/emacs/display.texi                             |   97 +-
 doc/emacs/emacs.texi                               |    3 +-
 doc/emacs/files.texi                               |   61 +-
 doc/emacs/frames.texi                              |   11 +-
 doc/emacs/glossary.texi                            |    5 +-
 doc/emacs/help.texi                                |    5 +
 doc/emacs/killing.texi                             |   23 +-
 doc/emacs/maintaining.texi                         |    4 +-
 doc/emacs/mini.texi                                |   13 +-
 doc/emacs/misc.texi                                |  102 +-
 doc/emacs/msdos.texi                               |    6 +-
 doc/emacs/package.texi                             |   10 +
 doc/emacs/search.texi                              |   17 +-
 doc/emacs/trouble.texi                             |  150 +-
 doc/emacs/xresources.texi                          |   10 +-
 doc/lispintro/emacs-lisp-intro.texi                |   45 +-
 doc/lispref/buffers.texi                           |   14 +-
 doc/lispref/commands.texi                          |   37 +-
 doc/lispref/compile.texi                           |    6 +-
 doc/lispref/customize.texi                         |    4 +
 doc/lispref/debugging.texi                         |   44 +
 doc/lispref/display.texi                           |  258 +-
 doc/lispref/edebug.texi                            |   10 +-
 doc/lispref/files.texi                             |    9 +
 doc/lispref/frames.texi                            |   86 +-
 doc/lispref/functions.texi                         |   38 +
 doc/lispref/hash.texi                              |   28 +-
 doc/lispref/hooks.texi                             |    2 -
 doc/lispref/keymaps.texi                           |   35 +-
 doc/lispref/lists.texi                             |   67 +-
 doc/lispref/loading.texi                           |   36 +-
 doc/lispref/maps.texi                              |    4 +
 doc/lispref/modes.texi                             |   27 +-
 doc/lispref/objects.texi                           |    3 +
 doc/lispref/os.texi                                |   66 +-
 doc/lispref/positions.texi                         |   22 +
 doc/lispref/processes.texi                         |  152 +-
 doc/lispref/searching.texi                         |    4 +-
 doc/lispref/sequences.texi                         |   14 +
 doc/lispref/strings.texi                           |   27 +-
 doc/lispref/text.texi                              |   46 +-
 doc/lispref/tips.texi                              |   16 +-
 doc/lispref/variables.texi                         |   65 +-
 doc/lispref/windows.texi                           |   24 +-
 doc/misc/Makefile.in                               |    1 +
 doc/misc/auth.texi                                 |   16 +-
 doc/misc/autotype.texi                             |   40 +-
 doc/misc/calc.texi                                 |    2 +-
 doc/misc/cl.texi                                   |   94 +-
 doc/misc/dired-x.texi                              |  172 -
 doc/misc/ede.texi                                  |    4 +-
 doc/misc/ediff.texi                                |   11 +-
 doc/misc/efaq-w32.texi                             |  119 +-
 doc/misc/efaq.texi                                 |  264 +-
 doc/misc/emacs-mime.texi                           |    6 +-
 doc/misc/erc.texi                                  |  211 +-
 doc/misc/ert.texi                                  |    4 +-
 doc/misc/eshell.texi                               |  161 +-
 doc/misc/eudc.texi                                 |   21 +-
 doc/misc/eww.texi                                  |    4 +-
 doc/misc/gnus-faq.texi                             |  249 +-
 doc/misc/gnus.texi                                 |  273 +-
 doc/misc/htmlfontify.texi                          |   12 +-
 doc/misc/idlwave.texi                              |   49 +-
 doc/misc/message.texi                              |   18 +-
 doc/misc/mh-e.texi                                 |  103 +-
 doc/misc/modus-themes.org                          |  522 +-
 doc/misc/org.org                                   |   10 +-
 doc/misc/rcirc.texi                                |    6 +-
 doc/misc/reftex.texi                               |    8 +-
 doc/misc/texinfo.tex                               |  476 +-
 doc/misc/tramp.texi                                |  128 +-
 doc/misc/transient.texi                            |  802 +--
 doc/misc/url.texi                                  |    1 -
 doc/misc/viper.texi                                |    4 +-
 doc/misc/vtable.texi                               |    6 +-
 etc/AUTHORS                                        |  231 +-
 etc/DEBUG                                          |   44 +-
 etc/ERC-NEWS                                       |   90 +
 etc/NEWS                                           |  980 ++-
 etc/NEWS.1-17                                      |  860 +--
 etc/NEWS.18                                        |  512 +-
 etc/NEWS.19                                        | 1695 +++---
 etc/NEWS.20                                        | 1318 ++--
 etc/NEWS.21                                        | 1785 +++---
 etc/NEWS.22                                        | 2577 ++++----
 etc/NEWS.23                                        | 1212 ++--
 etc/NEWS.24                                        | 2264 +++----
 etc/NEWS.25                                        |    6 +-
 etc/NEWS.26                                        |   14 +-
 etc/NEWS.27                                        |   14 +-
 etc/NEWS.28                                        |   42 +-
 etc/ORG-NEWS                                       |   20 +-
 etc/PROBLEMS                                       |  205 +-
 etc/TODO                                           |   35 +-
 etc/compilation.txt                                |   13 +-
 etc/emacs_lldb.py                                  |  254 +
 etc/images/README                                  |    2 +-
 etc/publicsuffix.txt                               |   46 +-
 etc/srecode/ede-autoconf.srt                       |    4 +-
 etc/themes/leuven-dark-theme.el                    |    2 +-
 etc/themes/manoj-dark-theme.el                     |    2 +-
 etc/themes/modus-operandi-theme.el                 |    4 +-
 etc/themes/modus-themes.el                         |  432 +-
 etc/themes/modus-vivendi-theme.el                  |    4 +-
 etc/tutorials/TUTORIAL.nl                          |    2 +-
 lib-src/Makefile.in                                |    3 +
 lib-src/etags.c                                    |   19 +-
 lib-src/make-docfile.c                             |  360 +-
 lib/fchmodat.c                                     |   59 +-
 lib/filevercmp.c                                   |   18 +-
 lib/filevercmp.h                                   |    4 +-
 lib/gnulib.mk.in                                   |   37 +-
 lib/group-member.c                                 |    5 +-
 lib/intprops-internal.h                            |  392 ++
 lib/intprops.h                                     |  359 +-
 lib/lchmod.c                                       |   84 +-
 lib/mini-gmp.h                                     |    2 +-
 lib/stdckdint.in.h                                 |   37 +
 lib/str-two-way.h                                  |    4 +-
 lib/string.in.h                                    |   16 +-
 lib/sys_stat.in.h                                  |   28 +-
 lib/tempname.c                                     |  170 +-
 lib/tempname.h                                     |    2 +-
 lib/verify.h                                       |    7 +-
 lisp/ChangeLog.12                                  |    2 +-
 lisp/ChangeLog.17                                  |    2 +-
 lisp/ChangeLog.5                                   |    4 +-
 lisp/ChangeLog.9                                   |    2 +-
 lisp/Makefile.in                                   |   73 +-
 lisp/abbrev.el                                     |   30 +-
 lisp/align.el                                      |   18 +-
 lisp/allout.el                                     |   34 +-
 lisp/ansi-color.el                                 |    3 -
 lisp/apropos.el                                    |   99 +-
 lisp/arc-mode.el                                   |   28 +-
 lisp/array.el                                      |   87 +-
 lisp/auth-source.el                                |  160 +-
 lisp/autoinsert.el                                 |    5 +-
 lisp/autorevert.el                                 |    2 +-
 lisp/battery.el                                    |   22 +-
 lisp/bindings.el                                   |  240 +-
 lisp/bookmark.el                                   |  145 +-
 lisp/bs.el                                         |  119 +-
 lisp/buff-menu.el                                  |    4 +-
 lisp/button.el                                     |   14 +-
 lisp/calc/calc-embed.el                            |    3 +-
 lisp/calc/calc-keypd.el                            |    2 +-
 lisp/calc/calc-misc.el                             |   62 +-
 lisp/calc/calc-prog.el                             |    7 +-
 lisp/calc/calc-vec.el                              |    4 +-
 lisp/calc/calc-yank.el                             |   30 +-
 lisp/calc/calc.el                                  |   14 +-
 lisp/calendar/calendar.el                          |   18 +-
 lisp/calendar/diary-lib.el                         |   14 +-
 lisp/calendar/icalendar.el                         |    3 +-
 lisp/calendar/time-date.el                         |   20 +-
 lisp/calendar/timeclock.el                         |    4 +-
 lisp/cedet/cedet-global.el                         |    2 +-
 lisp/cedet/cedet.el                                |    6 +-
 lisp/cedet/data-debug.el                           |   22 +-
 lisp/cedet/ede.el                                  |    9 +-
 lisp/cedet/ede/auto.el                             |    1 +
 lisp/cedet/ede/autoconf-edit.el                    |    8 +-
 lisp/cedet/ede/base.el                             |    8 +-
 lisp/cedet/ede/config.el                           |    4 +-
 lisp/cedet/ede/custom.el                           |   10 +-
 lisp/cedet/ede/emacs.el                            |    3 +-
 lisp/cedet/ede/files.el                            |    5 +-
 lisp/cedet/ede/pmake.el                            |    2 +-
 lisp/cedet/ede/proj-elisp.el                       |    3 +-
 lisp/cedet/ede/project-am.el                       |    2 +-
 lisp/cedet/ede/speedbar.el                         |    6 +-
 lisp/cedet/ede/system.el                           |    2 +-
 lisp/cedet/pulse.el                                |    2 +-
 lisp/cedet/semantic.el                             |    6 +-
 lisp/cedet/semantic/bovine.el                      |    4 +-
 lisp/cedet/semantic/bovine/c.el                    |   10 +-
 lisp/cedet/semantic/complete.el                    |   94 +-
 lisp/cedet/semantic/db-file.el                     |    2 +-
 lisp/cedet/semantic/db-typecache.el                |    2 +-
 lisp/cedet/semantic/db.el                          |   11 +-
 lisp/cedet/semantic/edit.el                        |    2 +-
 lisp/cedet/semantic/grammar.el                     |    6 +-
 lisp/cedet/semantic/idle.el                        |    8 +-
 lisp/cedet/semantic/java.el                        |   37 +-
 lisp/cedet/semantic/lex-spp.el                     |    4 +-
 lisp/cedet/semantic/lex.el                         |   39 +-
 lisp/cedet/semantic/symref.el                      |    2 +-
 lisp/cedet/semantic/symref/list.el                 |    8 +-
 lisp/cedet/semantic/tag-file.el                    |  102 +-
 lisp/cedet/semantic/util-modes.el                  |    6 +-
 lisp/cedet/semantic/util.el                        |    3 -
 lisp/cedet/semantic/wisent/comp.el                 |   16 +-
 lisp/cedet/semantic/wisent/javascript.el           |    2 +-
 lisp/cedet/semantic/wisent/python.el               |    6 +-
 lisp/cedet/srecode.el                              |    4 +-
 lisp/cedet/srecode/compile.el                      |   10 +-
 lisp/cedet/srecode/document.el                     |    6 +-
 lisp/cedet/srecode/insert.el                       |    6 +-
 lisp/cedet/srecode/table.el                        |   10 +-
 lisp/chistory.el                                   |    6 +-
 lisp/comint.el                                     |   98 +-
 lisp/completion.el                                 |    4 -
 lisp/composite.el                                  |   19 +
 lisp/cus-dep.el                                    |    2 +-
 lisp/cus-edit.el                                   |  325 +-
 lisp/cus-face.el                                   |    4 +-
 lisp/cus-start.el                                  |    7 +
 lisp/custom.el                                     |   17 +-
 lisp/descr-text.el                                 |    5 +-
 lisp/desktop.el                                    |   16 +-
 lisp/dired-aux.el                                  |  466 +-
 lisp/dired-x.el                                    |  681 +--
 lisp/dired.el                                      |  232 +-
 lisp/dirtrack.el                                   |   21 +-
 lisp/dnd.el                                        |  140 +-
 lisp/doc-view.el                                   |  198 +-
 lisp/dos-fns.el                                    |   16 -
 lisp/ecomplete.el                                  |    2 +-
 lisp/edmacro.el                                    |   71 +-
 lisp/elec-pair.el                                  |   87 +-
 lisp/electric.el                                   |   28 +-
 lisp/emacs-lisp/advice.el                          |   27 +-
 lisp/emacs-lisp/autoload.el                        |  915 ---
 lisp/emacs-lisp/backtrace.el                       |  119 +-
 lisp/emacs-lisp/bindat.el                          |   45 +-
 lisp/emacs-lisp/byte-opt.el                        |  555 +-
 lisp/emacs-lisp/byte-run.el                        |  238 +-
 lisp/emacs-lisp/bytecomp.el                        |  230 +-
 lisp/emacs-lisp/cconv.el                           |    3 +-
 lisp/emacs-lisp/chart.el                           |    9 +-
 lisp/emacs-lisp/checkdoc.el                        |  107 +-
 lisp/emacs-lisp/cl-extra.el                        |    3 +-
 lisp/emacs-lisp/cl-generic.el                      |   46 +-
 lisp/emacs-lisp/cl-indent.el                       |    7 +-
 lisp/emacs-lisp/cl-lib.el                          |    4 +-
 lisp/emacs-lisp/cl-macs.el                         |   40 +-
 lisp/emacs-lisp/cl-preloaded.el                    |    2 +-
 lisp/emacs-lisp/cl-seq.el                          |    4 +
 lisp/emacs-lisp/comp-cstr.el                       |   14 +-
 lisp/emacs-lisp/comp.el                            |   86 +-
 lisp/emacs-lisp/crm.el                             |   51 +-
 lisp/emacs-lisp/debug-early.el                     |    8 +-
 lisp/emacs-lisp/debug.el                           |   93 +-
 lisp/emacs-lisp/derived.el                         |    5 +-
 lisp/emacs-lisp/easy-mmode.el                      |    4 +-
 lisp/emacs-lisp/easymenu.el                        |   18 +-
 lisp/emacs-lisp/edebug.el                          |  302 +-
 lisp/emacs-lisp/eieio-base.el                      |   46 +-
 lisp/emacs-lisp/eieio-core.el                      |    5 +-
 lisp/emacs-lisp/eieio-custom.el                    |   12 +-
 lisp/emacs-lisp/eieio-opt.el                       |    4 -
 lisp/emacs-lisp/eieio.el                           |    1 +
 lisp/emacs-lisp/eldoc.el                           |   17 +-
 lisp/emacs-lisp/elp.el                             |   14 +-
 lisp/emacs-lisp/ert-x.el                           |   11 +-
 lisp/emacs-lisp/ert.el                             |   29 +-
 lisp/emacs-lisp/find-func.el                       |    5 +-
 lisp/emacs-lisp/gv.el                              |  109 +-
 lisp/emacs-lisp/helper.el                          |   51 +-
 lisp/emacs-lisp/icons.el                           |  267 +
 lisp/emacs-lisp/lisp-mode.el                       |  222 +-
 lisp/emacs-lisp/lisp.el                            |   18 +-
 lisp/emacs-lisp/loaddefs-gen.el                    |  180 +-
 lisp/emacs-lisp/macroexp.el                        |   19 +-
 lisp/emacs-lisp/nadvice.el                         |   28 +-
 lisp/emacs-lisp/package.el                         |   96 +-
 lisp/emacs-lisp/pcase.el                           |   13 +-
 lisp/emacs-lisp/re-builder.el                      |   67 +-
 lisp/emacs-lisp/regi.el                            |    1 -
 lisp/emacs-lisp/ring.el                            |    4 +
 lisp/emacs-lisp/rmc.el                             |   25 +-
 lisp/emacs-lisp/rx.el                              |   15 +
 lisp/emacs-lisp/seq.el                             |   78 +-
 lisp/emacs-lisp/shadow.el                          |    7 +-
 lisp/emacs-lisp/shortdoc.el                        |   74 +-
 lisp/emacs-lisp/shorthands.el                      |    3 +-
 lisp/emacs-lisp/subr-x.el                          |  144 +-
 lisp/emacs-lisp/syntax.el                          |  115 +-
 lisp/emacs-lisp/tabulated-list.el                  |   65 +-
 lisp/emacs-lisp/testcover.el                       |    3 +-
 lisp/emacs-lisp/timer-list.el                      |   13 +-
 lisp/emacs-lisp/timer.el                           |   70 +-
 lisp/emacs-lisp/trace.el                           |   17 +-
 lisp/emacs-lisp/warnings.el                        |   55 +-
 lisp/emacs-lock.el                                 |   11 -
 lisp/emulation/cua-base.el                         |   18 +-
 lisp/emulation/edt.el                              |    2 +-
 lisp/emulation/viper-cmd.el                        |    8 +-
 lisp/emulation/viper-ex.el                         |    2 +-
 lisp/emulation/viper-init.el                       |    6 +-
 lisp/emulation/viper-keym.el                       |   86 +-
 lisp/emulation/viper-macs.el                       |    8 +-
 lisp/emulation/viper-util.el                       |   54 +-
 lisp/emulation/viper.el                            |   37 +-
 lisp/env.el                                        |    4 +-
 lisp/epa-ks.el                                     |    6 +-
 lisp/epa-mail.el                                   |   28 +-
 lisp/epa.el                                        |    2 +-
 lisp/epg-config.el                                 |    4 +-
 lisp/epg.el                                        |    4 +-
 lisp/erc/erc-backend.el                            |  289 +-
 lisp/erc/erc-button.el                             |    2 +-
 lisp/erc/erc-capab.el                              |    2 +-
 lisp/erc/erc-compat.el                             |    6 +
 lisp/erc/erc-dcc.el                                |   47 +-
 lisp/erc/erc-join.el                               |  121 +-
 lisp/erc/erc-networks.el                           |  699 ++-
 lisp/erc/erc-services.el                           |   53 +-
 lisp/erc/erc-speedbar.el                           |   29 +-
 lisp/erc/erc-stamp.el                              |    2 +-
 lisp/erc/erc-track.el                              |   16 +-
 lisp/erc/erc.el                                    | 1023 +++-
 lisp/eshell/em-alias.el                            |    2 +-
 lisp/eshell/em-cmpl.el                             |   11 -
 lisp/eshell/em-dirs.el                             |   41 +-
 lisp/eshell/em-extpipe.el                          |    4 +-
 lisp/eshell/em-glob.el                             |  221 +-
 lisp/eshell/em-hist.el                             |    1 -
 lisp/eshell/em-pred.el                             |   18 +-
 lisp/eshell/em-term.el                             |   10 +-
 lisp/eshell/em-unix.el                             |   19 +-
 lisp/eshell/esh-arg.el                             |    2 +-
 lisp/eshell/esh-cmd.el                             |   92 +-
 lisp/eshell/esh-io.el                              |   71 +-
 lisp/eshell/esh-mode.el                            |   13 +-
 lisp/eshell/esh-proc.el                            |  123 +-
 lisp/eshell/esh-util.el                            |   12 +-
 lisp/eshell/esh-var.el                             |  136 +-
 lisp/ezimage.el                                    |    5 -
 lisp/face-remap.el                                 |  116 +-
 lisp/faces.el                                      |   79 +-
 lisp/ffap.el                                       |  202 +-
 lisp/files-x.el                                    |   31 +-
 lisp/files.el                                      |  268 +-
 lisp/filesets.el                                   |   89 +-
 lisp/find-dired.el                                 |   99 +-
 lisp/find-file.el                                  |   15 +-
 lisp/find-lisp.el                                  |    2 +-
 lisp/finder.el                                     |   16 +-
 lisp/font-core.el                                  |    7 +-
 lisp/font-lock.el                                  |  210 +-
 lisp/format.el                                     |    1 +
 lisp/frame.el                                      |   16 +-
 lisp/fringe.el                                     |   12 +
 lisp/gnus/ChangeLog.3                              |    4 +-
 lisp/gnus/deuglify.el                              |    1 +
 lisp/gnus/gnus-agent.el                            |    6 +-
 lisp/gnus/gnus-art.el                              |   61 +-
 lisp/gnus/gnus-bookmark.el                         |    4 +-
 lisp/gnus/gnus-cache.el                            |    2 +-
 lisp/gnus/gnus-cite.el                             |    8 +-
 lisp/gnus/gnus-cus.el                              |    2 +-
 lisp/gnus/gnus-demon.el                            |    2 +-
 lisp/gnus/gnus-diary.el                            |    8 +-
 lisp/gnus/gnus-draft.el                            |    2 +-
 lisp/gnus/gnus-eform.el                            |    2 +-
 lisp/gnus/gnus-group.el                            |   30 +-
 lisp/gnus/gnus-int.el                              |    5 +-
 lisp/gnus/gnus-logic.el                            |    4 +-
 lisp/gnus/gnus-msg.el                              |   44 +-
 lisp/gnus/gnus-picon.el                            |    6 +-
 lisp/gnus/gnus-range.el                            |   12 +-
 lisp/gnus/gnus-registry.el                         |    3 -
 lisp/gnus/gnus-salt.el                             |    8 +-
 lisp/gnus/gnus-score.el                            |   14 +-
 lisp/gnus/gnus-search.el                           |   48 +-
 lisp/gnus/gnus-srvr.el                             |    7 +-
 lisp/gnus/gnus-start.el                            |   16 +-
 lisp/gnus/gnus-sum.el                              |   40 +-
 lisp/gnus/gnus-topic.el                            |   10 +-
 lisp/gnus/gnus-util.el                             |   46 +-
 lisp/gnus/gnus-uu.el                               |   11 +-
 lisp/gnus/gnus.el                                  |   45 +-
 lisp/gnus/message.el                               |   87 +-
 lisp/gnus/mm-decode.el                             |   16 +-
 lisp/gnus/mm-util.el                               |    1 -
 lisp/gnus/mm-view.el                               |    4 +-
 lisp/gnus/mml.el                                   |   12 +-
 lisp/gnus/mml2015.el                               |    2 +-
 lisp/gnus/nnagent.el                               |    1 +
 lisp/gnus/nnbabyl.el                               |    8 +-
 lisp/gnus/nndiary.el                               |    4 +-
 lisp/gnus/nndir.el                                 |    1 +
 lisp/gnus/nndoc.el                                 |    1 +
 lisp/gnus/nndraft.el                               |    1 +
 lisp/gnus/nneething.el                             |    4 +-
 lisp/gnus/nnfolder.el                              |   10 +-
 lisp/gnus/nnheader.el                              |   18 +-
 lisp/gnus/nnimap.el                                |   28 +-
 lisp/gnus/nnmail.el                                |    6 +-
 lisp/gnus/nnmaildir.el                             |   22 +-
 lisp/gnus/nnmairix.el                              |    2 +-
 lisp/gnus/nnmbox.el                                |    1 +
 lisp/gnus/nnmh.el                                  |   12 +-
 lisp/gnus/nnml.el                                  |    9 +-
 lisp/gnus/nnrss.el                                 |    7 +-
 lisp/gnus/nnspool.el                               |    1 +
 lisp/gnus/nntp.el                                  |   54 +-
 lisp/gnus/nnvirtual.el                             |    7 +-
 lisp/gnus/smime.el                                 |    2 +-
 lisp/gnus/spam-report.el                           |    2 +-
 lisp/gnus/spam-stat.el                             |    5 +-
 lisp/gnus/spam.el                                  |   10 +-
 lisp/help-fns.el                                   |  197 +-
 lisp/help-mode.el                                  |  108 +-
 lisp/help.el                                       |  146 +-
 lisp/hex-util.el                                   |    8 +-
 lisp/hi-lock.el                                    |   42 +-
 lisp/htmlfontify.el                                |   11 +-
 lisp/ibuf-ext.el                                   |   86 +-
 lisp/ibuf-macs.el                                  |   22 +-
 lisp/ibuffer.el                                    |  427 +-
 lisp/icomplete.el                                  |   14 +-
 lisp/ido.el                                        |   19 +-
 lisp/iimage.el                                     |    3 -
 lisp/image-dired.el                                |   20 +-
 lisp/image-mode.el                                 |  467 +-
 lisp/image.el                                      |  109 +-
 lisp/image/exif.el                                 |    4 +-
 lisp/image/gravatar.el                             |    2 +-
 lisp/image/image-converter.el                      |   81 +-
 lisp/imenu.el                                      |    8 +-
 lisp/indent.el                                     |   11 +-
 lisp/info-look.el                                  |    4 +-
 lisp/info.el                                       |   18 +-
 lisp/informat.el                                   |    2 +-
 lisp/international/characters.el                   |   23 +-
 lisp/international/emoji.el                        |   50 +-
 lisp/international/iso-transl.el                   |   30 +-
 lisp/international/ja-dic-utl.el                   |    8 +-
 lisp/international/latin1-disp.el                  |    2 +
 lisp/international/mule-cmds.el                    |   10 +-
 lisp/international/mule-diag.el                    |   62 +-
 lisp/international/quail.el                        |    8 +-
 lisp/international/titdic-cnv.el                   |    7 +-
 lisp/isearch.el                                    |  314 +-
 lisp/jit-lock.el                                   |   23 +-
 lisp/jsonrpc.el                                    |   12 +-
 lisp/keymap.el                                     |   37 +-
 lisp/kmacro.el                                     |  129 +-
 lisp/language/european.el                          |    2 +-
 lisp/language/ind-util.el                          |   16 +-
 lisp/language/indian.el                            |    2 +-
 lisp/language/misc-lang.el                         |    9 +-
 lisp/ldefs-boot.el                                 | 5982 +++++++++---------
 lisp/leim/quail/hangul.el                          |   33 +-
 lisp/leim/quail/indian.el                          |  310 +-
 lisp/leim/quail/persian.el                         |   90 +-
 lisp/linum.el                                      |   10 -
 lisp/loadhist.el                                   |    2 +-
 lisp/loadup.el                                     |   40 +-
 lisp/ls-lisp.el                                    |    8 -
 lisp/mail/binhex.el                                |    4 +
 lisp/mail/emacsbug.el                              |   64 +-
 lisp/mail/feedmail.el                              |    8 -
 lisp/mail/footnote.el                              |   30 +-
 lisp/mail/hashcash.el                              |   12 +-
 lisp/mail/ietf-drums.el                            |   13 +
 lisp/mail/mail-extr.el                             |  115 +-
 lisp/mail/mail-hist.el                             |    2 +-
 lisp/mail/mail-parse.el                            |    8 +-
 lisp/mail/mail-utils.el                            |   18 +-
 lisp/mail/mailabbrev.el                            |    4 +-
 lisp/mail/mailalias.el                             |   37 +-
 lisp/mail/mspools.el                               |   23 +-
 lisp/mail/rfc2047.el                               |   19 +-
 lisp/mail/rmail.el                                 |   22 +-
 lisp/mail/rmailedit.el                             |   11 +-
 lisp/mail/rmailmm.el                               |    5 +-
 lisp/mail/rmailsum.el                              |   14 +-
 lisp/mail/sendmail.el                              |   53 +-
 lisp/mail/smtpmail.el                              |   48 +-
 lisp/mail/supercite.el                             |  153 +-
 lisp/mail/uce.el                                   |  400 --
 lisp/mail/undigest.el                              |    4 -
 lisp/mail/unrmail.el                               |    2 +-
 lisp/makesum.el                                    |  109 -
 lisp/man.el                                        |   11 +-
 lisp/menu-bar.el                                   |   18 +-
 lisp/mh-e/mh-acros.el                              |   18 +-
 lisp/mh-e/mh-alias.el                              |    5 -
 lisp/mh-e/mh-buffers.el                            |    1 -
 lisp/mh-e/mh-comp.el                               |    1 -
 lisp/mh-e/mh-compat.el                             |  151 -
 lisp/mh-e/mh-e.el                                  |   34 +-
 lisp/mh-e/mh-folder.el                             |    5 +-
 lisp/mh-e/mh-funcs.el                              |    7 +-
 lisp/mh-e/mh-gnus.el                               |   12 +-
 lisp/mh-e/mh-identity.el                           |   13 +-
 lisp/mh-e/mh-inc.el                                |    1 -
 lisp/mh-e/mh-junk.el                               |    1 -
 lisp/mh-e/mh-letter.el                             |   22 +-
 lisp/mh-e/mh-limit.el                              |    1 -
 lisp/mh-e/mh-mime.el                               |   54 +-
 lisp/mh-e/mh-print.el                              |    1 -
 lisp/mh-e/mh-scan.el                               |    1 -
 lisp/mh-e/mh-search.el                             |    3 +-
 lisp/mh-e/mh-seq.el                                |    3 +-
 lisp/mh-e/mh-show.el                               |    1 -
 lisp/mh-e/mh-speed.el                              |    1 -
 lisp/mh-e/mh-thread.el                             |    1 -
 lisp/mh-e/mh-tool-bar.el                           |    1 -
 lisp/mh-e/mh-utils.el                              |   18 +-
 lisp/mh-e/mh-xface.el                              |    1 -
 lisp/midnight.el                                   |    4 +-
 lisp/minibuffer.el                                 |   98 +-
 lisp/misc.el                                       |   59 +-
 lisp/mouse.el                                      |   37 +-
 lisp/mpc.el                                        |   91 +-
 lisp/msb.el                                        |    9 +-
 lisp/mwheel.el                                     |   50 +-
 lisp/net/ange-ftp.el                               |   18 +-
 lisp/net/browse-url.el                             |  119 +-
 lisp/net/dbus.el                                   |    4 +-
 lisp/net/dictionary.el                             |   75 +-
 lisp/net/dig.el                                    |   72 +-
 lisp/net/eudc-capf.el                              |    2 +-
 lisp/net/eudc-export.el                            |    2 +-
 lisp/net/eudc-hotlist.el                           |   31 +-
 lisp/net/eudc-vars.el                              |   18 +-
 lisp/net/eudc.el                                   |   72 +-
 lisp/net/eudcb-ldap.el                             |   12 +-
 lisp/net/eudcb-macos-contacts.el                   |  201 +-
 lisp/net/eww.el                                    |   26 +-
 lisp/net/imap.el                                   |    9 +-
 lisp/net/ldap.el                                   |    4 +-
 lisp/net/mailcap.el                                |    7 +-
 lisp/net/mairix.el                                 |   29 +-
 lisp/net/net-utils.el                              |  125 +-
 lisp/net/netrc.el                                  |  238 -
 lisp/net/newst-backend.el                          |    9 +-
 lisp/net/newst-plainview.el                        |   17 +-
 lisp/net/newst-reader.el                           |   10 +-
 lisp/net/newst-treeview.el                         |  105 +-
 lisp/net/pop3.el                                   |    6 +-
 lisp/net/quickurl.el                               |  525 --
 lisp/net/rcirc.el                                  |  109 +-
 lisp/net/rlogin.el                                 |  313 -
 lisp/net/secrets.el                                |   15 +-
 lisp/net/shr.el                                    |  131 +-
 lisp/net/sieve-manage.el                           |    2 +-
 lisp/net/sieve-mode.el                             |   12 +-
 lisp/net/sieve.el                                  |   52 +-
 lisp/net/snmp-mode.el                              |   14 +-
 lisp/net/socks.el                                  |    9 +-
 lisp/net/telnet.el                                 |   31 +-
 lisp/net/tramp-adb.el                              |  675 +--
 lisp/net/tramp-archive.el                          |   67 +-
 lisp/net/tramp-cache.el                            |  183 +-
 lisp/net/tramp-cmds.el                             |   62 +-
 lisp/net/tramp-compat.el                           |   71 +-
 lisp/net/tramp-crypt.el                            |  244 +-
 lisp/net/tramp-ftp.el                              |   21 +-
 lisp/net/tramp-fuse.el                             |   61 +-
 lisp/net/tramp-gvfs.el                             |  455 +-
 lisp/net/tramp-integration.el                      |   15 +-
 lisp/net/tramp-rclone.el                           |   89 +-
 lisp/net/tramp-sh.el                               | 2048 +++----
 lisp/net/tramp-smb.el                              | 1077 ++--
 lisp/net/tramp-sshfs.el                            |   17 +-
 lisp/net/tramp-sudoedit.el                         |  219 +-
 lisp/net/tramp.el                                  | 1358 +++--
 lisp/net/trampver.el                               |   10 +-
 lisp/net/webjump.el                                |   46 +-
 lisp/nxml/nxml-mode.el                             |   48 +-
 lisp/nxml/nxml-outln.el                            |   54 +-
 lisp/nxml/nxml-parse.el                            |    2 +-
 lisp/nxml/rng-dt.el                                |    2 +-
 lisp/nxml/rng-loc.el                               |    8 +-
 lisp/nxml/rng-match.el                             |    2 +-
 lisp/nxml/rng-parse.el                             |    2 +-
 lisp/nxml/rng-util.el                              |   15 +-
 lisp/nxml/rng-valid.el                             |    8 +-
 lisp/obsolete/abbrevlist.el                        |   56 -
 lisp/obsolete/assoc.el                             |  140 -
 lisp/obsolete/autoload.el                          |  915 +++
 lisp/obsolete/complete.el                          | 1122 ----
 lisp/obsolete/cust-print.el                        |  674 ---
 lisp/obsolete/eieio-compat.el                      |   21 +-
 lisp/obsolete/erc-hecomplete.el                    |  218 -
 lisp/obsolete/fast-lock.el                         |  730 ---
 lisp/obsolete/gs.el                                |    2 +-
 lisp/obsolete/info-edit.el                         |   12 +-
 lisp/obsolete/lazy-lock.el                         | 1025 ----
 lisp/obsolete/longlines.el                         |  133 +-
 lisp/obsolete/mailpost.el                          |  101 -
 lisp/obsolete/makesum.el                           |  107 +
 lisp/obsolete/mh-compat.el                         |  136 +
 lisp/obsolete/mouse-sel.el                         |  731 ---
 lisp/obsolete/netrc.el                             |  245 +
 lisp/obsolete/old-emacs-lock.el                    |  102 -
 lisp/obsolete/patcomp.el                           |   24 -
 lisp/obsolete/pc-mode.el                           |   56 -
 lisp/obsolete/pc-select.el                         |  410 --
 lisp/obsolete/ps-def.el                            |   54 +
 lisp/obsolete/quickurl.el                          |  524 ++
 lisp/obsolete/rcompile.el                          |    2 +-
 lisp/obsolete/rlogin.el                            |  307 +
 lisp/obsolete/s-region.el                          |  123 -
 lisp/obsolete/sregex.el                            |  605 --
 lisp/obsolete/starttls.el                          |    3 -
 lisp/obsolete/tpu-extras.el                        |    2 +-
 lisp/obsolete/uce.el                               |  401 ++
 lisp/obsolete/url-about.el                         |  104 +
 lisp/obsolete/url-dired.el                         |   58 +
 lisp/org/ChangeLog.1                               |    4 +-
 lisp/org/ob-comint.el                              |    2 +-
 lisp/org/ob-core.el                                |   29 +-
 lisp/org/ob-julia.el                               |    7 +-
 lisp/org/ob-lilypond.el                            |    3 +-
 lisp/org/ob-octave.el                              |    2 +-
 lisp/org/ob-tangle.el                              |    5 +-
 lisp/org/oc-basic.el                               |   23 +-
 lisp/org/oc.el                                     |   25 +-
 lisp/org/ol-doi.el                                 |    2 +-
 lisp/org/ol-irc.el                                 |   12 +-
 lisp/org/ol.el                                     |   14 +-
 lisp/org/org-agenda.el                             |  101 +-
 lisp/org/org-capture.el                            |    2 +-
 lisp/org/org-clock.el                              |   14 +-
 lisp/org/org-compat.el                             |   25 +-
 lisp/org/org-element.el                            |   11 +-
 lisp/org/org-feed.el                               |    2 +-
 lisp/org/org-habit.el                              |    2 +-
 lisp/org/org-inlinetask.el                         |    6 +-
 lisp/org/org-lint.el                               |    6 +-
 lisp/org/org-list.el                               |   72 +-
 lisp/org/org-macs.el                               |    4 +-
 lisp/org/org-mobile.el                             |   12 +-
 lisp/org/org-mouse.el                              |    8 +-
 lisp/org/org-plot.el                               |   18 +-
 lisp/org/org-refile.el                             |    4 +-
 lisp/org/org-src.el                                |    4 +-
 lisp/org/org-table.el                              |   28 +-
 lisp/org/org-version.el                            |    2 +-
 lisp/org/org.el                                    |  101 +-
 lisp/org/ox-ascii.el                               |   18 +-
 lisp/org/ox-icalendar.el                           |   12 +-
 lisp/org/ox-md.el                                  |   10 +-
 lisp/org/ox.el                                     |  177 +-
 lisp/outline.el                                    |  140 +-
 lisp/paren.el                                      |    3 +-
 lisp/pcmpl-unix.el                                 |   14 +-
 lisp/pgtk-dnd.el                                   |  410 ++
 lisp/pixel-scroll.el                               |   98 +-
 lisp/play/5x5.el                                   |   12 +-
 lisp/play/bubbles.el                               |    9 +-
 lisp/play/cookie1.el                               |    3 +-
 lisp/play/decipher.el                              |    2 +-
 lisp/play/doctor.el                                |   24 +-
 lisp/play/dunnet.el                                |    2 +-
 lisp/play/fortune.el                               |   56 +-
 lisp/play/gamegrid.el                              |   36 +-
 lisp/play/gomoku.el                                |    5 +-
 lisp/play/hanoi.el                                 |   44 +-
 lisp/play/mpuz.el                                  |    2 +-
 lisp/play/spook.el                                 |    2 +-
 lisp/play/tetris.el                                |   35 +-
 lisp/plstore.el                                    |    1 +
 lisp/printing.el                                   |   78 +-
 lisp/profiler.el                                   |    2 +-
 lisp/progmodes/antlr-mode.el                       |    9 +-
 lisp/progmodes/autoconf.el                         |    2 +-
 lisp/progmodes/bug-reference.el                    |    2 +-
 lisp/progmodes/cc-awk.el                           |    2 +-
 lisp/progmodes/cc-cmds.el                          |   14 +-
 lisp/progmodes/cc-defs.el                          |   82 +-
 lisp/progmodes/cc-engine.el                        |  107 +-
 lisp/progmodes/cc-fonts.el                         |  103 +-
 lisp/progmodes/cc-langs.el                         |   14 +-
 lisp/progmodes/cc-mode.el                          |  183 +-
 lisp/progmodes/cfengine.el                         |   13 +-
 lisp/progmodes/compile.el                          |  243 +-
 lisp/progmodes/cperl-mode.el                       |  140 +-
 lisp/progmodes/cwarn.el                            |    3 -
 lisp/progmodes/ebnf2ps.el                          |   56 +-
 lisp/progmodes/ebrowse.el                          |    2 +-
 lisp/progmodes/elisp-mode.el                       |   86 +-
 lisp/progmodes/etags.el                            |    8 +-
 lisp/progmodes/f90.el                              |    7 +-
 lisp/progmodes/flymake-proc.el                     |    5 +-
 lisp/progmodes/flymake.el                          |    4 +-
 lisp/progmodes/fortran.el                          |   12 +-
 lisp/progmodes/gdb-mi.el                           |   47 +-
 lisp/progmodes/glasses.el                          |    6 +-
 lisp/progmodes/grep.el                             |   42 +-
 lisp/progmodes/gud.el                              |   36 +-
 lisp/progmodes/hideif.el                           |    5 +-
 lisp/progmodes/hideshow.el                         |   93 +-
 lisp/progmodes/icon.el                             |    2 -
 lisp/progmodes/idlw-shell.el                       |   18 +-
 lisp/progmodes/idlwave.el                          |   50 +-
 lisp/progmodes/js.el                               |   59 +-
 lisp/progmodes/make-mode.el                        |    5 +-
 lisp/progmodes/meta-mode.el                        |   76 +-
 lisp/progmodes/modula2.el                          |    5 +-
 lisp/progmodes/octave.el                           |    4 +-
 lisp/progmodes/opascal.el                          |    3 +-
 lisp/progmodes/pascal.el                           |   44 +-
 lisp/progmodes/perl-mode.el                        |    5 +-
 lisp/progmodes/project.el                          |   41 +-
 lisp/progmodes/prolog.el                           |  109 +-
 lisp/progmodes/ps-mode.el                          |    8 +-
 lisp/progmodes/python.el                           |  367 +-
 lisp/progmodes/ruby-mode.el                        |   11 +-
 lisp/progmodes/scheme.el                           |    6 +
 lisp/progmodes/sh-script.el                        |   33 +-
 lisp/progmodes/sql.el                              |   53 +-
 lisp/progmodes/tcl.el                              |    8 +-
 lisp/progmodes/verilog-mode.el                     |   26 +-
 lisp/progmodes/vhdl-mode.el                        |   22 +-
 lisp/progmodes/which-func.el                       |    6 +-
 lisp/progmodes/xref.el                             |   38 +-
 lisp/progmodes/xscheme.el                          |   23 +-
 lisp/ps-def.el                                     |  134 -
 lisp/ps-print.el                                   |  125 +-
 lisp/recentf.el                                    |  146 +-
 lisp/rect.el                                       |   58 +-
 lisp/repeat.el                                     |   44 +-
 lisp/replace.el                                    |  167 +-
 lisp/ruler-mode.el                                 |   45 +-
 lisp/savehist.el                                   |    3 +-
 lisp/saveplace.el                                  |   19 +-
 lisp/select.el                                     |  168 +-
 lisp/server.el                                     |    8 +-
 lisp/ses.el                                        |    2 +-
 lisp/shell.el                                      |   11 +-
 lisp/simple.el                                     |  386 +-
 lisp/so-long.el                                    |   62 +-
 lisp/speedbar.el                                   |   17 +-
 lisp/sqlite-mode.el                                |    1 +
 lisp/startup.el                                    |   23 +-
 lisp/strokes.el                                    |    4 +-
 lisp/subr.el                                       |  320 +-
 lisp/tab-bar.el                                    |  154 +-
 lisp/tab-line.el                                   |    2 +-
 lisp/tar-mode.el                                   |   78 +-
 lisp/term.el                                       |   28 +-
 lisp/term/common-win.el                            |   27 +-
 lisp/term/haiku-win.el                             |  243 +-
 lisp/term/ns-win.el                                |   13 +-
 lisp/term/pgtk-win.el                              |    7 +-
 lisp/term/w32-win.el                               |    1 -
 lisp/term/x-win.el                                 |   27 +-
 lisp/term/xterm.el                                 |    2 +-
 lisp/textmodes/artist.el                           |  171 +-
 lisp/textmodes/bib-mode.el                         |   79 +-
 lisp/textmodes/bibtex.el                           |   46 +-
 lisp/textmodes/conf-mode.el                        |   13 +-
 lisp/textmodes/css-mode.el                         |    2 +-
 lisp/textmodes/dns-mode.el                         |   26 +-
 lisp/textmodes/emacs-authors-mode.el               |  145 +
 lisp/textmodes/emacs-news-mode.el                  |   69 +-
 lisp/textmodes/etc-authors-mode.el                 |  133 -
 lisp/textmodes/fill.el                             |    4 +-
 lisp/textmodes/flyspell.el                         |   56 +-
 lisp/textmodes/ispell.el                           |   81 +-
 lisp/textmodes/nroff-mode.el                       |   23 +-
 lisp/textmodes/page-ext.el                         |   15 +-
 lisp/textmodes/paragraphs.el                       |   30 +-
 lisp/textmodes/picture.el                          |    1 -
 lisp/textmodes/refbib.el                           |   11 +-
 lisp/textmodes/reftex-cite.el                      |   52 +-
 lisp/textmodes/reftex-index.el                     |   19 +-
 lisp/textmodes/reftex-ref.el                       |    6 +-
 lisp/textmodes/reftex-sel.el                       |   16 +-
 lisp/textmodes/reftex-toc.el                       |   47 +-
 lisp/textmodes/reftex-vars.el                      |    2 +-
 lisp/textmodes/remember.el                         |    7 +-
 lisp/textmodes/rst.el                              |  199 +-
 lisp/textmodes/sgml-mode.el                        |   61 +-
 lisp/textmodes/tex-mode.el                         |   41 +-
 lisp/textmodes/texinfo.el                          |   11 +-
 lisp/textmodes/texnfo-upd.el                       |    2 +-
 lisp/textmodes/text-mode.el                        |   16 +-
 lisp/textmodes/tildify.el                          |    5 +-
 lisp/thingatpt.el                                  |   15 +-
 lisp/thumbs.el                                     |  104 +-
 lisp/time.el                                       |    4 +-
 lisp/tool-bar.el                                   |    4 +-
 lisp/tooltip.el                                    |   11 +-
 lisp/transient.el                                  | 1004 +--
 lisp/type-break.el                                 |   38 +-
 lisp/uniquify.el                                   |    5 +-
 lisp/url/url-about.el                              |  103 -
 lisp/url/url-cache.el                              |    2 +-
 lisp/url/url-cookie.el                             |    2 +-
 lisp/url/url-dired.el                              |   57 -
 lisp/url/url-file.el                               |   11 +-
 lisp/url/url-history.el                            |    2 +-
 lisp/url/url-http.el                               |   23 +-
 lisp/url/url-privacy.el                            |   11 +-
 lisp/url/url-queue.el                              |    4 +-
 lisp/url/url-tramp.el                              |   50 +-
 lisp/url/url-util.el                               |   41 +-
 lisp/url/url-vars.el                               |    7 +-
 lisp/url/url.el                                    |    2 +-
 lisp/vc/add-log.el                                 |   17 +-
 lisp/vc/compare-w.el                               |    5 +-
 lisp/vc/diff-mode.el                               |   34 +-
 lisp/vc/ediff-help.el                              |    6 +-
 lisp/vc/ediff-hook.el                              |   14 +-
 lisp/vc/ediff-init.el                              |  150 +-
 lisp/vc/ediff-mult.el                              |   42 +-
 lisp/vc/ediff-ptch.el                              |    4 +-
 lisp/vc/ediff-util.el                              |  100 +-
 lisp/vc/ediff-wind.el                              |   42 +-
 lisp/vc/ediff.el                                   |   16 +-
 lisp/vc/emerge.el                                  |    8 +-
 lisp/vc/pcvs-util.el                               |    8 +-
 lisp/vc/vc-annotate.el                             |   33 +-
 lisp/vc/vc-bzr.el                                  |   32 +-
 lisp/vc/vc-cvs.el                                  |    2 +-
 lisp/vc/vc-dir.el                                  |   16 +-
 lisp/vc/vc-dispatcher.el                           |   37 +-
 lisp/vc/vc-git.el                                  |   57 +-
 lisp/vc/vc-hg.el                                   |   17 +-
 lisp/vc/vc-hooks.el                                |   75 +-
 lisp/vc/vc-svn.el                                  |   10 +-
 lisp/vc/vc.el                                      |    6 +-
 lisp/vcursor.el                                    |    9 +-
 lisp/view.el                                       |   70 +-
 lisp/wdired.el                                     |   97 +-
 lisp/whitespace.el                                 |   87 +-
 lisp/wid-browse.el                                 |    9 +-
 lisp/wid-edit.el                                   |    9 +-
 lisp/widget.el                                     |    1 -
 lisp/windmove.el                                   |   20 +-
 lisp/window.el                                     |   50 +-
 lisp/winner.el                                     |    9 +-
 lisp/woman.el                                      |   28 +-
 lisp/x-dnd.el                                      | 1151 +++-
 lisp/xdg.el                                        |   17 +-
 lisp/xwidget.el                                    |   21 +-
 lwlib/lwlib-Xaw.c                                  |    2 +
 lwlib/xlwmenu.c                                    |  455 +-
 lwlib/xlwmenu.h                                    |    4 +
 lwlib/xlwmenuP.h                                   |   18 +-
 m4/fchmodat.m4                                     |    4 +-
 m4/gnulib-common.m4                                |    3 +-
 m4/gnulib-comp.m4                                  |   22 +
 m4/largefile.m4                                    |    7 +-
 m4/lchmod.m4                                       |    6 +-
 m4/sys_stat_h.m4                                   |    6 +-
 m4/year2038.m4                                     |   10 +-
 make-dist                                          |    4 +-
 msdos/sedlibmk.inp                                 |    5 +
 nextstep/Makefile.in                               |    7 +-
 src/.lldbinit                                      |   33 +
 src/Makefile.in                                    |   29 +-
 src/alloc.c                                        |   23 +-
 src/bidi.c                                         |   42 +-
 src/buffer.c                                       |  112 +-
 src/buffer.h                                       |   22 +-
 src/bytecode.c                                     |   16 +-
 src/callint.c                                      |  122 +-
 src/callproc.c                                     |   41 +-
 src/character.c                                    |   66 +-
 src/character.h                                    |    5 +-
 src/charset.c                                      |    5 +-
 src/coding.c                                       |   16 +-
 src/comp.c                                         |   27 +-
 src/composite.c                                    |  121 +-
 src/conf_post.h                                    |    2 +-
 src/data.c                                         |   36 +-
 src/dired.c                                        |   63 +-
 src/dispextern.h                                   |   67 +-
 src/dispnew.c                                      |   29 +-
 src/doc.c                                          |    6 +-
 src/editfns.c                                      |  223 +-
 src/emacs.c                                        |   40 +-
 src/eval.c                                         |   86 +-
 src/fileio.c                                       |   29 +-
 src/fns.c                                          |  583 +-
 src/font.c                                         |   10 +-
 src/frame.c                                        |  102 +-
 src/fringe.c                                       |   15 +
 src/ftcrfont.c                                     |    8 +-
 src/gnutls.c                                       |   32 +-
 src/gtkutil.c                                      |    2 +
 src/haiku_draw_support.cc                          |  202 +-
 src/haiku_font_support.cc                          |   23 +
 src/haiku_io.c                                     |    2 +
 src/haiku_select.cc                                |  141 +-
 src/haiku_support.cc                               |  451 +-
 src/haiku_support.h                                |   35 +-
 src/haikufns.c                                     |   57 +-
 src/haikufont.c                                    |  164 +-
 src/haikumenu.c                                    |    9 +-
 src/haikuselect.c                                  |  150 +-
 src/haikuselect.h                                  |   13 +-
 src/haikuterm.c                                    |  225 +-
 src/haikuterm.h                                    |    8 +-
 src/image.c                                        |  314 +-
 src/indent.c                                       |   91 +-
 src/inotify.c                                      |    2 +-
 src/insdel.c                                       |   19 +-
 src/intervals.c                                    |    4 +-
 src/json.c                                         |    6 +-
 src/keyboard.c                                     |  336 +-
 src/keyboard.h                                     |    6 +-
 src/keymap.c                                       |   24 +-
 src/kqueue.c                                       |    4 +-
 src/lisp.h                                         |   64 +-
 src/lread.c                                        |  193 +-
 src/macfont.m                                      |    7 +-
 src/marker.c                                       |    5 +-
 src/minibuf.c                                      |   65 +-
 src/nsfns.m                                        |   36 +-
 src/nsfont.m                                       |    5 +-
 src/nsimage.m                                      |    2 +-
 src/nsmenu.m                                       |    2 -
 src/nsselect.m                                     |    2 +-
 src/nsterm.h                                       |   10 +
 src/nsterm.m                                       |  240 +-
 src/pdumper.c                                      |   13 +-
 src/pgtkfns.c                                      |   40 +-
 src/pgtkmenu.c                                     |    2 -
 src/pgtkselect.c                                   | 1983 +++++-
 src/pgtkselect.h                                   |   31 -
 src/pgtkterm.c                                     |  436 +-
 src/pgtkterm.h                                     |  181 +-
 src/print.c                                        |  361 +-
 src/process.c                                      |  429 +-
 src/process.h                                      |    5 +-
 src/puresize.h                                     |    2 +-
 src/regex-emacs.c                                  |   30 +
 src/search.c                                       |   51 +-
 src/sheap.h                                        |    2 +-
 src/sound.c                                        |    8 +-
 src/sqlite.c                                       |    6 +-
 src/syntax.c                                       |    9 +
 src/sysdep.c                                       |   49 +-
 src/systime.h                                      |    3 +
 src/term.c                                         |   22 +-
 src/termhooks.h                                    |   31 +-
 src/terminal.c                                     |   12 +-
 src/textprop.c                                     |   14 +-
 src/timefns.c                                      |  180 +-
 src/undo.c                                         |    2 +-
 src/w32.c                                          |   79 +-
 src/w32fns.c                                       |   43 +-
 src/w32image.c                                     |    4 +-
 src/w32proc.c                                      |   17 +-
 src/w32select.c                                    |    2 +-
 src/w32term.c                                      |    2 +
 src/window.c                                       |   79 +-
 src/window.h                                       |   11 +-
 src/xdisp.c                                        |  970 ++-
 src/xfaces.c                                       |  238 +-
 src/xfns.c                                         |  437 +-
 src/xmenu.c                                        |  135 +-
 src/xml.c                                          |   16 +-
 src/xselect.c                                      |  337 +-
 src/xsettings.c                                    |    7 +-
 src/xsettings.h                                    |    2 +-
 src/xterm.c                                        | 6359 ++++++++++++++------
 src/xterm.h                                        |  242 +-
 test/ChangeLog.1                                   |    2 +-
 test/Makefile.in                                   |   21 +-
 .../authinfo                                       |    0
 .../netrc-folding                                  |    0
 test/lisp/auth-source-tests.el                     |   26 +-
 test/lisp/autorevert-tests.el                      |    2 +-
 test/lisp/bookmark-tests.el                        |    8 +-
 test/lisp/calc/calc-tests.el                       |    6 +-
 test/lisp/calendar/icalendar-tests.el              |   18 +-
 test/lisp/calendar/todo-mode-tests.el              |   10 +-
 test/lisp/cedet/cedet-files-tests.el               |   17 +-
 test/lisp/cedet/semantic-utest-c.el                |    8 +-
 .../semantic-utest-ia-resources/teststruct.cpp     |    2 +-
 test/lisp/cedet/semantic-utest-ia.el               |   12 +-
 test/lisp/cedet/semantic-utest.el                  |    6 +-
 test/lisp/cedet/srecode/document-tests.el          |    2 -
 test/lisp/comint-tests.el                          |    4 -
 test/lisp/custom-tests.el                          |    1 +
 test/lisp/dired-aux-tests.el                       |   13 +
 test/lisp/dired-tests.el                           |    4 +-
 test/lisp/dired-x-tests.el                         |   13 -
 test/lisp/dnd-tests.el                             |   72 +-
 test/lisp/emacs-lisp/backtrace-tests.el            |    6 +-
 test/lisp/emacs-lisp/bindat-tests.el               |   16 +-
 .../emacs-lisp/bytecomp-resources/fun-attr-warn.el |  266 +
 .../bytecomp-resources/no-byte-compile.el          |    1 +
 test/lisp/emacs-lisp/bytecomp-tests.el             |   78 +-
 test/lisp/emacs-lisp/cconv-tests.el                |    1 +
 test/lisp/emacs-lisp/edebug-tests.el               |    9 +
 test/lisp/emacs-lisp/find-func-tests.el            |    4 +-
 test/lisp/emacs-lisp/icons-tests.el                |   63 +
 test/lisp/emacs-lisp/lisp-mode-tests.el            |   25 +
 test/lisp/emacs-lisp/oclosure-tests.el             |    1 +
 test/lisp/emacs-lisp/package-tests.el              |   15 +
 test/lisp/emacs-lisp/seq-tests.el                  |   68 +-
 test/lisp/emacs-lisp/subr-x-tests.el               |   35 +-
 test/lisp/emacs-lisp/syntax-tests.el               |    4 -
 test/lisp/emacs-lisp/text-property-search-tests.el |   25 +-
 test/lisp/env-tests.el                             |   40 +
 test/lisp/erc/erc-join-tests.el                    |  361 ++
 test/lisp/erc/erc-networks-tests.el                | 1707 ++++++
 test/lisp/erc/erc-scenarios-auth-source.el         |  178 +
 .../erc/erc-scenarios-base-association-nick.el     |  163 +
 .../erc/erc-scenarios-base-association-samenet.el  |  144 +
 test/lisp/erc/erc-scenarios-base-association.el    |  192 +
 .../erc-scenarios-base-compat-rename-bouncer.el    |  171 +
 .../erc/erc-scenarios-base-misc-regressions.el     |  126 +
 .../erc/erc-scenarios-base-netid-bouncer-id.el     |   34 +
 .../erc-scenarios-base-netid-bouncer-recon-base.el |   30 +
 .../erc-scenarios-base-netid-bouncer-recon-both.el |   32 +
 .../erc-scenarios-base-netid-bouncer-recon-id.el   |   35 +
 test/lisp/erc/erc-scenarios-base-netid-bouncer.el  |   35 +
 test/lisp/erc/erc-scenarios-base-netid-samenet.el  |  147 +
 test/lisp/erc/erc-scenarios-base-reconnect.el      |  226 +
 test/lisp/erc/erc-scenarios-base-renick.el         |  305 +
 test/lisp/erc/erc-scenarios-base-reuse-buffers.el  |  238 +
 test/lisp/erc/erc-scenarios-base-unstable.el       |  134 +
 .../erc/erc-scenarios-base-upstream-recon-soju.el  |   43 +
 .../erc/erc-scenarios-base-upstream-recon-znc.el   |   43 +
 test/lisp/erc/erc-scenarios-internal.el            |   27 +
 test/lisp/erc/erc-scenarios-join-auth-source.el    |   67 +
 .../lisp/erc/erc-scenarios-join-netid-newcmd-id.el |   50 +
 test/lisp/erc/erc-scenarios-join-netid-newcmd.el   |   37 +
 test/lisp/erc/erc-scenarios-join-netid-recon-id.el |   46 +
 test/lisp/erc/erc-scenarios-join-netid-recon.el    |   36 +
 test/lisp/erc/erc-scenarios-misc.el                |  180 +
 test/lisp/erc/erc-scenarios-services-misc.el       |   86 +
 test/lisp/erc/erc-services-tests.el                |  574 ++
 test/lisp/erc/erc-tests.el                         |  655 +-
 .../base/assoc/bouncer-history/barnet.eld          |   44 +
 .../base/assoc/bouncer-history/foonet.eld          |   48 +
 .../lisp/erc/resources/base/assoc/bumped/again.eld |   30 +
 .../erc/resources/base/assoc/bumped/foisted.eld    |   30 +
 .../erc/resources/base/assoc/bumped/refoisted.eld  |   31 +
 .../erc/resources/base/assoc/bumped/renicked.eld   |   30 +
 .../erc/resources/base/assoc/multi-net/barnet.eld  |   42 +
 .../erc/resources/base/assoc/multi-net/foonet.eld  |   45 +
 .../erc/resources/base/assoc/reconplay/again.eld   |   42 +
 .../erc/resources/base/assoc/reconplay/foonet.eld  |   52 +
 .../erc/resources/base/assoc/samenet/chester.eld   |   40 +
 .../erc/resources/base/assoc/samenet/tester.eld    |   42 +
 .../erc/resources/base/assoc/samenet/tester2.eld   |   39 +
 .../lisp/erc/resources/base/auth-source/foonet.eld |   23 +
 .../lisp/erc/resources/base/auth-source/nopass.eld |   22 +
 .../base/channel-buffer-revival/foonet.eld         |   45 +
 test/lisp/erc/resources/base/flood/soju.eld        |   87 +
 .../erc/resources/base/gapless-connect/barnet.eld  |   40 +
 .../erc/resources/base/gapless-connect/foonet.eld  |   41 +
 .../resources/base/gapless-connect/pass-stub.eld   |    4 +
 .../resources/base/mask-target-routing/foonet.eld  |   45 +
 .../resources/base/netid/bouncer/barnet-again.eld  |   50 +
 .../resources/base/netid/bouncer/barnet-drop.eld   |   41 +
 .../erc/resources/base/netid/bouncer/barnet.eld    |   41 +
 .../resources/base/netid/bouncer/foonet-again.eld  |   50 +
 .../resources/base/netid/bouncer/foonet-drop.eld   |   46 +
 .../erc/resources/base/netid/bouncer/foonet.eld    |   46 +
 .../resources/base/netid/bouncer/stub-again.eld    |    4 +
 .../erc/resources/base/netid/samenet/chester.eld   |   48 +
 .../erc/resources/base/netid/samenet/tester.eld    |   52 +
 .../erc/resources/base/reconnect/aborted-dupe.eld  |   28 +
 test/lisp/erc/resources/base/reconnect/aborted.eld |   45 +
 .../erc/resources/base/reconnect/options-again.eld |   45 +
 test/lisp/erc/resources/base/reconnect/options.eld |   35 +
 .../erc/resources/base/reconnect/timer-last.eld    |    6 +
 test/lisp/erc/resources/base/reconnect/timer.eld   |    6 +
 .../base/renick/queries/bouncer-barnet.eld         |   54 +
 .../base/renick/queries/bouncer-foonet.eld         |   52 +
 .../erc/resources/base/renick/queries/solo.eld     |   55 +
 test/lisp/erc/resources/base/renick/self/auto.eld  |   46 +
 .../lisp/erc/resources/base/renick/self/manual.eld |   50 +
 .../resources/base/renick/self/qual-chester.eld    |   40 +
 .../erc/resources/base/renick/self/qual-tester.eld |   46 +
 .../base/reuse-buffers/channel/barnet.eld          |   68 +
 .../base/reuse-buffers/channel/foonet.eld          |   66 +
 .../resources/base/reuse-buffers/server/barnet.eld |   24 +
 .../resources/base/reuse-buffers/server/foonet.eld |   24 +
 .../base/upstream-reconnect/soju-barnet.eld        |   64 +
 .../base/upstream-reconnect/soju-foonet.eld        |   72 +
 .../base/upstream-reconnect/znc-barnet.eld         |   93 +
 .../base/upstream-reconnect/znc-foonet.eld         |   86 +
 test/lisp/erc/resources/dcc/chat/accept-dcc.eld    |    3 +
 test/lisp/erc/resources/dcc/chat/accept.eld        |   23 +
 test/lisp/erc/resources/erc-d/erc-d-i.el           |  124 +
 test/lisp/erc/resources/erc-d/erc-d-t.el           |  170 +
 test/lisp/erc/resources/erc-d/erc-d-tests.el       | 1373 +++++
 test/lisp/erc/resources/erc-d/erc-d-u.el           |  213 +
 test/lisp/erc/resources/erc-d/erc-d.el             | 1009 ++++
 test/lisp/erc/resources/erc-d/resources/basic.eld  |   32 +
 .../erc/resources/erc-d/resources/depleted.eld     |   12 +
 test/lisp/erc/resources/erc-d/resources/drop-a.eld |    4 +
 test/lisp/erc/resources/erc-d/resources/drop-b.eld |    4 +
 .../resources/erc-d/resources/dynamic-barnet.eld   |   33 +
 .../resources/erc-d/resources/dynamic-foonet.eld   |   32 +
 .../erc/resources/erc-d/resources/dynamic-stub.eld |    4 +
 .../lisp/erc/resources/erc-d/resources/dynamic.eld |   30 +
 test/lisp/erc/resources/erc-d/resources/eof.eld    |   33 +
 .../lisp/erc/resources/erc-d/resources/foreign.eld |    5 +
 test/lisp/erc/resources/erc-d/resources/fuzzy.eld  |   42 +
 .../erc/resources/erc-d/resources/incremental.eld  |   43 +
 .../resources/erc-d/resources/irc-parser-tests.eld |  380 ++
 .../resources/erc-d/resources/linger-multi-a.eld   |    3 +
 .../resources/erc-d/resources/linger-multi-b.eld   |    3 +
 test/lisp/erc/resources/erc-d/resources/linger.eld |   33 +
 .../erc/resources/erc-d/resources/no-block.eld     |   55 +
 .../erc/resources/erc-d/resources/no-match.eld     |   32 +
 .../lisp/erc/resources/erc-d/resources/no-pong.eld |   27 +
 .../erc/resources/erc-d/resources/nonstandard.eld  |    6 +
 .../erc/resources/erc-d/resources/proxy-barnet.eld |   24 +
 .../erc/resources/erc-d/resources/proxy-foonet.eld |   24 +
 .../erc/resources/erc-d/resources/proxy-solo.eld   |    9 +
 .../resources/erc-d/resources/proxy-subprocess.el  |   45 +
 .../lisp/erc/resources/erc-d/resources/timeout.eld |   27 +
 .../erc/resources/erc-d/resources/unexpected.eld   |   28 +
 test/lisp/erc/resources/erc-scenarios-common.el    |  516 ++
 .../lisp/erc/resources/join/auth-source/foonet.eld |   33 +
 test/lisp/erc/resources/join/legacy/foonet.eld     |   38 +
 test/lisp/erc/resources/join/network-id/barnet.eld |   43 +
 .../erc/resources/join/network-id/foonet-again.eld |   46 +
 test/lisp/erc/resources/join/network-id/foonet.eld |   39 +
 .../erc/resources/join/reconnect/foonet-again.eld  |   45 +
 test/lisp/erc/resources/join/reconnect/foonet.eld  |   45 +
 .../networks/announced-missing/foonet.eld          |    8 +
 .../erc/resources/services/auth-source/libera.eld  |   49 +
 .../erc/resources/services/password/libera.eld     |   49 +
 test/lisp/eshell/em-alias-tests.el                 |   87 +
 test/lisp/eshell/em-basic-tests.el                 |   18 +-
 test/lisp/eshell/em-dirs-tests.el                  |  102 +
 test/lisp/eshell/em-extpipe-tests.el               |   19 +-
 test/lisp/eshell/em-glob-tests.el                  |   30 +-
 test/lisp/eshell/em-pred-tests.el                  |   28 +-
 test/lisp/eshell/em-script-tests.el                |   62 +
 test/lisp/eshell/esh-cmd-tests.el                  |  275 +
 test/lisp/eshell/esh-proc-tests.el                 |   52 +-
 test/lisp/eshell/esh-var-tests.el                  |  513 +-
 test/lisp/eshell/eshell-tests-helpers.el           |   59 +-
 test/lisp/eshell/eshell-tests.el                   |  135 +-
 test/lisp/ffap-tests.el                            |   24 +
 test/lisp/filenotify-tests.el                      |    4 -
 test/lisp/files-tests.el                           |   10 +-
 test/lisp/gnus/message-tests.el                    |    8 +-
 test/lisp/help-fns-tests.el                        |    6 +-
 test/lisp/help-tests.el                            |   54 +-
 test/lisp/ibuffer-tests.el                         |    6 +-
 test/lisp/info-xref-tests.el                       |    3 +-
 test/lisp/international/ccl-tests.el               |   36 +-
 test/lisp/international/ucs-normalize-tests.el     |    2 +-
 test/lisp/isearch-tests.el                         |   80 +
 test/lisp/json-tests.el                            |    4 +-
 test/lisp/mail/footnote-tests.el                   |    2 +-
 test/lisp/mail/mail-extr-tests.el                  |   41 +
 test/lisp/mh-e/mh-utils-tests.el                   |    4 +-
 test/lisp/misc-tests.el                            |   54 +
 test/lisp/net/browse-url-tests.el                  |    2 +-
 test/lisp/net/netrc-resources/services             |    6 -
 test/lisp/net/netrc-tests.el                       |   60 -
 test/lisp/net/shr-tests.el                         |   15 +
 test/lisp/net/tramp-archive-tests.el               |   53 +-
 test/lisp/net/tramp-tests.el                       |  640 +-
 test/lisp/obsolete/inversion-tests.el              |    1 -
 test/lisp/{ => obsolete}/makesum-tests.el          |    0
 test/lisp/progmodes/autoconf-tests.el              |    8 +-
 test/lisp/progmodes/compile-tests.el               |    5 +-
 test/lisp/progmodes/cperl-mode-tests.el            |    3 +-
 test/lisp/progmodes/elisp-mode-tests.el            |   12 +-
 test/lisp/progmodes/f90-tests.el                   |    4 +-
 test/lisp/progmodes/hideshow-tests.el              |  268 +
 test/lisp/progmodes/python-tests.el                |  842 ++-
 test/lisp/replace-tests.el                         |    4 +-
 test/lisp/saveplace-tests.el                       |    2 +-
 test/lisp/shadowfile-tests.el                      |    4 -
 test/lisp/simple-tests.el                          |   20 +-
 test/lisp/so-long-tests/so-long-tests.el           |    4 +-
 test/lisp/so-long-tests/spelling-tests.el          |    2 +-
 test/lisp/subr-tests.el                            |   53 +-
 test/lisp/textmodes/conf-mode-tests.el             |    5 +-
 test/lisp/textmodes/css-mode-tests.el              |    8 +-
 .../emacs-news-mode-resources/toggle-tag.erts      |  131 +
 test/lisp/textmodes/emacs-news-mode-tests.el       |   32 +
 test/lisp/textmodes/fill-tests.el                  |    8 +-
 test/lisp/textmodes/reftex-tests.el                |  135 +-
 test/lisp/time-stamp-tests.el                      |   23 +-
 test/lisp/url/url-tramp-tests.el                   |   16 +-
 test/lisp/url/url-util-tests.el                    |   20 +
 test/lisp/whitespace-tests.el                      |    5 +-
 test/lisp/x-dnd-tests.el                           |  128 +-
 test/lisp/xml-tests.el                             |    4 -
 test/lisp/xt-mouse-tests.el                        |   50 +-
 test/manual/etags/ETAGS.good_1                     |  280 +-
 test/manual/etags/ETAGS.good_2                     |  376 +-
 test/manual/etags/ETAGS.good_3                     |  280 +-
 test/manual/etags/ETAGS.good_4                     |  280 +-
 test/manual/etags/ETAGS.good_5                     |  376 +-
 test/manual/etags/ETAGS.good_6                     |  376 +-
 test/manual/etags/cp-src/clheir.hpp                |    2 +-
 test/manual/etags/merc-src/accumulator.m           |    2 +-
 test/manual/etags/prol-src/natded.prolog           |    2 +-
 test/manual/image-circular-tests.el                |   17 +-
 test/manual/indent/perl.perl                       |    2 +-
 test/manual/process-callout-tests.el               |   64 +
 test/src/buffer-tests.el                           |   28 +-
 test/src/callint-tests.el                          |   13 +
 test/src/coding-tests.el                           |   25 +-
 test/src/comp-resources/comp-test-funcs.el         |    2 +
 test/src/comp-tests.el                             |   10 +-
 test/src/data-tests.el                             |   17 +-
 test/src/fileio-tests.el                           |   16 +
 test/src/fns-tests.el                              |  137 +-
 test/src/font-tests.el                             |    7 +-
 test/src/image-tests.el                            |    2 +-
 test/src/json-tests.el                             |    7 +-
 test/src/keymap-tests.el                           |   34 +-
 test/src/lread-resources/lazydoc.el                |  Bin 0 -> 171 bytes
 test/src/lread-tests.el                            |   19 +-
 test/src/print-tests.el                            |   14 +-
 test/src/process-tests.el                          |  211 +-
 test/src/timefns-tests.el                          |    6 -
 test/src/undo-tests.el                             |    5 +-
 1251 files changed, 73946 insertions(+), 46722 deletions(-)

diff --git a/.dir-locals.el b/.dir-locals.el
index b313945936..7812beb001 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -4,6 +4,7 @@
 ((nil . ((tab-width . 8)
          (sentence-end-double-space . t)
          (fill-column . 70)
+        (emacs-lisp-docstring-fill-column . 65)
          (bug-reference-url-format . "https://debbugs.gnu.org/%s";)))
  (c-mode . ((c-file-style . "GNU")
             (c-noise-macro-names . ("INLINE" "ATTRIBUTE_NO_SANITIZE_UNDEFINED" 
"UNINIT" "CALLBACK" "ALIGN_STACK"))
diff --git a/.gitignore b/.gitignore
index 16f449a446..0ecbcd061f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -324,3 +324,9 @@ lib-src/seccomp-filter-exec.pfc
 
 # Ignore directory made by admin/make-manuals.
 manual/
+
+# Ignore Finder files on MacOS.
+.DS_Store
+
+# Ignore a directory used by dap-mode.
+.vscode
diff --git a/CONTRIBUTE b/CONTRIBUTE
index 614afa27db..94d757daaf 100644
--- a/CONTRIBUTE
+++ b/CONTRIBUTE
@@ -314,11 +314,45 @@ them right the first time, so here are guidelines for 
formatting them:
   with Emacs commands like 'C-x 4 a', and commit the change using the
   shell command 'vc-dwim --commit'.  Type 'vc-dwim --help' for more.
 
+** Committing your changes.
+
+When you commit changes, Git invokes several scripts that test the
+commit for validity, and may abort the commit of some of the tests
+fail.  These scripts live in the '.git/hooks/' subdirectory of the
+top-level directory of the repository, and they perform the following
+tests:
+
+- commit log message must not be empty;
+- the first line of the commit log message doesn't start with
+  whitespace characters;
+- the second line of the commit log message must be empty;
+- commit log message should include only valid printable ASCII and
+  UTF-8 characters;
+- commit log message lines must be shorter than 79 characters, unless
+  a line consists of a single long word, in which case that word can
+  be up to 140 characters long;
+- there shouldn't be any "Signed-off-by:" tags in the commit log
+  message, and "git commit" should not be invoked with the '-s' option
+  (which automatically adds "Signed-off-by:");
+- if the commit adds new files, the file names must not begin with
+  '-' and must consist of ASCII letters, digits, and characters of the
+  set [-+./_];
+- the changes don't include unresolved merge conflict markers;
+- the changes don't introduce whitespace errors: trailing whitespace,
+  lines that include nothing but whitespace characters, and indented
+  lines where a SPC character is immediately followed by a TAB in the
+  line's initial indentation
+
 ** Committing changes by others
 
 If committing changes written by someone else, commit in their name,
 not yours.  You can use 'git commit --author="AUTHOR"' to specify a
-change's author.
+change's author.  When using Emacs VC to commit, the author can be
+specified in the log-edit buffer by adding an "Author: AUTHOR" header
+line (set 'log-edit-setup-add-author' non-nil to have this header line
+added automatically).  Note that the validity checks described in the
+previous section are still applied, so you will have to correct any
+problems they uncover in the changes submitted by others.
 
 ** Branches
 
diff --git a/ChangeLog.2 b/ChangeLog.2
index cf19abaa13..5a73d53b8b 100644
--- a/ChangeLog.2
+++ b/ChangeLog.2
@@ -4040,7 +4040,7 @@
 
        * lisp/progmodes/xref.el (xref--query-replace-1):
        Say 'All results processed' at the end if the user hadn't
-       cancelled the process (bug#23284).
+       canceled the process (bug#23284).
 
 2016-05-07  Eli Zaretskii  <eliz@gnu.org>
 
@@ -12542,7 +12542,7 @@
 
        * lisp/erc/erc-backend.el (erc-server-setup-periodical-ping): Checks
        for existing timers in the alist before adding new ones.  If a
-       timer already exists, it is cancelled and
+       timer already exists, it is canceled and
        overwritten. (bug#19292).
 
 2015-12-27  Jens Lechtenboerger  <jens.lechtenboerger@fsfe.org>
@@ -22108,7 +22108,7 @@
        * src/gfilenotify.c (dir_monitor_callback): Cancel the monitor if
        the file or directory to be watched is deleted.
        (Fgfile_add_watch): Make watch_object a triple.
-       (Fgfile_rm_watch): Check, whether watch is cancelled already.
+       (Fgfile_rm_watch): Check, whether watch is canceled already.
        (Fgfile_valid_p): New defun.
        (syms_of_gfilenotify): Declare Sgfile_valid_p.
 
diff --git a/ChangeLog.3 b/ChangeLog.3
index f0297fd1f0..700a210f35 100644
--- a/ChangeLog.3
+++ b/ChangeLog.3
@@ -1,4 +1,1634 @@
-2022-04-13  Tassilo Horn  <tsdh@gnu.org>
+2022-07-31  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/lisp.h (CHECK_INTEGER): Fix the predicate.  (Bug#56856)
+
+2022-07-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of column-related functions
+
+       * doc/lispref/text.texi (Primitive Indent, Columns):
+       * src/indent.c (Fcurrent_indentation, Fmove_to_column): Document
+       that column counting ignores invisible text.  (Bug#56837)
+
+2022-07-30  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * src/macfont.m (macfont_open): Initialize font->space_width.  
(Bug#56808)
+
+2022-07-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve indexing of keymap variables
+
+       * doc/lispref/maps.texi (Standard Keymaps):
+       * doc/lispref/display.texi (Button Buffer Commands)
+       (Button Properties):
+       * doc/lispref/keymaps.texi (Translation Keymaps): Improve indexing
+       of keymaps.  (Bug#56816)
+
+2022-07-29  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: fontify variables/functions after line comments ending in 
spaces
+
+       * lisp/progmodes/cc-engine.el (c-forward-comment-minus-1): Take account 
of
+       spaces preceding a linefeed when scanning a putative line comment end.
+
+2022-07-28  Stefan Kangas  <stefan@marxist.se>
+
+       Bump Emacs version to 28.1.91
+
+       * README:
+       * configure.ac:
+       * msdos/sed2v2.inp:
+       * nt/README.W32: Bump Emacs version to 28.1.91.
+
+2022-07-28  Stefan Kangas  <stefan@marxist.se>
+
+       Update ChangeLog and AUTHORS for 28.1.91 pretest
+
+       * ChangeLog.3:
+       * etc/AUTHORS: Update.
+
+2022-07-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert the `...' documentation back to actual usage
+
+       * doc/lispref/tips.texi (Documentation Tips): Document how `...'
+       is really used now (bug#55780).  ‘...’ is not really used in the
+       Emacs sources.
+
+       (cherry picked from commit 1ed9c1c7f9fe32ff5123091033350beb1ccae4ca)
+
+2022-07-28  Paul Pogonyshev  <pogonyshev@gmail.com>
+
+       Release the desktop lock in 'kill-emacs-hook'
+
+       * lisp/desktop.el: Run 'desktop--on-kill' in 'kill-emacs-hook'.
+       (desktop--on-kill): New function, refactored from 'desktop-kill'.
+       (desktop-kill): Call 'desktop--on-kill'.  (Bug#56800)
+
+2022-07-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid infloop in 'recenter'
+
+       * src/window.c (Frecenter): Avoid infinite loop in the minibuffer
+       under 'fido-vertical-mode'.  (Bug#56765)
+
+2022-07-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix inaccuracies in "lax search" documentation
+
+       * doc/emacs/search.texi (Lax Search): Update the examples of
+       character folding in search.  (Bug#56747)
+
+2022-07-24  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.4-17-g6e991f
+
+2022-07-24  Eugene Ha  <eha@posteo.de>  (tiny change)
+
+       Find libgccjit.dylib on Homebrew Macos
+
+       * configure.ac: Also find libggcjit on Homebrew (bug#55173).
+
+       (cherry picked from commit faa29fa2c9e9d5a5d7544a1a39b2a89cf57a8439)
+
+2022-07-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Set `default-directory' of Tramp archive connection buffer
+
+       * lisp/net/tramp-archive.el (tramp-archive-file-name-handler):
+       Set `default-directory' of Tramp connection buffer.  (Bug#56628)
+
+2022-07-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Update the documentation of 'declare' forms
+
+       * doc/lispref/compile.texi (Native-Compilation Variables): Mention
+       the 'declare' alternative for 'native-comp-speed'.
+       * doc/lispref/functions.texi (Declare Form): Document 'declare'
+       forms that were previously undocumented.
+
+2022-07-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix bookmark support for Help functions in native-compilation builds
+
+       * lisp/help.el (describe-key--helper, describe-function--helper):
+       New helper functions.
+       (describe-key): Call 'describe-key--helper' instead of a
+       lambda-function.
+       * lisp/help-fns.el (describe-function): Call
+       'describe-function--helper' instead of a lambda-function.
+       (Bug#56643)
+
+2022-07-23  Miha Rihtarsic  <miha@kamnitnik.top>
+
+       Fix mode line mouse-1 binding when showing only column numbers
+
+       * lisp/bindings.el (mode-line-position): Fix the mouse-1 binding
+       when showing only column numbers (bug#56694).  Do not merge to
+       master.
+
+2022-07-23  Stefan Kangas  <stefan@marxist.se>
+
+       Adjust help-fns.el tests for recent change
+
+       * test/lisp/help-fns-tests.el (help-fns-test-lisp-defun)
+       (help-fns-test-lisp-defsubst): Adjust tests for recent change.
+
+2022-07-22  Robert Pluim  <rpluim@gmail.com>
+
+       * src/terminal.c (Fframe_terminal): Use active voice
+
+2022-07-22  Robert Pluim  <rpluim@gmail.com>
+
+       Improve 'terminal-live-p' docstring some more
+
+       * src/terminal.c (Fterminal_live_p): Improve description of
+       arguments and return value.
+
+2022-07-22  Robert Pluim  <rpluim@gmail.com>
+
+       Improve terminal-live-p docstring
+
+       * src/terminal.c (Fterminal_live_p): Explain what happens when the
+       argument is nil.
+
+2022-07-22  Robert Pluim  <rpluim@gmail.com>
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-dbus-event-vector): Fix grammar
+
+2022-07-21  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/cperl-mode.el: Don't mention obsolete archive.
+
+2022-07-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Make 'describe-function' say "byte-compiled" when appropriate
+
+       * lisp/help-fns.el (help-fns-function-description-header): Say
+       "byte-compiled" when describing byte-compiled functions.
+
+2022-07-21  Eli Zaretskii  <eliz@gnu.org>
+
+       ;Improve documentation of locale-specific string comparison
+
+       * doc/lispref/strings.texi (Text Comparison): Mention the Unicode
+       collation rules and buffer-local case-tables.
+
+2022-07-19  Gerd Moellmann  <gerd.moellmann@gmail.com>
+
+       Prevent GC of window referenced from EmacsScroller
+
+       * src/nsterm.m (EmacsScroller.mark, mark_nsterm): New functions.
+       * src/nsterm.h (EmacsScroller.mark, mark_nsterm): Declare.
+       * src/alloc.c (garbage_collect) [MAVE_NS]: Call mark_nsterm.
+       (Bug#56095)
+
+       (cherry picked from commit 5f1bd872478927ad4bc635502e74628d39885286)
+
+2022-07-16  Stefan Kangas  <stefan@marxist.se>
+
+       Fix obsoletion of nntp-authinfo-file
+
+       * lisp/gnus/nntp.el (nntp-authinfo-file): Fix obsoletion.
+
+2022-07-15  Philipp Stephani  <phst@google.com>
+
+       Build Seccomp filter only if we have a 64-bit userspace (Bug#56549)
+
+       * configure.ac (SIZEOF_LONG): New variable.
+       * lib-src/Makefile.in (SIZEOF_LONG): New variable; added conditional.
+
+2022-07-14  Stefan Kangas  <stefan@marxist.se>
+
+       Update the Samaritan's contact details in M-x doctor
+
+       * lisp/play/doctor.el (doctor-death): Update the Samaritans's contact
+       details; anon.twwells.com is no longer valid.  Add link to Wikipedia.
+
+2022-07-14  Eli Zaretskii  <eliz@gnu.org>
+
+       * etc/PROBLEMS: Describe problems with remote files.  (Bug#56499)
+
+2022-07-13  Andrea Corallo  <akrl@sdf.org>
+
+       Remove uneffective test
+
+       * test/src/comp-tests.el (45603-1): Remove test.
+       * test/src/comp-resources/comp-test-45603.el: Delete.
+
+2022-07-13  Andrea Corallo  <akrl@sdf.org>
+
+       Mark async worker tmp file as utf-8-emacs-unix (bug#48029)
+
+       * lisp/emacs-lisp/comp.el (comp-final): Mark async worker tmp file
+       as utf-8.
+       * test/src/comp-tests.el (48029-1): New test.
+       * test/src/comp-resources/comp-test-funcs.el
+       (comp-test-48029-nonascii-žžž-f): New function.
+
+2022-07-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Tramp version (don't merge)
+
+       * doc/misc/trampver.texi:
+       * lisp/net/trampver.el: Change version to "2.5.3.28.2".
+       (customize-package-emacs-version-alist):
+       Add Tramp version integrated in Emacs 28.2.
+
+2022-07-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Tramp doc
+
+       * doc/misc/tramp.texi (Configuration): Mention enable-remote-dir-locals.
+       (Traces and Profiles): Fix tramp-verbose description.
+
+       * lisp/net/tramp.el (tramp-verbose): Fix docstring.
+
+2022-07-12  Stefan Kangas  <stefan@marxist.se>
+
+       Don't mention cl-cXXXr aliases in cl-lib manual
+
+       * doc/misc/cl.texi (Lists, List Functions, Efficiency Concerns): Don't
+       mention 'cl-cXXXr' compatibility aliases for built-in 'cXXXr'
+       functions.  They shouldn't be used in new code.
+
+2022-07-11  Ken Brown  <kbrown@cornell.edu>
+
+       etc/PROBLEMS: Describe issues with native compilation on Cygwin
+
+2022-07-11  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/find-dired.el (find-dired): Doc fix; add crossreference.
+
+2022-07-08  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fix; don't mention obsolete variable
+
+       * src/window.c (Fset_window_hscroll): Doc fix; don't mention obsolete
+       variable.
+
+2022-07-05  Stefan Kangas  <stefan@marxist.se>
+
+       Add index entry for "ignore case"
+
+       * doc/emacs/glossary.texi (Glossary): Add index entry for "ignore
+       case" pointing to "Case Folding".
+
+2022-07-05  Stefan Kangas  <stefan@marxist.se>
+
+       Expand docstrings related to auto-saving
+
+       * lisp/files.el (auto-save-visited-mode):
+       * lisp/simple.el (auto-save-mode): Expand docstring.
+
+2022-07-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't bug out in manual-html-fix-index-2 on newer makeinfo versions
+
+       Backport from master.
+
+       * admin/admin.el (manual-html-fix-index-2): Don't bug out if the
+       makeinfo version doesn't include <ul>.
+
+       (cherry picked from commit e0e3f2b672bc42da52ac9c7596c7560a88684651)
+
+2022-07-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Preserve <title> in the Emacs manuals
+
+       Backport from master.
+
+       * admin/admin.el (manual-html-fix-headers): Preserve the <title>
+       element (bug#48334).
+
+       (cherry picked from commit b778e71af7ca8c59917334b4bb1b34cdb52faca9)
+
+2022-07-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'jit-lock-debug-mode'
+
+       * doc/lispref/modes.texi (Other Font Lock Variables): Document
+       'jit-lock-debug-mode'.
+
+2022-07-02  Alan Mackenzie  <acm@muc.de>
+
+       * lisp/progmodes/cc-mode.el (c-common-init): Bind case-fold-search to 
nil
+
+       Backport:  This fixes bug #53605.
+
+2022-07-02  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix a c-backward-token-2 call wrongly jumping back over macros.
+
+       This fixes bug #56256.
+
+       * lisp/progmodes/cc-fonts.el (c-font-lock-c++-lambda-captures): Replace 
a
+       c-backward-token-2, which could jump back too far leading to an infinite
+       loop, with a save-excursion to remember the point we've got to go back 
to.
+
+2022-07-02  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fixes; don't use obsolete names
+
+       * etc/compilation.txt:
+       * lisp/mh-e/mh-funcs.el (mh-kill-folder): Don't use obsolete
+       names.
+
+2022-07-02  Stefan Kangas  <stefan@marxist.se>
+
+       Don't refer to obsolete alias for insert-char
+
+       * lisp/leim/quail/persian.el: Don't refer to obsolete alias for
+       insert-char.
+
+2022-07-02  Stefan Kangas  <stefan@marxist.se>
+
+       Don't use obsolete face name in manoj-dark-theme
+
+       * etc/themes/manoj-dark-theme.el (change-log-acknowledgment): Don't
+       use obsolete/non-existent face name.
+
+2022-07-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix "C-u C-x =" for SPC
+
+       * lisp/descr-text.el (describe-char): Don't report 'nobreak-space'
+       face for SPC.  (Bug#56337)
+
+2022-06-30  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fixes: don't refer to some obsolete items
+
+       * admin/notes/multi-tty:
+       * lisp/chistory.el (command-history):
+       * lisp/emacs-lisp/nadvice.el:
+       * lisp/vc/diff-mode.el: Doc fix; don't refer to obsolete variables and
+       functions.
+
+2022-06-30  Stefan Kangas  <stefan@marxist.se>
+
+       Remove obsolete cust-print from elisp index
+
+       * doc/lispref/edebug.texi (Printing in Edebug): Remove obsolete
+       library "cust-print" from index.
+
+2022-06-30  Stefan Kangas  <stefan@marxist.se>
+
+       * admin/make-tarball.txt: Minor clarifications.
+
+2022-06-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix external image conversion on MS-Windows
+
+       * lisp/image/image-converter.el (image-converter--convert-magick)
+       (image-converter--convert): Force encoding/decoding to avoid any
+       text or EOL conversions, since we are reading/writing binary
+       data.  (Bug#56317)
+
+2022-06-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * doc/emacs/buffers.texi (Indirect Buffers): Mention modification hook 
quirk
+
+2022-06-29  Stefan Kangas  <stefan@marxist.se>
+
+       Bump Emacs version to 28.1.90
+
+       * README:
+       * configure.ac:
+       * msdos/sed2v2.inp:
+       * nt/README.W32: Bump Emacs version to 28.1.90.
+
+2022-06-29  Stefan Kangas  <stefan@marxist.se>
+
+       Update ChangeLog and AUTHORS for 28.1.90 pretest
+
+       * ChangeLog.3:
+       * etc/AUTHORS: Update.
+
+2022-06-29  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.3".
+
+2022-06-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp shall not trap unrelated D-Bus errors
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-dbus-event-vector): Declare.
+       (tramp-gvfs-file-name-handler): Let-bind it.
+       (tramp-gvfs-dbus-event-vector): Fix docstring.
+       (tramp-gvfs-maybe-open-connection): Do not set it globally.  (Bug#56162)
+
+2022-06-28  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix hash table function return values in manual
+
+       * doc/lispref/hash.texi (Hash Access): Reconcile documented return
+       values of puthash and clrhash with their respective
+       docstrings (bug#55562).
+
+2022-06-27  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.4-3-g6dc785
+
+2022-06-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Mention Solaris 10 'make clean' and 'make check'
+
+       Mention further crashes on Solaris 10
+
+2022-06-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port distribution tarball to Solaris 10
+
+       * make-dist (taropt): Use 'tar -H ustar' to generate a portable
+       tar file format instead of a GNU-specific format.  Needed now that
+       Emacs tarballs contain file names longer than 100 bytes, e.g.:
+       
emacs-28.1/test/lisp/gnus/mml-sec-resources/private-keys-v1.d/C072AF82DCCCB9A7F1B85FFA10B802DC4ED16703.key
+       
emacs-28.1/test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-run-hook-with-args-until-success.el
+       Without this patch, extracting a tarball on Solaris 10 fails with
+       many diagnostics like “tar: ././@LongLink: typeflag 'L' not
+       recognized, converting to regular file”.
+
+       (cherry picked from commit 4410f5d86997b6b238ff05c2ece338b28e1163b1)
+
+2022-06-24  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid treating number as an enum in the org manual
+
+       * doc/misc/org.org (The Agenda Dispatcher): Avoid treating number as
+       enum.
+
+2022-06-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve last change in autotype.texi
+
+       * doc/misc/autotype.texi (Autoinserting): Fix wording.  Suggested
+       by Richard Stallman <rms@gnu.org>.
+
+2022-06-21  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/repeat.el (repeat-mode): Fix message format.
+
+2022-06-21  Earl Hyatt  <okamsn@protonmail.com>
+
+       Clarify autotype.texi text slightly
+
+       * doc/misc/autotype.texi (Autoinserting): Make text slightly
+       clearer (bug#56118).
+
+2022-06-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Support builds configured with a separate --bindir
+
+       * src/emacs.c (load_pdump): Don't overwrite the leading
+       directories of the Emacs executable just because the pdumper file
+       was not found in the expected directory relative to the binary.
+       This is needed to support builds with a separate --bindir
+       configure-time option and native-compilation.  (Bug#55741)
+
+2022-06-20  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/misc/eww.texi (Overview, Basics): Fix typos.
+
+2022-06-18  Richard Hansen  <rhansen@rhansen.org>
+
+       Fix invalid defcustom :group when :predicate is used
+
+       * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Fix
+       invalid `:group' argument for the `-modes' defcustom that is created
+       when `:predicate' is used (bug#56049).
+
+2022-06-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Prune the Gnus FAQ of some outdated data
+
+       * doc/misc/gnus-faq.texi (FAQ 9-2): Remove some outdated advice
+       (bug#56042).
+
+2022-06-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix efaq-w32.texi build warning
+
+       * doc/misc/efaq-w32.texi (Other useful ports): Fix ordering to
+       match nodes (or should the nodes be moved instead?).
+
+       Do not merge to master.
+
+2022-06-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update cl-struct-sequence-type doc string
+
+       * lisp/emacs-lisp/cl-macs.el (cl-struct-sequence-type): Fix doc
+       string to reflect what it does (bug#46523).
+
+2022-06-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix a tagging problem in tramp.texi
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): Restore an
+       @end lisp removed by accident.
+
+2022-06-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention face quirks after the final line in the lispref manual
+
+       * doc/lispref/display.texi (Face Attributes): Mention the quirks
+       about point after the final line (bug#56011).
+
+2022-06-17  Stefan Kangas  <stefan@marxist.se>
+
+       Delete reference to obsolete library complete.el
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): Delete reference
+       to obsolete library complete.el.
+
+2022-06-16  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/textmodes/artist.el: Minor doc fixes.
+
+2022-06-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp.el (tramp-methods): Fix quoting in docstring.
+
+2022-06-16  Arash Esbati  <arash@gnu.org>
+
+       Update MS Windows FAQ for MinGW64-w64/MSYS2
+
+       * doc/misc/efaq-w32.texi (Compiling, Debugging): Mention
+       MinGW64-w64/MSYS2 as the preferred way for building Emacs on
+       capable systems.
+       (Attachments with Gnus): Catch up with emacs-mime.texi in the
+       example given.
+       (Spell check): Add the availability of GNU Aspell and Hunspell
+       in MSYS2 distribution.
+       (Other useful ports): Add an entry for MinGW64-w64/MSYS2.
+       Fix link for MinGW homepage.
+       Remove entry for defunct UWIN project.  (Bug#55930)
+
+2022-06-15  Robert Pluim  <rpluim@gmail.com>
+
+       Describe 'set-file-modes' argument prompting
+
+       * src/fileio.c (Fset_file_modes): Document that FILENAME is prompted
+       for.  (Bug#55984)
+
+2022-06-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Clarify what a Calc registeri in in calc-insert-register"
+
+       This reverts commit 73400e4002ce8fca060093548e6791b3a784eeaa.
+
+       This has been fixed in Emacs 29 by making it possible to use regular 
registers in calc.
+
+2022-06-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify what a Calc registeri in in calc-insert-register
+
+       * lisp/calc/calc-yank.el (calc-insert-register): Note that these
+       aren't normal registers (bug#55943).
+
+2022-06-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix doc strings in whitespace.el
+
+       * lisp/whitespace.el (whitespace-style, whitespace-action):
+       Untabify the doc strings.  (Bug#55904)
+
+2022-06-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of "etags -I"
+
+       * doc/man/etags.1:
+       * doc/emacs/maintaining.texi (Create Tags Table): Elaborate on the
+       importance of the '-I' option to 'etags'.  (Bug#45246)
+
+2022-06-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention the #f syntax from cl-prin1
+
+       * doc/lispref/objects.texi (Special Read Syntax): Mention #f,
+       which is in cl-prin1 output (bug#55853).
+
+2022-06-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix file name quoting in tramp-smb.el (do not merge)
+
+       * lisp/net/tramp-smb.el (tramp-smb-handle-write-region): Quote tmpfile.
+       (tramp-smb-get-localname): Remove superfluous test.  (Bug#55855)
+
+       * test/lisp/net/tramp-tests.el (tramp-test03-file-name-method-rules):
+       Remove superfluous checks.
+
+2022-06-09  Jeff Walsh  <fejfighter@gmail.com>
+
+       Update error message to reflect variable rename
+
+       * src/comp.c (Fcomp_el_to_eln_filename): Update error message.  
(Bug#55861)
+
+2022-06-08  Ken Brown  <kbrown@cornell.edu>
+
+       Fix error reporting in process-async-https-with-delay
+
+       * test/src/process-tests.el (process-async-https-with-delay): Use
+       'plist-get' instead of 'assq' in testing for a connection error.
+       The 'status' variable is a plist, not an alist.  (Bug#55849)
+
+2022-06-08  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/misc/org.org: Remove spurious markup.
+
+2022-06-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make Tramp version check more robust
+
+       * lisp/net/trampver.el (tramp-repository-branch)
+       (tramp-repository-version): Check for "git" executable.
+
+2022-06-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix debugging with GDB when a breakpoint has multiple locations
+
+       * lisp/progmodes/gdb-mi.el (gdb-breakpoints--add-breakpoint-row):
+       New function, extracted from 'gdb-breakpoints-list-handler-custom'.
+       Don't print "in <unknown>" for header-rows of breakpoints with
+       multiple locations that don't have a function name attached.
+       (gdb-breakpoints-list-handler-custom): Add to the breakpoint table
+       also any locations in multiple-location breakpoints, which are
+       supported since GDB 6.8.
+
+2022-06-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Update documentation of 'aset' and 'store-substring'
+
+       * doc/lispref/strings.texi (Modifying Strings): Adjust to
+       implementation changes: it is possible for the modified string to
+       have fewer or more bytes than the original.  Add recommendations
+       regarding unibyte vs multibyte strings and characters.  (Bug#55801)
+
+2022-06-04  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.4
+
+2022-06-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify documentation of 'string-to-unibyte'
+
+       * doc/lispref/nonascii.texi (Converting Representations): Clarify
+       what 'string-to-unibyte' does.  Reported by Richard Hansen
+       <rhansen@rhansen.org>.  (Bug#55777)
+
+2022-06-02  Ikumi Keita  <ikumi@ikumi.que.jp>  (tiny change)
+
+       Improve keystrokes in doc strings in some find-file functions
+
+       * lisp/files.el (find-file):
+       (find-file-other-window):
+       (find-file-other-frame): Include the correct keymap so that
+       keystrokes are displayed better (bug#55761).
+
+2022-06-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix segfaults when starting on 80x26 TTY frames
+
+       * src/dispnew.c (adjust_frame_glyphs_for_frame_redisplay): Make
+       sure we have valid frame glyph matrices for the interactive
+       session.  (Bug#55760)
+       (adjust_frame_glyphs): Add assertions for when we fail to allocate
+       valid frame glyph matrices for a TTY frame.
+
+2022-06-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make it explicit that a couple of _s in lispref are underscores
+
+       * doc/lispref/strings.texi (Custom Format Strings):
+       * doc/lispref/control.texi (pcase Macro): Make it explicit that
+       it's an underscore (bug#55742).
+
+2022-05-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Remove from FAQ the MS-Windows info about BDF fonts
+
+       * doc/misc/efaq.texi (How to add fonts): Remove the MS-Windows
+       specific steps, as BDF fonts are no longer supported on
+       MS-Windows.  (Bug#55740)
+
+2022-05-31  Ikumi Keita  <ikumi@ikumi.que.jp>  (tiny change)
+
+       Fix Display Property manual example
+
+       * doc/lispref/display.texi (Display Property): Fix syntax of
+       example (bug#55736).
+
+2022-05-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some Tramp cleanup on MS Windows
+
+       * lisp/net/tramp.el (tramp-restricted-shell-hosts-alist): Do not add
+       localhost when `tramp-encoding-shell' is a POSIX shell.
+
+       * test/lisp/net/tramp-tests.el (tramp-test31-interrupt-process):
+       Skip on MS Windows.
+
+2022-05-28  Alan Mackenzie  <acm@muc.de>
+
+       do_switch_frame: before leaving mini-window, check other (mru) window 
is live
+
+       This fixes bug#55684.  There, with a minibuffer-only frame at start up,
+       Emacs tried to switch to this frame, whose selected window was the
+       mini-window.  There is no other active window in this frame, so the
+       attempt to switch to another window failed.
+
+       * src/frame.c (do_switch_frame): On switching to a frame whose selected
+       window is as above, before selecting the most recently used window, 
check
+       this ostensible window is an actual live window.  Otherwise leave the
+       mini-window selected.
+
+2022-05-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix commands used to produce on-line HTML docs
+
+       * admin/admin.el (manual-meta-string): Only include the first
+       line, and move the rest...
+       (manual-links-string): ...to this new string.
+       (manual-html-fix-headers): Don't remove the '<meta name=' elements
+       produced by makeinfo, especially not the 'name="viewport"' one,
+       which is essential for viewing the docs on mobile devices.
+       Reported by "Facundo Lander via RT" <webmasters-comment@gnu.org>,
+       see gnu.org ticket #1840138.
+
+2022-05-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a bad cross-reference in elisp.pdf
+
+       * doc/lispref/control.texi (pcase Macro): Fix a conditional
+       cross-reference (bug#55689).
+
+2022-05-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of 'string-pad'
+
+       * doc/lispref/strings.texi (Creating Strings): Fix description of
+       'string-pad'.  (Bug#55688)
+
+2022-05-27  Juri Linkov  <juri@linkov.net>
+
+       Fix more occurrences of renamed kmacro-keymap command
+
+       * doc/emacs/kmacro.texi (Basic Keyboard Macro): Fix documentation
+       after recent kmacro-redisplay command name change.
+
+2022-05-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Mention "unspecified-fg" and "unspecified-bg" in some doc strings
+
+       * lisp/faces.el (face-foreground, face-background)
+       (foreground-color-at-point, background-color-at-point):
+       * lisp/color.el (color-name-to-rgb): Mention "unspecified-fg" and
+       "unspecified-bg" pseudo-colors on TTY frames.  (Bug#55623)
+
+2022-05-26  Hayden Shenk  <hayden.shenk@zetier.com>  (tiny change)
+
+       Fix format specifiers in tramp-adb.el
+
+       * lisp/net/tramp-adb.el (tramp-adb-get-device): Fix format
+       specifiers for port.  (Bug#55651)
+
+2022-05-22  Damien Cassou  <damien@cassou.me>
+
+       Improve documentation of mail-user-agent.
+
+       * doc/emacs/sending.texi (Mail Methods):
+       * lisp/simple.el (mail-user-agent): Mention additional options
+       of non-bundled MUA.  (Bug#5569)
+
+2022-05-21  Eli Zaretskii  <eliz@gnu.org>
+
+       More fixes in abbrev.el doc strings
+
+       * lisp/abbrev.el (inverse-add-global-abbrev, inverse-add-mode-abbrev):
+       Document the effect of negative ARG.  (Bug#55527)
+
+2022-05-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add note about Tramp completion to completion-styles doc string
+
+       * lisp/minibuffer.el (completion-styles): Add note about Tramp
+       completion (bug#37954).
+
+2022-05-21  Arash Esbati  <arash@gnu.org>
+
+       Remove mention of removed nnimap-nov-is-evil variable
+
+       * doc/misc/gnus.texi (Slow/Expensive Connection): Remove mention
+       of removed nnimap-nov-is-evil variable (bug#55556).
+
+2022-05-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation strings and prompts in abbrev.el
+
+       * lisp/abbrev.el (abbrev-file-name, only-global-abbrevs)
+       (copy-abbrev-table, insert-abbrevs, list-abbrevs)
+       (abbrev-table-name, edit-abbrevs, define-abbrevs)
+       (read-abbrev-file, quietly-read-abbrev-file, write-abbrev-file)
+       (abbrev-edit-save-to-file, abbrev-edit-save-buffer)
+       (add-mode-abbrev, add-global-abbrev, inverse-add-mode-abbrev)
+       (inverse-add-global-abbrev, abbrev-prefix-mark)
+       (expand-region-abbrevs, abbrev-table-get, abbrev-table-put)
+       (abbrev-get, abbrev-minor-mode-table-alist, abbrevs-changed)
+       (abbrev-all-caps, last-abbrev-text, last-abbrev-location)
+       (clear-abbrev-table, define-abbrev, define-global-abbrev)
+       (define-mode-abbrev, abbrev--active-tables, abbrev--symbol)
+       (abbrev-symbol, abbrev-expansion, abbrev-insert)
+       (abbrev-expand-function, abbrev--suggest-above-threshold)
+       (abbrev--suggest-saved-recommendations)
+       (abbrev--suggest-shortest-abbrev, abbrev--suggest-get-totals)
+       (insert-abbrev-table-description, define-abbrev-table)
+       (abbrev-table-menu): Fix doc strings: wording, punctuation,
+       clarity.
+       (add-abbrev, inverse-add-abbrev): Improve the prompt text.
+       (Bug#55527)
+
+2022-05-20  Alan Mackenzie  <acm@muc.de>
+
+       Restore the Fselect_window call in gui_consider_frame_title.
+
+       This fixes bug #55412.  The call to Fselect_window was removed on 
2021-03-21
+       in the commit "Prevent open minibuffers getting lost when their frame 
gets
+       deleted".  This call is actually needed to determine current elements 
of the
+       pertinent window and frame when these are used in the frame title.
+
+       * src/frame.c (do_switch_frame): When the selected window in the target 
frame
+       is the mini-window, switch away from this window unless there is a valid
+       minibuffer there.
+
+       * src/frame.h (struct frame): Add an incidental comment about the 
element
+       selected_window.
+
+       * src/minibuf.c (move_minibuffers_onto_frame): No longer set the 
selected
+       window of the source frame.  This action is now performed later, on 
returning
+       to that frame, in do_switch_frame when needed (see above).
+
+       * src/xdisp.c (gui_consider_frame_title): Replace the Fselect_window 
call and
+       associated ancillary settings.
+
+2022-05-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Advise against settings in the MS-Windows system registry
+
+       * doc/emacs/cmdargs.texi (MS-Windows Registry): Advise against
+       setting environment variables in the system registry.  (Bug#16429)
+
+2022-05-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix kmacro-keymap binding after previous change
+
+       * lisp/kmacro.el (kmacro-keymap): Fix binding after
+       kmacro-redisplay command name change.
+
+2022-05-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add glossary entries for "interactively"
+
+       * doc/emacs/glossary.texi (Glossary): Mention "interactively" and
+       how it relates to the "command" concept (bug#55461).
+
+2022-05-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the name of a kmacro command.
+
+       * lisp/kmacro.el (kmacro-redisplay): Rename from
+       'kdb-macro-redisplay' (which was wrong and included a typo).
+
+       * etc/NEWS: Announce the change.  (Bug#55471)
+
+2022-05-17  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Tramp sshfs tests (don't merge)
+
+       * test/lisp/net/tramp-tests.el (tramp-fuse-remove-hidden-files): 
Declare.
+       (tramp-test16-directory-files)
+       (tramp-test16-file-expand-wildcards)
+       (tramp-test26-file-name-completion, tramp--test-check-files): Use it.
+       (tramp--test-check-files): Delete directory recursively.
+
+2022-05-17  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some minor Tramp fixes
+
+       * lisp/net/tramp-cmds.el (tramp-list-tramp-buffers)
+       (tramp-list-remote-buffers): Add ;;;###tramp-autoload cookie.
+
+       * lisp/net/tramp-fuse.el (tramp-fuse-remove-hidden-files): New defvar.
+       (tramp-fuse-remove-hidden-files): Use it.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handler-askquestion):
+       Keep regression tests running.
+
+2022-05-15  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.3-6-gef41f3
+
+2022-05-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       Hide temporary FUSE files in Tramp
+
+       * lisp/net/tramp-fuse.el (tramp-fuse-remove-hidden-files): New defsubst.
+       (tramp-fuse-handle-directory-files)
+       (tramp-fuse-handle-file-name-all-completions): Use it.
+
+2022-05-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/lisp/net/tramp-tests.el (tramp-test27-load): Adapt test.  Don't 
merge
+
+2022-05-13  Po Lu  <luangruo@yahoo.com>
+
+       Fix tooltip face overwriting dragged text strings during mouse DND
+
+       * lisp/mouse.el (mouse-drag-and-drop-region): Copy
+       `text-tooltip' before showing it.  Do not merge to master.
+
+2022-05-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix lexical-binding fallout in vhdl-mode.el
+
+       * lisp/progmodes/vhdl-mode.el (arch-alist, pack-alist)
+       (file-alist, unit-alist, rule-alist): Defvar them, since vhdl-aput
+       expects them to be dynamically bound.  (Bug#55389)
+       (vhdl-speedbar-insert-hierarchy): Rename the PACK-ALIST argument
+       to PACKAGE-ALIST, to avoid shadowing the global variable.
+
+2022-05-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix ControlPath quoting in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options):
+       Adapt docstring.  Do not quote ControlPath.  Reported by Daniel
+       Kessler <kesslerd@umich.edu>.
+
+2022-05-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Remove the AUCTeX subsection from MS-Windows FAQ
+
+       * doc/misc/efaq-w32.texi (AUCTeX): Remove the subsection, it is no
+       longer useful.  (Bug#55330)
+
+2022-05-09  Arash Esbati  <arash@gnu.org>
+
+       Update AUCTeX FAQ entry
+
+       * doc/misc/efaq-w32.texi (AUCTeX): AUCTeX project isn't providing
+       pre-compiled versions for Windows anymore (bug#55330).
+
+2022-05-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update string-to-number documentation to bignum Emacs
+
+       * doc/lispref/strings.texi (String Conversion): string-to-number
+       no longer converts integers to floating point numbers (bug#55334).
+
+2022-05-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix doc string references to tags-loop-continue
+
+       * lisp/vc/vc-dir.el (vc-dir-search, vc-dir-query-replace-regexp):
+       Fix reference to obsolete tags-loop-continue (bug#55311).
+
+2022-05-08  Visuwesh M  <visuweshm@gmail.com>
+
+       dired-do-query-replace-regexp doc string fix
+
+       * lisp/dired-aux.el (dired-do-query-replace-regexp): Refer
+       'fileloop-continue' instead of the obsolete command
+       'tags-loop-continue'.  (Bug#55311)
+
+       (cherry picked from commit 4c505203f9171886f47638779326e257a95a1d79)
+
+2022-05-08  Alan Mackenzie  <acm@muc.de>
+
+       Linux console: don't translate ESC TAB to `backtab' in input-decode-map.
+
+       This translation happened after the terminfo entry for <shift>TAB in 
the linux
+       section was changed to kcbt=\E^I in ncurses version 6.3.
+
+       * lisp/term/linux.el (terminal-init-linux): Add a define-key form to 
remove
+       the entry for "\e\t" from input-decode-map.
+
+       * etc/PROBLEMS: Add a new section under "character terminals" about 
S-TAB
+       wrongly doing the same thing as M-TAB, giving tips about amending the 
Linux
+       keyboard layout.
+
+2022-05-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle changed scp protocol in Tramp, don't merge
+
+       * lisp/net/tramp-sh.el (tramp-scp-force-scp-protocol): New defvar.
+       (tramp-scp-force-scp-protocol): New defun.
+       (tramp-do-copy-or-rename-file-out-of-band): Use it.
+       (tramp-methods) <scp, scpx>: Use "%y".
+
+       * lisp/net/tramp.el (tramp-methods): Adapt docstring.
+
+2022-05-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix bug#55274
+
+       * lisp/dired-aux.el (dired-do-compress-to): Use `file-local-name'
+       for shell out-file.  (Bug#55274)
+
+2022-05-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Provide reference for OTF tags in the ELisp manual
+
+       * doc/lispref/display.texi (Low-Level Font): Provide the canonical
+       reference URL for OTF tags.
+
+2022-05-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Be more resilient towards errors during error handling
+
+       * src/print.c (print_error_message): Avoid infinite recursion if
+       `substitute-command-keys' bugs out (bug#55269).
+
+       (cherry picked from commit 8364f058b821eba31f84dcded175cca403a965a5)
+
+2022-04-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of font- and face-related attribute functions
+
+       * lisp/faces.el (face-attribute):
+       * src/xfaces.c (Fx_family_fonts):
+       * src/font.c (Ffont_get, Ffont_put): Improve and clarify the doc
+       strings.
+
+       * doc/lispref/display.texi (Low-Level Font): Document the :type
+       attribute of a font.  Improve documentation of 'font-get' and
+       'font-put'.
+       (Attribute Functions): Add cross-reference to the description of
+       face attributes.
+
+2022-04-25  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.3-3-gd54104
+
+2022-04-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve indexing in "Programmed Completion"
+
+       * doc/lispref/minibuf.texi (Programmed Completion): Improve
+       indexing.  (Bug#55095)
+
+2022-04-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'set-fontset-font'
+
+       * doc/lispref/display.texi (Fontsets):
+       * src/fontset.c (Fset_fontset_font): Improve and clarify the
+       documentation of 'set-fontset-font'.  Rename the arguments to be
+       more self-explanatory.  (Bug#55086)
+
+2022-04-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix problem with Solaris ls in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-sunos-unames): Move up.
+       (tramp-sh--quoting-style-options): Handle erroneous Solaris ls.
+
+2022-04-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Another fix for non-ASCII 'overlay-arrow-string'
+
+       * src/xdisp.c (get_overlay_arrow_glyph_row): Fix yet another place
+       that assumed each character is a single byte.
+
+2022-04-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid a redisplay loop when 'overlay-arrow-string' is non-ASCII
+
+       * src/xdisp.c (get_overlay_arrow_glyph_row): Don't assume every
+       character in 'overlay-arrow-string' is one byte long.  Reported by
+       Yuri D'Elia <wavexx@thregr.org>.
+
+2022-04-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Add minimum instructions to 'query-replace' commands
+
+       * lisp/vc/vc-dir.el (vc-dir-query-replace-regexp):
+       * lisp/textmodes/reftex-global.el (reftex-query-replace-document):
+       * lisp/progmodes/project.el (project-query-replace-regexp):
+       * lisp/progmodes/etags.el (tags-query-replace):
+       * lisp/progmodes/ebrowse.el (ebrowse-tags-query-replace):
+       * lisp/isearch.el (isearch-query-replace, isearch-occur):
+       * lisp/emulation/viper-cmd.el (viper-query-replace):
+       * lisp/dired-aux.el (dired-do-query-replace-regexp)
+       (dired-do-find-regexp-and-replace):
+       * lisp/progmodes/xref.el (xref-query-replace-in-results):
+       * lisp/replace.el (query-replace, query-replace-regexp)
+       (query-replace-regexp-eval, map-query-replace-regexp): Add minimal
+       instructions for dealing with matches, with a link to the command
+       that shows the full instructions.  (Bug#55050)
+
+2022-04-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix customization-group of 'python-forward-sexp-function'
+
+       * lisp/progmodes/python.el (python-forward-sexp-function): Make it
+       be part of both 'python' and 'python-flymake' groups.  (Bug#55027)
+       Do not merge to master.
+
+2022-04-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from gnulib
+
+       (cherry picked from commit 992cf3cb675e074079341cc54c3b16d37a8b9ca8)
+
+       This is a partial backport from master: it only includes the changes 
below.
+
+       * lib/mini-gmp.c (gmp_assert_nocarry): Avoid many Clang
+       unused-variable warnings when building with optimization.
+       * lib/verify.h (_GL_HAVE__STATIC_ASSERT): Modify condition for using
+       _Static_assert to cope with older Apple builds of Clang exposing
+       misleading compiler version numbers.  See discussion starting at
+       https://lists.gnu.org/archive/html/emacs-devel/2022-04/msg00779.html
+
+2022-04-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert prompting changes in viper-cmd
+
+       * lisp/emulation/viper-cmd.el (viper-quote-region)
+       (viper-read-string-with-history, viper-query-replace): Revert
+       prompting changes done in 50512e3 -- the way viper prompts in
+       command mode is special (bug#55007).
+
+       Do not merge to master.
+
+2022-04-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix regression with multiple mode: entries in the prop line
+
+       * lisp/files.el (hack-local-variables): Fix regression with multiple
+       mode: entries in the prop line.
+
+       Do not merge to master.
+
+2022-04-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Avoid hangs in python-mode with debug-on-error set
+
+       * lisp/progmodes/python.el (python-nav-end-of-statement): Avoid
+       using cl-assert here, because this is called from the font-lock
+       machinery, and if debug-on-error is set here, we'll hang Emacs
+       (bug#54996).
+
+       Do not merge to master.
+
+2022-04-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix major-mode setting regression when there's a mode: cookie
+
+       * lisp/files.el (hack-local-variables): Fix regression in setting
+       the major mode when there are mode: cookies in the file (bug#54993).
+
+       Do not merge to master.
+
+2022-04-17  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.2-38-g682ccd
+
+2022-04-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Don’t assume openat"
+
+       This reverts commit 3cccf0a9107d585173e527550bbc45253624ca2e.
+
+       This is a change with far-reaching effects on MS-Windows at the least,
+       where file-related APIs are shadowed to support transparent support
+       for UTF-8 encoded file names.  Making such changes on a stable branch
+       for the benefit of a proprietary platform with a 13-year old OS is a
+       tail wagging the dog.  Please don't do that without discussing first.
+
+2022-04-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don’t assume openat
+
+       Use openat only on platforms with O_PATH.
+       This ports to OS X 10.9 and earlier.
+       Problem reported by Keith David Bershatsky in:
+       https://lists.gnu.org/r/emacs-devel/2022-04/msg00805.html
+       * lib-src/emacsclient.c (local_sockname): Use open, not openat.
+       * src/sysdep.c (sys_openat): New static function,
+       which uses openat only if O_PATH is defined.
+       (emacs_openat): Use it instead of openat.
+       (emacs_openat_noquit): Remove.
+       (emacs_open_noquit): Reimplement as per the old emacs_openat_noquit,
+       but use plain 'open'.
+
+2022-04-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix GC bug in filelock.c
+
+       Fix a bug where if GC occurred at the wrong moment when locking a
+       file, the lock file’s name was trashed so file locking did not work.
+       This bug was introduced in Emacs 28.1.  The bug sometimes caused
+       filelock-tests-detect-external-change test failures on Fedora 35
+       x86-64 in an en_US.utf8 locale.
+       * src/filelock.c (lock_file_1, current_lock_owner, lock_if_free)
+       (lock_file, unlock_file, Ffile_locked_p):
+       Use Lisp_Object, not char *, for string, so that GC doesn’t trash
+       string contents.
+       (make_lock_file_name): Return the encoded name, not the original.
+       All callers changed.
+
+2022-04-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify when mode tagging is used
+
+       * etc/NEWS: Clarify when mode tagging is used (bug#54964).
+
+2022-04-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further vcs-cvs/rcs-responsible-p updates from master
+
+       * lisp/vc/vc-bzr.el (vc-bzr-responsible-p):
+       * lisp/vc/vc-sccs.el (vc-sccs-responsible-p):
+       * lisp/vc/vc-dav.el (vc-dav-responsible-p): Update doc string.
+
+       * lisp/vc/vc-rcs.el (vc-rcs-responsible-p):
+       * lisp/vc/vc-cvs.el (vc-cvs-responsible-p): Further fixes from
+       master.
+
+       * lisp/vc/vc-src.el (vc-src-responsible-p): Return the directory.
+
+       * lisp/vc/vc.el: Update comments.
+
+2022-04-16  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix builds on older versions of macOS
+
+       This adds back macOS-specific code replaced earlier (bug#48548),
+       specifically to fix build errors on macOS 10.7.5.  See discussion at
+       https://lists.gnu.org/archive/html/emacs-devel/2022-04/msg00779.html .
+
+       * src/sysdep.c (HAVE_RUSAGE_INFO_CURRENT, HAVE_PROC_PIDINFO): New.
+       (system_process_attributes): Use alternative code or exclude features
+       when building on older macOS versions.
+
+2022-04-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of Outline minor mode options
+
+       * lisp/outline.el (outline-minor-mode-cycle-filter)
+       (outline-minor-mode-cycle, outline-minor-mode-highlight)
+       (outline-cycle, outline-cycle-buffer): Doc fixes.  (Bug#54967)
+
+2022-04-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve discoverability of 'insert-directory-program'
+
+       * lisp/files.el (insert-directory-program): Mention 'dired' in the
+       doc string.
+       * lisp/dired.el (dired): Mention 'insert-directory-program' in the
+       doc string.  (Bug#54962)
+
+2022-04-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix cursor motion under truncate-lines with Flymake fringe indicator
+
+       * src/indent.c (Fvertical_motion): Don't consider fringe bitmaps
+       as "images" for the purpose of vertical-motion logic dealing with
+       overshooting buffer positions.  (Bug#54946)
+
+2022-04-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make all vc-*-responsible-p functions return a string
+
+       * lisp/vc/vc-sccs.el (vc-sccs-responsible-p):
+       * lisp/vc/vc-rcs.el (vc-rcs-responsible-p):
+       * lisp/vc/vc-dav.el (vc-dav-responsible-p):
+       * lisp/vc/vc-cvs.el (vc-cvs-responsible-p): Return a file name
+       instead of t when we get a match (which is what
+       vc-backend-for-registration expects) (bug#51800).
+
+       This fixes the regression reported in bug#54935.
+
+       Do not merge to master.
+
+2022-04-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Describe problems with invoking Python on MS-Windows
+
+       * etc/PROBLEMS: Describe problems with running an inferior Python
+       interpreter due to the MS-Windows "App Execution Aliases" feature.
+       (Bug#54860)
+
+2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+
+       A better fix for bug#54800
+
+       * lisp/calc/calc.el (calc-align-stack-window): Improve scrolling
+       when windows have non-integral dimensions.
+
+2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a comment about cl-concatenate
+
+       * lisp/emacs-lisp/cl-extra.el (cl-concatenate): Add a comment.
+
+2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Make cl-concatenate an alias of seq-concatenate"
+
+       This reverts commit 78f76fe16e2737b40694f82af28d17a90a21ed7b.
+
+       The commit made calls to cl-concatenate bug out, since
+       autoloading defalises doesn't work very well (bug#54901).
+
+2022-04-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'window-text-pixel-width' when starting from display property
+
+       * src/xdisp.c (Fwindow_text_pixel_size): Handle the case where
+       there's a display property at START, and move_it_to overshoots.
+       Do not merge to master.  (Bug#54862)
+
+2022-04-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/mm-encode.el (mm-default-file-encoding): Fix "when" arg
+
+2022-04-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix default-directory of buffers visiting files in renamed directories
+
+       * lisp/dired-aux.el (dired-rename-file): Take note of whether FILE
+       is a directory before it is renamed, which makes it impossible to
+       determine if it was a directory.
+       (dired-rename-subdir, dired-rename-subdir-1): Revert to using
+       dired-in-this-tree-p instead of file-in-directory-p, for the
+       benefit of files that were renamed/removed, because
+       file-in-directory-p returns nil in those cases.  (Bug#54838)
+
+2022-04-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix a kill-append regression
+
+       * lisp/simple.el (kill-append): Fix a regression when
+       kill-ring-max is zero (bug#54842).
+
+2022-04-10  Eli Zaretskii  <eliz@gnu.org>
+
+       * doc/misc/eww.texi (Advanced): Correct outdated info (bug#54839).
+
+2022-04-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Clean up the MSDOS port
+
+       * src/msdos.h (tcdrain): Redirect to '_dos_commit'.
+       (openat, fchmodat, futimens, utimensat): Add prototypes.
+
+       * msdos/sed1v2.inp (MAKE_PDUMPER_FINGERPRINT): Fix indentation, so
+       that Make won't consider this line a command.
+       ($(etc)/DOC): Chdir back to ../src, since "make-docfile -d" leaves
+       us in a wrong directory.
+       * msdos/sedlibmk.inp (GL_GNULIB_GETRANDOM, GL_GNULIB_MEMMEM)
+       (GL_GNULIB_SIGDESCR_NP): Define to 1, to get the prototypes from
+       Gnulib headers.
+
+2022-04-10  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix typo in next-error-find-buffer-function
+
+       * lisp/simple.el (next-error-find-buffer-function): Fix typo
+       (bug#54830).
+
+2022-04-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Make shell-resync-dirs handle whitespace in directory names"
+
+       This reverts commit 90e65c826fab2092ad2099d7763538194c93e021.
+
+       This change led to hangs (bug#54776).
+
+       Do not merge to master; it has been fixed in a more encompassing way 
there.
+
+2022-04-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix scrolling of the stack window in Calc
+
+       * lisp/calc/calc.el (calc-align-stack-window): Fix off-by-one
+       error in computing the window-start point.  (Bug#54800)
+
+2022-04-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Update and fix instructions and scripts for updating the Web pages
+
+       * admin/admin.el (manual-html-fix-index-2): Support Texinfo 6.8
+       and later by not converting TOC menus into tables.  (Bug#49719)
+       * admin/upload-manuals (New directory): Invoke "cvs add" in
+       $webdir, to pick up the correct CVSROOT.
+       * admin/make-tarball.txt: Update the section about the Emacs Web
+       pages.
+
+       * etc/refcards/Makefile (pl-refcard.dvi): If mex.fmt cannot be
+       found, invoke 'mex' instead of 'tex'.
+
+2022-04-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Extend tramp-archive-test45-auto-load
+
+       * test/lisp/net/tramp-archive-tests.el (tramp-archive-test45-auto-load):
+       Extend test.
+
+2022-04-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Ensure local `default-directory' in Tramp when needed
+
+       * lisp/net/tramp.el (tramp-process-running-p): Ensure local
+       `default-directory' when calling `list-system-processes' and
+       `process-attributes'.
+
+2022-04-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify "idleness" in the ELisp manual
+
+       * doc/lispref/os.texi (Idle Timers): Clarify that waiting for
+       input with timeout doesn't make Emacs idle.  Suggested by Ignacio
+       <ignaciocasso@hotmail.com>.  (Bug#54371)
+
+2022-04-07  Jürgen Hötzel  <juergen@archlinux.org>
+
+       Use correct signal oldset in posix_spawn implementation
+
+       posix_spawn was restoring the wrong signal set, which still had
+       SIGCHLD and SIGINT masked, causing problems with child processes that
+       spawned child processes.  (Bug#54667)
+
+       See the thread ending at
+       https://lists.gnu.org/archive/html/emacs-devel/2022-03/msg00067.html
+       for more details.
+
+       * src/callproc.c (emacs_spawn): Pass oldset parameter.
+       (emacs_posix_spawn_init_attributes): Use correct oldset.
+       (emacs_posix_spawn_init): Remove intermediate function.
+
+       (cherry picked from commit 8103b060d89ac63a12c439087bd46c30da72cd97)
+
+2022-04-07  Felix Dietrich  <felix.dietrich@sperrhaken.name>  (tiny change)
+
+       Fix error in tramp-archive-autoload-file-name-handler
+
+       * lisp/net/tramp-archive.el (tramp-archive-autoload-file-name-handler):
+       Always call `tramp-autoload-file-name'.  Otherwise, when
+       `tramp-archive-enabled’ is nil and
+       `tramp-archive-autoload-file-name-handler’ is in the
+       `file-name-handler-alist’ results in an error “Invalid handler in
+       `file-name-handler-alist” once Emacs calls
+       `tramp-archive-autoload-file-name-handler’ with a handler that
+       does not expect nil.  Always returning nil is also false in
+       general.
+
+2022-04-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Commit missing file from previous commit (Do not merge with master)
+
+       Commit missing file from previous commit
+
+2022-04-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Merge with Tramp 2.5.2.3 (Do not merge with master)
+
+       * doc/misc/tramp.texi (Archive file names): Explicitly say how to
+       open an archive with Tramp (Bug#25076).
+
+       * doc/misc/trampver.texi:
+       * lisp/net/trampver.el: Change version to "2.5.3-pre".
+
+       * 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):
+       Improve implementation.  (Bug#53854)
+
+       * lisp/net/tramp-adb.el (tramp-adb-tolerate-tilde):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-tolerate-tilde):
+       New defuns.  Advice `shell-mode' with them.
+
+       * lisp/net/tramp.el (tramp-register-autoload-file-name-handlers):
+       * lisp/net/tramp-archive.el (tramp-register-archive-file-name-handler):
+       Check, whether the real file name handler is already registered.
+       rules.  (Bug#54542)
+
+       * lisp/net/tramp.el (tramp-autoload-file-name-handler)
+       (tramp-register-autoload-file-name-handlers)
+       (tramp-unload-file-name-handlers, tramp-unload-tramp):
+       * lisp/net/tramp-archive.el (tramp-archive-autoload-file-name-regexp)
+       (tramp-archive-autoload-file-name-handler)
+       (tramp-register-archive-file-name-handler):
+       Add `tramp-autoload' property.
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
+       * lisp/net/tramp-rclone.el (tramp-rclone-file-name-handler-alist):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-file-name-handler-alist):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-file-name-handler-alist):
+       Use `tramp-handle-file-notify-add-watch',
+       `tramp-handle-file-notify-rm-watch' and
+       `tramp-handle-file-notify-valid-p'.
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
+       Use `tramp-handle-insert-file-contents'.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
+       * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-maybe-open-connection):
+       * lisp/net/tramp-sudoedit.el
+       (tramp-sudoedit-maybe-open-connection): Do not set "lock-pid"
+       connection-property.
+       (tramp-sudoedit-handle-delete-file): Use "rm -f".
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-executable-p):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-file-executable-p):
+       Check also for setuid/setgid bit.
+       (tramp-gvfs-handle-expand-file-name):
+       Respect `tramp-tolerate-tilde'.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-insert-directory):
+       Do not modify disk space information when
+       `dired--insert-disk-space' is available.  (Bug#54512)
+
+       * lisp/net/tramp-sh.el (tramp-maybe-open-connection): Extend suppression
+       (tramp-get-remote-dev-tty): New defun.
+       (tramp-sh-handle-make-process): Use it.
+
+       * lisp/net/tramp-sshfs.el (tramp-methods) <sshfs>:
+       Add "-t -t" to `tramp-login-args'.
+       Add "-o dir_cache=no" to `tramp-mount-args'.  (Bug#54126)
+       Add "-o transform_symlinks" to `tramp-mount-args'.
+       (tramp-sshfs-file-name-handler-alist):
+       Use `tramp-sshfs-handle-file-writable-p'.
+       (tramp-sshfs-handle-file-writable-p): New defun.  (Bug#54130)
+       (tramp-sshfs-handle-write-region): Set file modification time.
+       (Bug#54016)
+       (tramp-sshfs-file-name-handler-alist):
+       Use `tramp-sshfs-handle-set-file-times'.
+       (tramp-sshfs-handle-set-file-times): New defun.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-expensive-test-p):
+       Rename from `tramp--test-expensive-test'.  Make it a defun.  Adapt
+       all callees.
+       (tramp-test07-file-exists-p, tramp-test14-delete-directory)
+       (tramp-test18-file-attributes, tramp-test20-file-modes)
+       (tramp-test28-process-file, tramp-test29-start-file-process)
+       (tramp-test30-make-process, tramp-test32-shell-command)
+       (tramp-test33-environment-variables, tramp--test-check-files)
+       (tramp--test-special-characters, tramp-test46-unload): Adapt tests.
+       (tramp-test39-detect-external-change): New test.
+       (tramp-test29-start-file-process)
+       (tramp--test--deftest-direct-async-process)
+       (tramp-test30-make-process, tramp-test31-interrupt-process)
+       (tramp-test34-explicit-shell-file-name)
+       (tramp-test44-asynchronous-requests):
+       Add :tramp-asynchronous-processes tag.
+       (tramp--test-asynchronous-processes-p): New defun.
+       (tramp--test-hpux-p, tramp--test-macos-p): Protect against errors.
+
+2022-04-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       cl-generic.el: Fix bug#46722
+
+       Fix longstanding bug due to unexpected interference via side-effect.
+
+       * lisp/emacs-lisp/cl-generic.el (cl--generic-get-dispatcher):
+       Copy the `dispatch` arg before storing it into the hash-table.
+
+       Backport from `master` (cherrypick from commit 61f8f7f68f).
+
+2022-04-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix fallout from lexical-binding in vhdl-mode.el
+
+       * lisp/progmodes/vhdl-mode.el (vhdl-update-sensitivity-list): Fix
+       production of a list with embedded function calls.  (Bug#54730)
+
+2022-04-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Update logs and HISTORY for Emacs 28.1
+
+       * ChangeLog.3:
+       * etc/HISTORY:
+       * etc/AUTHORS: Update for Emacs 28.1 release.
+
+2022-04-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Bump Emacs version to 28.1
+
+       * README:
+       * configure.ac:
+       * nt/README.W32:
+       * msdos/sed2v2.inp: Bump Emacs version to 28.1
+
+2022-03-30  Tassilo Horn  <tsdh@gnu.org>
 
        dired: implement feature from 7b50ed553f differently
 
@@ -7,29 +1637,29 @@
        (dired-clean-up-after-deletion): Use dired-buffers-for-dir-or-subdir
        instead dired-buffers-for-dir.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-30  Eli Zaretskii  <eliz@gnu.org>
 
        Fix regression in 'dired-buffers-for-dir'
 
        * lisp/dired.el (dired-buffers-for-dir): Fix inadvertently swapped
        arguments.  (Bug#54636)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-27  Eli Zaretskii  <eliz@gnu.org>
 
        * lisp/desktop.el (desktop-read): Clarify warning text.
 
-2022-04-13  Po Lu  <luangruo@yahoo.com>
+2022-03-26  Po Lu  <luangruo@yahoo.com>
 
        * doc/emacs/anti.texi (Antinews): Unannounce removal of Motif.
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-03-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Fix eshell-explicit-command-char doc string typo
 
        * lisp/eshell/esh-ext.el (eshell-explicit-command-char): Fix typo
        in doc string (bug#54567).
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-24  Eli Zaretskii  <eliz@gnu.org>
 
        Clarify the description of "selected tags table"
 
@@ -37,7 +1667,7 @@
        distinction between the "selected tags table" and the "current
        list of tags tables".  (Bug#54543)
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-03-21  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Add notes about command modes and nativecomp interaction
 
@@ -48,11 +1678,11 @@
 
        Do not merge to master.
 
-2022-04-13  Kyle Meyer  <kyle@kyleam.com>
+2022-03-20  Kyle Meyer  <kyle@kyleam.com>
 
        Update to Org 9.5.2-25-gaf6f12
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-20  Eli Zaretskii  <eliz@gnu.org>
 
        Improve doc strings of read-char-from-minibuffer-insert-* commands
 
@@ -60,7 +1690,7 @@
        (read-char-from-minibuffer-insert-other): Clarify the doc strings.
        (Bug#54479)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-19  Eli Zaretskii  <eliz@gnu.org>
 
        Fix region highlight in non-selected windows
 
@@ -68,25 +1698,25 @@
        to pre-redisplay-functions windows whose point was moved from the
        last recorded position.  (Bug#54450)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-18  Eli Zaretskii  <eliz@gnu.org>
 
        Fix a regression in 'decipher-digram-list'
 
        * lisp/play/decipher.el (decipher-stats-buffer): Don't assume the
        statistics buffer always exists.  (Bug#54443)
 
-2022-04-13  Karl Fogel  <kfogel@red-bean.com>
+2022-03-17  Karl Fogel  <kfogel@red-bean.com>
 
        Improve documentation of bookmark default sorting
 
        * lisp/bookmark.el (bookmark-alist, bookmark-store,
          bookmark-maybe-sort-alist): Update doc strings and comments.
 
-2022-04-13  Juri Linkov  <juri@linkov.net>
+2022-03-15  Juri Linkov  <juri@linkov.net>
 
        * doc/misc/transient.texi: Fix @dircategory to "Emacs misc features" 
for dir.
 
-2022-04-13  Jim Porter  <jporterbugs@gmail.com>
+2022-03-13  Jim Porter  <jporterbugs@gmail.com>
 
        Fix evaluation of negated argument predicates in Eshell
 
@@ -97,7 +1727,7 @@
 
        Do not merge to master.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-12  Eli Zaretskii  <eliz@gnu.org>
 
        Emacs pretest 28.0.92
 
@@ -111,7 +1741,7 @@
 
        * ChangeLog.3: Regenerate.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-10  Eli Zaretskii  <eliz@gnu.org>
 
        Fix regression in 'custom-prompt-customize-unsaved-options'
 
@@ -120,7 +1750,7 @@
        the doc string.  Patch by Sebastian Miele <iota@whxvd.name>.
        (Bug#54329)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-10  Eli Zaretskii  <eliz@gnu.org>
 
        Improve documentation of 'map-charset-chars'
 
@@ -128,58 +1758,58 @@
        * src/charset.c (Fmap_charset_chars): Clarify the codepoint issue
        in using 'map-charset-chars'.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-08  Eli Zaretskii  <eliz@gnu.org>
 
        Avoid assertion violations in 'bidi_resolve_brackets'
 
        * src/bidi.c (bidi_resolve_brackets): Move assertion to where it
        really matters.  (Bug#54295)
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-03-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Fix which-func-update doc string
 
        * lisp/progmodes/which-func.el (which-func-update): Make the doc
        string match the code (bug#54288).
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-07  Eli Zaretskii  <eliz@gnu.org>
 
        Improve wording of 'dired-jump's description
 
        * doc/emacs/dired.texi (Dired Enter): Clarify wording.  Reported
        by Natalie <batalie@riseup.net>.
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-03-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Add a comment for previous browse-url-of-dired-file change
 
        * lisp/net/browse-url.el (browse-url-of-dired-file): Add a comment
        for previous change.
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-03-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Restore documented Emacs 27.2 behaviour of browse-url-of-dired-file
+       Restore documented Emacs 27.2 behavior of browse-url-of-dired-file
 
        * lisp/net/browse-url.el (browse-url-of-dired-file): Restore the
-       documented behaviour -- open a web browser instead of passing to
+       documented behavior -- open a web browser instead of passing to
        the various handlers.
 
-2022-04-13  Kyle Meyer  <kyle@kyleam.com>
+2022-03-06  Kyle Meyer  <kyle@kyleam.com>
 
        Update to Org 9.5.2-24-g668205
 
-2022-04-13  Andreas Schwab  <schwab@linux-m68k.org>
+2022-03-05  Andreas Schwab  <schwab@linux-m68k.org>
 
        * lib-src/seccomp-filter.c (main): Use faccessat2 only if defined.
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Fix regression in derived-mode-init-mode-variables
 
        * lisp/emacs-lisp/derived.el (derived-mode-init-mode-variables):
        Fix regression caused by lexical-binding derived.el (bug#54240).
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-03  Eli Zaretskii  <eliz@gnu.org>
 
        Avoid crashes when fringe bitmaps are defined in daemon mode
 
@@ -192,7 +1822,7 @@
        not available when a fringe bitmap is about to be drawn.  Don't
        try to draw a bitmap that is not known to fringe.c.  (Bug#54183)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-03  Eli Zaretskii  <eliz@gnu.org>
 
        One more fix of the BPA implementation
 
@@ -200,7 +1830,7 @@
        when there are no strong directional characters inside the
        bracketed pair.  (Bug#54219)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-03-03  Eli Zaretskii  <eliz@gnu.org>
 
        Fix handling of brackets in BPA
 
@@ -208,14 +1838,14 @@
        N0 rule when there are no strong directional characters inside the
        bracketed pair.  (Bug#54219)
 
-2022-04-13  Po Lu  <luangruo@yahoo.com>
+2022-03-02  Po Lu  <luangruo@yahoo.com>
 
        Correct etc/NEWS entry about bitmapped fonts
 
        * etc/NEWS: Don't say that bitmap font issues are due to Pango, that's
        not accurate.
 
-2022-04-13  Jim Porter  <jporterbugs@gmail.com>
+2022-03-01  Jim Porter  <jporterbugs@gmail.com>
 
        Improve/correct documentation about Eshell variable expansion
 
@@ -225,7 +1855,7 @@
        * doc/misc/eshell.texi (Dollars Expansion): Add documentation for
        $"var"/$'var' and $<command> syntaxes.
 
-2022-04-13  Jim Porter  <jporterbugs@gmail.com>
+2022-03-01  Jim Porter  <jporterbugs@gmail.com>
 
        Partially revert b03f74e0f2a578b1580e8b1c368665850ee7f808
 
@@ -238,7 +1868,7 @@
        * test/lisp/eshell/eshell-tests.el (eshell-test/interp-temp-cmd):
        New test.
 
-2022-04-13  Paul Eggert  <eggert@cs.ucla.edu>
+2022-03-01  Paul Eggert  <eggert@cs.ucla.edu>
 
        Backport: Port pre-commit hook to Git 2.35.0
 
@@ -247,32 +1877,32 @@
 
        (cherry picked from commit b8a96f055624f86fe965a0d1b7b2495b2db80e63)
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-02-28  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Fix :tag for eol in tab-first-completion
 
        * lisp/indent.el (tab-first-completion): Fix the :tag description
        (bug#54179).
 
-2022-04-13  Kyle Meyer  <kyle@kyleam.com>
+2022-02-28  Kyle Meyer  <kyle@kyleam.com>
 
        Update to Org 9.5.2-22-g33543d
 
-2022-04-13  Dmitry Gutov  <dgutov@yandex.ru>
+2022-02-27  Dmitry Gutov  <dgutov@yandex.ru>
 
        Add explicit '--no-heading' for ripgrep
 
        * lisp/progmodes/xref.el (xref-search-program-alist):
        Add explicit '--no-heading' for ripgrep (bug#54177).
 
-2022-04-13  Michael Albinus  <michael.albinus@gmx.de>
+2022-02-26  Michael Albinus  <michael.albinus@gmx.de>
 
        Follow OpenSSH changes in Tramp
 
        * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options):
        Reimplement.  OpenSSH has changed its diagnostics messages.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-26  Eli Zaretskii  <eliz@gnu.org>
 
        Document better how to reset attributes of faces for new frames
 
@@ -280,25 +1910,25 @@
        * lisp/faces.el (set-face-attribute): Explain how to reset an
        attribute's value for future frames.  (Bug#54156)
 
-2022-04-13  Michael Albinus  <michael.albinus@gmx.de>
+2022-02-25  Michael Albinus  <michael.albinus@gmx.de>
 
        * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Adapt test.
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-02-24  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Mention flyspell-prog-mode in flyspell-mode doc string
 
        * lisp/textmodes/flyspell.el (flyspell-mode): Mention
        flyspell-prog-mode (bug#54131).
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-02-23  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Reword face-remap-add-relative manual entry
 
        * doc/lispref/display.texi (Face Remapping): Clarify the
        face-remap-add-relative (bug#54114).
 
-2022-04-13  Philipp Stephani  <phst@google.com>
+2022-02-22  Philipp Stephani  <phst@google.com>
 
        Fix indexing of module functions that return enumeration types.
 
@@ -309,25 +1939,25 @@
        * doc/lispref/internals.texi (Module Misc, Module Nonlocal): Enclose
        multi-word return types in braces.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-22  Eli Zaretskii  <eliz@gnu.org>
 
        * doc/misc/transient.texi (Other Options): Fix a @ref.  (Bug#54108)
 
-2022-04-13  Glenn Morris  <rgm@gnu.org>
+2022-02-22  Glenn Morris  <rgm@gnu.org>
 
        tramp.texi texinfo 4.13 compatibility
 
        * doc/misc/tramp.texi (Frequently Asked Questions):
        Restore compatibility with Texinfo < 5.
 
-2022-04-13  Michael Albinus  <michael.albinus@gmx.de>
+2022-02-22  Michael Albinus  <michael.albinus@gmx.de>
 
        Explain "Tramp" spelling in its manual
 
        * doc/misc/tramp.texi (Frequently Asked Questions):
        Explain "Tramp" spelling.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-21  Eli Zaretskii  <eliz@gnu.org>
 
        Fix 'display-line-numbers-mode' in hide-show buffers
 
@@ -336,25 +1966,25 @@
        'display-line-numbers-mode' is turned on in the buffer.
        (Bug#54091)
 
-2022-04-13  Martin Rudalics  <rudalics@gmx.at>
+2022-02-21  Martin Rudalics  <rudalics@gmx.at>
 
        Don't check whether a deleted window is deletable (Bug#54028)
 
        * lisp/window.el (window-state-put): Make sure window is live
        before calling 'window-deletable-p' on it (Bug#54028).
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-21  Eli Zaretskii  <eliz@gnu.org>
 
        A friendlier error message from image-mode in an empty buffer
 
        * lisp/image-mode.el (image-mode): Handle the case where the empty
        buffer doesn't visit a file  (Bug#54084)
 
-2022-04-13  Kyle Meyer  <kyle@kyleam.com>
+2022-02-20  Kyle Meyer  <kyle@kyleam.com>
 
        Update to Org 9.5.2-17-gea6b74
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-18  Eli Zaretskii  <eliz@gnu.org>
 
        Improve documentation of filling and justification commands
 
@@ -366,11 +1996,11 @@
        (set-justification-left, set-justification-right)
        (set-justification-full): Improve wording of doc strings.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-18  Eli Zaretskii  <eliz@gnu.org>
 
        * lisp/progmodes/subword.el (superword-mode): Doc fix.  (Bug#54045)
 
-2022-04-13  Philipp Stephani  <phst@google.com>
+2022-02-17  Philipp Stephani  <phst@google.com>
 
        Fix indexing of module functions that return complex types.
 
@@ -381,7 +2011,7 @@
        * doc/lispref/internals.texi (Module Values): Enclose multi-word
        return types in braces.
 
-2022-04-13  Po Lu  <luangruo@yahoo.com>
+2022-02-17  Po Lu  <luangruo@yahoo.com>
 
        Prevent crashes caused by invalid locale coding systems
 
@@ -391,25 +2021,25 @@
 
        Do not merge to master.
 
-2022-04-13  Michael Albinus  <michael.albinus@gmx.de>
+2022-02-15  Michael Albinus  <michael.albinus@gmx.de>
 
        Fix problem with popd for in remote shell buffers
 
        * lisp/shell.el (shell-prefixed-directory-name):
        Use `file-local-name' for DIR.  (Bug#53927)
 
-2022-04-13  Jonas Bernoulli  <jonas@bernoul.li>
+2022-02-15  Jonas Bernoulli  <jonas@bernoul.li>
 
        Import texi source file for transient manual
 
        * doc/misc/Makefile.in: Add transient to INFO_COMMON.
        * doc/misc/transient.texi: New file.
 
-2022-04-13  Kyle Meyer  <kyle@kyleam.com>
+2022-02-13  Kyle Meyer  <kyle@kyleam.com>
 
        Update to Org 9.5.2-15-gc5ceb6
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-13  Eli Zaretskii  <eliz@gnu.org>
 
        Fix 'exchange-point-and-mark' in 'transient-mark-mode'
 
@@ -418,7 +2048,7 @@
 
        (cherry picked from commit 415ed4b42515ff2e6dd9b94e964b479e50c6392e)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-13  Eli Zaretskii  <eliz@gnu.org>
 
        Fix "C-SPC C-SPC" after "C-x C-x"
 
@@ -427,31 +2057,31 @@
 
        (cherry picked from commit 19c6cad1821eb896b2ddd0f6eab030f0880ea254)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-13  Eli Zaretskii  <eliz@gnu.org>
 
        Fix a typo in fontset.el
 
        * lisp/international/fontset.el (xlfd-regexp-spacing-subnum): Fix
        a typo.  Reported by Greg A. Woods <woods@robohack.ca>.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-12  Eli Zaretskii  <eliz@gnu.org>
 
        Note in ELisp manual that too-wide images are truncated
 
        * doc/lispref/display.texi (Showing Images): Note that images are
        truncated at the window's edge.  (Bug#53952)
 
-2022-04-13  Andrea Corallo  <akrl@sdf.org>
+2022-02-11  Andrea Corallo  <akrl@sdf.org>
 
        * lisp/mail/emacsbug.el (report-emacs-bug): Report libgccjit status.
 
        * lisp/startup.el (normal-top-level): Small code move, improve 
202d3be873.
 
-2022-04-13  Andrea Corallo  <akrl@sdf.org>
+2022-02-10  Andrea Corallo  <akrl@sdf.org>
 
        * lisp/startup.el (normal-top-level): Disable native-comp if not 
available
 
-2022-04-13  Andrea Corallo  <akrl@sdf.org>
+2022-02-09  Andrea Corallo  <akrl@sdf.org>
 
        Fix integer arithmetic miss-compilation (bug#53451)
 
@@ -461,14 +2091,14 @@
        * test/src/comp-tests.el (comp-tests-type-spec-tests): Add test to
        verify this is effective.
 
-2022-04-13  Robert Pluim  <rpluim@gmail.com>
+2022-02-08  Robert Pluim  <rpluim@gmail.com>
 
        Mark flymake as compatible with emacs-26.1
 
        * lisp/progmodes/flymake.el: Bump package version and set
        emacs version in Package-Requires to 26.1 (Bug#53853).
 
-2022-04-13  Brian Leung  <leungbk@posteo.net>
+2022-02-08  Brian Leung  <leungbk@posteo.net>
 
        flymake: Ensure compatibility with older Emacsen
 
@@ -476,7 +2106,7 @@
        replace-regexp-in-string instead of Emacs 28's
        string-replace (bug#53853).
 
-2022-04-13  Eric Abrahamsen  <eric@ericabrahamsen.net>
+2022-02-07  Eric Abrahamsen  <eric@ericabrahamsen.net>
 
        Don't remove dummy.group from gnus-newsrc-alist on Gnus save
 
@@ -486,20 +2116,20 @@
        function was removing dummy.group from the global value of
        `gnus-newsrc-alist' on save; we only wanted to remove it temporarily.
 
-2022-04-13  Bob Rogers  <rogers@rgrjr.com>
+2022-02-05  Bob Rogers  <rogers@rgrjr.com>
 
        Fix ietf-drums-get-comment doc string
 
        * lisp/mail/ietf-drums.el (ietf-drums-get-comment):  We really return
        the last comment (bug#53810).
 
-2022-04-13  Daniel Martín  <mardani29@yahoo.es>
+2022-02-05  Daniel Martín  <mardani29@yahoo.es>
 
        Fix typo in display.texi
 
        * doc/lispref/display.texi (Making Buttons): Fix typo.  (Bug#53807)
 
-2022-04-13  Michael Albinus  <michael.albinus@gmx.de>
+2022-02-03  Michael Albinus  <michael.albinus@gmx.de>
 
        Revert an erroneous change in tramp-cache.el
 
@@ -507,7 +2137,7 @@
        Use `string-match-p' instead of `string-search'.  The latter one
        was introduced by accident.  Reported by Kai Tetzlaff <kai@tetzlaff.eu>.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-02-02  Eli Zaretskii  <eliz@gnu.org>
 
        Improve documentation of 'emacs-version'
 
@@ -516,11 +2146,11 @@
 
        * lisp/version.el (emacs-version): Improve doc string.  (Bug#53720)
 
-2022-04-13  Michael Albinus  <michael.albinus@gmx.de>
+2022-02-01  Michael Albinus  <michael.albinus@gmx.de>
 
        * etc/NEWS: Apply final fixes after proofreading.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-01-31  Eli Zaretskii  <eliz@gnu.org>
 
        Clarify documentation of a "face's font"
 
@@ -529,7 +2159,7 @@
        the font returned by 'face-font' are by default for ASCII
        characters.  (Bug#53664)
 
-2022-04-13  Alan Mackenzie  <acm@muc.de>
+2022-01-31  Alan Mackenzie  <acm@muc.de>
 
        Bind Qdebugger to Qdebug in signal_or_quit.
 
@@ -537,18 +2167,18 @@
        Vdebugger) to Qdebug in the section for errors in batch jobs.
        (syms_of_eval): New DEFSYM for Qdebugger.
 
-2022-04-13  Kyle Meyer  <kyle@kyleam.com>
+2022-01-30  Kyle Meyer  <kyle@kyleam.com>
 
        Update to Org 9.5.2-13-gdd6486
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-01-30  Eli Zaretskii  <eliz@gnu.org>
 
        Fix regression in Occur Edit mode
 
        * lisp/replace.el (occur-after-change-function): Fix the algorithm
        to find the smallest change in some corner cases.  (Bug#53598)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-01-29  Eli Zaretskii  <eliz@gnu.org>
 
        Fix last change of Malayalam composition rules
 
@@ -557,7 +2187,7 @@
        Malayalam characters to the existing patterns, so as not
        to lose the patterns that use ZWJ and ZWNJ.  (Bug#53625)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-01-29  Eli Zaretskii  <eliz@gnu.org>
 
        Fix rendering of Malayalam script
 
@@ -566,21 +2196,21 @@
        Instead, pass any sequence of Malayalam codepoints to the shaping
        engine.  (Bug#53625)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-01-29  Eli Zaretskii  <eliz@gnu.org>
 
        Improve documentation of Occur mode
 
        * doc/emacs/search.texi (Other Repeating Search): Improve wording
        and document Occur Edit mode better.
 
-2022-04-13  Alan Third  <alan@idiocy.org>
+2022-01-29  Alan Third  <alan@idiocy.org>
 
        Remove debug logging
 
        * src/nsterm.m ([EmacsView copyRect:to:]): Remove logging as it's no
        longer required.
 
-2022-04-13  Michael Albinus  <michael.albinus@gmx.de>
+2022-01-29  Michael Albinus  <michael.albinus@gmx.de>
 
        Fix error in filelock.c
 
@@ -590,11 +2220,11 @@
        (Flock_file): Do not check for create_lockfiles.  Call file name
        handler if appropriate.  (Bug#53207)
 
-2022-04-13  Juri Linkov  <juri@linkov.net>
+2022-01-27  Juri Linkov  <juri@linkov.net>
 
        * lisp/frame.el (clone-frame): Filter out 'parent-id' (bug#51883).
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-01-26  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Partially revert a fill-region-as-paragraph regression
 
@@ -602,14 +2232,14 @@
        e186af261 (bug#53537), because it leads to regressions.  (But
        leave tests in place.)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-01-26  Eli Zaretskii  <eliz@gnu.org>
 
        Fix 'make_lispy_position' when there's an image at EOB
 
        * src/xdisp.c (move_it_to): Don't compare IT_CHARPOS with an
        invalid TO_CHARPOS.  (Bug#53546)
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-01-26  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Fix copyright-find-copyright when searching from the end
 
@@ -618,7 +2248,7 @@
 
        Do not merge to master.
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-01-26  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Fix copyright.el comment and add a test
 
@@ -627,18 +2257,18 @@
 
        Do not merge to master.
 
-2022-04-13  Philipp Stephani  <phst@google.com>
+2022-01-24  Philipp Stephani  <phst@google.com>
 
        * configure.ac (LIBSECCOMP): Bump minimum version for faccessat2.
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-01-24  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Make the `f' command work in image-mode again
 
        * lisp/image.el (image-show-frame): Protect against not having
        computed the animation data yed (bug#53489).
 
-2022-04-13  Philipp Stephani  <phst@google.com>
+2022-01-22  Philipp Stephani  <phst@google.com>
 
        Seccomp: improve support for newer versions of glibc (Bug#51073)
 
@@ -647,14 +2277,14 @@
        with commits 95c1056962a3f2297c94ce47f0eaf0c5b6563231 and
        3d3ab573a5f3071992cbc4f57d50d1d29d55bde2, respectively).
 
-2022-04-13  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+2022-01-21  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
 
        EUDC: Fix a quoting bug in the BBDB backend
 
        * lisp/net/eudcb-bbdb.el (eudc-bbdb-query-internal): Fix a quoting
        bug introduced during lexical-binding conversion.
 
-2022-04-13  Sergey Vinokurov  <serg.foo@gmail.com>
+2022-01-21  Sergey Vinokurov  <serg.foo@gmail.com>
 
        Fix memory-report-object-size to initialize memory-report--type-size
 
@@ -663,7 +2293,7 @@
 
        Do not merge to master.
 
-2022-04-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+2022-01-20  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        Fix menu-bar mouse clicks in "C-h c" and "C-h k" (bug#53322)
 
@@ -674,7 +2304,7 @@
 
        (cherry picked from commit 9ceb3070e34ad8a54184fd0deda477bf5ff77000)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>  (tiny change)
+2022-01-20  Eli Zaretskii  <eliz@gnu.org>  (tiny change)
 
        Fix UB in ebrowse
 
@@ -682,14 +2312,14 @@
        limits of 'matching_regexp_buffer'.  Patch by Jan Stranik
        <jan@stranik.org>.  (Bug#53333)
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Fix execute-extended-command-for-buffer in fundamental-mode
 
        * lisp/simple.el (execute-extended-command-for-buffer): Protect
        against the current local map being nil (bug#52907).
 
-2022-04-13  Martin Rudalics  <rudalics@gmx.at>
+2022-01-20  Martin Rudalics  <rudalics@gmx.at>
 
        Add workaround to handle a problem with Enlightenment WM (Bug#53298)
 
@@ -702,14 +2332,14 @@
        Enlightenment WM and 'x-set-frame-visibility-more-laxly'
        workaround.
 
-2022-04-13  Po Lu  <luangruo@yahoo.com>
+2022-01-17  Po Lu  <luangruo@yahoo.com>
 
        Fix regression leading to flickering tooltips when the mouse is moved
 
        * lisp/tooltip.el (tooltip-show-help): Compare string with
        previous tooltip string ignoring properties.
 
-2022-04-13  Andrea Corallo  <akrl@sdf.org>
+2022-01-17  Andrea Corallo  <akrl@sdf.org>
 
        * Fix native comp for non trivial function names (bug#52833)
 
@@ -721,15 +2351,15 @@
 
        Do not merge to master
 
-2022-04-13  Kyle Meyer  <kyle@kyleam.com>
+2022-01-15  Kyle Meyer  <kyle@kyleam.com>
 
        Update to Org 9.5.2-9-g7ba24c
 
-2022-04-13  Juri Linkov  <juri@linkov.net>
+2022-01-15  Juri Linkov  <juri@linkov.net>
 
        * lisp/net/dictionary.el (dictionary-context-menu): Use package prefix.
 
-2022-04-13  Philipp Stephani  <phst@google.com>
+2022-01-15  Philipp Stephani  <phst@google.com>
 
        Mark a few more map tests as unstable on Emacs 28 (Bug#46722).
 
@@ -741,24 +2371,24 @@
        (test-map-merge, test-map-merge-with, test-map-merge-empty): Mark as
        unstable.
 
-2022-04-13  Philipp Stephani  <phst@google.com>
+2022-01-15  Philipp Stephani  <phst@google.com>
 
        * lisp/indent.el (tab-first-completion): Fix incorrect choices.
 
-2022-04-13  Philipp Stephani  <phst@google.com>
+2022-01-14  Philipp Stephani  <phst@google.com>
 
        * lisp/simple.el (undo-no-redo): Fix customization group
 
        * lisp/progmodes/xref.el (xref-file-name-display): Fix docstring.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-01-14  Eli Zaretskii  <eliz@gnu.org>
 
        Avoid another segfault in 'face_at_buffer_position'
 
        * src/xfaces.c (face_at_buffer_position): Make really sure the
        default face is usable.  (Bug#53254)
 
-2022-04-13  Lars Ingebrigtsen  <larsi@gnus.org>
+2022-01-14  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Mark test-map-into as unstable
 
@@ -767,7 +2397,7 @@
 
        Do not merge to master.
 
-2022-04-13  Philipp Stephani  <phst@google.com>
+2022-01-13  Philipp Stephani  <phst@google.com>
 
        Fix Edebug specification for inline functions (Bug#53068).
 
@@ -776,7 +2406,7 @@
        * test/lisp/emacs-lisp/edebug-tests.el (edebug-tests-inline): New unit
        test.
 
-2022-04-13  N. Jackson  <nljlistbox2@gmail.com>
+2022-01-13  N. Jackson  <nljlistbox2@gmail.com>
 
        Remove mention of removed `gnus-treat-play-sounds' variable from manual
 
@@ -784,7 +2414,7 @@
        manual. According to lisp/gnus/ChangeLog.3 this variable was
        removed in 2010 (bug#53192).
 
-2022-04-13  Mattias Engdegård  <mattiase@acm.org>
+2022-01-12  Mattias Engdegård  <mattiase@acm.org>
 
        Revert "Fix closure-conversion of shadowed captured lambda-lifted vars"
 
@@ -793,18 +2423,18 @@
        It was committed to a stable branch without prior discussion;
        see bug#53071.
 
-2022-04-13  Juri Linkov  <juri@linkov.net>
+2022-01-12  Juri Linkov  <juri@linkov.net>
 
        * doc/lispref/windows.texi (Textual Scrolling): Remove obsolete text.
 
        Remove text about scrolling the minibuffer from the buffer,
        obsolete since Emacs 27 (bug#51210).
 
-2022-04-13  Glenn Morris  <rgm@gnu.org>
+2022-01-12  Glenn Morris  <rgm@gnu.org>
 
        * lisp/files.el (lock-file-name-transforms): Doc tweaks.
 
-2022-04-13  Mattias Engdegård  <mattiase@acm.org>
+2022-01-12  Mattias Engdegård  <mattiase@acm.org>
 
        Fix closure-conversion of shadowed captured lambda-lifted vars
 
@@ -823,7 +2453,7 @@
 
        (cherry picked from commit 45252ad8f932c98a373ef0ab7f3363a3e27ccbe4)
 
-2022-04-13  Philipp Stephani  <phst@google.com>
+2022-01-12  Philipp Stephani  <phst@google.com>
 
        Fix test lisp/cedet/semantic/bovine/gcc-tests on macOS (Bug#52431)
 
@@ -833,7 +2463,7 @@
 
        (cherry picked from commit 6e52becfbe2a33c025b8c4838b3c8f06ba5a6fb8)
 
-2022-04-13  Mattias Engdegård  <mattiase@acm.org>
+2022-01-12  Mattias Engdegård  <mattiase@acm.org>
 
        Don't fail flymake-tests if `gcc` actually is Clang
 
@@ -843,7 +2473,7 @@
 
        (cherry picked from commit b2167d98432a78442522b7564e22f47d75a98b6f)
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-01-10  Eli Zaretskii  <eliz@gnu.org>
 
        Revert "Remove the filename argument from the command line after an 
ELC+ELN build"
 
@@ -852,14 +2482,14 @@
        Please don't install anything non-trivial on the release branch
        without asking first.
 
-2022-04-13  Alan Mackenzie  <acm@muc.de>
+2022-01-10  Alan Mackenzie  <acm@muc.de>
 
        Remove the filename argument from the command line after an ELC+ELN 
build
 
        This fixes bug #53164.  Without this fix, bootstrap-emacs loads the 
source
        file uselessly into a buffer after completing the compilation.
 
-2022-04-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+2022-01-09  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        (save-some-buffers): Simplify the fix for bug#46374
 
@@ -872,14 +2502,14 @@
        with `pred` set to `save-some-buffers-root` since it's not an
        appropriate function for that any more.
 
-2022-04-13  Stefan Kangas  <stefan@marxist.se>
+2022-01-09  Stefan Kangas  <stefan@marxist.se>
 
        Improve docstring of edit-abbrevs
 
        * lisp/abbrev.el (edit-abbrevs): Doc fix; don't use obsolete name.
        Improve docstring formatting.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-01-09  Eli Zaretskii  <eliz@gnu.org>
 
        Revert "Fix alignment on font size change in tabulated-list-mode"
 
@@ -888,21 +2518,21 @@
        That change caused a regression in a much more important use
        case, see bug#53133.
 
-2022-04-13  Stefan Kangas  <stefan@marxist.se>
+2022-01-08  Stefan Kangas  <stefan@marxist.se>
 
        Clarify docstring of package-native-compile
 
        * lisp/emacs-lisp/package.el (package-native-compile): Clarify
        docstring.
 
-2022-04-13  Eli Zaretskii  <eliz@gnu.org>
+2022-01-08  Eli Zaretskii  <eliz@gnu.org>
 
        Fix Subject "simplification" in Rmail
 
        * lisp/mail/rmail.el (rmail-simplified-subject): Match against
        "[external]" _after_ decoding the Subject by RFC-2047.
 
-2022-04-13  Stefan Kangas  <stefan@marxist.se>
+2022-01-08  Stefan Kangas  <stefan@marxist.se>
 
        Bump Emacs version to 28.0.91
 
@@ -1021,7 +2651,7 @@
        This fixes bug #52796.
 
        * lisp/progmodes/cc-engine.el (c-update-brace-stack): Handle a "*" like 
a
-       semicolon, cancelling the expectation of a brace.
+       semicolon, canceling the expectation of a brace.
 
        * lisp/progmodes/cc-langs.el (c-brace-stack-thing-key): Add a "*" into 
the
        sets of significant characters.
@@ -1053,7 +2683,7 @@
 
 2021-12-27  Eli Zaretskii  <eliz@gnu.org>
 
-       Fix typos in in 'reset-language-environment'
+       Fix typos in 'reset-language-environment'
 
        * lisp/international/mule-cmds.el (reset-language-environment):
        Fix a typo in 'windows-nt'.  (Bug#52816)
@@ -1595,7 +3225,7 @@
 
 2021-12-01  Alan Mackenzie  <acm@muc.de>
 
-       CC Mode: Recognise "struct foo {" as introducing a type declaration
+       CC Mode: Recognize "struct foo {" as introducing a type declaration
 
        This fixes bug #52157.
 
@@ -1681,7 +3311,7 @@
 
 2021-11-29  Andreas Schwab  <schwab@linux-m68k.org>
 
-       Avoid undefined behaviour when copying part of structure
+       Avoid undefined behavior when copying part of structure
 
        * src/dispnew.c (copy_row_except_pointers): Don't use address of
        subobject as starting point.
@@ -4838,14 +6468,14 @@
        Fix previous `newline' patch
 
        * lisp/simple.el (newline): Signal an error earlier to avoid
-       peculiar behaviour after getting a backtrace (bug#50900).
+       peculiar behavior 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).
+       peculiar behavior after getting a backtrace (bug#50900).
 
 2021-09-30  akater  <nuclearspace@gmail.com>
 
@@ -5026,7 +6656,7 @@
          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
+       (modus-themes-vivendi-colors): Recalibrate some color values and add
        a few new ones.
        (modus-themes-slanted-constructs): Remove obsolete user option.
        Superseded by the alias 'modus-themes-italic-constructs'.
@@ -5882,11 +7512,11 @@
 
        Fix byte-compiler crash for legal dynamic-binding code
 
-       This should really be taken care of by a syntax normalisation step in
+       This should really be taken care of by a syntax normalization 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.
+       without initializing expressions.
        * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
        Add test cases.
 
@@ -6945,7 +8575,7 @@
 
        This reverts commit 7e395a59b025c7f4be49294ad806addf5b1a25c9.
 
-       The behaviour change isn't good for the majority of tar files.
+       The behavior change isn't good for the majority of tar files.
 
 2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
 
@@ -6957,10 +8587,10 @@
 
 2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Restore some of the previous behaviour in whitespace-display-window
+       Restore some of the previous behavior in whitespace-display-window
 
        * lisp/whitespace.el (whitespace-display-window): Emulate previous
-       behaviour (bug#50716).  Code from martin rudalics <rudalics@gmx.at>.
+       behavior (bug#50716).  Code from martin rudalics <rudalics@gmx.at>.
 
 2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
 
@@ -7177,7 +8807,7 @@
 
        Add docstring for 'electric-pair-p-s-i-f' and minor refactor
 
-       Extract the "open newline between pairs behaviour" into its own
+       Extract the "open newline between pairs behavior" into its own
        function, electric-pair-open-newline-between-pairs-psif.
 
        * lisp/elec-pair.el (electric-pair-post-self-insert-function): Add
@@ -7417,7 +9047,7 @@
 
 2021-09-20  Philip Kaludercic  <philipk@posteo.net>
 
-       Fix dolist-with-progress-reporter behaviour
+       Fix dolist-with-progress-reporter behavior
 
        * lisp/subr.el (dolist-with-progress-reporter): Use the length of
        list argument as maximal value the reporter with reach.
@@ -7502,17 +9132,17 @@
 
 2021-09-19  Mattias Engdegård  <mattiase@acm.org>
 
-       Initialise unread buffer
+       Initialize 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
+       initialized 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.
+       * src/lread.c (unread_char): Initialize to empty.
+       (Fload): Initialize here too just in case.
 
 2021-09-19  Stefan Kangas  <stefan@marxist.se>
 
@@ -9487,11 +11117,11 @@
 
        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:
+       enables opportunities for other optimizations.  Example:
 
         (let ((y x)) (f y)) => (f x)
 
-       The optimisation is only performed if both aliased and aliasing
+       The optimization is only performed if both aliased and aliasing
        variables are lexically bound.  Shadowing bindings are α-renamed when
        necessary for correctness.  Example:
 
@@ -9501,7 +11131,7 @@
        * 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.
+       (byte-optimize-let-form): Add the optimization.
        * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
        Add relevant test cases.
 
@@ -10235,31 +11865,31 @@
 
 2021-09-06  Mattias Engdegård  <mattiase@acm.org>
 
-       Normalise nested `progn` forms in byte-code optimiser
+       Normalize nested `progn` forms in byte-code optimizer
 
        * 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.
+       cases that other optimizations need to take into account.
 
 2021-09-06  Mattias Engdegård  <mattiase@acm.org>
 
-       More robust optimisation of `ignore`
+       More robust optimization of `ignore`
 
-       Treat `ignore` as any other function during source-level optimisation,
-       to avoid having its warning-suppression effects cancelled by repeated
+       Treat `ignore` as any other function during source-level optimization,
+       to avoid having its warning-suppression effects canceled 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
+       or error-free (although it is), since that would allow the optimizer
        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
+       Optimize `member` and `assoc` (etc) with constant empty list
 
        * lisp/emacs-lisp/byte-opt.el
        (byte-optimize-assq): New.
@@ -11497,7 +13127,7 @@
 
        This reverts commit c8e3347ec01a9ed6dc8d88c2dbbb3a08497e8eb2.
 
-       Jim Porter's paperwork isn't finalised yet.
+       Jim Porter's paperwork isn't finalized yet.
 
 2021-08-26  Lars Ingebrigtsen  <larsi@gnus.org>
 
@@ -14236,7 +15866,7 @@
        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
+       displayed, account for the line-number space when calculating
        the desired X coordinate on the left.  (Bug#49891)
 
 2021-08-06  Eli Zaretskii  <eliz@gnu.org>
@@ -14344,11 +15974,11 @@
 
        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
+       during optimization, 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.
+       optimization 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`.
@@ -14586,7 +16216,7 @@
 
 2021-08-03  Phil Sainty  <psainty@orcon.net.nz>
 
-       Make `global-so-long-mode' handle unrecognised file types
+       Make `global-so-long-mode' handle unrecognized file types
 
        * lisp/so-long.el (so-long-target-modes): Add `fundamental-mode'
 
@@ -15076,16 +16706,16 @@
 
        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.
+       re-checking this all the time in the optimizer.
 
        * 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).
+       Assume normalized let-bindings (with lexical-binding).
        Stop using the variables removed above.
-       * lisp/emacs-lisp/cconv.el (cconv-convert): Ensure normalised
+       * lisp/emacs-lisp/cconv.el (cconv-convert): Ensure normalized
        let-bindings.  Malformed bindings are dropped after warning.
 
        remove byte-optimize-warn-eliminated-variable
@@ -15177,7 +16807,7 @@
 
 2021-07-30  Mattias Engdegård  <mattiase@acm.org>
 
-       Optimise let and let* whose body is constant or the last variable
+       Optimize let and let* whose body is constant or the last variable
 
        Simplify  (let ((X1 E1) ... (Xn En)) Xn)
              =>  (progn E1 ... En)
@@ -15186,9 +16816,9 @@
              =>  (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.
+       previous optimization that only applied to the constant nil.
        This reduces the number of bound variables, shortens the code, and
-       enables further optimisations.
+       enables further optimizations.
 
        * lisp/emacs-lisp/byte-opt.el (byte-optimize-letX): Rewrite using
        `pcase` and add the aforementioned transformations.
@@ -15197,7 +16827,7 @@
 
 2021-07-30  Mattias Engdegård  <mattiase@acm.org>
 
-       Move warnings about bad let-bindings from source optimiser to cconv
+       Move warnings about bad let-bindings from source optimizer 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
@@ -15205,7 +16835,7 @@
 
 2021-07-30  Mattias Engdegård  <mattiase@acm.org>
 
-       Optimise prog1 better
+       Optimize prog1 better
 
        Rewrite (prog1 CONST FORMS...) => (progn FORMS... CONST)
        where CONST is a compile-time constant, because putting the value last
@@ -15217,23 +16847,23 @@
 
 2021-07-30  Mattias Engdegård  <mattiase@acm.org>
 
-       Elide lexical variables in for-effect context in source optimiser
+       Elide lexical variables in for-effect context in source optimizer
 
        * 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.
+       this being done by the lapcode peephole optimizer but at source level
+       it enables more optimization opportunities.
        Keywords are elided for the same reason.
 
 2021-07-30  Mattias Engdegård  <mattiase@acm.org>
 
-       Single source optimiser entry point
+       Single source optimizer entry point
 
-       Make the optimiser aware of lexical arguments.  Otherwise we cannot
+       Make the optimizer 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
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-one-form): New optimizer
        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):
@@ -16154,7 +17784,7 @@
 
        `term-char-mode' doc string clarification
 
-       * lisp/term.el (term-char-mode): Document behaviour (bug#49186).
+       * lisp/term.el (term-char-mode): Document behavior (bug#49186).
 
 2021-07-22  Dmitry Gutov  <dgutov@yandex.ru>
 
@@ -16391,14 +18021,14 @@
 
 2021-07-21  Mattias Engdegård  <mattiase@acm.org>
 
-       Fix mistake in `quote` optimiser
+       Fix mistake in `quote` optimizer
 
        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
+       made this optimizer 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): ...a 'nil => nil normalizing step here; remove.
        (byte-optimize-form-code-walker): Make the compiler warn about (quote).
 
 2021-07-20  Juri Linkov  <juri@linkov.net>
@@ -16427,7 +18057,7 @@
 
        Strength-reduce (eq X nil) to (not X)
 
-       * lisp/emacs-lisp/byte-opt.el (byte-optimize-eq): New optimisation,
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-eq): New optimization,
        which results in better test and branch code generation where it
        applies.
 
@@ -17040,7 +18670,7 @@
 
        (Full support for packages or face groups): Include new items.
 
-       (Notes on individual packages): Add notes on Avy hints, the colour of
+       (Notes on individual packages): Add notes on Avy hints, the color of
        days in 'M-x calendar', and underlines in 'compilation-mode' buffers.
 
        (What is the best setup for legibility?): Remove single word.
@@ -18583,7 +20213,7 @@
        * 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).
+       daemon.  Add actions for specific behaviors (bug#49195).
 
 2021-06-30  Peter Oliver  <git@mavit.org.uk>
 
@@ -20650,7 +22280,7 @@
 
 2021-06-03  Mattias Engdegård  <mattiase@acm.org>
 
-       Optimise (cons X nil) to (list X)
+       Optimize (cons X nil) to (list X)
 
        * lisp/emacs-lisp/byte-opt.el (byte-optimize-cons): New function.
 
@@ -20913,7 +22543,7 @@
        When used with Fido, completions scroll like a typical dropdown
        widget.
 
-       If the dropdown behaviour is desired for Icomplete (instead of
+       If the dropdown behavior is desired for Icomplete (instead of
        rotation), icomplete-scroll can be adjusted separately by the user.
 
        * etc/NEWS (icomplete-vertical-mode): Reword.
@@ -21561,7 +23191,7 @@
 
        Don't propagate lexical variables into inlined functions
 
-       Functions compiled when inlined (thus from inside the optimiser)
+       Functions compiled when inlined (thus from inside the optimizer)
        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 .
@@ -21805,7 +23435,7 @@
 
 2021-05-25  Miha Rihtaršič  <miha@kamnitnik.top>
 
-       Try to not prioritise reading from lower file descriptors
+       Try to not prioritize reading from lower file descriptors
 
        * src/process.c (wait_reading_process_output): When looping through
        fds, continue from where we left off.
@@ -24302,7 +25932,7 @@
 
 2021-05-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix inconsistent behaviour in find-file-noselect when using nowarn
+       Fix inconsistent behavior 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:
@@ -24372,7 +26002,7 @@
 2021-05-03  Alan Third  <alan@idiocy.org>
            martin rudalics  <rudalics@gmx.at>
 
-       Fix incorrect resizing behaviour on macOS (bug#48157, bug#48162)
+       Fix incorrect resizing behavior 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.
@@ -25946,7 +27576,7 @@
        * 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.
+       (completion-all-sorted-completions): Use them.
 
 2021-04-19  Daniel Mendler  <mail@daniel-mendler.de>
 
@@ -27427,10 +29057,10 @@
 
 2021-04-09  Mattias Engdegård  <mattiase@acm.org>
 
-       Fix condition-case optimiser bug
+       Fix condition-case optimizer bug
 
        * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Don't
-       perform incorrect optimisations when a condition-case variable shadows
+       perform incorrect optimizations when a condition-case variable shadows
        another lexical variable.
        * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
        New test case.
@@ -27539,7 +29169,7 @@
 
        Self-TCO in `condition-case` error handlers
 
-       * lisp/emacs-lisp/cl-macs.el (cl--self-tco): Recognise
+       * lisp/emacs-lisp/cl-macs.el (cl--self-tco): Recognize
        `condition-case` handlers as being in the tail position.
        * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels):
        Extend test.
@@ -28025,7 +29655,7 @@
 
 2021-04-05  Stefan Kangas  <stefan@marxist.se>
 
-       Remove local uniquify functions in favour of seq-uniq
+       Remove local uniquify functions in favor of seq-uniq
 
        * lisp/emacs-lisp/seq.el (seq-uniq): Add autoload cookie.
        * lisp/pcomplete.el: (pcomplete-uniquify-list): Use seq-uniq.
@@ -28051,7 +29681,7 @@
 
        Obsolete local list functions in shadowfile.el
 
-       * lisp/shadowfile.el (shadow-union): Make obsolete in favour of
+       * lisp/shadowfile.el (shadow-union): Make obsolete in favor of
        cl-union.  Update callers.
        (shadow-find): Make into obsolete function alias for seq-find.
        Update callers.
@@ -30354,7 +31984,7 @@
 
 2021-03-18  Mattias Engdegård  <mattiase@acm.org>
 
-       Optimise tail calls in `and` and `or` forms in `cl-labels` functions
+       Optimize 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):
@@ -30472,7 +32102,7 @@
 
 2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Recognise "Verify password" as a password prompt
+       Recognize "Verify password" as a password prompt
 
        * lisp/comint.el (comint-password-prompt-regexp): Also react to
        "Verify password" (output by "zip -e") (bug#47209).
@@ -34432,7 +36062,7 @@
 
        * 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.
+       works with pcase-let(*) without being optimized away.
        * test/lisp/emacs-lisp/rx-tests.el (rx-pcase): Add test cases.
 
 2021-02-26  Stefan Kangas  <stefan@marxist.se>
@@ -36379,7 +38009,7 @@
        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.
+       Match new diary-anniversary/yearly-rrule behavior.
 
        * lisp/calendar/icalendar.el (icalendar--datestring-to-isodate): Add
        year-shift option.  (icalendar--convert-anniversary-to-ical): Shift
@@ -36799,7 +38429,7 @@
        * 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'.
+       (reset_buffer, init_buffer_once): Initialize `minor-modes'.
        (syms_of_buffer): Add `minor-modes' as a new permanently-local
        variable.
 
@@ -37176,10 +38806,10 @@
 
 2021-02-12  Mattias Engdegård  <mattiase@acm.org>
 
-       Avoid traversing dead `if` branches in bytecode optimiser
+       Avoid traversing dead `if` branches in bytecode optimizer
 
        There is no point in traversing conditional branches that are
-       statically known never to be executed.  This saves some optimisation
+       statically known never to be executed.  This saves some optimization
        effort, but more importantly prevents variable assignments and
        references in those branches from blocking effective constant
        propagation.
@@ -37189,9 +38819,9 @@
        assignments.
 
        * lisp/emacs-lisp/byte-opt.el (byte-optimize-form):
-       Rewrite the (tail) recursion into an explicit loop.  Normalise a
+       Rewrite the (tail) recursion into an explicit loop.  Normalize a
        return value of (quote nil) to nil, for easier subsequent
-       optimisations.
+       optimizations.
        * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Don't
        traverse dead `if` branches.  Use unconditional traversion context
        when possible.
@@ -37751,7 +39381,7 @@
        Make texinfmt-version variable obsolete
 
        * lisp/textmodes/texinfmt.el (texinfmt-version): Make variable and
-       command obsolete in favour of 'emacs-version'.
+       command obsolete in favor of 'emacs-version'.
        (texinfo-format-region, texinfo-format-buffer-1): Use
        'emacs-version' instead of above obsolete variable.
 
@@ -38422,7 +40052,7 @@
          (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
+       further optimizations.  The implementation is conservative, and is
        strongly curtailed by the presence of variable mutation, conditions
        and loops.
 
@@ -39605,7 +41235,7 @@
 
 2021-01-31  Alan Mackenzie  <acm@muc.de>
 
-       Minimise the time Vminibuffer_list is in an inconsistent state 
(src/minibuf.c)
+       Minimize 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
@@ -40995,7 +42625,7 @@
        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.
+       illusion that 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.
 
@@ -41980,7 +43610,7 @@
 
        * 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.
+       ispell process to be correctly initialized.
 
 2021-01-20  Juri Linkov  <juri@linkov.net>
 
@@ -42277,7 +43907,7 @@
 
        Parse square root sign in embedded Calc mode
 
-       * lisp/calc/calc-lang.el (math-read-big-rec): Recognise √ since it may
+       * lisp/calc/calc-lang.el (math-read-big-rec): Recognize √ since it may
        be used in Big mode.
 
 2021-01-19  Mattias Engdegård  <mattiase@acm.org>
@@ -43847,7 +45477,7 @@
 
        * lisp/textmodes/paragraphs.el (mark-paragraph): Revert
        eb090f65ceb0ae8a90829e911694348583135ba5 (bug#45318).  This restores
-       the behaviour from Emacs 27 -- further work is needed on this patch.
+       the behavior from Emacs 27 -- further work is needed on this patch.
 
 2021-01-07  Michael Albinus  <michael.albinus@gmx.de>
 
@@ -46631,7 +48261,7 @@
        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
+       * lisp/progmodes/cc-mode.el (c-basic-common-init): Initialize 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.
@@ -48113,7 +49743,7 @@
 
 2020-12-14  Alan Mackenzie  <acm@muc.de>
 
-       Optimise c-font-lock-<>-arglists, particularly for buffers with few 
<..> pairs
+       Optimize 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
@@ -48134,7 +49764,7 @@
 
 2020-12-14  Alan Mackenzie  <acm@muc.de>
 
-       Optimise c-parse-state for large buffers with few (if any) braces.
+       Optimize 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.
@@ -49332,7 +50962,7 @@
 
        * 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.
+       the previous behavior 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) ẞ.
 
@@ -49421,7 +51051,7 @@
        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
+       risk mismatches or expensive backtracking (bug#18109).  Recognize
        'info' level messages.  Convert to rx.
 
 2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
@@ -49501,7 +51131,7 @@
 
 2020-12-09  Mattias Engdegård  <mattiase@acm.org>
 
-       Recognise ß properly as a lower-case letter (bug#11309)
+       Recognize ß 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:]]).
@@ -51762,7 +53392,7 @@
        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
+       common name for the Meta key; since a few decades back it's labeled
        Alt (or Option or ⌥ but those keys usually also have 'alt' engraved on
        them).  Similarly, CTL is practically extinct and not worth
        mentioning.
@@ -52863,7 +54493,7 @@
 
 2020-11-19  Mattias Engdegård  <mattiase@acm.org>
 
-       More string-search optimisations
+       More string-search optimizations
 
        All-ASCII strings cannot have substrings with non-ASCII characters in
        them; use this fact to avoid searching entirely.
@@ -54538,7 +56168,7 @@
 
 2020-11-09  Harald Jörg  <haj@posteo.de>
 
-       cperl-mode: Indentation of ')' follows customisation
+       cperl-mode: Indentation of ')' follows customization
 
        * lisp/progmodes/cperl-mode.el (cperl-style-alist): Add
        cperl-close-paren-offset to the settings for PBP style.
@@ -55612,7 +57242,7 @@
        * 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.
+       (define-minor-mode): Partially revert to previous behavior.
 
 2020-11-01  Stefan Kangas  <stefan@marxist.se>
 
@@ -55940,7 +57570,7 @@
 
        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.
+       pure and should be optimized accordingly.
 
        * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Remove 'assoc'.
        (byte-optimize-assoc): Constant-propagate through 2-arg assoc calls.
@@ -56544,7 +58174,7 @@
        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.)
+       Remove.  (It was left behind in an old code reorganization.)
 
 2020-10-27  Lars Ingebrigtsen  <larsi@gnus.org>
 
@@ -56877,7 +58507,7 @@
        (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.
+       background colors, because that makes things harder to read.
        Separate with a horizontal line instead.
 
 2020-10-26  Andrea Corallo  <akrl@sdf.org>
@@ -57163,7 +58793,7 @@
        * 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-display-in-echo-area): Rework to honor
        eldoc-echo-area-prefer-doc-buffer.
 
 2020-10-24  João Távora  <joaotavora@gmail.com>
@@ -58604,7 +60234,7 @@
 
        mixal-mode: add missed instructions
 
-       Synchronises with latest released GNU MDK 1.2.11
+       Synchronizes 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.
@@ -58807,7 +60437,7 @@
        (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)
+       (Configure options prior to loading, Customization Options)
        (No mixed fonts, Command prompts, Mode line, Completion UIs)
        (Fringes, Line highlighting, Matching parentheses, Diffs)
        (Org mode blocks, Heading styles, Tweak colors (DIY))
@@ -58989,7 +60619,7 @@
        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
+       Sanitize 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>
@@ -59039,7 +60669,7 @@
 
 2020-10-16  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Restore vc-revision-other-window buffer-changing behaviour
+       Restore vc-revision-other-window buffer-changing behavior
 
        * lisp/vc/vc.el (vc-revision-other-window): This function used to
        change the current buffer, but this was changed in the previous
@@ -59727,14 +61357,14 @@
        Add more numeric shortdocs
 
        * lisp/emacs-lisp/shortdoc.el (shortdoc-section)
-       (shortdoc-example): Lighten up colours on light backgrounds.
+       (shortdoc-example): Lighten up colors on light backgrounds.
 
 2020-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Tweak shortdoc colours on light backgrounds
+       Tweak shortdoc colors on light backgrounds
 
        * lisp/emacs-lisp/shortdoc.el (shortdoc-section)
-       (shortdoc-example): Lighten up colours on light backgrounds.
+       (shortdoc-example): Lighten up colors on light backgrounds.
 
 2020-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
@@ -61516,10 +63146,10 @@
 
 2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix isearch-group-* colours on low-colour displays
+       Fix isearch-group-* colors on low-colour displays
 
        * lisp/isearch.el (isearch-group-1): On low-colour displays, just
-       use the normal isearch colour (bug#43702).
+       use the normal isearch color (bug#43702).
        (isearch-group-2 etc): Ditto.
 
 2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
@@ -61595,13 +63225,13 @@
 
 2020-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix emacsclient -c foo.txt behaviour with many frames
+       Fix emacsclient -c foo.txt behavior 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".
+       the old behavior if it's "emacsclient foo.txt".
 
 2020-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
 
@@ -61815,7 +63445,7 @@
 
 2020-09-27  Mattias Engdegård  <mattiase@acm.org>
 
-       Minor string-search optimisations (bug#43598)
+       Minor string-search optimizations (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
@@ -62673,7 +64303,7 @@
 
        Speed up shr-insert slightly
 
-       * lisp/net/shr.el (shr-insert): Speed up regularising spaces --
+       * lisp/net/shr.el (shr-insert): Speed up regularizing spaces --
        the vast majority of the spaces are already OK, so transforming
        " " to " " just takes time.
 
@@ -64644,7 +66274,7 @@
 
 2020-09-11  Mattias Engdegård  <mattiase@acm.org>
 
-       Calc: regularise test names
+       Calc: regularize 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)
@@ -65193,7 +66823,7 @@
 
 2020-09-08  João Távora  <joaotavora@gmail.com>
 
-       Change icomplete-show-matches-on-no-input behaviour for Icomplete only
+       Change icomplete-show-matches-on-no-input behavior for Icomplete only
 
        (Bug#19032), bug#43120
 
@@ -65329,7 +66959,7 @@
 
 2020-09-07  João Távora  <joaotavora@gmail.com>
 
-       Better explain behaviour of icomplete--sorted-completions
+       Better explain behavior of icomplete--sorted-completions
 
        * lisp/icomplete.el (icomplete--sorted-completions): Overhaul comment
 
@@ -66135,7 +67765,7 @@
        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
+       The second function 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
@@ -66700,9 +68330,9 @@
 
 2020-08-30  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Tweak background colours in shr when there's indentation
+       Tweak background colors in shr when there's indentation
 
-       * lisp/net/shr.el (shr-fill-line): Get the background colour right
+       * lisp/net/shr.el (shr-fill-line): Get the background color right
        for the indentation, too.
 
 2020-08-30  Mauro Aranda  <maurooaranda@gmail.com>
@@ -67615,7 +69245,7 @@
 
 2020-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Extend background colours in shr
+       Extend background colors 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
@@ -68577,7 +70207,7 @@
 
        * 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.
+       behavior from Emacs 23 that was lost in Emacs 24.
 
 2020-08-19  Grégoire Jadi  <gregoire.jadi@univ-nantes.fr>
 
@@ -68647,7 +70277,7 @@
 
 2020-08-19  Tino Calancha  <tino.calancha@gmail.com>
 
-       Make thingatpt recognise files names with @ in them
+       Make thingatpt recognize files names with @ in them
 
        * lisp/thingatpt.el (thing-at-point-file-name-chars): Add @
        (Bug#24606).
@@ -71552,7 +73182,7 @@
        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.
+       the colors to not be as angry.
        (whitespace-color-on): Don't mark the end of the buffer if point
        is there.
 
@@ -73083,7 +74713,7 @@
 
        (Bug#42563)
 
-       For some time, Eldoc has has some Elisp-specific code that shouldn't
+       For some time, Eldoc 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
@@ -73232,11 +74862,11 @@
 
 2020-07-25  Mattias Engdegård  <mattiase@acm.org>
 
-       Optimise 3-arg +, - and *
+       Optimize 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
+       speed-up.  Furthermore, the transform enables other optimizations; for
        example, (+ a 1 b) -> (+ (1+ a) b).
 
        * lisp/emacs-lisp/byte-opt.el (byte-optimize-plus, byte-optimize-minus)
@@ -73335,7 +74965,7 @@
 
        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
+       for the very same "situation" (as computed by the new
        eldoc--request-state helper), don't request that documentation from
        sources again.
 
@@ -73691,12 +75321,12 @@
 
 2020-07-17  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix NOT-CURRENT behaviour in text-property-search-backward
+       Fix NOT-CURRENT behavior in text-property-search-backward
 
        * lisp/emacs-lisp/text-property-search.el
-       (text-property-search-backward): Fix inconsistent behaviour of
+       (text-property-search-backward): Fix inconsistent behavior of
        S-TAB in eww (and other callers that use the NOT-CURRENT
-       behaviour) when there are adjacent elements
+       behavior) when there are adjacent elements
        (bug#39239).
 
 2020-07-17  Xu Chunyang  <xuchunyang56@gmail.com>
@@ -74619,7 +76249,7 @@
        (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
+       (eldoc-print-current-symbol-info): Honor 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.
@@ -74671,7 +76301,7 @@
 
 2020-07-07  Mattias Engdegård  <mattiase@acm.org>
 
-       Optimise assoc and rassoc with symbol key to assq and rassq
+       Optimize assoc and rassoc with symbol key to assq and rassq
 
        This is the same transformation made for member to memq.
 
@@ -74703,9 +76333,9 @@
 
 2020-07-06  Mattias Engdegård  <mattiase@acm.org>
 
-       Simplify byte-code optimisation of pure functions
+       Simplify byte-code optimization of pure functions
 
-       Most pure functions need no explicit optimisation; we can do away with
+       Most pure functions need no explicit optimization; 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.
@@ -74953,7 +76583,7 @@
 
        CC Mode: optimize for repeated simple operations.
 
-       Do this by recognising that unterminated strings in a buffer are 
typically
+       Do this by recognizing 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.
@@ -75269,7 +76899,7 @@
 
        * 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)
+       documented behavior. (Bug#40280)
 
 2020-06-23  Andrea Corallo  <akrl@sdf.org>
 
@@ -75572,7 +77202,7 @@
        * lisp/progmodes/project.el (project-shell): Improve docstring to
        include information about an implementation detail.
 
-       * lisp/progmodes/project.el (project-eshell): Modelled after
+       * lisp/progmodes/project.el (project-eshell): Modeled 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.
@@ -76135,7 +77765,7 @@
        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.
+       are on an encrypted remote dir.
 
        * lisp/net/tramp.el (file-notify-rm-watch): Declare.
        (tramp-inhibit-progress-reporter): New defvar.
@@ -76433,14 +78063,14 @@
 
 2020-06-10  Mattias Engdegård  <mattiase@acm.org>
 
-       Improved light/dark colour predicate (bug#41544)
+       Improved light/dark color predicate (bug#41544)
 
-       Add a predicate, color-dark-p, for deciding whether a colour is more
+       Add a predicate, color-dark-p, for deciding whether a color 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
+       The new predicate compares the relative luminance of the color 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.
 
@@ -76602,14 +78232,14 @@
 
 2020-06-08  Mattias Engdegård  <mattiase@acm.org>
 
-       More robust NS hex colour string parsing
+       More robust NS hex color 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
+       of digits each, and no trailing characters.  Parse 12-bit colors
        correctly.
 
 2020-06-08  Michael Albinus  <michael.albinus@gmx.de>
@@ -76753,7 +78383,7 @@
 
        * lisp/emacs-lisp/comp.el (comp-symbol-values-optimizable): New
        defconst.
-       (comp-function-call-maybe-remove): New logic to to remove
+       (comp-function-call-maybe-remove): New logic to remove
        unnecessary `symbol-value' calls.
 
 2020-06-07  Juri Linkov  <juri@linkov.net>
@@ -77057,7 +78687,7 @@
        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)
+       the colors, and make the function symmetric (bug41544)
        (Fcolor_distance): Add caution about this not being a true metric.
        * test/src/xfaces-tests.el: New file.
 
@@ -77585,7 +79215,7 @@
        * 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.
+       Use save-match-data to avoid match data clobber in normalization.
        * test/lisp/international/ucs-normalize-tests.el
        (ucs-normalize-save-match-data): New test.
 
@@ -79152,7 +80782,7 @@
 
 2020-05-14  Mattias Engdegård  <mattiase@acm.org>
 
-       Fix customisation of mouse-drag-and-drop-region (bug#41251)
+       Fix customization of mouse-drag-and-drop-region (bug#41251)
 
        Reported by David Ponce.
 
@@ -79588,12 +81218,12 @@
        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
+       match some more C++-only constructs and recognize 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.
+       for the newly recognized constructs.
 
 2020-05-09  Michal Nazarewicz  <mina86@mina86.com>
 
@@ -81362,7 +82992,7 @@
        * 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_offset): Fix strange behaviors when using negative values.
        (ns_set_window_size):
        (ns_set_undecorated):
        ([EmacsView windowDidResize:]):
@@ -81478,7 +83108,7 @@
 
 2020-04-16  Mattias Engdegård  <mattiase@acm.org>
 
-       Regularise some file-matching regexps
+       Regularize some file-matching regexps
 
        * admin/authors.el (authors-obsolete-files-regexps)
        (authors-renamed-files-regexps): Replace ^ and $ with \` and \'.
@@ -82008,7 +83638,7 @@
 
        * lisp/progmodes/cl-font-lock.el: Fix header and make it a minor mode
 
-       Change copyright to FSF and licence to GPLv3+.
+       Change copyright to FSF and license to GPLv3+.
        Tweak Commentary (the code doesn't seem to provide the lambda
        prettification mentioned).
 
@@ -82401,7 +84031,7 @@
 
        Avoid expensive recoding for ASCII identity cases (bug#40407)
 
-       Optimise for the common case of encoding or decoding an ASCII-only
+       Optimize 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.
@@ -82733,7 +84363,7 @@
 
 2020-04-03  Ashish SHUKLA  <ashish.is@lostca.se>
 
-       configure.ac: switch to POSIX sh behaviour
+       configure.ac: switch to POSIX sh behavior
 
 2020-04-03  Federico Tedin  <federicotedin@gmail.com>
 
@@ -84145,7 +85775,7 @@
 
 2020-03-10  AndreaCorallo  <akrl@sdf.org>
 
-       * Fix store_function_docstring for for native functions
+       * Fix store_function_docstring for native functions
 
        Do not Nil native_doc fields.  This will be naturally dumped by
        pdumper.  This was affecting dumped functions.
@@ -84702,7 +86332,7 @@
        (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.
+       (ns_mouse_position): Make sure f is initialized on GNUstep.
        * src/emacs.c (main): Move allocation of autorelease pool to before
        first use.
 
@@ -86421,7 +88051,7 @@
        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
+       2019-11-09 Avoid undefined behavior with small limb sizes
 
 2020-01-26  Paul Eggert  <eggert@cs.ucla.edu>
 
@@ -89792,7 +91422,7 @@
 
 2019-12-26  Mattias Engdegård  <mattiase@acm.org>
 
-       Optimise 'while' bodies for effect
+       Optimize '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,
@@ -95751,7 +97381,7 @@
        * lisp/progmodes/compile.el (compilation-parse-errors):
        When 'omake' is enabled, allow error messages to be indented by 0 or 6
        spaces instead of any number of spaces, to avoid pathological
-       behaviour.
+       behavior.
        (compilation-error-regexp-alist-alist): Anchor the 'omake' pattern to
        bol for performance.  Repair the 'ruby-Test::Unit' pattern, which
        relied on the previously over-generous 'omake' hack.
@@ -95774,7 +97404,7 @@
 
        Speed up 'maven' compilation error message regexp
 
-       Anchor the regexp at line-start to prevent quadratic behaviour when
+       Anchor the regexp at line-start to prevent quadratic behavior when
        it doesn't match (bug#39595).  It's unclear whether the type tag, like
        [ERROR], is always present; we keep it optional just in case.
 
@@ -96898,7 +98528,7 @@
 
        Calc: fix interval entry (bug#39040)
 
-       * lisp/calc/calc.el (calcDigit-start): Initialise calc-prev-char to
+       * lisp/calc/calc.el (calcDigit-start): Initialize calc-prev-char to
        something more reasonable, so that non-algebraic entry of intervals
        whose start is a single digit, like (1..10), works properly.
        Reported by Michel Schinz.
@@ -96914,7 +98544,7 @@
 
        flymake: fix typo in variable binding (bug#38752)
 
-       This mistake was found by an experimental elisp optimiser.
+       This mistake was found by an experimental elisp optimizer.
 
        * lisp/progmodes/flymake-proc.el (flymake-proc-stop-all-syntax-checks):
        Add missing brackets.
@@ -98016,7 +99646,7 @@
 
        Improve sorting of flex completion style with non-nil minibuffer-default
 
-       This affects the behaviour of flex completion when there is a default
+       This affects the behavior of flex completion when there is a default
        completion and the user hasn't entered any input pattern to flex-match
        against.  It is most visible when icomplete-mode or fido-mode are
        being used in conjunctio.
@@ -98194,7 +99824,7 @@
        * lisp/emacs-lisp/regexp-opt.el (regexp-opt):
        * doc/lispref/searching.texi (Regexp Functions):
        Be more specific about how the KEEP-ORDER argument actually works.
-       If nil, the regexp guarantees a longest match; this is the behaviour
+       If nil, the regexp guarantees a longest match; this is the behavior
        that many callers implicitly rely on.
 
 2019-12-18  Michael Albinus  <michael.albinus@gmx.de>
@@ -100773,7 +102403,7 @@
        Handle FC_CHARCELL in xftfont_open
 
        * src/xftfont.c (xftfont_open): FC_CHARCELL is apparently an alias
-       for FC_DUAL used in some east Asian fonts (bug#35079).  Modelled
+       for FC_DUAL used in some east Asian fonts (bug#35079).  Modeled
        after a patch suggested by Kenichi Handa.
 
 2019-11-17  Eli Zaretskii  <eliz@gnu.org>
@@ -100924,7 +102554,7 @@
 
        When using this option and editing input, some transient situations
        may arise that lead to file-name shadowing, but that shouldn't
-       necessarily lead to auto-delete behaviour, which will be surprising.
+       necessarily lead to auto-delete behavior, which will be surprising.
 
        In '/foo/x/bar', if the user deletes the 'x', shadowing occurs, but
        probably shouldn't.  So, somewhat like ido-mode, only auto-tidy
@@ -101640,7 +103270,7 @@
        Add extra bindings to fido-mode.
 
        * lisp/icomplete.el (icomplete-fido-mode-map) : Add arrows and other
-       bindings to reproduce ido behaviour.
+       bindings to reproduce ido behavior.
 
 2019-11-09  Glenn Morris  <rgm@gnu.org>
 
@@ -104052,9 +105682,9 @@
 
 2019-10-23  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Make Gnus recognise "git am" diffs in all groups
+       Make Gnus recognize "git am" diffs in all groups
 
-       * lisp/gnus/mm-uu.el (mm-uu-diff-groups-regexp): Recognise diffs
+       * lisp/gnus/mm-uu.el (mm-uu-diff-groups-regexp): Recognize diffs
        in all groups (bug#32730).
 
 2019-10-22  Stefan Kangas  <stefankangas@gmail.com>
@@ -106752,7 +108382,7 @@
 
 2019-10-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix possible initialisation error in shell-mode-map
+       Fix possible initialization error in shell-mode-map
 
        * lisp/shell.el (shell-mode-map): Comint is the parent mode, so
        there's no need to explicitly make it a parent map here (bug#25187).
@@ -107100,10 +108730,10 @@
 
 2019-10-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix the colours on Motif horizontal scroll bars
+       Fix the colors on Motif horizontal scroll bars
 
        * src/xterm.c (x_create_horizontal_toolkit_scroll_bar): Use the
-       same foreground/background colours as the vertical scroll bar
+       same foreground/background colors as the vertical scroll bar
        (bug#37359).
 
 2019-10-06  Lars Ingebrigtsen  <larsi@gnus.org>
@@ -107954,7 +109584,7 @@
 
        C++ Mode: Fontify correctly declarators with identifier preceded by &
 
-       The problem was bar in the following being spuriously recognised as a
+       The problem was bar in the following being spuriously recognized as a
        function, and foo as a type, as though the & were a *: Foo foo (&bar);.
 
        * lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): New variable
@@ -108421,9 +110051,9 @@
 
 2019-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Allow customising pdf-to-text parameters
+       Allow customizing pdf-to-text parameters
 
-       * lisp/doc-view.el (doc-view-pdf->txt): Allow customising the
+       * lisp/doc-view.el (doc-view-pdf->txt): Allow customizing the
        parameters (bug#8519).
        (doc-view-pdftotext-program-args): New variable.
 
@@ -110922,12 +112552,12 @@
 
 2019-09-14  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Add default foreground colours to SVG images
+       Add default foreground colors to SVG images
 
-       * lisp/net/shr.el (svg--wrap-svg): Add a default foreground colour
+       * lisp/net/shr.el (svg--wrap-svg): Add a default foreground color
        to SVG images (bug#37159).  This helps with images like the ones
        in https://en.wikipedia.org/wiki/Banach_fixed-point_theorem that
-       specify no foreground or background colours.
+       specify no foreground or background colors.
        (shr-parse-image-data): Use it.
 
 2019-09-14  Lars Ingebrigtsen  <larsi@gnus.org>
@@ -111732,7 +113362,7 @@
 
        * lisp/epa-file.el (epa-file--replace-text): Gingerly replace the
        text in the buffer to preserve as many markers as possible
-       (bug#34720).  This emulates the behaviour of Finsert_file_contents
+       (bug#34720).  This emulates the behavior of Finsert_file_contents
        more accurately.
        (epa-file-decode-and-insert): Remove compat code.
        (epa-file-insert-file-contents): Use the new function.
@@ -111744,7 +113374,7 @@
        Repair change to compilation-context-lines (bug#36832)
 
        * lisp/progmodes/compile.el (compilation-set-window):
-       Restore proper behaviour when compilation-context-lines is nil,
+       Restore proper behavior when compilation-context-lines is nil,
        which is the default.
 
 2019-09-04  Michael Albinus  <michael.albinus@gmx.de>
@@ -112424,7 +114054,7 @@
 
 2019-08-29  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Tweak shr background colour handling
+       Tweak shr background color handling
 
        * lisp/net/shr.el (shr-fill-line): Extend the background to the
        end of the line when folding lines.
@@ -113203,7 +114833,7 @@
 
 2019-08-21  Nicolas Petton  <nicolas@petton.fr>
 
-       * etc/HISTORY: Add Emacs 26.3 release release date.
+       * etc/HISTORY: Add Emacs 26.3 release date.
 
 2019-08-21  Nicolas Petton  <nicolas@petton.fr>
 
@@ -114532,7 +116162,7 @@
 
        * lisp/progmodes/cc-engine.el (c-beginning-of-statement-1): Check for
        operators which cannot start a statement, which may follow a closing 
brace.
-       Don't recognise an end of statement in such a case.
+       Don't recognize an end of statement in such a case.
 
        * lisp/progmodes/cc-langs.el (c-operator-re, c-bin-tern-operators)
        (c-unary-operators, c-non-after-{}-operators, c-non-after-{}-ops-re): 
New lang
@@ -115007,11 +116637,11 @@
 
 2019-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Capitalise a couple of node names
+       Capitalize a couple of node names
 
-       * doc/lispref/functions.texi (Advising Functions): Capitalise node
+       * doc/lispref/functions.texi (Advising Functions): Capitalize node
        names (bug#17717).
-       (Advice Combinators, Porting Old Advice): Capitalise.
+       (Advice Combinators, Porting Old Advice): Capitalize.
 
 2019-08-04  Michael Heerdegen  <michael_heerdegen@web.de>
 
@@ -115401,9 +117031,9 @@
 
 2019-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Make Info-find-file ensure that Info is initialised
+       Make Info-find-file ensure that Info is initialized
 
-       * lisp/info.el (Info-find-file): Ensure that Info is initialised,
+       * lisp/info.el (Info-find-file): Ensure that Info is initialized,
        because libraries call that function (bug#19880).
 
 2019-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
@@ -115520,7 +117150,7 @@
        This fixes bug #36801.
 
        * lisp/progmodes/cc-langs.el (c-pre-lambda-tokens-re): Use 
c-make-keywords-re
-       rather than regexp-opt to make an optimised regexp out of a list of 
tokens.
+       rather than regexp-opt to make an optimized regexp out of a list of 
tokens.
 
 2019-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
 
@@ -115620,7 +117250,7 @@
        Document batch-byte-compile directory behavior
 
        * lisp/emacs-lisp/bytecomp.el (batch-byte-compile): Document the
-       behaviour with directories (bug#20867).
+       behavior with directories (bug#20867).
 
 2019-08-01  Stefan Monnier  <monnier@iro.umontreal.ca>
 
@@ -116185,7 +117815,7 @@
 
 2019-07-30  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Use decoded time accessors in in em-ls
+       Use decoded time accessors in em-ls
 
        * lisp/eshell/em-ls.el (eshell-ls-file): Use decoded time
        accessors.
@@ -117112,7 +118742,7 @@
 
 2019-07-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Tweak the behaviour of thing-at-point--end-of-sexp
+       Tweak the behavior of thing-at-point--end-of-sexp
 
        * lisp/thingatpt.el (thing-at-point--end-of-sexp): Don't return
        nil when called with point between two parentheses (bug#29499).
@@ -117164,7 +118794,7 @@
 
        Make `C-u w' in the Gnus Summary buffer open externally
 
-       * doc/misc/gnus.texi (Article Commands): Document new behaviour.
+       * doc/misc/gnus.texi (Article Commands): Document new behavior.
 
        * lisp/gnus/gnus-sum.el (gnus-shorten-url): New function.
        (gnus-summary-browse-url): Change function to make `C-u' use the
@@ -117760,7 +119390,7 @@
        * doc/lispref/hash.texi (Creating Hash, Defining Hash):
        * src/fns.c (Fsxhash_eq, Fsxhash_eql, Fsxhash_equal):
        Say that hashes are fixnums.
-       (Fmake_hash_table): Say that that an integer rehash-size
+       (Fmake_hash_table): Say that an integer rehash-size
        should be a fixnum.
        * doc/lispref/hash.texi (Defining Hash): Say that hash and
        comparison functions should be consistent and pure, and should
@@ -118540,9 +120170,9 @@
 
 2019-07-14  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Tweak background colour handling in shr
+       Tweak background color handling in shr
 
-       * lisp/net/shr.el (shr-fill-line): Keep the background colour on
+       * lisp/net/shr.el (shr-fill-line): Keep the background color on
        the newline and the indentation.
 
 2019-07-14  Lars Ingebrigtsen  <larsi@gnus.org>
@@ -119009,7 +120639,7 @@
        * lisp/epg.el (epg-start-encrypt)
        * lisp/gnus/mml-sec.el (mml-secure-epg-encrypt): When
        'mml-secure-openpgp-sign-with-sender' is non-nil message sender's
-       email address (in addition to its old behaviour) will also be used
+       email address (in addition to its old behavior) will also be used
        to set gpg's "--sender email@domain" option.
 
 2019-07-12  Paul Eggert  <eggert@cs.ucla.edu>
@@ -119220,7 +120850,7 @@
        Support program switches in 'comint-run' command
 
        * etc/NEWS:
-       * doc/emacs/misc.texi: Describe new behaviour (bug#33037).
+       * doc/emacs/misc.texi: Describe new behavior (bug#33037).
        * lisp/comint.el (comint-run): Add optional SWITCHES argument.
        With prefix argument C-u, prompt for SWITCHES.
 
@@ -120365,11 +121995,11 @@
 
 2019-07-04  Mattias Engdegård  <mattiase@acm.org>
 
-       Optimise more inputs to `regexp-opt' (bug#36444)
+       Optimize more inputs to `regexp-opt' (bug#36444)
 
        Use a more precise test to determine whether the input to `regexp-opt'
-       is safe to optimise when KEEP-ORDER is non-nil, permitting more inputs
-       to be optimised than before.  For example, ("good" "goal" "go") is now
+       is safe to optimize when KEEP-ORDER is non-nil, permitting more inputs
+       to be optimized than before.  For example, ("good" "goal" "go") is now
        accepted.
 
        * lisp/emacs-lisp/regexp-opt.el (regexp-opt):
@@ -121167,7 +122797,7 @@
 
 2019-06-27  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Mention the new emacsclient -a/--eval behaviour
+       Mention the new emacsclient -a/--eval behavior
 
 2019-06-27  Lars Ingebrigtsen  <larsi@gnus.org>
 
@@ -121345,11 +122975,11 @@
 
        `replace-regexp-in-string' omits the first START characters of the
        input string in its return value.  This is a clear bug, but fixing it
-       probably causes more trouble; document the behaviour instead 
(bug#36372).
+       probably causes more trouble; document the behavior instead (bug#36372).
 
        * doc/lispref/searching.texi (Search and Replace)
        * lisp/subr.el (replace-regexp-in-string):
-       Document current behaviour.
+       Document current behavior.
 
 2019-06-26  Stefan Monnier  <monnier@iro.umontreal.ca>
 
@@ -121612,7 +123242,7 @@
 
        * lisp/view.el (view-search): Jump to the next/prev occurrence of
        the search, even if it's displayed in the buffer (bug#18131).
-       This seems more logical than the previous (undocumented) behaviour.
+       This seems more logical than the previous (undocumented) behavior.
 
 2019-06-25  Paul Eggert  <eggert@cs.ucla.edu>
 
@@ -121796,7 +123426,7 @@
        (goto-address-uri-schemes): Ditto.
        (goto-address-url-regexp): Use them to compose the final regexp.
 
-       * lisp/net/goto-addr.el: The URI schemes to be recognised by
+       * lisp/net/goto-addr.el: The URI schemes to be recognized by
        `goto-address-mode' were not regexp-quoted (Bug#23343).
 
 2019-06-25  Tino Calancha  <f92capac@gmail.com>
@@ -122384,7 +124014,7 @@
 
        Make ls-lisp--dired ape dired-noselect more closely
 
-       * lisp/ls-lisp.el (ls-lisp--dired): Emulate the behaviour of
+       * lisp/ls-lisp.el (ls-lisp--dired): Emulate the behavior of
        non-ls-lisp.el dired better by defaulting to default-directory as
        dired-noselect does (bug#35390).
 
@@ -125326,7 +126956,7 @@
        (global-auto-revert-mode): Don't use
        `after-set-visited-file-name-hook' here.
        (auto-revert-set-visited-file-name): Rename from
-       `auto-revert--global-set-visited-file-name' and generalise.
+       `auto-revert--global-set-visited-file-name' and generalize.
        * test/lisp/autorevert-tests.el (auto-revert-test06-write-file): New.
 
 2019-06-11  Michael Albinus  <michael.albinus@gmx.de>
@@ -127406,7 +129036,7 @@
 
        * lisp/emacs-lisp/package.el (package-install-from-archive): Fix last 
change
 
-       Don't place the unibyte content of of the downloaded file into
+       Don't place the unibyte content of the downloaded file into
        a multibyte buffer.
 
 2019-05-24  Michael Albinus  <michael.albinus@gmx.de>
@@ -129768,10 +131398,10 @@
 
 2019-05-05  Mattias Engdegård  <mattiase@acm.org>
 
-       Reorganise (auto-)revert nodes in the manual
+       Reorganize (auto-)revert nodes in the manual
 
        Put all information about auto-revert into a section of its own, and
-       organise the text in a more logical way.  Previously it was mainly
+       organize the text in a more logical way.  Previously it was mainly
        described in the section about reverting (bug#35418).
 
        * doc/emacs/files.texi (Files): Adjust menu.
@@ -132713,7 +134343,7 @@
        * lisp/progmodes/cc-engine.el (c-looking-at-or-maybe-in-bracelist): On
        detection of such a ref-qualifier, set braceassignp to nil.  When this
        variable has a nil value, return nil as the value of the function.  On
-       encountering a } when scanning backwards, recognise this as the end of a
+       encountering a } when scanning backwards, recognize this as the end of a
        previous construct and stop the scan.
 
 2019-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
@@ -136964,7 +138594,7 @@
 
        * doc/lispref/searching.texi (Regular Expression Functions):
        * etc/NEWS:
-       Document the new behaviour.
+       Document the new behavior.
        * lisp/emacs-lisp/regexp-opt.el (regexp-opt):
        Return a never-match regexp for empty inputs.
 
@@ -138681,7 +140311,7 @@
        xref-find-definitions or xref-find-definitions-other-window how to
        choose a window for the *xref* buffer or how to find windows for
        displaying the results after choosing a candidate.  This patch makes
-       that task easier, but keeps the current behaviour intact.
+       that task easier, but keeps the current behavior intact.
 
 
        * lisp/progmodes/xref.el (xref--show-pos-in-buf): Simplify.
@@ -139441,7 +141071,7 @@
        image-mode: Make parameters buffer-local
 
        Image parameters were treated as image specific, but because they
-       actually were global variables, their behaviour transferred to new
+       actually were global variables, their behavior transferred to new
        images.
        * lisp/image-mode.el (image-transform-resize, image-transform-scale)
        (image-transform-rotation): Declare with defvar-local.  (Bug#33990)
@@ -139581,7 +141211,7 @@
        To resolve this confusion, never cycle with C-M-i in icomplete:
        non-ambiguous cycling can be achieved with C-. and C-,
 
-       The former behaviour can still be restored with:
+       The former behavior can still be restored with:
 
        (define-key icomplete-minibuffer-map (kbd "C-M-i") 
'minibuffer-force-complete)
 
@@ -139706,7 +141336,7 @@
        really reindented.  Rewrite comment.
        (electric-layout-allow-duplicate-newlines): New variable.
        (electric-layout-post-self-insert-function-1): Rewrite comments.
-       Honours electric-layout-allow-duplicate-newlines.  Don't reindent
+       Honors electric-layout-allow-duplicate-newlines.  Don't reindent
        previous line because racecar.
 
        * test/lisp/electric-tests.el: New test.
@@ -139721,7 +141351,7 @@
 
        Remove tests of electric-pair-mode and CC-based modes
 
-       The behaviour previously observed in cc-mode-based-modes (and every
+       The behavior previously observed in cc-mode-based-modes (and every
        other major-mode) when electric-pair-mode or electric-layout-mode is
        turned on may no longer be observed: this because CC-mode goes around
        the generic implementation of electric-pair-mode.
@@ -140848,10 +142478,10 @@
 
 2019-01-10  Alan Third  <alan@idiocy.org>
 
-       Fix drag and drop behaviour on NS (bug#30929)
+       Fix drag and drop behavior on NS (bug#30929)
 
        * doc/emacs/macos.texi (Mac / GNUstep Events): Describe the new drag
-       and drop behaviour.
+       and drop behavior.
        * lisp/term/ns-win.el (ns-drag-n-drop): Handle the new event format.
        (ns-drag-n-drop-other-frame):
        (ns-drag-n-drop-as-text):
@@ -147548,7 +149178,7 @@
        2018-09-09 mktime: simplify in prep for glibc merge
        2018-09-07 intprops: minor clarification of code
        2018-09-06 stddef: Override max_align_t on NetBSD 8.0/x86
-       2018-09-06 fcntl: Fix F_DUPFD_CLOEXEC behaviour on Haiku
+       2018-09-06 fcntl: Fix F_DUPFD_CLOEXEC behavior on Haiku
        2018-09-06 strtoll, strtoull: Rely on limits-h module
        2018-09-06 limits-h: Provide numerical limits macros
        2018-09-06 fcntl: Don't access nonexistent optional argument
@@ -148448,7 +150078,7 @@
 
        * lisp/textmodes/bibtex.el (bibtex-next-entry)
        (bibtex-previous-entry): New commands.
-       (bibtex-mode-map): Bind to to forward-paragraph and
+       (bibtex-mode-map): Bind to forward-paragraph and
        backward-paragraph.  Add to menu under "Moving inside an Entry".
 
 2018-08-27  Noam Postavsky  <npostavs@gmail.com>
@@ -149801,7 +151431,7 @@
 
 2018-08-09  João Távora  <joaotavora@gmail.com>
 
-       Synchronous JSONRPC requests can be cancelled on user input
+       Synchronous JSONRPC requests can be canceled on user input
 
        This allows building more responsive interfaces, such as a snappier
        completion backend.
@@ -152799,7 +154429,7 @@
 
        Tweak previous gnutls change for efficiency
 
-       * src/gnutls.c (Fgnutls_peer_status): Minor optimisation to avoid
+       * src/gnutls.c (Fgnutls_peer_status): Minor optimization to avoid
        computing the topmost certificate twice.
 
 2018-06-24  Lars Ingebrigtsen  <larsi@gnus.org>
@@ -155894,7 +157524,7 @@
 
        * lisp/window.el (scroll-other-window-down):
        Move to src/window.c as Fscroll_other_window_down.
-       * src/window.c (scroll_command): Generalise for arbitrary windows.
+       * src/window.c (scroll_command): Generalize for arbitrary windows.
        (Fscroll_up, Fscroll_down): Use scroll_command with selected_window.
        (Fscroll_other_window, Fscroll_other_window_down):
        Rewrite in terms of scroll_command.
@@ -156618,7 +158248,7 @@
        326a296 ; * etc/NEWS: Mention 'display-buffer-in-major-side-window' c...
        3bdc9a1 Fix flyspell-auto-correct-previous-word broken by recent change
        a539eb5 * test/src/lread-tests.el (lread-test-bug-31186): New test.
-       3fa472b Fix undefined behaviour while looking for lexical-binding fil...
+       3fa472b Fix undefined behavior while looking for lexical-binding fil...
        4341aac Minor wording improvement in "Bookmarks"
 
        Conflicts:
@@ -157218,7 +158848,7 @@
        * lisp/gnus/gnus-group.el (gnus-update-group-mark-positions):
        Rewrite a call to string-to-multibyte that didn't even work.
        After the rewrite it gives the correct result and should allow
-       people to customise Gnus group process mark positions (but that's
+       people to customize Gnus group process mark positions (but that's
        a pretty obscure feature).
 
 2018-04-14  Lars Ingebrigtsen  <larsi@gnus.org>
@@ -157544,9 +159174,9 @@
 
        From the discussion on the ding mailing list, I said:
 
-       I think the colours should be reverted back to what they were before the
+       I think the colors should be reverted back to what they were before the
        change.  Normal text should be white on black (if you have a dark
-       background), and colours should be used to emphasise or de-emphasise
+       background), and colors should be used to emphasize or de-emphasize
        certain text.  Following that principle, normal Gnus groups should be
        white, not ... er...  what are they now?  Teal?
 
@@ -158975,8 +160605,8 @@
        and numeric conversion in function in order to parse -signal and
        -SIGNALNAME correctly.
        * doc/misc/eshell.texi (kill): Update docs to reflect new function
-       behaviour.
-       * etc/NEWS: Mention new eshell/kill behaviour.
+       behavior.
+       * etc/NEWS: Mention new eshell/kill behavior.
 
 2018-03-25  Noam Postavsky  <npostavs@gmail.com>
 
@@ -163526,7 +165156,7 @@
 
 2018-01-16  Alan Mackenzie  <acm@muc.de>
 
-       C++ Mode: Fontify correctly uniform initialisation with inner 
parentheses.
+       C++ Mode: Fontify correctly uniform initialization with inner 
parentheses.
 
        E.g.: someStruct x ( (nullptr != y) ? 3 : 4 )
        Also fontify declarations of function pointers correctly.
@@ -167575,7 +169205,7 @@
        413978727c Simplify Flymake user documentation
        6ff18c3995 * etc/NEWS: Mention the new version of Org.
        b78332c3c6 Don't use (format "%s" ...) for string copying (Bug#28774)
-       078fb7f6df Make frame-list-z-order on NS match Windows behaviour (bug...
+       078fb7f6df Make frame-list-z-order on NS match Windows behavior (bug...
 
        # Conflicts:
        #       etc/NEWS
@@ -185141,7 +186771,7 @@
 
        * lisp/progmodes/flymake-proc.el
        (flymake-proc--diagnostics-for-pattern): Rewrite (using cl-loop) to
-       honour more sophisticated flymake-proc-diagnostic-type-pred.
+       honor more sophisticated flymake-proc-diagnostic-type-pred.
        (flymake-warning-re): Is now an obsolete alias for
        flymake-proc-diagnostic-type-pred.
        (flymake-proc-diagnostic-type-pred): Rename and augment from
@@ -185306,7 +186936,7 @@
        Lay some groundwork for a more flexible approach that allows for
        different classes of diagnostics, not necessarily line-based.
        Importantly, one overlay per diagnostic is created, whereas the
-       original implementation had one per line, and on it it concatenated
+       original implementation had one per line, and on it concatenated
        the results of errors and warnings.
 
        This means that currently, an error and warning on the same line are
@@ -201597,7 +203227,7 @@
        titlecase_char_table member.  It’s set to the ‘titlecase’ Unicode
        property table if capitalization has been requested.
        (case_character): Make use of the titlecase_char_table to title-case
-       initial characters when capitalising.
+       initial characters when capitalizing.
 
        * test/src/casefiddle-tests.el (casefiddle-tests--characters,
        casefiddle-tests-casing): Update test cases which are now passing.
@@ -203852,7 +205482,7 @@
 
        * lisp/net/tramp.el (tramp-completion-mode): Fix docstring.
        (tramp-completion-mode-p): Optional parameter VEC.  Replace
-       check for `last-input-event' by analysing VEC argument.
+       check for `last-input-event' by analyzing VEC argument.
        (tramp-error-with-buffer, tramp-file-name-handler)
        (tramp-connectable-p, tramp-handle-file-name-as-directory):
        * lisp/net/tramp-sh.el (tramp-maybe-open-connection): Use it.
@@ -216457,8 +218087,7 @@
        Stick with debbugs-supported tags in triage
 
        * admin/notes/bug-triage: Stick to the tag "unreproducible", which
-       debbugs supports, rather than suggesting "doneunreproducible" or
-       "unreproducable".
+       debbugs supports.
 
 2016-09-26  Paul Eggert  <eggert@cs.ucla.edu>
 
@@ -234978,8 +236607,7 @@
 
 This file records repository revisions from
 commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
-2022-04-13e39829812098d8269eafbc0fcb98959ee5bb7 (inclusive).
-commit e7aa3ece52d26cc7e4d3f3990aff56127389779f (inclusive).
+commit 78759ddcb0fc7dd75a7a8edfb2c19dc2f1d86ee2 (inclusive).
 See ChangeLog.2 for earlier changes.
 
 ;; Local Variables:
diff --git a/Makefile.in b/Makefile.in
index 4b74963665..d288bacb9d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -51,7 +51,15 @@
 #
 # make bootstrap
 #      Removes all the compiled files to force a new bootstrap from a
-#      clean slate, and then build in the normal way.
+#      clean slate, and then build in the normal way.  If the FAST Make
+#      variable is set, then the config.cache file isn't removed.  This
+#      allows you to say
+#
+#      ./configure -C
+#      make FAST=true bootstrap
+#
+#      and use the cached results from the configure run, which is much
+#      faster.
 #
 # make docs
 #      Make Emacs documentation files from their sources; requires makeinfo.
@@ -358,10 +366,17 @@ endif
 
 gsettings_SCHEMAS = etc/org.gnu.emacs.defaults.gschema.xml
 
-all: ${SUBDIR} info $(gsettings_SCHEMAS:.xml=.valid)
+all: ${SUBDIR} info $(gsettings_SCHEMAS:.xml=.valid) src-depending-on-lisp
 
 .PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 
epaths-force-ns-self-contained etc-emacsver
 
+# Changes in lisp may require us to reconsider the build in src.  For
+# example, if loaddefs.{el,elc} were built in lisp, we need a new
+# .pdmp containing the new autoloads.
+.PHONY: src-depending-on-lisp
+src-depending-on-lisp: lisp
+       ${MAKE} -C src BIN_DESTDIR='$(BIN_DESTDIR)' ELN_DESTDIR='$(ELN_DESTDIR)'
+
 # If configure were to just generate emacsver.tex from emacsver.tex.in
 # in the normal way, the timestamp of emacsver.tex would always be
 # newer than that of the pdf files, which are prebuilt in release tarfiles.
@@ -455,18 +470,11 @@ lisp: src
 lib lib-src lisp nt: Makefile
        $(MAKE) -C $@ all
 
-# Ideally, VCSWITNESS should be a file that is modified whenever the
-# repository registers a commit from either a local checkin or a
-# repository pull. In git there is no single file that guarantees
-# this, but the local log for the current head should be close enough.
-#
 # Pass an unexpanded $srcdir to src's Makefile, which then
 # expands it using its own value of srcdir (which points to the
 # source directory of src/).
-dirstate = .git/logs/HEAD
-VCSWITNESS = $(if $(wildcard $(srcdir)/$(dirstate)),$$(srcdir)/../$(dirstate))
 src: Makefile
-       $(MAKE) -C $@ VCSWITNESS='$(VCSWITNESS)' BIN_DESTDIR='$(BIN_DESTDIR)' \
+       $(MAKE) -C $@ BIN_DESTDIR='$(BIN_DESTDIR)' \
                 ELN_DESTDIR='$(ELN_DESTDIR)' all
 
 blessmail: Makefile src
@@ -936,7 +944,7 @@ clean: $(clean_dirs:=_clean) clean-gsettings-schemas
 ### 'bootclean'
 ###      Delete all files that need to be remade for a clean bootstrap.
 top_bootclean=\
-       rm -f config.cache config.log ${srcdir}/doc/man/emacs.1
+       rm -f config.log ${srcdir}/doc/man/emacs.1
 
 ### 'distclean'
 ###      Delete all files from the current directory that are created by
@@ -946,7 +954,7 @@ top_bootclean=\
 ###      distribution.
 top_distclean=\
        ${top_bootclean}; \
-       rm -f config.status config.log~ \
+       rm -f config.cache config.status config.log~ \
          Makefile makefile lib/gnulib.mk ${SUBDIR_MAKEFILES}
 
 distclean_dirs = $(clean_dirs) leim lisp admin/grammars
@@ -966,6 +974,9 @@ bootstrap-clean: $(distclean_dirs:=_bootstrap-clean)
        rm -rf ${srcdir}/info
        rm -f ${srcdir}/etc/refcards/emacsver.tex
        rm -rf native-lisp/ lisp/leim/ja-dic/
+ifndef FAST
+       rm -f config.cache
+endif
        ${top_bootclean}
 
 ### 'maintainer-clean'
diff --git a/admin/MAINTAINERS b/admin/MAINTAINERS
index f0239db008..6e080d1f5b 100644
--- a/admin/MAINTAINERS
+++ b/admin/MAINTAINERS
@@ -137,6 +137,7 @@ Andrea Corallo
 
 Stefan Kangas
         admin/automerge
+       admin/update_autogen
 
 Po Lu
        The Haiku port:
diff --git a/admin/admin.el b/admin/admin.el
index 6be378b924..c84287a702 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -488,10 +488,11 @@ the @import directive."
       (delete-region opoint (point))
       (search-forward "<meta http-equiv=\"Content-Style")
       (setq opoint (match-beginning 0)))
+    (search-forward "<title>")
+    (delete-region opoint (match-beginning 0))
     (search-forward "</title>\n")
-    (delete-region opoint (point))
-    (search-forward "<link href=")
-    (goto-char (match-beginning 0))
+    (when (search-forward "<link href=" nil t)
+      (goto-char (match-beginning 0)))
     (insert manual-links-string)
     (setq opoint (point))
     (search-forward "</head>")
@@ -617,7 +618,7 @@ style=\"text-align:left\">")
       ;; its original form.
       (when (or (search-forward "<ul class=\"menu\">" nil t)
                ;; FIXME?  The following search seems dangerously lax.
-               (search-forward "<ul>"))
+               (search-forward "<ul>" nil t))
         ;; Convert the list that Makeinfo made into a table.
         (replace-match "<table style=\"float:left\" width=\"100%\">")
         (forward-line 1)
diff --git a/admin/authors.el b/admin/authors.el
index 8a62520d6c..12fe25fa4e 100644
--- a/admin/authors.el
+++ b/admin/authors.el
@@ -163,6 +163,7 @@ files.")
     ("Michael R. Cook" "Michael Cook")
     ("Michael Sperber" "Mike Sperber" "Michael Sperber \\[Mr. Preprocessor\\]")
     ("Michalis V" "^mvar")
+    ("Miha Rihtaršič" "Miha Rihtarsic")
     ("Mikio Nakajima" "Nakajima Mikio")
     ("Nelson Jose dos Santos Ferreira" "Nelson Ferreira")
     ("Noorul Islam" "Noorul Islam K M")
@@ -1882,7 +1883,7 @@ list of their contributions.\n")
                (insert "\n "))
            (insert " " file))
          (insert "\n")))))
-    (insert "\nLocal" " Variables:\nmode: etc-authors\ncoding: "
+    (insert "\nLocal" " Variables:\nmode: emacs-authors\ncoding: "
            (symbol-name authors-coding-system) "\nEnd:\n")
     (message "Generating buffer %s... done" buffer-name)
     (unless noninteractive
diff --git a/admin/automerge b/admin/automerge
index 415d717a99..9919186736 100755
--- a/admin/automerge
+++ b/admin/automerge
@@ -4,7 +4,7 @@
 ## Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
-## Maintainer: Stefan Kangas <stefan@marxist.se>
+## Maintainer: Stefan Kangas <stefankangas@gmail.com>
 
 ## This file is part of GNU Emacs.
 
diff --git a/admin/check-doc-strings b/admin/check-doc-strings
index 135090b34c..b119b50885 100755
--- a/admin/check-doc-strings
+++ b/admin/check-doc-strings
@@ -290,13 +290,7 @@ while (my $file = <FIND>) {
   }
 }
 
-my @pkgs;
-if (-d "../xemacs-packages") {
-  @pkgs = qw (libs/edebug libs/xemacs-base comm/eudc oa/edit-utils);
-} else {
-  @pkgs = ();
-}
-for (@pkgs) { s@^@../xemacs-packages/@; }
+my @pkgs = ();
 open (FIND, "find lisp @pkgs -name '*.el' -print |") or die;
 while (my $file = <FIND>) {
   my $contents = FileContents $file;
diff --git a/admin/coccinelle/window.cocci b/admin/coccinelle/window.cocci
index 1448febfcc..4543fb2ce1 100644
--- a/admin/coccinelle/window.cocci
+++ b/admin/coccinelle/window.cocci
@@ -106,9 +106,6 @@ Lisp_Object O;
 - W->column_number_displayed
 + WVAR (W, column_number_displayed)
 |
-- W->redisplay_end_trigger
-+ WVAR (W, redisplay_end_trigger)
-|
 - W->combination_limit
 + WVAR (W, combination_limit)
 |
@@ -225,9 +222,6 @@ Lisp_Object O;
 - XWINDOW (O)->column_number_displayed
 + WVAR (XWINDOW (O), column_number_displayed)
 |
-- XWINDOW (O)->redisplay_end_trigger
-+ WVAR (XWINDOW (O), redisplay_end_trigger)
-|
 - XWINDOW (O)->combination_limit
 + WVAR (XWINDOW (O), combination_limit)
 |
diff --git a/admin/emake b/admin/emake
index 6c778c85d4..8b2114b3f8 100755
--- a/admin/emake
+++ b/admin/emake
@@ -20,7 +20,7 @@ if [ -f /proc/cpuinfo ]; then
        sed 's/^[0-9]*/+/')))
 fi
 
-make -j$cores "$@" 2>&1 | \
+make FAST=true -j$cores "$@" 2>&1 | \
 sed -u 's# \.\./\.\./# #
 s# \.\./# #
 s#^Configuring local git # Configuring local git #
@@ -29,6 +29,7 @@ s#^Running # Running #
 s#^Configured for # Configured for #
 s#^./temacs.*#  \\& #
 s#^make.*Error#  \\& #
+s#^Dumping under the name.*#  \\& #
 ' | \
 grep -E --line-buffered -v "^make|\
 ^Loading|\
@@ -36,13 +37,13 @@ SCRAPE|\
 INFO.*Scraping.*[.] ?\$|\
 INFO.*Scraping.*done\$|\
 GEN.*etc/DOC|\
+GEN.*autoloads|\
 ^Waiting for git|\
 ^Finding pointers|\
 ^Using load-path|\
 ^Adding name|\
 ^Dump mode|\
 ^Dumping finger|\
-^Dumping under the name|\
 ^Byte counts|\
 ^Reloc counts|\
 ^Pure-hashed|\
diff --git a/admin/gitmerge.el b/admin/gitmerge.el
index 5da70a4028..25bed949ad 100644
--- a/admin/gitmerge.el
+++ b/admin/gitmerge.el
@@ -124,7 +124,7 @@ If nil, the function `gitmerge-default-branch' guesses.")
       (let ((coding-system-for-read vc-git-log-output-coding-system))
        (call-process "git" nil t nil "show" (format "%s:configure.ac" branch)))
       (goto-char (point-min)))
-    (re-search-forward "^AC_INIT([^,]+, \\([0-9]+\\)\\.")
+    (re-search-forward "^AC_INIT([^,]+, \\[?\\([0-9]+\\)\\.")
     (string-to-number (match-string 1))))
 
 (defun gitmerge-default-branch ()
@@ -135,7 +135,7 @@ If nil, the function `gitmerge-default-branch' guesses.")
 (defun gitmerge-get-sha1 ()
   "Get SHA1 from commit at point."
   (save-excursion
-    (goto-char (point-at-bol))
+    (goto-char (line-beginning-position))
     (when (looking-at "^[A-Z ]\\s-*\\([a-f0-9]+\\)")
       (match-string 1))))
 
@@ -187,7 +187,7 @@ If nil, the function `gitmerge-default-branch' guesses.")
        skip)
     (when commit
       (save-excursion
-       (goto-char (point-at-bol))
+        (goto-char (line-beginning-position))
        (when (looking-at "^\\([A-Z ]\\)\\s-*\\([a-f0-9]+\\)")
          (setq skip (string= (match-string 1) " "))
          (goto-char (match-beginning 2))
@@ -195,7 +195,7 @@ If nil, the function `gitmerge-default-branch' guesses.")
          (dolist (ct gitmerge--commits)
            (when (string-match commit (car ct))
              (setcdr ct (when skip "M"))))
-         (goto-char (point-at-bol))
+          (goto-char (line-beginning-position))
          (setq buffer-read-only nil)
          (delete-char 1)
          (insert (if skip "M" " "))
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index 02b4f318e2..a60fead267 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -15,8 +15,8 @@ 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 now done when cutting
-    the release branch, see admin/release-branch.txt.)
-    Commit cus-edit.el if changed.
+    the release branch, see admin/release-branch.txt, but it can't
+    hurt to double check its value.)  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).
@@ -24,8 +24,8 @@ Steps to take before starting on the first pretest in any 
release sequence:
 
 General steps (for each step, check for possible errors):
 
-1.   git pull     # fetch from the repository
-     git status   # check for locally modified files
+1.    git pull     # fetch from the repository
+      git status   # check for locally modified files
 
     Ensure that you have a clean, unmodified state.
     If you switched in-place from another branch to the release branch,
@@ -49,6 +49,9 @@ General steps (for each step, check for possible errors):
     files will end up in the tarball.  Otherwise, the *.eln files
     might not build correctly on the user's system.
 
+      ./autogen.sh
+      ./configure --with-native-compilation && make
+
     For a release (as opposed to pretest), delete any left-over "---"
     and "+++" markers from etc/NEWS, as well as the "Temporary note"
     section at the beginning of that file, and commit etc/NEWS if it
@@ -158,13 +161,15 @@ General steps (for each step, check for possible errors):
 
 5.  Copy lisp/loaddefs.el to lisp/ldefs-boot.el.
 
-    Commit ChangeLog.N, etc/AUTHORS, lisp/ldefs-boot.el, and the
-    files changed by M-x set-version.  The easiest way of doing that
-    is "C-x v d ROOT-DIR RET", then go to the first modified file,
-    press 'M' to mark all modified files, and finally 'v' to commit
-    them.  Make sure the commit log message mentions all the changes
-    in all modified files, as by default 'v' doesn't necessarily do
-    so.
+    Commit ChangeLog.N, etc/AUTHORS, lisp/ldefs-boot.el, and the files
+    changed by M-x set-version.  Note that the set-version changes
+    should be committed separately, as described in step 3 above.
+
+    The easiest way of doing that is "C-x v d ROOT-DIR RET", then go
+    to the first modified file, press 'M' to mark all modified files,
+    and finally 'v' to commit them.  Make sure the commit log message
+    mentions all the changes in all modified files, as by default 'v'
+    doesn't necessarily do so.
 
     If someone else made a commit between step 1 and now,
     you need to repeat from step 4 onwards.  (You can commit the files
@@ -178,9 +183,10 @@ General steps (for each step, check for possible errors):
     yourself, find it at <https://alpha.gnu.org/gnu/emacs/pretest>.
     Releases are of course at <https://ftp.gnu.org/pub/gnu/emacs/>.
 
-     ./admin/diff-tar-files emacs-OLD.tar.gz emacs-NEW.tar.gz
+     ./admin/diff-tar-files emacs-OLD.tar emacs-NEW.tar
 
-    Alternatively:
+    Alternatively, if you want to use the compressed tarballs (which
+    diff-tar-files doesn't understand):
 
      tar tJf emacs-OLD.tar.xz | sed -e 's,^[^/]*,,' | sort > old_tmp
      tar tJf emacs-NEW.tar.xz | sed -e 's,^[^/]*,,' | sort > new_tmp
@@ -198,7 +204,7 @@ General steps (for each step, check for possible errors):
     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
+7.   tar xf emacs-NEW.tar; cd emacs-NEW
      ./configure --prefix=/tmp/emacs && make check && make install
 
     Use 'script' or M-x compile to save the compilation log in
@@ -282,7 +288,8 @@ General steps (for each step, check for possible errors):
     https://alpha.gnu.org/gnu/emacs/pretest/ for a pretest, or
     https://ftp.gnu.org/gnu/emacs/ for a release.
 
-    Download them and check the signatures.  Check they build.
+    Download them and check the signatures and SHA1/SHA256 checksums.
+    Check they build (./configure --with-native-compilation).
 
 11. Send an announcement to: emacs-devel, and bcc: info-gnu-emacs@gnu.org.
     For a pretest, also bcc: platform-testers@gnu.org.
@@ -300,12 +307,20 @@ General steps (for each step, check for possible errors):
 
     To create the included SHA1 and SHA256 checksums, run:
 
-     sha1sum emacs-NEW.tar.xz
-     sha256sum emacs-NEW.tar.xz
+      sha1sum emacs-NEW.tar.xz
+      sha256sum emacs-NEW.tar.xz
+
+    You can optionally sign the announcement email, preferably using
+    the same PGP key that you used for signing the tarball.
+    (Use e.g. `M-x mml-secure-message-sign' in `message-mode' to sign
+    an email.)
 
 12. After a release, update the Emacs pages as described below.
 
-13. Bump the Emacs version on the release branch.
+13. After a release, bump the Emacs version on the release branch.
+    There is no need to bump the version after a pretest; the version
+    is bumped before the next pretest or release instead.
+
     If the released version was XX.Y, use 'set-version' from
     admin/admin.el to bump the version on the release branch to
     XX.Y.50.  Commit the changes.
@@ -313,8 +328,8 @@ General steps (for each step, check for possible errors):
 UPDATING THE EMACS WEB PAGES AFTER A RELEASE
 
 As soon as possible after a release, the Emacs web pages at
-https://www.gnu.org/software/emacs/ should be updated.  (See
-admin/notes/www for general information.)
+https://www.gnu.org/software/emacs/ should be updated.
+(See admin/notes/www for general information.)
 
 The pages to update are:
 
@@ -330,7 +345,7 @@ looks like this:
 
     <div class="release-banner">
        <div class="container">
-           <h2><em>Emacs 27.1 is out</em>, download it <a 
href="download.html">here</a>!</h2>
+           <h2><em>Emacs 28.1 is out</em>, download it <a 
href="download.html">here</a>!</h2>
        </div>
     </div>
 
diff --git a/admin/merge-gnulib b/admin/merge-gnulib
index ea3d23686f..4dd6a4d222 100755
--- a/admin/merge-gnulib
+++ b/admin/merge-gnulib
@@ -51,7 +51,7 @@ GNULIB_MODULES='
 '
 
 AVOIDED_MODULES='
-  btowc close crypto/af_alg dup fchdir fstat langinfo lock
+  btowc chmod close crypto/af_alg dup fchdir fstat langinfo lock
   mbrtowc mbsinit memchr mkdir msvc-inval msvc-nothrow nl_langinfo
   openat-die opendir pthread-h raise
   save-cwd select setenv sigprocmask stat stdarg stdbool
diff --git a/admin/notes/multi-tty b/admin/notes/multi-tty
index 9b3f1606a1..84bc1b77d4 100644
--- a/admin/notes/multi-tty
+++ b/admin/notes/multi-tty
@@ -474,7 +474,7 @@ THINGS TO DO
    definition.
 
    Exceptions found so far: x-select-text and
-   x-selection-value (old name: x-cut-buffer-or-selection-value).
+   x-selection-value.
 
 ** Have a look at fatal_error_hook.
 
diff --git a/admin/notes/spelling b/admin/notes/spelling
index b783227a37..b20f68bf62 100644
--- a/admin/notes/spelling
+++ b/admin/notes/spelling
@@ -6,6 +6,6 @@ Re "behavior" vs "behaviour", etc.
   for new text (code, docs), choose the US variant.
 
 - It's probably (IMHO --ttn, 2017-10-13) not a high priority to
-  change existing text; use your best judgement (ask if unsure).
+  change existing text; use your best judgment (ask if unsure).
 
 - https://lists.gnu.org/r/emacs-devel/2005-06/msg00489.html
diff --git a/admin/nt/dist-build/README-scripts 
b/admin/nt/dist-build/README-scripts
index 6b1adbe03e..e99fbe0706 100644
--- a/admin/nt/dist-build/README-scripts
+++ b/admin/nt/dist-build/README-scripts
@@ -131,7 +131,7 @@ The process is the same as for building from the master 
branch, except
 that the release branch should already exist as a worktree, and the
 version number must be added to the command line with `build-zips.sh
 -V 27 -s`.  The final zips will be named after the branch rather than
-the version (e.g emacs-27-2019-12-26.zip) rather than than the Emacs
+the version (e.g emacs-27-2019-12-26.zip) rather than the Emacs
 version (e.g emacs-27.0.50.zip).
 
 
diff --git a/admin/nt/dist-build/build-zips.sh 
b/admin/nt/dist-build/build-zips.sh
index 77d20a5a7b..39ac1fde60 100755
--- a/admin/nt/dist-build/build-zips.sh
+++ b/admin/nt/dist-build/build-zips.sh
@@ -148,7 +148,7 @@ done
 if [ -z $ACTUAL_VERSION ];
 then
     ACTUAL_VERSION=`
-  sed -n 's/^AC_INIT(GNU Emacs,[        ]*\([^  ,)]*\).*/\1/p' < 
../../../configure.ac
+  sed -n 's/^AC_INIT(\[*GNU Emacs]*,[   ]*\[*\([^]      ,)]*\).*/\1/p' < 
../../../configure.ac
 `
 fi
 
diff --git a/admin/quick-install-emacs b/admin/quick-install-emacs
index 9a73cf5a40..b0a1d34251 100755
--- a/admin/quick-install-emacs
+++ b/admin/quick-install-emacs
@@ -172,10 +172,10 @@ test x"$prefix" = x && { prefix="`get_config_var prefix`" 
|| exit 4 ; }
 test x"$ARCH" = x && { ARCH="`get_config_var host`" || exit 4 ; }
 
 VERSION=`
-  sed -n 's/^AC_INIT([  ]*emacs[        ]*,[    ]*\([^  ),]*\).*/\1/p' 
<$SRC/configure.ac
+  sed -n 's/^AC_INIT([  ]*\[*emacs]*[   ]*,[    ]*\[*\([^]      ),]*\).*/\1/p' 
<$SRC/configure.ac
 ` || exit 4
 test -n "$VERSION" || VERSION=`
-  sed -n 's/^AC_INIT([  ]*GNU Emacs[    ]*,[    ]*\([^  ),]*\).*/\1/p' 
<$SRC/configure.ac
+  sed -n 's/^AC_INIT([  ]*\[*GNU Emacs]*[       ]*,[    ]*\[*\([^]      
),]*\).*/\1/p' <$SRC/configure.ac
 ` || exit 4
 test -n "$VERSION" || { printf '%s\n' >&2 "$me: no version in configure.ac"; 
exit 4; }
 
diff --git a/admin/unidata/blocks.awk b/admin/unidata/blocks.awk
index 5f392b5ad3..1c571feff3 100755
--- a/admin/unidata/blocks.awk
+++ b/admin/unidata/blocks.awk
@@ -224,9 +224,14 @@ FILENAME ~ "emoji-data.txt" && /^[0-9A-F].*; 
Emoji_Presentation / {
 
 END {
     idx = 0
-    # ## These are here so that font_range can choose Emoji presentation
-    # ## for the preceding codepoint when it encounters a VS
-    override_start[idx] = "FE00"
+    ## This is here so that font_range can choose Emoji presentation
+    ## for the preceding codepoint when it encounters a VS-16
+    ## (U+FE0F).  See also font_range and the comments in composite.el
+    ## around the setup of `composition-function-table' for
+    ## U+FE00..U+FE0E.
+    ## It originally covered the whole FE00-FE0F range, but that
+    ## turned out to be a mistake.
+    override_start[idx] = "FE0F"
     override_end[idx] = "FE0F"
 
     for (k in override_start)
diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el
index 0a9fd5108c..78dd1c3728 100644
--- a/admin/unidata/unidata-gen.el
+++ b/admin/unidata/unidata-gen.el
@@ -1083,8 +1083,8 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
 
 (defun unidata--ensure-compiled (&rest funcs)
   (dolist (fun funcs)
-    (or (byte-code-function-p (symbol-function fun))
-       (byte-compile fun))))
+    (unless (compiled-function-p (symbol-function fun))
+      (byte-compile fun))))
 
 (defun unidata-gen-table-name (prop index &rest _ignore)
   (let* ((table (unidata-gen-table-word-list prop index 'unidata-split-name))
diff --git a/admin/update_autogen b/admin/update_autogen
index bfbf9d15c2..2451367171 100755
--- a/admin/update_autogen
+++ b/admin/update_autogen
@@ -4,7 +4,7 @@
 ## Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
-## Maintainer: emacs-devel@gnu.org
+## Maintainer: Stefan Kangas <stefankangas@gmail.com>
 
 ## This file is part of GNU Emacs.
 
@@ -81,7 +81,6 @@ ldefs_flag=1
 lboot_flag=
 
 ## Parameters.
-ldefs_in=lisp/loaddefs.el
 ldefs_out=lisp/ldefs-boot.el
 sources="configure.ac lib/Makefile.am"
 ## Files to copy into autogendir.
@@ -177,8 +176,6 @@ modified=$(status ${autogendir:+$sources} 
${ldefs_flag:+lisp}) || die
     echo "Running 'make maintainer-clean'..."
 
     make maintainer-clean #|| die "Cleaning error"
-
-    rm -f $ldefs_in
 }
 
 
@@ -289,18 +286,13 @@ make -C src "$@" bootstrap-emacs || die "make src error"
 
 echo "Running lisp/ make..."
 
-make -C lisp "$@" autoloads EMACS=../src/bootstrap-emacs || die "make src 
error"
-
+make -C lisp "$@" ldefs-boot.el EMACS=../src/bootstrap-emacs || die "make src 
error"
 
-## Ignore comment differences.
-[ ! "$lboot_flag" ] ||                      \
-    diff -q -I '^;' $ldefs_in $ldefs_out || \
-    cp $ldefs_in $ldefs_out || die "cp ldefs_boot error"
 
 # Refresh the prebuilt grammar-wy.el
 grammar_in=lisp/cedet/semantic/grammar-wy.el
 grammar_out=lisp/cedet/semantic/grm-wy-boot.el
-make -C admin/grammars/ ../../$grammar_in
+make -C admin/grammars/ ../../$grammar_in EMACS=../../src/bootstrap-emacs
 cp $grammar_in $grammar_out || die "cp grm_wy_boot error"
 
 
diff --git a/autogen.sh b/autogen.sh
index 03f647e576..041468edcd 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -35,7 +35,7 @@
 progs="autoconf"
 
 ## Minimum versions we need:
-autoconf_min=`sed -n 's/^ *AC_PREREQ(\([0-9\.]*\)).*/\1/p' configure.ac`
+autoconf_min=`sed -n 's/^ *AC_PREREQ(\[\([0-9\.]*\)]).*/\1/p' configure.ac`
 
 
 ## $1 = program, eg "autoconf".
diff --git a/build-aux/config.guess b/build-aux/config.guess
index 160ecf0951..1817bdce90 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -4,7 +4,7 @@
 
 # shellcheck disable=SC2006,SC2268 # see below for rationale
 
-timestamp='2022-05-08'
+timestamp='2022-05-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
@@ -1378,8 +1378,11 @@ EOF
     BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
        GUESS=i586-pc-haiku
        ;;
-    x86_64:Haiku:*:*)
-       GUESS=x86_64-unknown-haiku
+    ppc:Haiku:*:*)     # Haiku running on Apple PowerPC
+       GUESS=powerpc-apple-haiku
+       ;;
+    *:Haiku:*:*)       # Haiku modern gcc (not bound by BeOS compat)
+       GUESS=$UNAME_MACHINE-unknown-haiku
        ;;
     SX-4:SUPER-UX:*:*)
        GUESS=sx4-nec-superux$UNAME_RELEASE
diff --git a/build-aux/config.sub b/build-aux/config.sub
index 9b62e37c43..dba16e84c7 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2021 Free Software Foundation, Inc.
+#   Copyright 1992-2022 Free Software Foundation, Inc.
 
 # shellcheck disable=SC2006,SC2268 # see below for rationale
 
-timestamp='2021-12-25'
+timestamp='2022-01-03'
 
 # 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
@@ -76,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2021 Free Software Foundation, Inc.
+Copyright 1992-2022 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
diff --git a/config.bat b/config.bat
index e9a180c8ee..4adc477bc9 100644
--- a/config.bat
+++ b/config.bat
@@ -301,6 +301,7 @@ If Exist sys_time.in.h update sys_time.in.h sys_time.in-h
 If Exist sys_types.in.h update sys_types.in.h sys_types.in-h
 If Exist time.in.h update time.in.h time.in-h
 If Exist unistd.in.h update unistd.in.h unistd.in-h
+If Exist stdckdint.in.h update stdckdint.in.h stdckdint.in-h
 If Exist gnulib.mk.in update gnulib.mk.in gnulib.mk-in
 Rem Only repository has the msdos/autogen directory
 If Exist Makefile.in sed -f ../msdos/sedlibcf.inp < Makefile.in > makefile.tmp
diff --git a/configure.ac b/configure.ac
index a2b24e3961..43827e07a5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -21,9 +21,10 @@ dnl
 dnl  You should have received a copy of the GNU General Public License
 dnl  along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
-AC_PREREQ(2.65)
+AC_PREREQ([2.65])
 dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
-AC_INIT(GNU Emacs, 29.0.50, bug-gnu-emacs@gnu.org, , 
https://www.gnu.org/software/emacs/)
+AC_INIT([GNU Emacs], [29.0.50], [bug-gnu-emacs@gnu.org], [],
+  [https://www.gnu.org/software/emacs/])
 
 dnl Set emacs_config_options to the options of 'configure', quoted for the 
shell,
 dnl and then quoted again for a C string.  Separate options with spaces.
@@ -64,13 +65,13 @@ for opt in "$@" CFLAGS CPPFLAGS LDFLAGS; do
   optsep=' '
 done
 
-AC_CONFIG_HEADERS(src/config.h:src/config.in)
-AC_CONFIG_SRCDIR(src/lisp.h)
-AC_CONFIG_AUX_DIR(build-aux)
-AC_CONFIG_MACRO_DIR(m4)
+AC_CONFIG_HEADERS([src/config.h:src/config.in])
+AC_CONFIG_SRCDIR([src/lisp.h])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_MACRO_DIR([m4])
 
 xcsdkdir=
-AC_CHECK_PROGS(XCRUN, [xcrun])
+AC_CHECK_PROGS([XCRUN], [xcrun])
 if test -n "$XCRUN"; then
   if test -z "$MAKE"; then
     dnl Call the variable MAKE_PROG, not MAKE, to avoid confusion with
@@ -199,7 +200,7 @@ etcdocdir='${datadir}/emacs/${version}/etc'
 gamedir='${localstatedir}/games/emacs'
 
 dnl Special option to disable the most of other options.
-AC_ARG_WITH(all,
+AC_ARG_WITH([all],
 [AS_HELP_STRING([--without-all],
                [omit almost all features and build
                small executable with minimal dependencies])],
@@ -278,41 +279,45 @@ AC_ARG_WITH([pop],
      *) with_pop=no-by-default;;
    esac])
 if test "$with_pop" = yes; then
-   AC_DEFINE(MAIL_USE_POP)
+   AC_DEFINE([MAIL_USE_POP])
 fi
-AH_TEMPLATE(MAIL_USE_POP, [Define to support POP mail retrieval.])dnl
+AH_TEMPLATE([MAIL_USE_POP], [Define to support POP mail retrieval.])dnl
 
 OPTION_DEFAULT_OFF([kerberos],[support Kerberos-authenticated POP])
 if test "$with_kerberos" != no; then
-   AC_DEFINE(KERBEROS)
+   AC_DEFINE([KERBEROS])
 fi
-AH_TEMPLATE(KERBEROS,
+AH_TEMPLATE([KERBEROS],
            [Define to support Kerberos-authenticated POP mail retrieval.])dnl
 
 OPTION_DEFAULT_OFF([kerberos5],[support Kerberos version 5 authenticated POP])
 if test "${with_kerberos5}" != no; then
   if test "${with_kerberos}" = no; then
     with_kerberos=yes
-    AC_DEFINE(KERBEROS)
+    AC_DEFINE([KERBEROS])
   fi
-  AC_DEFINE(KERBEROS5, 1, [Define to use Kerberos 5 instead of Kerberos 4.])
+  AC_DEFINE([KERBEROS5], [1],
+    [Define to use Kerberos 5 instead of Kerberos 4.])
 fi
 
 OPTION_DEFAULT_OFF([hesiod],[support Hesiod to get the POP server host])
 dnl FIXME hesiod support may not be present, so it seems like an error
 dnl to define, or at least use, this unconditionally.
 if test "$with_hesiod" != no; then
-  AC_DEFINE(HESIOD, 1, [Define to support using a Hesiod database to find the 
POP server.])
+  AC_DEFINE([HESIOD], [1],
+    [Define to support using a Hesiod database to find the POP server.])
 fi
 
 OPTION_DEFAULT_OFF([mail-unlink],[unlink, rather than empty, mail spool after 
reading])
 if test "$with_mail_unlink" != no; then
-   AC_DEFINE(MAIL_UNLINK_SPOOL, 1, [Define to unlink, rather than empty, mail 
spool after reading.])
+   AC_DEFINE([MAIL_UNLINK_SPOOL], [1],
+     [Define to unlink, rather than empty, mail spool after reading.])
 fi
 
 AC_ARG_WITH([mailhost],[AS_HELP_STRING([--with-mailhost=HOSTNAME],
     [string giving default POP mail host])],
-    AC_DEFINE_UNQUOTED(MAILHOST, ["$withval"], [String giving fallback POP 
mail host.]))
+    AC_DEFINE_UNQUOTED([MAILHOST], ["$withval"],
+      [String giving fallback POP mail host.]))
 
 AC_ARG_WITH([sound],[AS_HELP_STRING([--with-sound=VALUE],
   [compile with sound support (VALUE one of: yes, alsa, oss, bsd-ossaudio, no;
@@ -395,7 +400,8 @@ if test "$with_dumping" = "unexec" && test "$with_unexec" = 
"no"; then
 fi
 
 if test "$with_pdumper" = "yes"; then
-  AC_DEFINE([HAVE_PDUMPER], 1, [Define to build with portable dumper support])
+  AC_DEFINE([HAVE_PDUMPER], [1],
+    [Define to build with portable dumper support])
   HAVE_PDUMPER=yes
 else
   HAVE_PDUMPER=no
@@ -403,7 +409,7 @@ fi
 AC_SUBST([HAVE_PDUMPER])
 
 DUMPING=$with_dumping
-AC_SUBST(DUMPING)
+AC_SUBST([DUMPING])
 
 dnl FIXME currently it is not the last.
 dnl This should be the last --with option, because --with-x is
@@ -436,7 +442,7 @@ OPTION_DEFAULT_OFF([wide-int],
    at the cost of 10% to 30% slowdown of Lisp interpreter
    and larger memory footprint])
 if test "$with_wide_int" = yes; then
-  AC_DEFINE([WIDE_EMACS_INT], 1, [Use long long for EMACS_INT if available.])
+  AC_DEFINE([WIDE_EMACS_INT], [1], [Use long long for EMACS_INT if available.])
 fi
 
 dnl _ON results in a '--without' option in the --help output, so
@@ -523,7 +529,7 @@ OPTION_DEFAULT_OFF([be-cairo],
   [enable use of cairo under Haiku's Application Kit])
 
 ## Makefile.in needs the cache file name.
-AC_SUBST(cache_file)
+AC_SUBST([cache_file])
 
 ## This is an option because I do not know if all info/man support
 ## compressed files, nor how to test if they do so.
@@ -531,7 +537,7 @@ OPTION_DEFAULT_ON([compress-install],
   [don't compress some files (.el, .info, etc.) when installing.  Equivalent 
to:
 make GZIP_PROG= install])
 
-AC_ARG_WITH(gameuser,dnl
+AC_ARG_WITH([gameuser],
 [AS_HELP_STRING([--with-gameuser=USER_OR_GROUP],
                [user for shared game score files.
                An argument prefixed by ':' specifies a group instead.])])
@@ -544,7 +550,7 @@ case ${with_gameuser} in
   *) gameuser=${with_gameuser} ;;
 esac
 
-AC_ARG_WITH([gnustep-conf],dnl
+AC_ARG_WITH([gnustep-conf],
 [AS_HELP_STRING([--with-gnustep-conf=FILENAME],
    [name of GNUstep configuration file to use on systems where the command
     'gnustep-config' does not work; default $GNUSTEP_CONFIG_FILE, or
@@ -554,24 +560,24 @@ test "X${with_gnustep_conf}" != X && test 
"${with_gnustep_conf}" != yes && \
 test "X$GNUSTEP_CONFIG_FILE" = "X" && \
      GNUSTEP_CONFIG_FILE=/etc/GNUstep/GNUstep.conf
 
-AC_ARG_ENABLE(ns-self-contained,
+AC_ARG_ENABLE([ns-self-contained],
 [AS_HELP_STRING([--disable-ns-self-contained],
                 [disable self contained build under NeXTstep])],
-   EN_NS_SELF_CONTAINED=$enableval,
-   EN_NS_SELF_CONTAINED=yes)
+   [EN_NS_SELF_CONTAINED=$enableval],
+   [EN_NS_SELF_CONTAINED=yes])
 
 locallisppathset=no
-AC_ARG_ENABLE(locallisppath,
+AC_ARG_ENABLE([locallisppath],
 [AS_HELP_STRING([--enable-locallisppath=PATH],
                 [directories Emacs should search for lisp files specific
                 to this site])],
-if test "${enableval}" = "no"; then
+[if test "${enableval}" = "no"; then
   locallisppath=
 elif test "${enableval}" != "yes"; then
   locallisppath=${enableval} locallisppathset=yes
-fi)
+fi])
 
-AC_ARG_ENABLE(checking,
+AC_ARG_ENABLE([checking],
 [AS_HELP_STRING([--enable-checking@<:@=LIST@:>@],
                [enable expensive checks.  With LIST,
                 enable only specific categories of checks.
@@ -604,17 +610,17 @@ do
        stringfreelist) ac_gc_check_string_free_list=1 ;;
        structs)        CHECK_STRUCTS=true ;;
        glyphs)         ac_glyphs_debug=1 ;;
-       *)      AC_MSG_ERROR(unknown check category $check) ;;
+       *)      AC_MSG_ERROR([unknown check category $check]) ;;
        esac
 done
 IFS="$ac_save_IFS"
 
 if test x$ac_enable_checking != x ; then
-  AC_DEFINE(ENABLE_CHECKING, 1,
+  AC_DEFINE([ENABLE_CHECKING], [1],
 [Define to 1 if expensive run-time data type and consistency checks are 
enabled.])
 fi
 if $CHECK_STRUCTS; then
-  AC_DEFINE([CHECK_STRUCTS], 1,
+  AC_DEFINE([CHECK_STRUCTS], [1],
     [Define this to check whether someone updated the portable dumper
      code after changing the layout of a structure that it uses.
      If you change one of these structures, check that the pdumper.c
@@ -623,21 +629,21 @@ if $CHECK_STRUCTS; then
 fi
 AC_SUBST([CHECK_STRUCTS])
 if test x$ac_gc_check_stringbytes != x ; then
-  AC_DEFINE(GC_CHECK_STRING_BYTES, 1,
+  AC_DEFINE([GC_CHECK_STRING_BYTES], [1],
 [Define this temporarily to hunt a bug.  If defined, the size of
    strings is redundantly recorded in sdata structures so that it can
    be compared to the sizes recorded in Lisp strings.])
 fi
 if test x$ac_gc_check_string_overrun != x ; then
-  AC_DEFINE(GC_CHECK_STRING_OVERRUN, 1,
+  AC_DEFINE([GC_CHECK_STRING_OVERRUN], [1],
 [Define this to check for short string overrun.])
 fi
 if test x$ac_gc_check_string_free_list != x ; then
-  AC_DEFINE(GC_CHECK_STRING_FREE_LIST, 1,
+  AC_DEFINE([GC_CHECK_STRING_FREE_LIST], [1],
 [Define this to check the string free list.])
 fi
 if test x$ac_glyphs_debug != x ; then
-  AC_DEFINE(GLYPH_DEBUG, 1,
+  AC_DEFINE([GLYPH_DEBUG], [1],
 [Define this to enable glyphs debugging code.])
 fi
 
@@ -645,7 +651,7 @@ dnl The name of this option is unfortunate.  It predates, 
and has no
 dnl relation to, the "sampling-based elisp profiler" added in 24.3.
 dnl Actually, it stops it working.
 dnl https://lists.gnu.org/r/emacs-devel/2012-11/msg00393.html
-AC_ARG_ENABLE(profiling,
+AC_ARG_ENABLE([profiling],
 [AS_HELP_STRING([--enable-profiling],
                [build emacs with low-level, gprof profiling support.
                 Mainly useful for debugging Emacs itself.  May not work on
@@ -656,15 +662,15 @@ if test x$ac_enable_profiling != x ; then
 else
    PROFILING_CFLAGS=
 fi
-AC_SUBST(PROFILING_CFLAGS)
+AC_SUBST([PROFILING_CFLAGS])
 
-AC_ARG_ENABLE(autodepend,
+AC_ARG_ENABLE([autodepend],
 [AS_HELP_STRING([--enable-autodepend],
                [automatically generate dependencies to .h-files.
                 Requires gcc, enabled if found.])],
 [ac_enable_autodepend="${enableval}"],[ac_enable_autodepend=yes])
 
-AC_ARG_ENABLE(gtk-deprecation-warnings,
+AC_ARG_ENABLE([gtk-deprecation-warnings],
 [AS_HELP_STRING([--enable-gtk-deprecation-warnings],
                [Show Gtk+/Gdk deprecation warnings for Gtk+ >= 3.0])],
 [ac_enable_gtk_deprecation_warnings="${enableval}"],[])
@@ -867,7 +873,7 @@ AC_DEFUN([_AC_PROG_CC_C89], [$2])
 dnl Sets GCC=yes if using gcc.
 AC_PROG_CC([gcc cc cl clang "$XCRUN gcc" "$XCRUN clang"])
 if test -n "$XCRUN"; then
-  AC_CHECK_PROGS(AR, [ar "$XCRUN ar"])
+  AC_CHECK_PROGS([AR], [ar "$XCRUN ar"])
   test -n "$AR" && export AR
 fi
 
@@ -1009,7 +1015,7 @@ AC_ARG_ENABLE([check-lisp-object-type],
      [Enable compile time checks for the Lisp_Object data type,
       which can catch some bugs during development.])])
 if test "$enable_check_lisp_object_type" = yes; then
-  AC_DEFINE([CHECK_LISP_OBJECT_TYPE], 1,
+  AC_DEFINE([CHECK_LISP_OBJECT_TYPE], [1],
     [Define to enable compile-time checks for the Lisp_Object data type.])
 fi
 
@@ -1158,7 +1164,7 @@ edit_cflags="
   s/^ //
 "
 
-AC_ARG_ENABLE(link-time-optimization,
+AC_ARG_ENABLE([link-time-optimization],
 [AS_HELP_STRING([--enable-link-time-optimization],
                 [build with link-time optimization
                 (experimental; see INSTALL)])],
@@ -1268,7 +1274,7 @@ fi
 rm -f conf$$ conf$$.file])
 LN_S_FILEONLY=$emacs_cv_ln_s_fileonly
 
-AC_SUBST(LN_S_FILEONLY)
+AC_SUBST([LN_S_FILEONLY])
 
 
 dnl AC_PROG_LN_S sets LN_S to 'cp -pR' for MinGW, on the premise that 'ln'
@@ -1287,13 +1293,13 @@ dnl if called via an absolute file name.
 dnl Use the entirely-identical-but-quieter ginstall-info instead if present.
 dnl Sadly some people may have an old ginstall-info installed on
 dnl non-Debian systems, so we can't use this.
-dnl AC_PATH_PROGS(INSTALL_INFO, [ginstall-info install-info], :,
-dnl   $PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin)
+dnl AC_PATH_PROGS([INSTALL_INFO], [ginstall-info install-info], [:],
+dnl   [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
 
-AC_PATH_PROG(INSTALL_INFO, install-info, :,
-  $PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin)
+AC_PATH_PROG([INSTALL_INFO], [install-info], [:],
+  [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
 dnl Don't use GZIP, which is used by gzip for additional parameters.
-AC_PATH_PROG(GZIP_PROG, gzip)
+AC_PATH_PROG([GZIP_PROG], [gzip])
 
 test $with_compress_install != yes && test -n "$GZIP_PROG" && \
    GZIP_PROG=" # $GZIP_PROG # (disabled by configure 
--without-compress-install)"
@@ -1362,7 +1368,7 @@ AC_SUBST([SETFATTR])
 
 # Makeinfo on macOS is ancient, check whether there is a more recent
 # version installed by Homebrew.
-AC_CHECK_PROGS(BREW, [brew])
+AC_CHECK_PROGS([BREW], [brew])
 if test -n "$BREW"; then
   AC_PATH_PROG([MAKEINFO], [makeinfo], [],
     [`$BREW --prefix texinfo 2>/dev/null`/bin$PATH_SEPARATOR$PATH])
@@ -1370,7 +1376,7 @@ fi
 
 # Check MacPorts on macOS.
 if test $opsys = darwin; then
-  AC_PATH_PROG(HAVE_MACPORTS, port)
+  AC_PATH_PROG([HAVE_MACPORTS], [port])
 fi
 
 ## Require makeinfo >= 4.13 (last of the 4.x series) to build the manuals.
@@ -1410,7 +1416,7 @@ if test $opsys = mingw32; then
 else
    DOCMISC_W32=
 fi
-AC_SUBST(DOCMISC_W32)
+AC_SUBST([DOCMISC_W32])
 
 dnl Add our options to ac_link now, after it is set up.
 
@@ -1469,7 +1475,7 @@ AC_CACHE_CHECK([whether addresses are sanitized],
      [emacs_cv_sanitize_address=no])])
 
 if test $with_unexec = yes; then
-  AC_DEFINE([HAVE_UNEXEC], 1, [Define if Emacs supports unexec.])
+  AC_DEFINE([HAVE_UNEXEC], [1], [Define if Emacs supports unexec.])
   if test "$emacs_cv_sanitize_address" = yes; then
     AC_MSG_WARN([[Addresses are sanitized; suggest --without-unexec]])
   fi
@@ -1506,7 +1512,7 @@ case "$opsys" in
    UNEXEC_OBJ=unexelf.o
    ;;
 esac
-AC_SUBST(UNEXEC_OBJ)
+AC_SUBST([UNEXEC_OBJ])
 
 LD_SWITCH_SYSTEM=
 test "$with_unexec" = no || case "$opsys" in
@@ -1536,7 +1542,7 @@ test "$with_unexec" = no || case "$opsys" in
    LD_SWITCH_SYSTEM="-Z"
    ;;
 esac
-AC_SUBST(LD_SWITCH_SYSTEM)
+AC_SUBST([LD_SWITCH_SYSTEM])
 
 ac_link="$ac_link $LD_SWITCH_SYSTEM"
 
@@ -1572,7 +1578,7 @@ case $canonical in
     fi
   ;;
 esac
-AC_SUBST(C_SWITCH_MACHINE)
+AC_SUBST([C_SWITCH_MACHINE])
 
 C_SWITCH_SYSTEM=
 ## Some programs in src produce warnings saying certain subprograms
@@ -1588,7 +1594,7 @@ if test "$opsys" = "mingw32"; then
 fi
 ## gnu-linux might need -D_BSD_SOURCE on old libc5 systems.
 ## It is redundant in glibc2, since we define _GNU_SOURCE.
-AC_SUBST(C_SWITCH_SYSTEM)
+AC_SUBST([C_SWITCH_SYSTEM])
 
 
 LIBS_SYSTEM=
@@ -1610,7 +1616,7 @@ case "$opsys" in
   haiku) LIBS_SYSTEM="-lnetwork" ;;
 esac
 
-AC_SUBST(LIBS_SYSTEM)
+AC_SUBST([LIBS_SYSTEM])
 
 ### Make sure subsequent tests use flags consistent with the build flags.
 
@@ -1718,8 +1724,8 @@ case $opsys in
 
 esac
 
-AC_SUBST(LIB_MATH)
-AC_DEFINE_UNQUOTED(SYSTEM_TYPE, "$SYSTEM_TYPE",
+AC_SUBST([LIB_MATH])
+AC_DEFINE_UNQUOTED([SYSTEM_TYPE], ["$SYSTEM_TYPE"],
   [The type of system you are compiling for; sets 'system-type'.])
 AC_SUBST([SYSTEM_TYPE])
 
@@ -1727,11 +1733,11 @@ AC_SUBST([SYSTEM_TYPE])
 pre_PKG_CONFIG_CFLAGS=$CFLAGS
 pre_PKG_CONFIG_LIBS=$LIBS
 
-PKG_PROG_PKG_CONFIG(0.9.0)
+PKG_PROG_PKG_CONFIG([0.9.0])
 
-dnl EMACS_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4)
-dnl acts like PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4,
-dnl HAVE_GSTUFF=yes, HAVE_GSTUFF=no) -- see pkg-config man page --
+dnl EMACS_CHECK_MODULES([GSTUFF], [gtk+-2.0 >= 1.3 glib = 1.3.4])
+dnl acts like PKG_CHECK_MODULES([GSTUFF], [gtk+-2.0 >= 1.3 glib = 1.3.4],
+dnl [HAVE_GSTUFF=yes], [HAVE_GSTUFF=no]) -- see pkg-config man page --
 dnl except that it postprocesses CFLAGS as needed for --enable-gcc-warnings.
 dnl EMACS_CHECK_MODULES accepts optional 3rd and 4th arguments that
 dnl can take the place of the default HAVE_GSTUFF=yes and HAVE_GSTUFF=no
@@ -1746,7 +1752,7 @@ HAVE_SOUND=no
 if test "${with_sound}" != "no"; then
   # Sound support for GNU/Linux, the free BSDs, MinGW, and Cygwin.
   AC_CHECK_HEADERS([machine/soundcard.h sys/soundcard.h soundcard.h 
mmsystem.h],
-    have_sound_header=yes, [], [
+    [have_sound_header=yes], [], [
     #ifdef __MINGW32__
     #define WIN32_LEAN_AND_MEAN
     #include <windows.h>
@@ -1757,13 +1763,13 @@ if test "${with_sound}" != "no"; then
 
   if test "${with_sound}" = "bsd-ossaudio" || test "${with_sound}" = "yes"; 
then
     # Emulation library used on NetBSD.
-    AC_CHECK_LIB(ossaudio, _oss_ioctl, LIBSOUND=-lossaudio, LIBSOUND=)
+    AC_CHECK_LIB([ossaudio], [_oss_ioctl], [LIBSOUND=-lossaudio], [LIBSOUND=])
     test "${with_sound}" = "bsd-ossaudio" && test -z "$LIBSOUND" && \
       AC_MSG_ERROR([bsd-ossaudio sound support requested but not found.])
     dnl FIXME?  If we did find ossaudio, should we set with_sound=bsd-ossaudio?
     dnl Traditionally, we go on to check for alsa too.  Does that make sense?
   fi
-  AC_SUBST(LIBSOUND)
+  AC_SUBST([LIBSOUND])
 
   if test "${with_sound}" = "alsa" || test "${with_sound}" = "yes"; then
     ALSA_REQUIRED=1.0.0
@@ -1772,7 +1778,7 @@ if test "${with_sound}" != "no"; then
     if test $HAVE_ALSA = yes; then
       LIBSOUND="$LIBSOUND $ALSA_LIBS"
       CFLAGS_SOUND="$CFLAGS_SOUND $ALSA_CFLAGS"
-      AC_DEFINE(HAVE_ALSA, 1, [Define to 1 if ALSA is available.])
+      AC_DEFINE([HAVE_ALSA], [1], [Define to 1 if ALSA is available.])
     elif test "${with_sound}" = "alsa"; then
       AC_MSG_ERROR([ALSA sound support requested but not found.])
     fi
@@ -1788,25 +1794,25 @@ if test "${with_sound}" != "no"; then
        dnl defined __FreeBSD__ || defined __NetBSD__ || defined __linux__
        dnl Adjust the --with-sound help text if you change this.
        gnu-linux|freebsd|netbsd|mingw32|cygwin)
-         AC_DEFINE(HAVE_SOUND, 1, [Define to 1 if you have sound support.])
+        AC_DEFINE([HAVE_SOUND], [1], [Define to 1 if you have sound support.])
          HAVE_SOUND=yes
          ;;
      esac
   fi
 
-  AC_SUBST(CFLAGS_SOUND)
+  AC_SUBST([CFLAGS_SOUND])
 fi
 
 dnl checks for header files
 AC_CHECK_HEADERS_ONCE(
-  linux/fs.h
+ [linux/fs.h
   malloc.h
   sys/systeminfo.h
   sys/sysinfo.h
   coff.h pty.h
   sys/resource.h
   sys/utsname.h pwd.h utmp.h util.h
-  sanitizer/lsan_interface.h)
+  sanitizer/lsan_interface.h])
 
 AC_CACHE_CHECK([for ADDR_NO_RANDOMIZE],
   [emacs_cv_personality_addr_no_randomize],
@@ -1833,10 +1839,11 @@ if test "$ac_cv_header_sys_sysinfo_h" = yes; then
     emacs_cv_linux_sysinfo=yes, emacs_cv_linux_sysinfo=no)])
 
   if test $emacs_cv_linux_sysinfo = yes; then
-    AC_DEFINE([HAVE_LINUX_SYSINFO], 1, [Define to 1 if you have Linux sysinfo 
function.])
+    AC_DEFINE([HAVE_LINUX_SYSINFO], [1],
+      [Define to 1 if you have Linux sysinfo function.])
     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/sysinfo.h>]],
                                        [[struct sysinfo si; return 
si.mem_unit]])],
-      AC_DEFINE(LINUX_SYSINFO_UNIT, 1,
+      AC_DEFINE([LINUX_SYSINFO_UNIT], [1],
                 [Define to 1 if Linux sysinfo sizes are in multiples of 
mem_unit bytes.]))
   fi
 fi
@@ -1844,19 +1851,20 @@ fi
 dnl On Solaris 8 there's a compilation warning for term.h because
 dnl it doesn't define 'bool'.
 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <term.h>]],[[]])],
-  AC_DEFINE(HAVE_TERM_H, 1, [Define to 1 if you have the <term.h> header 
file.]))
+  [AC_DEFINE([HAVE_TERM_H], [1],
+     [Define to 1 if you have the <term.h> header file.])])
 AC_HEADER_SYS_WAIT
 
-AC_CHECK_HEADERS_ONCE(sys/socket.h)
-AC_CHECK_HEADERS(net/if.h, , , [AC_INCLUDES_DEFAULT
+AC_CHECK_HEADERS_ONCE([sys/socket.h])
+AC_CHECK_HEADERS([net/if.h], [], [], [AC_INCLUDES_DEFAULT
 #if HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
 #endif])
-AC_CHECK_HEADERS(ifaddrs.h, , , [AC_INCLUDES_DEFAULT
+AC_CHECK_HEADERS([ifaddrs.h], [], [], [AC_INCLUDES_DEFAULT
 #if HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
 #endif])
-AC_CHECK_HEADERS(net/if_dl.h, , , [AC_INCLUDES_DEFAULT
+AC_CHECK_HEADERS([net/if_dl.h], [], [], [AC_INCLUDES_DEFAULT
 #if HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
 #endif])
@@ -1865,7 +1873,7 @@ dnl checks for structure members
 AC_CHECK_MEMBERS([struct ifreq.ifr_flags, struct ifreq.ifr_hwaddr,
                  struct ifreq.ifr_netmask, struct ifreq.ifr_broadaddr,
                  struct ifreq.ifr_addr,
-                 struct ifreq.ifr_addr.sa_len], , ,
+                 struct ifreq.ifr_addr.sa_len], [], [],
                 [AC_INCLUDES_DEFAULT
 #if HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
@@ -1895,7 +1903,7 @@ if test "$GCC" = yes && test "$ac_enable_autodepend" = 
yes; then
       AUTO_DEPEND=yes
    fi
 fi
-AC_SUBST(AUTO_DEPEND)
+AC_SUBST([AUTO_DEPEND])
 
 #### Choose a window system.
 
@@ -1945,7 +1953,7 @@ ${x_library}/X11/%T/%N%S"
     fi
   done
 fi
-AC_SUBST(LD_SWITCH_X_SITE_RPATH)
+AC_SUBST([LD_SWITCH_X_SITE_RPATH])
 
 if test "${x_includes}" != NONE && test -n "${x_includes}"; then
   C_SWITCH_X_SITE=$isystem`AS_ECHO(["$x_includes"]) | sed -e "s/:/ $isystem/g"`
@@ -2029,17 +2037,20 @@ if test "${with_ns}" != no; then
      dnl GNUstep defines BASE_NATIVE_OBJC_EXCEPTIONS to 0 or 1.
      dnl If they had chosen to either define it or not, we could have
      dnl just used AC_CHECK_DECL here.
-     AC_CACHE_CHECK(if GNUstep defines BASE_NATIVE_OBJC_EXCEPTIONS,
-       emacs_cv_objc_exceptions,
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <GNUstepBase/GSConfig.h>]],
+     AC_CACHE_CHECK([if GNUstep defines BASE_NATIVE_OBJC_EXCEPTIONS],
+       [emacs_cv_objc_exceptions],
+       [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM([[#include <GNUstepBase/GSConfig.h>]],
 [[#if defined BASE_NATIVE_OBJC_EXCEPTIONS && BASE_NATIVE_OBJC_EXCEPTIONS > 0
 1;
 #else
 fail;
-#endif]])], emacs_cv_objc_exceptions=yes, emacs_cv_objc_exceptions=no ) )
+#endif]])],
+       [emacs_cv_objc_exceptions=yes],
+       [emacs_cv_objc_exceptions=no])])
      if test $emacs_cv_objc_exceptions = yes; then
        dnl _NATIVE_OBJC_EXCEPTIONS is used by the GNUstep headers.
-       AC_DEFINE(_NATIVE_OBJC_EXCEPTIONS, 1,
+       AC_DEFINE([_NATIVE_OBJC_EXCEPTIONS], [1],
          [Define if GNUstep uses ObjC exceptions.])
        GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -fobjc-exceptions"
      fi
@@ -2076,8 +2087,8 @@ Either fix this, or re-configure with the option 
'--without-ns'.])])
 #endif
 #endif
                    ])],
-                   ns_osx_have_106=yes,
-                   ns_osx_have_106=no)
+                   [ns_osx_have_106=yes],
+                   [ns_osx_have_106=no])
     AC_MSG_RESULT([$ns_osx_have_106])
 
     if test $ns_osx_have_106 = no; then
@@ -2096,12 +2107,13 @@ Mac OS X 12.x or later.
                  [emacs_cv_macosx_12_0=yes]))
 
   if test "${with_native_image_api}" = yes; then
-     AC_DEFINE(HAVE_NATIVE_IMAGE_API, 1, [Define to use native OS APIs for 
images.])
+     AC_DEFINE([HAVE_NATIVE_IMAGE_API], [1],
+       [Define to use native OS APIs for images.])
      NATIVE_IMAGE_API="yes (ns)"
   fi
 fi
 
-AC_SUBST(LIBS_GNUSTEP)
+AC_SUBST([LIBS_GNUSTEP])
 
 INSTALL_ARCH_INDEP_EXTRA=install-etc
 ns_self_contained=no
@@ -2115,7 +2127,7 @@ if test "${HAVE_NS}" = yes; then
   window_system=nextstep
   # set up packaging dirs
   if test "${EN_NS_SELF_CONTAINED}" = yes; then
-     AC_DEFINE(NS_SELF_CONTAINED, 1, [Build an NS bundled app])
+     AC_DEFINE([NS_SELF_CONTAINED], [1], [Build an NS bundled app])
      ns_self_contained=yes
      prefix=${ns_appresdir}
      exec_prefix=${ns_appbindir}
@@ -2138,42 +2150,40 @@ if test "${HAVE_NS}" = yes; then
 fi
 CFLAGS="$tmp_CFLAGS"
 CPPFLAGS="$tmp_CPPFLAGS"
-AC_SUBST(INSTALL_ARCH_INDEP_EXTRA)
-AC_SUBST(ns_self_contained)
-AC_SUBST(NS_OBJ)
-AC_SUBST(NS_OBJC_OBJ)
+AC_SUBST([INSTALL_ARCH_INDEP_EXTRA])
+AC_SUBST([ns_self_contained])
+AC_SUBST([NS_OBJ])
+AC_SUBST([NS_OBJC_OBJ])
 
 if test "${HAVE_NS}" = yes; then
+  AC_LANG_PUSH([Objective C])
   AC_CACHE_CHECK(
     [if the Objective C compiler supports instancetype],
     [emacs_cv_objc_instancetype],
-    [AC_LANG_PUSH([Objective C])
-     AC_COMPILE_IFELSE(
+    [AC_COMPILE_IFELSE(
        [AC_LANG_SOURCE([[@interface Test
                           + (instancetype)test;
                           @end]])],
-       emacs_cv_objc_instancetype=yes,
-       emacs_cv_objc_instancetype=no)
-     AC_LANG_POP([Objective C])])
+       [emacs_cv_objc_instancetype=yes],
+       [emacs_cv_objc_instancetype=no])])
 
   if test x$emacs_cv_objc_instancetype = xyes ; then
-    AC_DEFINE(NATIVE_OBJC_INSTANCETYPE, 1,
+    AC_DEFINE([NATIVE_OBJC_INSTANCETYPE], [1],
               [Define if ObjC compiler supports instancetype natively.])
   fi
 
   AC_CACHE_CHECK(
     [if the Objective C compiler defaults to C99],
     [emacs_cv_objc_c99],
-    [AC_LANG_PUSH([Objective C])
-     AC_COMPILE_IFELSE(
+    [AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([], [[for (int i = 0;;);]])],
-       emacs_cv_objc_c99=yes,
-       emacs_cv_objc_c99=no)
-     AC_LANG_POP([Objective C])])
+       [emacs_cv_objc_c99=yes],
+       [emacs_cv_objc_c99=no])])
 
-   if test x$emacs_cv_objc_c99 = xno ; then
-     GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -std=c99"
-   fi
+  if test x$emacs_cv_objc_c99 = xno ; then
+    GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -std=c99"
+  fi
+  AC_LANG_POP([Objective C])
 fi
 
 HAVE_BE_APP=no
@@ -2190,7 +2200,7 @@ re-configure with the option '--without-be-app'.])])
    AC_LANG_POP([C++])
 fi
 
-AC_SUBST(HAVE_BE_APP)
+AC_SUBST([HAVE_BE_APP])
 
 HAVE_W32=no
 W32_OBJ=
@@ -2238,11 +2248,11 @@ NTLIB=
 CM_OBJ="cm.o"
 XARGS_LIMIT=
 if test "${HAVE_W32}" = "yes"; then
-  AC_DEFINE(HAVE_NTGUI, 1, [Define to use native MS Windows GUI.])
+  AC_DEFINE([HAVE_NTGUI], [1], [Define to use native MS Windows GUI.])
   if test "$with_toolkit_scroll_bars" = "no"; then
     AC_MSG_ERROR([Non-toolkit scroll bars are not implemented for w32 build.])
   fi
-  AC_CHECK_TOOL(WINDRES, [windres],
+  AC_CHECK_TOOL([WINDRES], [windres],
                 [AC_MSG_ERROR([No resource compiler found.])])
   W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o"
   W32_OBJ="$W32_OBJ w32xfns.o w32select.o w32uniscribe.o w32cygwinx.o"
@@ -2255,8 +2265,8 @@ if test "${HAVE_W32}" = "yes"; then
   comma_version=`echo "${PACKAGE_VERSION}.0.0" | sed -e 's/\./,/g' -e 
's/^\([[^,]]*,[[^,]]*,[[^,]]*,[[^,]]*\).*/\1/'`
 
   comma_space_version=`echo "$comma_version" | sed 's/,/, /g'`
-  AC_SUBST(comma_version)
-  AC_SUBST(comma_space_version)
+  AC_SUBST([comma_version])
+  AC_SUBST([comma_space_version])
   AC_CONFIG_FILES([nt/emacs.rc nt/emacsclient.rc])
   if test "${opsys}" = "cygwin"; then
     W32_LIBS="$W32_LIBS -lkernel32 -luser32 -lusp10 -lgdi32"
@@ -2269,7 +2279,8 @@ if test "${HAVE_W32}" = "yes"; then
     dnl FIXME: This should probably be supported for Cygwin/w32 as
     dnl well, but the Cygwin build needs to link against -lgdiplus
     if test "${with_native_image_api}" = yes; then
-      AC_DEFINE(HAVE_NATIVE_IMAGE_API, 1, [Define to use native OS APIs for 
images.])
+      AC_DEFINE([HAVE_NATIVE_IMAGE_API], [1],
+       [Define to use native OS APIs for images.])
       NATIVE_IMAGE_API="yes (w32)"
       W32_OBJ="$W32_OBJ w32image.o"
     fi
@@ -2293,20 +2304,20 @@ if test "${HAVE_W32}" = "no" && test "${opsys}" = 
"cygwin"; then
   W32_OBJ="w32cygwinx.o"
 fi
 
-AC_SUBST(W32_OBJ)
-AC_SUBST(W32_LIBS)
-AC_SUBST(EMACSRES)
-AC_SUBST(EMACS_MANIFEST)
-AC_SUBST(CLIENTRES)
-AC_SUBST(CLIENTW)
-AC_SUBST(W32_RES_LINK)
-AC_SUBST(FIRSTFILE_OBJ)
-AC_SUBST(NTDIR)
-AC_SUBST(CM_OBJ)
-AC_SUBST(LIBS_ECLIENT)
-AC_SUBST(LIB_WSOCK32)
-AC_SUBST(NTLIB)
-AC_SUBST(XARGS_LIMIT)
+AC_SUBST([W32_OBJ])
+AC_SUBST([W32_LIBS])
+AC_SUBST([EMACSRES])
+AC_SUBST([EMACS_MANIFEST])
+AC_SUBST([CLIENTRES])
+AC_SUBST([CLIENTW])
+AC_SUBST([W32_RES_LINK])
+AC_SUBST([FIRSTFILE_OBJ])
+AC_SUBST([NTDIR])
+AC_SUBST([CM_OBJ])
+AC_SUBST([LIBS_ECLIENT])
+AC_SUBST([LIB_WSOCK32])
+AC_SUBST([NTLIB])
+AC_SUBST([XARGS_LIMIT])
 
 if test "${HAVE_W32}" = "yes"; then
   window_system=w32
@@ -2323,7 +2334,7 @@ if test "$opsys" = "haiku"; then
 fi
 
 if test "${HAVE_BE_APP}" = "yes"; then
-  AC_DEFINE([HAVE_HAIKU], 1,
+  AC_DEFINE([HAVE_HAIKU], [1],
       [Define if Emacs will be built with Haiku windowing support])
 fi
 
@@ -2335,16 +2346,17 @@ if test "${HAVE_BE_APP}" = "yes"; then
   HAIKU_LIBS="-lbe -lgame -ltranslation -ltracker" # -lgame is needed for 
set_mouse_position.
 
   if test "${with_native_image_api}" = yes; then
-     AC_DEFINE(HAVE_NATIVE_IMAGE_API, 1, [Define to use native OS APIs for 
images.])
+     AC_DEFINE([HAVE_NATIVE_IMAGE_API], [1],
+       [Define to use native OS APIs for images.])
      NATIVE_IMAGE_API="yes (haiku)"
      HAIKU_OBJ="$HAIKU_OBJ haikuimage.o"
   fi
 fi
 
-AC_SUBST(HAIKU_LIBS)
-AC_SUBST(HAIKU_OBJ)
-AC_SUBST(HAIKU_CXX_OBJ)
-AC_SUBST(HAIKU_CFLAGS)
+AC_SUBST([HAIKU_LIBS])
+AC_SUBST([HAIKU_OBJ])
+AC_SUBST([HAIKU_CXX_OBJ])
+AC_SUBST([HAIKU_CFLAGS])
 
 ## $window_system is now set to the window system we will
 ## ultimately use.
@@ -2391,16 +2403,16 @@ dnl use the toolkit if we have gtk, or X11R5 or newer.
     with_gtk3=yes
     USE_X_TOOLKIT=none
     HAVE_PGTK=yes
-    AC_DEFINE([HAVE_PGTK], 1, [Define to 1 if you have pure Gtk+-3.])
+    AC_DEFINE([HAVE_PGTK], [1], [Define to 1 if you have pure Gtk+-3.])
   ;;
   haiku )
     term_header=haikuterm.h
   ;;
 esac
-AC_SUBST(HAVE_PGTK)
+AC_SUBST([HAVE_PGTK])
 
 if test "$window_system" = none && test "X$with_x" != "Xno"; then
-   AC_CHECK_PROG(HAVE_XSERVER, X, true, false)
+   AC_CHECK_PROG([HAVE_XSERVER], [X], [true], [false])
    if test "$HAVE_XSERVER" = true ||
       test -n "$DISPLAY" ||
       {
@@ -2464,7 +2476,7 @@ fi
 GMALLOC_OBJ=
 HYBRID_MALLOC=
 if test "${system_malloc}" = "yes"; then
-  AC_DEFINE([SYSTEM_MALLOC], 1,
+  AC_DEFINE([SYSTEM_MALLOC], [1],
     [Define to 1 to use the system memory allocator, even if it is not
      Doug Lea style.])
   GNU_MALLOC=no
@@ -2472,7 +2484,7 @@ if test "${system_malloc}" = "yes"; then
     (The GNU allocators don't work with this system configuration.)"
   VMLIMIT_OBJ=
 elif test "$hybrid_malloc" = yes; then
-  AC_DEFINE(HYBRID_MALLOC, 1,
+  AC_DEFINE([HYBRID_MALLOC], [1],
     [Define to use gmalloc before dumping and the system malloc after.])
   HYBRID_MALLOC=1
   GNU_MALLOC=no
@@ -2492,21 +2504,21 @@ else
        [emacs_cv_data_start=yes],
        [emacs_cv_data_start=no])])
   if test $emacs_cv_data_start = yes; then
-    AC_DEFINE([HAVE_DATA_START], 1,
+    AC_DEFINE([HAVE_DATA_START], [1],
       [Define to 1 if data_start is the address of the start
        of the main data segment.])
   fi
 fi
 AC_SUBST([HYBRID_MALLOC])
-AC_SUBST(GMALLOC_OBJ)
-AC_SUBST(VMLIMIT_OBJ)
+AC_SUBST([GMALLOC_OBJ])
+AC_SUBST([VMLIMIT_OBJ])
 
 if test "$doug_lea_malloc" = "yes" && test "$hybrid_malloc" != yes; then
   if test "$GNU_MALLOC" = yes ; then
     GNU_MALLOC_reason="
       (Using Doug Lea's new malloc from the GNU C Library.)"
   fi
-  AC_DEFINE(DOUG_LEA_MALLOC, 1,
+  AC_DEFINE([DOUG_LEA_MALLOC], [1],
     [Define to 1 if the system memory allocator is Doug Lea style,
      with malloc hooks and malloc_set_state.])
 
@@ -2530,18 +2542,19 @@ esac
 
 AC_FUNC_MMAP
 if test $use_mmap_for_buffers = yes; then
-  AC_DEFINE(USE_MMAP_FOR_BUFFERS, 1, [Define to use mmap to allocate buffer 
text.])
+  AC_DEFINE([USE_MMAP_FOR_BUFFERS], [1],
+    [Define to use mmap to allocate buffer text.])
   REL_ALLOC=no
 fi
 
 LIBS="$LIBS_SYSTEM $LIBS"
 
 dnl FIXME replace main with a function we actually want from this library.
-AC_CHECK_LIB(Xbsd, main, LD_SWITCH_X_SITE="$LD_SWITCH_X_SITE -lXbsd")
+AC_CHECK_LIB([Xbsd], [main], [LD_SWITCH_X_SITE="$LD_SWITCH_X_SITE -lXbsd"])
 
 dnl Check for the POSIX thread library.
 LIB_PTHREAD=
-AC_CHECK_HEADERS_ONCE(pthread.h)
+AC_CHECK_HEADERS_ONCE([pthread.h])
 if test "$ac_cv_header_pthread_h" && test "$opsys" != "mingw32"; then
   AC_CACHE_CHECK([for pthread library],
     [emacs_cv_pthread_lib],
@@ -2576,7 +2589,7 @@ if test "$ac_cv_header_pthread_h" && test "$opsys" != 
"mingw32"; then
        fi
      done])
   if test "$emacs_cv_pthread_lib" != no; then
-    AC_DEFINE([HAVE_PTHREAD], 1, [Define to 1 if you have POSIX threads.])
+    AC_DEFINE([HAVE_PTHREAD], [1], [Define to 1 if you have POSIX threads.])
     case $emacs_cv_pthread_lib in
       -*) LIB_PTHREAD=$emacs_cv_pthread_lib;;
     esac
@@ -2586,10 +2599,10 @@ if test "$ac_cv_header_pthread_h" && test "$opsys" != 
"mingw32"; then
     # definition of 'errno' in <errno.h>.
     case $opsys in
       hpux* | solaris)
-       AC_DEFINE([_REENTRANT], 1,
+       AC_DEFINE([_REENTRANT], [1],
          [Define to 1 if your system requires this in multithreaded code.]);;
       aix4-2)
-       AC_DEFINE([_THREAD_SAFE], 1,
+       AC_DEFINE([_THREAD_SAFE], [1],
          [Define to 1 if your system requires this in multithreaded code.]);;
     esac
   fi
@@ -2600,12 +2613,12 @@ AC_MSG_CHECKING([for thread support])
 threads_enabled=no
 if test "$with_threads" = yes; then
    if test "$emacs_cv_pthread_lib" != no; then
-      AC_DEFINE(THREADS_ENABLED, 1,
+      AC_DEFINE([THREADS_ENABLED], [1],
                 [Define to 1 if you want elisp thread support.])
       threads_enabled=yes
    elif test "${opsys}" = "mingw32"; then
       dnl MinGW can do native Windows threads even without pthreads
-      AC_DEFINE(THREADS_ENABLED, 1,
+      AC_DEFINE([THREADS_ENABLED], [1],
                 [Define to 1 if you want elisp thread support.])
       threads_enabled=yes
    fi
@@ -2690,40 +2703,42 @@ if test "${HAVE_X11}" = "yes"; then
   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <X11/Xlib.h>
 #include <X11/XKBlib.h>]],
        [[XkbDescPtr kb = XkbGetKeyboard (0, XkbAllComponentsMask, 
XkbUseCoreKbd);]])],
-       emacs_cv_xkb=yes, emacs_cv_xkb=no)])
+       [emacs_cv_xkb=yes],
+       [emacs_cv_xkb=no])])
   if test $emacs_cv_xkb = yes; then
-    AC_DEFINE(HAVE_XKB, 1, [Define to 1 if you have the Xkb extension.])
-    AC_CHECK_FUNCS(XkbRefreshKeyboardMapping XkbFreeNames)
+    AC_DEFINE([HAVE_XKB], [1], [Define to 1 if you have the Xkb extension.])
+    AC_CHECK_FUNCS([XkbRefreshKeyboardMapping XkbFreeNames])
   fi
 
-  AC_CHECK_FUNCS(XrmSetDatabase XScreenResourceString XScreenNumberOfScreen)
-  AC_CHECK_FUNCS(XDisplayCells XDestroySubwindows)
+  AC_CHECK_FUNCS([XrmSetDatabase XScreenResourceString XScreenNumberOfScreen])
+  AC_CHECK_FUNCS([XDisplayCells XDestroySubwindows])
 fi
 
 if test "${window_system}" = "x11"; then
-  AC_MSG_CHECKING(X11 version 6)
-  AC_CACHE_VAL(emacs_cv_x11_version_6,
+  AC_MSG_CHECKING([X11 version 6])
+  AC_CACHE_VAL([emacs_cv_x11_version_6],
   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <X11/Xlib.h>]],
 [[#if XlibSpecificationRelease < 6
 fail;
 #endif
-]])], emacs_cv_x11_version_6=yes, emacs_cv_x11_version_6=no)])
+]])], [emacs_cv_x11_version_6=yes],
+      [emacs_cv_x11_version_6=no])])
   if test $emacs_cv_x11_version_6 = yes; then
-    AC_MSG_RESULT(6 or newer)
-    AC_DEFINE(HAVE_X11R6, 1,
+    AC_MSG_RESULT([6 or newer])
+    AC_DEFINE([HAVE_X11R6], [1],
              [Define to 1 if you have the X11R6 or newer version of Xlib.])
-    AC_DEFINE(HAVE_X_I18N, 1, [Define if you have usable i18n support.])
+    AC_DEFINE([HAVE_X_I18N], [1], [Define if you have usable i18n support.])
     AC_CHECK_MEMBERS([XICCallback.callback], [], [], [#include <X11/Xlib.h>])
     ## inoue@ainet.or.jp says Solaris has a bug related to X11R6-style
     ## XIM support.
     case "$opsys" in
       solaris) : ;;
-      *) AC_DEFINE(HAVE_X11R6_XIM, 1,
+      *) AC_DEFINE([HAVE_X11R6_XIM], [1],
            [Define if you have usable X11R6-style XIM support.])
          ;;
     esac
   else
-    AC_MSG_RESULT(before 6)
+    AC_MSG_RESULT([before 6])
   fi
 fi
 
@@ -2738,11 +2753,11 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = 
"yes" \
     RSVG_MODULE="librsvg-2.0 >= $RSVG_REQUIRED"
 
     EMACS_CHECK_MODULES([RSVG], [$RSVG_MODULE])
-    AC_SUBST(RSVG_CFLAGS)
-    AC_SUBST(RSVG_LIBS)
+    AC_SUBST([RSVG_CFLAGS])
+    AC_SUBST([RSVG_LIBS])
 
     if test $HAVE_RSVG = yes; then
-      AC_DEFINE(HAVE_RSVG, 1, [Define to 1 if using librsvg.])
+      AC_DEFINE([HAVE_RSVG], [1], [Define to 1 if using librsvg.])
       CFLAGS="$CFLAGS $RSVG_CFLAGS"
       # Windows loads librsvg dynamically
       if test "${opsys}" = "mingw32"; then
@@ -2759,17 +2774,14 @@ if test "${with_webp}" != "no"; then
    || test "${HAVE_W32}" = "yes" || test "${HAVE_NS}" = "yes" \
    || test "${HAVE_BE_APP}" = "yes" || test "${HAVE_PGTK}" = "yes"; then
       WEBP_REQUIRED=0.6.0
-      WEBP_MODULE="libwebp >= $WEBP_REQUIRED"
+      WEBP_MODULE="libwebpdemux >= $WEBP_REQUIRED"
 
       EMACS_CHECK_MODULES([WEBP], [$WEBP_MODULE])
-      if test "$HAVE_WEBP" = "yes"; then
-        WEBP_LIBS="-lwebp -lwebpdemux"
-      fi
-      AC_SUBST(WEBP_CFLAGS)
-      AC_SUBST(WEBP_LIBS)
+      AC_SUBST([WEBP_CFLAGS])
+      AC_SUBST([WEBP_LIBS])
    fi
    if test $HAVE_WEBP = yes; then
-      AC_DEFINE(HAVE_WEBP, 1, [Define to 1 if using libwebp.])
+      AC_DEFINE([HAVE_WEBP], [1], [Define to 1 if using libwebp.])
       CFLAGS="$CFLAGS $WEBP_CFLAGS"
       # Windows loads libwebp dynamically
       if test "${opsys}" = "mingw32"; then
@@ -2781,20 +2793,25 @@ 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)
+   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)
+     AC_SUBST([SQLITE3_LIBS])
      LIBS="$SQLITE3_LIBS $LIBS"
-     AC_DEFINE(HAVE_SQLITE3, 1, [Define to 1 if you have the libsqlite3 
library (-lsqlite).])
+     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)
+     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.])
+       AC_DEFINE([HAVE_SQLITE3_LOAD_EXTENSION], [1],
+        [Define to 1 if sqlite3 supports loading extensions.])
      fi
    fi
 fi
@@ -2811,7 +2828,8 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = 
"yes" || test "${HAVE_W32}"
 
     EMACS_CHECK_MODULES([IMAGEMAGICK], [MagickWand >= 7])
     if test $HAVE_IMAGEMAGICK = yes; then
-       AC_DEFINE([HAVE_IMAGEMAGICK7], 1, [Define to 1 if using ImageMagick7.])
+       AC_DEFINE([HAVE_IMAGEMAGICK7], [1],
+        [Define to 1 if using ImageMagick7.])
     else
        ## 6.3.5 is the earliest version known to work; see Bug#17339.
        ## 6.8.2 makes Emacs crash; see Bug#13867.
@@ -2835,7 +2853,7 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = 
"yes" || test "${HAVE_W32}"
       fi
     fi
     if test $HAVE_IMAGEMAGICK = yes; then
-      AC_DEFINE([HAVE_IMAGEMAGICK], 1, [Define to 1 if using ImageMagick.])
+      AC_DEFINE([HAVE_IMAGEMAGICK], [1], [Define to 1 if using ImageMagick.])
     else
       if test "${with_imagemagick}" != "no"; then
         AC_MSG_ERROR([ImageMagick wanted, but it does not compile.  Maybe some 
library files are missing?]);
@@ -2848,12 +2866,12 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = 
"yes" || test "${HAVE_W32}"
   fi
 fi
 
-AC_CHECK_LIB(anl, getaddrinfo_a, HAVE_GETADDRINFO_A=yes)
+AC_CHECK_LIB([anl], [getaddrinfo_a], [HAVE_GETADDRINFO_A=yes])
 if test "${HAVE_GETADDRINFO_A}" = "yes"; then
-  AC_DEFINE(HAVE_GETADDRINFO_A, 1,
+  AC_DEFINE([HAVE_GETADDRINFO_A], [1],
 [Define to 1 if you have getaddrinfo_a for asynchronous DNS resolution.])
   GETADDRINFO_A_LIBS="-lanl"
-  AC_SUBST(GETADDRINFO_A_LIBS)
+  AC_SUBST([GETADDRINFO_A_LIBS])
 fi
 
 HAVE_GTK=no
@@ -2867,7 +2885,7 @@ if test "${opsys}" != "mingw32"; then
     if test "${window_system}" = "x11"; then
       GTK_REQUIRED=3.10
     else
-      GTK_REQUIRED=3.20
+      GTK_REQUIRED=3.22.23
     fi
     GTK_MODULES="gtk+-3.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED"
 
@@ -2875,10 +2893,10 @@ if test "${opsys}" != "mingw32"; then
     EMACS_CHECK_MODULES([GTK], [$GTK_MODULES],
       [pkg_check_gtk=yes], [pkg_check_gtk=no])
     if test "$pkg_check_gtk" = "no" && test "$with_gtk3" = "yes"; then
-       AC_MSG_ERROR($GTK_PKG_ERRORS)
+       AC_MSG_ERROR([$GTK_PKG_ERRORS])
     fi
     if test "$pkg_check_gtk" = "yes"; then
-       AC_DEFINE(HAVE_GTK3, 1, [Define to 1 if using GTK 3 or later.])
+       AC_DEFINE([HAVE_GTK3], [1], [Define to 1 if using GTK 3 or later.])
        GTK_OBJ=emacsgtkfixed.o
        gtk_term_header=gtkutil.h
        USE_GTK_TOOLKIT="GTK3"
@@ -2905,7 +2923,7 @@ if test "${opsys}" != "mingw32"; then
     if test "$pkg_check_gtk" = "no" &&
        { test "$with_gtk" = yes || test "$with_gtk2" = "yes"; }
     then
-      AC_MSG_ERROR($gtk3_pkg_errors$GTK_PKG_ERRORS)
+      AC_MSG_ERROR([$gtk3_pkg_errors$GTK_PKG_ERRORS])
     fi
     test "$pkg_check_gtk" = "yes" && USE_GTK_TOOLKIT="GTK2"
   fi
@@ -2916,7 +2934,7 @@ OLD_LIBS=$LIBS
 
 if test x"$pkg_check_gtk" = xyes; then
 
-  AC_SUBST(GTK_LIBS)
+  AC_SUBST([GTK_LIBS])
   CFLAGS="$CFLAGS $GTK_CFLAGS"
   LIBS="$GTK_LIBS $LIBS"
   dnl Try to compile a simple GTK program.
@@ -2948,7 +2966,7 @@ if test x"$pkg_check_gtk" = xyes; then
   else
     C_SWITCH_X_SITE="$C_SWITCH_X_SITE $GTK_CFLAGS"
     HAVE_GTK=yes
-    AC_DEFINE(USE_GTK, 1, [Define to 1 if using GTK.])
+    AC_DEFINE([USE_GTK], [1], [Define to 1 if using GTK.])
     GTK_OBJ="gtkutil.o $GTK_OBJ"
     term_header=$gtk_term_header
     USE_X_TOOLKIT=none
@@ -2960,7 +2978,7 @@ if test x"$pkg_check_gtk" = xyes; then
   fi
 
 fi
-AC_SUBST(GTK_OBJ)
+AC_SUBST([GTK_OBJ])
 
 
 if test "${HAVE_GTK}" = "yes"; then
@@ -2980,15 +2998,17 @@ if test "${HAVE_GTK}" = "yes"; then
     dnl  but not declared if deprecated featured has been selected out.
     dnl  AC_CHECK_DECL checks for a macro, so check for 
GTK_TYPE_FILE_SELECTION.
     HAVE_GTK_FILE_SELECTION=no
-    AC_CHECK_DECL(GTK_TYPE_FILE_SELECTION, HAVE_GTK_FILE_SELECTION=yes,
-                     HAVE_GTK_FILE_SELECTION=no, [AC_INCLUDES_DEFAULT
+    AC_CHECK_DECL([GTK_TYPE_FILE_SELECTION],
+                 [HAVE_GTK_FILE_SELECTION=yes],
+                 [HAVE_GTK_FILE_SELECTION=no],
+                 [AC_INCLUDES_DEFAULT
 #include <gtk/gtk.h>])
     if test "$HAVE_GTK_FILE_SELECTION" = yes; then
-      AC_CHECK_FUNCS(gtk_file_selection_new)
+      AC_CHECK_FUNCS([gtk_file_selection_new])
     fi
 
     dnl This procedure causes a bug on certain Ubuntu GTK+2 builds
-    AC_CHECK_FUNCS(gtk_window_set_has_resize_grip)
+    AC_CHECK_FUNCS([gtk_window_set_has_resize_grip])
   fi
 fi
 
@@ -3001,10 +3021,10 @@ 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)
+AC_SUBST([PGTK_OBJ])
+AC_SUBST([PGTK_LIBS])
 
-AC_CHECK_FUNCS(malloc_trim)
+AC_CHECK_FUNCS([malloc_trim])
 
 dnl D-Bus has been tested under GNU/Linux only.  Must be adapted for
 dnl other platforms.
@@ -3013,25 +3033,25 @@ DBUS_OBJ=
 if test "${with_dbus}" = "yes"; then
    EMACS_CHECK_MODULES([DBUS], [dbus-1 >= 1.0])
    if test "$HAVE_DBUS" = yes; then
-     AC_DEFINE(HAVE_DBUS, 1, [Define to 1 if using D-Bus.])
+     AC_DEFINE([HAVE_DBUS], [1], [Define to 1 if using D-Bus.])
      dnl dbus_watch_get_unix_fd has been introduced in D-Bus 1.1.1.
      dnl dbus_type_is_valid and dbus_validate_* have been introduced in
      dnl D-Bus 1.5.12.
      OLD_LIBS=$LIBS
      LIBS="$LIBS $DBUS_LIBS"
-     AC_CHECK_FUNCS(dbus_watch_get_unix_fd \
+     AC_CHECK_FUNCS([dbus_watch_get_unix_fd \
                    dbus_type_is_valid \
                    dbus_validate_bus_name \
                     dbus_validate_path \
                    dbus_validate_interface \
-                   dbus_validate_member)
+                   dbus_validate_member])
      LIBS=$OLD_LIBS
      DBUS_OBJ=dbusbind.o
    fi
 fi
-AC_SUBST(DBUS_CFLAGS)
-AC_SUBST(DBUS_LIBS)
-AC_SUBST(DBUS_OBJ)
+AC_SUBST([DBUS_CFLAGS])
+AC_SUBST([DBUS_LIBS])
+AC_SUBST([DBUS_OBJ])
 
 dnl GSettings has been tested under GNU/Linux only.
 HAVE_GSETTINGS=no
@@ -3056,7 +3076,7 @@ if test "${HAVE_X11}" = "yes" -o "${window_system}" = 
"pgtk" && test "${with_gse
        [emacs_cv_gsettings_in_gio=yes], [emacs_cv_gsettings_in_gio=no])])
 
       if test "$emacs_cv_gsettings_in_gio" = "yes"; then
-        AC_DEFINE(HAVE_GSETTINGS, 1, [Define to 1 if using GSettings.])
+       AC_DEFINE([HAVE_GSETTINGS], [1], [Define to 1 if using GSettings.])
        SETTINGS_CFLAGS="$GSETTINGS_CFLAGS"
        SETTINGS_LIBS="$GSETTINGS_LIBS"
        test "$with_gconf" = "yes" || with_gconf=no
@@ -3065,7 +3085,7 @@ if test "${HAVE_X11}" = "yes" -o "${window_system}" = 
"pgtk" && test "${with_gse
       LIBS=$old_LIBS
    fi
 fi
-AC_SUBST(HAVE_GSETTINGS)
+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.
@@ -3073,7 +3093,7 @@ HAVE_GCONF=no
 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.])
+      AC_DEFINE([HAVE_GCONF], [1], [Define to 1 if using GConf.])
       dnl Newer GConf doesn't link with g_objects, so this is not defined.
       SETTINGS_CFLAGS="$SETTINGS_CFLAGS $GCONF_CFLAGS"
       SETTINGS_LIBS="$SETTINGS_LIBS $GCONF_LIBS"
@@ -3093,33 +3113,35 @@ if test "$HAVE_GSETTINGS" = "yes" || test "$HAVE_GCONF" 
= "yes"; then
     CFLAGS="$SAVE_CFLAGS"
     LIBS="$SAVE_LIBS"
 fi
-AC_SUBST(SETTINGS_CFLAGS)
-AC_SUBST(SETTINGS_LIBS)
+AC_SUBST([SETTINGS_CFLAGS])
+AC_SUBST([SETTINGS_LIBS])
 
 USE_STARTUP_NOTIFICATION=no
 if test "${HAVE_GTK}" = "yes"; then
     USE_STARTUP_NOTIFICATION=yes
 fi
-AC_SUBST(USE_STARTUP_NOTIFICATION)
+AC_SUBST([USE_STARTUP_NOTIFICATION])
 
 dnl SELinux is available for GNU/Linux only.
 HAVE_LIBSELINUX=no
 LIBSELINUX_LIBS=
 if test "${with_selinux}" = "yes"; then
-   AC_CHECK_LIB([selinux], [lgetfilecon], HAVE_LIBSELINUX=yes, 
HAVE_LIBSELINUX=no)
+   AC_CHECK_LIB([selinux], [lgetfilecon],
+     [HAVE_LIBSELINUX=yes],
+     [HAVE_LIBSELINUX=no])
    if test "$HAVE_LIBSELINUX" = yes; then
-      AC_DEFINE(HAVE_LIBSELINUX, 1, [Define to 1 if using SELinux.])
+      AC_DEFINE([HAVE_LIBSELINUX], [1], [Define to 1 if using SELinux.])
       LIBSELINUX_LIBS=-lselinux
    fi
 fi
-AC_SUBST(LIBSELINUX_LIBS)
+AC_SUBST([LIBSELINUX_LIBS])
 
 HAVE_GNUTLS=no
 if test "${with_gnutls}" != "no" ; then
   EMACS_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.12.2],
     [HAVE_GNUTLS=yes], [HAVE_GNUTLS=no])
   if test "${HAVE_GNUTLS}" = "yes"; then
-    AC_DEFINE(HAVE_GNUTLS, 1, [Define if using GnuTLS.])
+    AC_DEFINE([HAVE_GNUTLS], [1], [Define if using GnuTLS.])
   fi
 
   # Windows loads GnuTLS dynamically
@@ -3128,8 +3150,8 @@ if test "${with_gnutls}" != "no" ; then
   fi
 fi
 
-AC_SUBST(LIBGNUTLS_LIBS)
-AC_SUBST(LIBGNUTLS_CFLAGS)
+AC_SUBST([LIBGNUTLS_LIBS])
+AC_SUBST([LIBGNUTLS_CFLAGS])
 
 HAVE_LIBSYSTEMD=no
 if test "${with_libsystemd}" = "yes" ; then
@@ -3139,12 +3161,12 @@ if test "${with_libsystemd}" = "yes" ; then
   EMACS_CHECK_MODULES([LIBSYSTEMD], [libsystemd >= 222],
     [HAVE_LIBSYSTEMD=yes], [HAVE_LIBSYSTEMD=no])
   if test "${HAVE_LIBSYSTEMD}" = "yes"; then
-    AC_DEFINE(HAVE_LIBSYSTEMD, 1, [Define if using libsystemd.])
+    AC_DEFINE([HAVE_LIBSYSTEMD], [1], [Define if using libsystemd.])
   fi
 fi
 
-AC_SUBST(LIBSYSTEMD_LIBS)
-AC_SUBST(LIBSYSTEMD_CFLAGS)
+AC_SUBST([LIBSYSTEMD_LIBS])
+AC_SUBST([LIBSYSTEMD_CFLAGS])
 
 HAVE_JSON=no
 JSON_OBJ=
@@ -3153,7 +3175,7 @@ if test "${with_json}" != no; then
   EMACS_CHECK_MODULES([JSON], [jansson >= 2.7],
     [HAVE_JSON=yes], [HAVE_JSON=no])
   if test "${HAVE_JSON}" = yes; then
-    AC_DEFINE(HAVE_JSON, 1, [Define if using Jansson.])
+    AC_DEFINE([HAVE_JSON], [1], [Define if using Jansson.])
     JSON_OBJ=json.o
   fi
 
@@ -3163,9 +3185,9 @@ if test "${with_json}" != no; then
   fi
 fi
 
-AC_SUBST(JSON_LIBS)
-AC_SUBST(JSON_CFLAGS)
-AC_SUBST(JSON_OBJ)
+AC_SUBST([JSON_LIBS])
+AC_SUBST([JSON_CFLAGS])
+AC_SUBST([JSON_OBJ])
 
 HAVE_TREE_SITTER=no
 TREE_SITTER_OBJ=
@@ -3198,9 +3220,9 @@ case $with_file_notification,$opsys in
     Consider using gfile instead.])
     ;;
   w32,* | yes,mingw32)
-    AC_CHECK_HEADER(windows.h)
+    AC_CHECK_HEADER([windows.h])
     if test "$ac_cv_header_windows_h" = yes ; then
-       AC_DEFINE(HAVE_W32NOTIFY, 1, [Define to 1 to use w32notify.])
+       AC_DEFINE([HAVE_W32NOTIFY], [1], [Define to 1 to use w32notify.])
        NOTIFY_OBJ=w32notify.o
        NOTIFY_SUMMARY="yes (w32)"
     fi ;;
@@ -3209,11 +3231,11 @@ esac
 dnl inotify is available only on GNU/Linux.
 case $with_file_notification,$NOTIFY_OBJ in
   inotify, | yes,)
-    AC_CHECK_HEADER(sys/inotify.h)
+    AC_CHECK_HEADER([sys/inotify.h])
     if test "$ac_cv_header_sys_inotify_h" = yes ; then
-       AC_CHECK_FUNC(inotify_init1)
+       AC_CHECK_FUNC([inotify_init1])
        if test "$ac_cv_func_inotify_init1" = yes; then
-         AC_DEFINE(HAVE_INOTIFY, 1, [Define to 1 to use inotify.])
+         AC_DEFINE([HAVE_INOTIFY], [1], [Define to 1 to use inotify.])
          NOTIFY_OBJ=inotify.o
          NOTIFY_SUMMARY="yes -lglibc (inotify)"
        fi
@@ -3225,16 +3247,16 @@ case $with_file_notification,$NOTIFY_OBJ in
   kqueue,* | yes,)
     EMACS_CHECK_MODULES([KQUEUE], [libkqueue])
     if test "$HAVE_KQUEUE" = "yes"; then
-       AC_DEFINE(HAVE_KQUEUE, 1, [Define to 1 to use kqueue.])
+       AC_DEFINE([HAVE_KQUEUE], [1], [Define to 1 to use kqueue.])
        CPPFLAGS="$CPPFLAGS -I/usr/include/kqueue"
        NOTIFY_CFLAGS=$KQUEUE_CFLAGS
        NOTIFY_LIBS=$KQUEUE_LIBS
        NOTIFY_OBJ=kqueue.o
        NOTIFY_SUMMARY="yes -lkqueue"
     else
-       AC_SEARCH_LIBS(kqueue, [])
+       AC_SEARCH_LIBS([kqueue], [])
        if test "$ac_cv_search_kqueue" != no; then
-         AC_DEFINE(HAVE_KQUEUE, 1, [Define to 1 to use kqueue.])
+        AC_DEFINE([HAVE_KQUEUE], [1], [Define to 1 to use kqueue.])
         NOTIFY_OBJ=kqueue.o
         NOTIFY_SUMMARY="yes (kqueue)"
        fi
@@ -3252,7 +3274,7 @@ Consider kqueue instead.])
     else
        EMACS_CHECK_MODULES([GFILENOTIFY], [gio-2.0 >= 2.24])
        if test "$HAVE_GFILENOTIFY" = "yes"; then
-         AC_DEFINE(HAVE_GFILENOTIFY, 1, [Define to 1 if using GFile.])
+         AC_DEFINE([HAVE_GFILENOTIFY], [1], [Define to 1 if using GFile.])
          NOTIFY_CFLAGS=$GFILENOTIFY_CFLAGS
          NOTIFY_LIBS=$GFILENOTIFY_LIBS
          NOTIFY_OBJ=gfilenotify.o
@@ -3267,11 +3289,12 @@ case $with_file_notification,$NOTIFY_OBJ in
 esac
 
 if test -n "$NOTIFY_OBJ"; then
-   AC_DEFINE(USE_FILE_NOTIFY, 1, [Define to 1 if using file notifications.])
+   AC_DEFINE([USE_FILE_NOTIFY], [1],
+     [Define to 1 if using file notifications.])
 fi
-AC_SUBST(NOTIFY_CFLAGS)
-AC_SUBST(NOTIFY_LIBS)
-AC_SUBST(NOTIFY_OBJ)
+AC_SUBST([NOTIFY_CFLAGS])
+AC_SUBST([NOTIFY_LIBS])
+AC_SUBST([NOTIFY_OBJ])
 
 dnl Do not put whitespace before the #include statements below.
 dnl Older compilers (eg sunos4 cc) choke on it.
@@ -3279,36 +3302,37 @@ HAVE_XAW3D=no
 LUCID_LIBW=
 if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then
   if test "$with_xaw3d" != no; then
-    AC_CACHE_VAL(emacs_cv_xaw3d,
+    AC_CACHE_VAL([emacs_cv_xaw3d],
     [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 #include <X11/Intrinsic.h>
 #include <X11/Xaw3d/Simple.h>]],
       [[]])],
-      [AC_CHECK_LIB(Xaw3d, XawScrollbarSetThumb,
-                    emacs_cv_xaw3d=yes, emacs_cv_xaw3d=no)],
-      emacs_cv_xaw3d=no)])
+      [AC_CHECK_LIB([Xaw3d], [XawScrollbarSetThumb],
+                   [emacs_cv_xaw3d=yes],
+                   [emacs_cv_xaw3d=no])],
+      [emacs_cv_xaw3d=no])])
   else
     emacs_cv_xaw3d=no
   fi
   if test $emacs_cv_xaw3d = yes; then
-    AC_MSG_CHECKING(for xaw3d)
+    AC_MSG_CHECKING([for xaw3d])
     AC_MSG_RESULT([yes; using Lucid toolkit])
     USE_X_TOOLKIT=LUCID
     HAVE_XAW3D=yes
     LUCID_LIBW=-lXaw3d
-    AC_DEFINE(HAVE_XAW3D, 1,
+    AC_DEFINE([HAVE_XAW3D], [1],
               [Define to 1 if you have the Xaw3d library (-lXaw3d).])
   else
-    AC_MSG_CHECKING(for xaw3d)
-    AC_MSG_RESULT(no)
-    AC_MSG_CHECKING(for libXaw)
-    AC_CACHE_VAL(emacs_cv_xaw,
+    AC_MSG_CHECKING([for xaw3d])
+    AC_MSG_RESULT([no])
+    AC_MSG_CHECKING([for libXaw])
+    AC_CACHE_VAL([emacs_cv_xaw],
     [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 #include <X11/Intrinsic.h>
 #include <X11/Xaw/Simple.h>]],
       [[]])],
-      emacs_cv_xaw=yes,
-      emacs_cv_xaw=no)])
+      [emacs_cv_xaw=yes],
+      [emacs_cv_xaw=no])])
     if test $emacs_cv_xaw = yes; then
       AC_MSG_RESULT([yes; using Lucid toolkit])
       USE_X_TOOLKIT=LUCID
@@ -3330,17 +3354,18 @@ X_TOOLKIT_TYPE=$USE_X_TOOLKIT
 LIBXTR6=
 LIBXMU=
 if test "${USE_X_TOOLKIT}" != "none"; then
-  AC_MSG_CHECKING(X11 toolkit version)
-  AC_CACHE_VAL(emacs_cv_x11_toolkit_version_6,
+  AC_MSG_CHECKING([X11 toolkit version])
+  AC_CACHE_VAL([emacs_cv_x11_toolkit_version_6],
   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <X11/Intrinsic.h>]],
 [[#if XtSpecificationRelease < 6
 fail;
 #endif
-]])], emacs_cv_x11_toolkit_version_6=yes, emacs_cv_x11_toolkit_version_6=no)])
+]])], [emacs_cv_x11_toolkit_version_6=yes],
+      [emacs_cv_x11_toolkit_version_6=no])])
   HAVE_X11XTR6=$emacs_cv_x11_toolkit_version_6
   if test $emacs_cv_x11_toolkit_version_6 = yes; then
-    AC_MSG_RESULT(6 or newer)
-    AC_DEFINE(HAVE_X11XTR6, 1,
+    AC_MSG_RESULT([6 or newer])
+    AC_DEFINE([HAVE_X11XTR6], [1],
              [Define to 1 if you have the X11R6 or newer version of Xt.])
     LIBXTR6="-lSM -lICE"
     case "$opsys" in
@@ -3348,7 +3373,7 @@ fail;
       unixware) LIBXTR6="$LIBXTR6 -lw" ;;
     esac
   else
-    AC_MSG_RESULT(before 6)
+    AC_MSG_RESULT([before 6])
   fi
 
 dnl If using toolkit, check whether libXmu.a exists.
@@ -3366,8 +3391,8 @@ dnl tranle@intellicorp.com says libXmu.a can need 
XtMalloc in libXt.a to link.
   LIBS=$OLDLIBS
   dnl ac_cv_search_XmuConvertStandardSelection is also referenced below.
 fi
-AC_SUBST(LIBXTR6)
-AC_SUBST(LIBXMU)
+AC_SUBST([LIBXTR6])
+AC_SUBST([LIBXMU])
 
 LIBXP=
 if test "${USE_X_TOOLKIT}" = "MOTIF"; then
@@ -3385,21 +3410,21 @@ if test "${USE_X_TOOLKIT}" = "MOTIF"; then
   else
     emacs_cv_openmotif=no
   fi
-  AC_CACHE_CHECK(for (Open)Motif version 2.1, emacs_cv_motif_version_2_1,
+  AC_CACHE_CHECK([for (Open)Motif version 2.1], [emacs_cv_motif_version_2_1],
   [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <Xm/Xm.h>]],
     [[#if XmVERSION > 2 || (XmVERSION == 2 && XmREVISION >= 1)
 int x = 5;
 #else
 Motif version prior to 2.1.
 #endif]])],
-    emacs_cv_motif_version_2_1=yes, emacs_cv_motif_version_2_1=no)])
+     [emacs_cv_motif_version_2_1=yes],
+     [emacs_cv_motif_version_2_1=no])])
   if test $emacs_cv_motif_version_2_1 = yes; then
-    AC_CHECK_LIB(Xp, XpCreateContext, LIBXP=-lXp)
+    AC_CHECK_LIB([Xp], [XpCreateContext], [LIBXP=-lXp])
     if test x$emacs_cv_openmotif = xyes; then
       REAL_CPPFLAGS="-I/usr/include/openmotif $REAL_CPPFLAGS"
     fi
   else
-    AC_CACHE_CHECK(for LessTif where some systems put it, emacs_cv_lesstif,
     # We put this in CFLAGS temporarily to precede other -I options
     # that might be in CFLAGS temporarily.
     # We put this in CPPFLAGS where it precedes the other -I options.
@@ -3407,9 +3432,14 @@ Motif version prior to 2.1.
     OLD_CFLAGS=$CFLAGS
     CPPFLAGS="-I/usr/X11R6/LessTif/Motif1.2/include $CPPFLAGS"
     CFLAGS="-I/usr/X11R6/LessTif/Motif1.2/include $CFLAGS"
-    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include 
</usr/X11R6/LessTif/Motif1.2/include/Xm/Xm.h>]],
-      [[int x = 5;]])],
-      emacs_cv_lesstif=yes, emacs_cv_lesstif=no)])
+    AC_CACHE_CHECK([for LessTif where some systems put it], [emacs_cv_lesstif],
+      [AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include </usr/X11R6/LessTif/Motif1.2/include/Xm/Xm.h>
+           ]],
+           [[int x = 5;]])],
+        [emacs_cv_lesstif=yes],
+        [emacs_cv_lesstif=no])])
     if test $emacs_cv_lesstif = yes; then
       # Make sure this -I option remains in CPPFLAGS after it is set
       # back to REAL_CPPFLAGS.
@@ -3431,34 +3461,34 @@ dnl Use toolkit scroll bars if configured for GTK or X 
toolkit and either
 dnl using Motif or Xaw3d is available, and unless
 dnl --with-toolkit-scroll-bars=no was specified.
 
-AH_TEMPLATE(USE_TOOLKIT_SCROLL_BARS,
+AH_TEMPLATE([USE_TOOLKIT_SCROLL_BARS],
            [Define to 1 if we should use toolkit scroll bars.])dnl
 USE_TOOLKIT_SCROLL_BARS=no
 if test "${with_toolkit_scroll_bars}" != "no"; then
   if test "${USE_X_TOOLKIT}" != "none"; then
     if test "${USE_X_TOOLKIT}" = "MOTIF"; then
-      AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
+      AC_DEFINE([USE_TOOLKIT_SCROLL_BARS])
       HAVE_XAW3D=no
       USE_TOOLKIT_SCROLL_BARS=yes
     elif test "${HAVE_XAW3D}" = "yes" || test "${USE_X_TOOLKIT}" = "LUCID"; 
then
-      AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
+      AC_DEFINE([USE_TOOLKIT_SCROLL_BARS])
       USE_TOOLKIT_SCROLL_BARS=yes
     fi
   elif test "${HAVE_GTK}" = "yes"; then
-    AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
+    AC_DEFINE([USE_TOOLKIT_SCROLL_BARS])
     USE_TOOLKIT_SCROLL_BARS=yes
   elif test "${HAVE_NS}" = "yes"; then
-    AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
+    AC_DEFINE([USE_TOOLKIT_SCROLL_BARS])
     USE_TOOLKIT_SCROLL_BARS=yes
   elif test "${HAVE_W32}" = "yes"; then
-    AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
+    AC_DEFINE([USE_TOOLKIT_SCROLL_BARS])
     USE_TOOLKIT_SCROLL_BARS=yes
   elif test "${HAVE_BE_APP}" = "yes"; then
-    AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
+    AC_DEFINE([USE_TOOLKIT_SCROLL_BARS])
     USE_TOOLKIT_SCROLL_BARS=yes
   fi
-elif test "${window_system}" != "x11" && "${window_system}" != "none"; then
-  AC_MSG_ERROR(Non-toolkit scroll bars are not implemented for your system)
+elif test "${window_system}" != "x11" && test "${window_system}" != "none"; 
then
+  AC_MSG_ERROR([Non-toolkit scroll bars are not implemented for your system])
 fi
 
 dnl See if XIM is available.
@@ -3467,14 +3497,14 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
          #include <X11/Xresource.h>]],
         [[XIMProc  callback;]])],
         [HAVE_XIM=yes
-        AC_DEFINE(HAVE_XIM, 1, [Define to 1 if XIM is available])],
-        HAVE_XIM=no)
+        AC_DEFINE([HAVE_XIM], [1], [Define to 1 if XIM is available])],
+        [HAVE_XIM=no])
 
 dnl Note this is non-standard.  --with-xim does not control whether
 dnl XIM support is compiled in, it only affects the runtime default of
 dnl use_xim in xterm.c.
 if test "${with_xim}" != "no"; then
-  AC_DEFINE(USE_XIM, 1,
+  AC_DEFINE([USE_XIM], [1],
            [Define to 1 to default runtime use of XIM to on.])
 fi
 
@@ -3490,8 +3520,8 @@ if test "${HAVE_X11}" = "yes"; then
     [AC_CHECK_LIB([Xrender], [XRenderQueryExtension], [HAVE_XRENDER=yes])])
   if test $HAVE_XRENDER = yes; then
     XRENDER_LIBS="-lXrender"
-    AC_SUBST(XRENDER_LIBS)
-    AC_DEFINE([HAVE_XRENDER], 1, [Define to 1 if XRender is available.])
+    AC_SUBST([XRENDER_LIBS])
+    AC_DEFINE([HAVE_XRENDER], [1], [Define to 1 if XRender is available.])
   fi
 fi
 
@@ -3500,20 +3530,21 @@ if test "${HAVE_X11}" = "yes"; then
   if test "${with_cairo}" != "no"; then
     CAIRO_REQUIRED=1.8.0
     CAIRO_MODULE="cairo >= $CAIRO_REQUIRED"
-    EMACS_CHECK_MODULES(CAIRO, $CAIRO_MODULE)
+    EMACS_CHECK_MODULES([CAIRO], [$CAIRO_MODULE])
     if test $HAVE_CAIRO = yes; then
       CAIRO_XCB_MODULE="cairo-xcb >= $CAIRO_REQUIRED"
-      EMACS_CHECK_MODULES(CAIRO_XCB, $CAIRO_XCB_MODULE)
+      EMACS_CHECK_MODULES([CAIRO_XCB], [$CAIRO_XCB_MODULE])
       if test $HAVE_CAIRO_XCB = yes; then
        CAIRO_CFLAGS="$CAIRO_CFLAGS $CAIRO_XCB_CFLAGS"
        CAIRO_LIBS="$CAIRO_LIBS $CAIRO_XCB_LIBS"
-       AC_DEFINE(USE_CAIRO_XCB, 1, [Define to 1 if cairo XCB surfaces are 
available.])
+       AC_DEFINE([USE_CAIRO_XCB], [1],
+         [Define to 1 if cairo XCB surfaces are available.])
       fi
-      AC_DEFINE(USE_CAIRO, 1, [Define to 1 if using cairo.])
+      AC_DEFINE([USE_CAIRO], [1], [Define to 1 if using cairo.])
       CFLAGS="$CFLAGS $CAIRO_CFLAGS"
       LIBS="$LIBS $CAIRO_LIBS"
-      AC_SUBST(CAIRO_CFLAGS)
-      AC_SUBST(CAIRO_LIBS)
+      AC_SUBST([CAIRO_CFLAGS])
+      AC_SUBST([CAIRO_LIBS])
     else
       AC_MSG_WARN([cairo requested but not found.])
     fi
@@ -3533,12 +3564,12 @@ if test "$with_xwidgets" != "no"; then
     XWIDGETS_OBJ="xwidget.o"
     if test "$HAVE_X_WINDOWS" = "yes" && test "${with_cairo}" = "no"; then
       CAIRO_XLIB_MODULES="cairo >= 1.8.0 cairo-xlib >= 1.8.0"
-      EMACS_CHECK_MODULES(CAIRO_XLIB, $CAIRO_XLIB_MODULES)
+      EMACS_CHECK_MODULES([CAIRO_XLIB], [$CAIRO_XLIB_MODULES])
       if test $HAVE_CAIRO_XLIB = "yes"; then
         CAIRO_CFLAGS="$CAIRO_XLIB_CFLAGS"
        CAIRO_LIBS="$CAIRO_XLIB_LIBS"
-       AC_SUBST(CAIRO_CFLAGS)
-       AC_SUBST(CAIRO_LIBS)
+       AC_SUBST([CAIRO_CFLAGS])
+       AC_SUBST([CAIRO_LIBS])
       else
         AC_MSG_ERROR([xwidgets requested, but a suitable cairo installation 
wasn't found])
       fi
@@ -3553,7 +3584,7 @@ if test "$with_xwidgets" != "no"; then
     XWIDGETS_OBJ="xwidget.o"
     NS_OBJC_OBJ="$NS_OBJC_OBJ nsxwidget.o"
     dnl Update NS_OBJC_OBJ with added nsxwidget.o
-    AC_SUBST(NS_OBJC_OBJ)
+    AC_SUBST([NS_OBJC_OBJ])
   else
     AC_MSG_ERROR([xwidgets requested, it requires GTK3 as X window toolkit or 
macOS Cocoa as window system.])
   fi
@@ -3561,37 +3592,37 @@ if test "$with_xwidgets" != "no"; then
   test $HAVE_XWIDGETS = yes ||
     AC_MSG_ERROR([xwidgets requested but WebKitGTK+ or WebKit framework not 
found.])
 
-  AC_DEFINE([HAVE_XWIDGETS], 1, [Define to 1 if you have xwidgets support.])
+  AC_DEFINE([HAVE_XWIDGETS], [1], [Define to 1 if you have xwidgets support.])
 fi
-AC_SUBST(XWIDGETS_OBJ)
+AC_SUBST([XWIDGETS_OBJ])
 
 if test "$window_system" = "pgtk"; then
   CAIRO_REQUIRED=1.12.0
   CAIRO_MODULE="cairo >= $CAIRO_REQUIRED"
-  EMACS_CHECK_MODULES(CAIRO, $CAIRO_MODULE)
+  EMACS_CHECK_MODULES([CAIRO], [$CAIRO_MODULE])
   if test $HAVE_CAIRO = yes; then
-    AC_DEFINE(USE_CAIRO, 1, [Define to 1 if using cairo.])
+    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)
+  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
     CAIRO_MODULE="cairo >= $CAIRO_REQUIRED"
-    EMACS_CHECK_MODULES(CAIRO, $CAIRO_MODULE)
+    EMACS_CHECK_MODULES([CAIRO], [$CAIRO_MODULE])
     if test $HAVE_CAIRO = yes; then
-      AC_DEFINE(USE_BE_CAIRO, 1, [Define to 1 if using cairo on Haiku.])
+      AC_DEFINE([USE_BE_CAIRO], [1], [Define to 1 if using cairo on Haiku.])
       CFLAGS="$CFLAGS $CAIRO_CFLAGS"
       LIBS="$LIBS $CAIRO_LIBS"
-      AC_SUBST(CAIRO_CFLAGS)
-      AC_SUBST(CAIRO_LIBS)
+      AC_SUBST([CAIRO_CFLAGS])
+      AC_SUBST([CAIRO_LIBS])
     else
       AC_MSG_WARN([cairo requested but not found.])
     fi
@@ -3611,11 +3642,12 @@ if test "${HAVE_X11}" = "yes"; then
     dnl The following is needed to set FREETYPE_LIBS.
     EMACS_CHECK_MODULES([FREETYPE], [freetype2])
 
-    test "$HAVE_FREETYPE" = "no" && AC_MSG_ERROR(cairo requires libfreetype)
+    test "$HAVE_FREETYPE" = "no" && AC_MSG_ERROR([cairo requires libfreetype])
 
     EMACS_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.2.0])
 
-    test "$HAVE_FONTCONFIG" = "no" && AC_MSG_ERROR(cairo requires 
libfontconfig)
+    test "$HAVE_FONTCONFIG" = "no" &&
+      AC_MSG_ERROR([cairo requires libfontconfig])
     dnl For the "Does Emacs use" message at the end.
     HAVE_XFT=no
   else
@@ -3642,13 +3674,15 @@ if test "${HAVE_X11}" = "yes"; then
        CPPFLAGS="$CPPFLAGS $XFT_CFLAGS"
        CFLAGS="$CFLAGS $XFT_CFLAGS"
        LIBS="$XFT_LIBS $LIBS"
-       AC_CHECK_HEADER(X11/Xft/Xft.h,
-         AC_CHECK_LIB(Xft, XftFontOpen, HAVE_XFT=yes, , $XFT_LIBS) , ,
+       AC_CHECK_HEADER([X11/Xft/Xft.h],
+         [AC_CHECK_LIB([Xft], [XftFontOpen], [HAVE_XFT=yes],
+            [], [$XFT_LIBS])],
+         [],
           [[#include <X11/X.h>]])
 
        if test "${HAVE_XFT}" = "yes"; then
-         AC_DEFINE(HAVE_XFT, 1, [Define to 1 if you have the Xft library.])
-           AC_SUBST(XFT_LIBS)
+         AC_DEFINE([HAVE_XFT], [1], [Define to 1 if you have the Xft library.])
+           AC_SUBST([XFT_LIBS])
          C_SWITCH_X_SITE="$C_SWITCH_X_SITE $XFT_CFLAGS"
        fi                        # "${HAVE_XFT}" = "yes"
        CPPFLAGS=$OLD_CPPFLAGS
@@ -3671,34 +3705,35 @@ if test "${HAVE_X11}" = "yes"; then
        dnl The following is needed to set FREETYPE_LIBS.
        EMACS_CHECK_MODULES([FREETYPE], [freetype2])
 
-       test "$HAVE_FREETYPE" = "no" && AC_MSG_ERROR(libxft requires 
libfreetype)
+       test "$HAVE_FREETYPE" = "no" &&
+        AC_MSG_ERROR([libxft requires libfreetype])
     fi
   fi                             # $HAVE_CAIRO != yes
 
   HAVE_LIBOTF=no
   if test "${HAVE_FREETYPE}" = "yes"; then
-    AC_DEFINE(HAVE_FREETYPE, 1,
+    AC_DEFINE([HAVE_FREETYPE], [1],
              [Define to 1 if using the freetype and fontconfig libraries.])
     OLD_CFLAGS=$CFLAGS
     OLD_LIBS=$LIBS
     CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
     LIBS="$FREETYPE_LIBS $LIBS"
-    AC_CHECK_FUNCS(FT_Face_GetCharVariantIndex)
+    AC_CHECK_FUNCS([FT_Face_GetCharVariantIndex])
     CFLAGS=$OLD_CFLAGS
     LIBS=$OLD_LIBS
     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)
+       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,
+         AC_DEFINE([HAVE_OTF_GET_VARIATION_GLYPHS], [1],
                    [Define to 1 if libotf has OTF_get_variation_glyphs.])
        fi
        if ! $PKG_CONFIG --atleast-version=0.9.16 libotf; then
-         AC_DEFINE(HAVE_OTF_KANNADA_BUG, 1,
+         AC_DEFINE([HAVE_OTF_KANNADA_BUG], [1],
 [Define to 1 if libotf is affected by https://debbugs.gnu.org/28110.])
        fi
       fi
@@ -3712,7 +3747,7 @@ if test "${HAVE_X11}" = "yes"; then
     if test "${with_m17n_flt}" != "no"; then
       EMACS_CHECK_MODULES([M17N_FLT], [m17n-flt])
       if test "$HAVE_M17N_FLT" = "yes"; then
-       AC_DEFINE(HAVE_M17N_FLT, 1, [Define to 1 if using libm17n-flt.])
+       AC_DEFINE([HAVE_M17N_FLT], [1], [Define to 1 if using libm17n-flt.])
       fi
     fi
   fi
@@ -3721,20 +3756,20 @@ else # "${HAVE_X11}" != "yes"
     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.)
+      AC_MSG_ERROR([fontconfig and freetype is required.])
     fi
     HAVE_LIBOTF=no
-    AC_DEFINE(HAVE_FREETYPE, 1,
+    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)
+       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,
+         AC_DEFINE([HAVE_OTF_GET_VARIATION_GLYPHS], [1],
                    [Define to 1 if libotf has OTF_get_variation_glyphs.])
        fi
       fi
@@ -3761,7 +3796,7 @@ if test "${HAVE_X11}" = "yes" && test "${HAVE_FREETYPE}" 
= "yes" \
   if test "${with_harfbuzz}" != "no"; then
     EMACS_CHECK_MODULES([HARFBUZZ], [harfbuzz >= $harfbuzz_required_ver])
     if test "$HAVE_HARFBUZZ" = "yes"; then
-      AC_DEFINE(HAVE_HARFBUZZ, 1, [Define to 1 if using HarfBuzz.])
+      AC_DEFINE([HAVE_HARFBUZZ], [1], [Define to 1 if using HarfBuzz.])
       ### mingw32 and Cygwin-w32 don't use -lharfbuzz, since they load
       ### the library dynamically.
       if test "${HAVE_W32}" = "yes"; then
@@ -3775,36 +3810,38 @@ fi
 if test "${HAVE_BE_APP}" = "yes"; then
   if test $HAVE_CAIRO = "yes"; then
       EMACS_CHECK_MODULES([FREETYPE], [freetype2 >= 2.5.0])
-      test "$HAVE_FREETYPE" = "no" && AC_MSG_ERROR(cairo on Haiku requires 
libfreetype)
+      test "$HAVE_FREETYPE" = "no" &&
+       AC_MSG_ERROR([cairo on Haiku requires libfreetype])
       EMACS_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.2.0])
-      test "$HAVE_FONTCONFIG" = "no" && AC_MSG_ERROR(cairo on Haiku requires 
libfontconfig)
+      test "$HAVE_FONTCONFIG" = "no" &&
+       AC_MSG_ERROR([cairo on Haiku requires libfontconfig])
   fi
 
   HAVE_LIBOTF=no
 
   if test "${HAVE_FREETYPE}" = "yes"; then
-    AC_DEFINE(HAVE_FREETYPE, 1,
+    AC_DEFINE([HAVE_FREETYPE], [1],
              [Define to 1 if using the freetype and fontconfig libraries.])
     OLD_CFLAGS=$CFLAGS
     OLD_LIBS=$LIBS
     CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
     LIBS="$FREETYPE_LIBS $LIBS"
-    AC_CHECK_FUNCS(FT_Face_GetCharVariantIndex)
+    AC_CHECK_FUNCS([FT_Face_GetCharVariantIndex])
     CFLAGS=$OLD_CFLAGS
     LIBS=$OLD_LIBS
     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)
+       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,
+         AC_DEFINE([HAVE_OTF_GET_VARIATION_GLYPHS], [1],
                    [Define to 1 if libotf has OTF_get_variation_glyphs.])
        fi
        if ! $PKG_CONFIG --atleast-version=0.9.16 libotf; then
-         AC_DEFINE(HAVE_OTF_KANNADA_BUG, 1,
+         AC_DEFINE([HAVE_OTF_KANNADA_BUG], [1],
 [Define to 1 if libotf is affected by https://debbugs.gnu.org/28110.])
        fi
       fi
@@ -3818,41 +3855,41 @@ if test "${HAVE_BE_APP}" = "yes" && test 
"${HAVE_FREETYPE}" = "yes"; then
   if test "${with_harfbuzz}" != "no"; then
     EMACS_CHECK_MODULES([HARFBUZZ], [harfbuzz >= $harfbuzz_required_ver])
     if test "$HAVE_HARFBUZZ" = "yes"; then
-      AC_DEFINE(HAVE_HARFBUZZ, 1, [Define to 1 if using HarfBuzz.])
+      AC_DEFINE([HAVE_HARFBUZZ], [1], [Define to 1 if using HarfBuzz.])
     fi
   fi
 fi
 
 ### End of font-backend section.
 
-AC_SUBST(FREETYPE_CFLAGS)
-AC_SUBST(FREETYPE_LIBS)
-AC_SUBST(FONTCONFIG_CFLAGS)
-AC_SUBST(FONTCONFIG_LIBS)
-AC_SUBST(HARFBUZZ_CFLAGS)
-AC_SUBST(HARFBUZZ_LIBS)
-AC_SUBST(LIBOTF_CFLAGS)
-AC_SUBST(LIBOTF_LIBS)
-AC_SUBST(M17N_FLT_CFLAGS)
-AC_SUBST(M17N_FLT_LIBS)
+AC_SUBST([FREETYPE_CFLAGS])
+AC_SUBST([FREETYPE_LIBS])
+AC_SUBST([FONTCONFIG_CFLAGS])
+AC_SUBST([FONTCONFIG_LIBS])
+AC_SUBST([HARFBUZZ_CFLAGS])
+AC_SUBST([HARFBUZZ_LIBS])
+AC_SUBST([LIBOTF_CFLAGS])
+AC_SUBST([LIBOTF_LIBS])
+AC_SUBST([M17N_FLT_CFLAGS])
+AC_SUBST([M17N_FLT_LIBS])
 
 XCB_LIBS=
 if test "${HAVE_X11}" = "yes"; then
-  AC_CHECK_HEADER(X11/Xlib-xcb.h,
-    AC_CHECK_LIB(xcb, xcb_translate_coordinates, HAVE_XCB=yes))
+  AC_CHECK_HEADER([X11/Xlib-xcb.h],
+    [AC_CHECK_LIB([xcb], [xcb_translate_coordinates], [HAVE_XCB=yes])])
   if test "${HAVE_XCB}" = "yes"; then
-    AC_CHECK_LIB(X11-xcb, XGetXCBConnection, HAVE_X11_XCB=yes)
+    AC_CHECK_LIB([X11-xcb], [XGetXCBConnection], [HAVE_X11_XCB=yes])
     if test "${HAVE_X11_XCB}" = "yes"; then
-      AC_CHECK_LIB(xcb-util, xcb_aux_sync, HAVE_XCB_UTIL=yes)
+      AC_CHECK_LIB([xcb-util], [xcb_aux_sync], [HAVE_XCB_UTIL=yes])
       if test "${HAVE_XCB_UTIL}" = "yes"; then
-        AC_DEFINE(USE_XCB, 1,
+       AC_DEFINE([USE_XCB], [1],
 [Define to 1 if you have the XCB library and X11-XCB library for mixed
   X11/XCB programming.])
         XCB_LIBS="-lX11-xcb -lxcb -lxcb-util"
       else
-        AC_CHECK_LIB(xcb-aux, xcb_aux_sync, HAVE_XCB_AUX=yes)
+       AC_CHECK_LIB([xcb-aux], [xcb_aux_sync], [HAVE_XCB_AUX=yes])
         if test "${HAVE_XCB_AUX}" = "yes"; then
-          AC_DEFINE(USE_XCB, 1,
+         AC_DEFINE([USE_XCB], [1],
 [Define to 1 if you have the XCB library and X11-XCB library for mixed
  X11/XCB programming.])
           XCB_LIBS="-lX11-xcb -lxcb -lxcb-aux"
@@ -3861,7 +3898,7 @@ if test "${HAVE_X11}" = "yes"; then
     fi
   fi
 fi
-AC_SUBST(XCB_LIBS)
+AC_SUBST([XCB_LIBS])
 
 ### Use -lXpm if available, unless '--with-xpm=no'.
 ### mingw32 doesn't use -lXpm, since it loads the library dynamically.
@@ -3873,18 +3910,18 @@ if test "${HAVE_W32}" = "yes" && test "${opsys}" = 
"cygwin"; then
   if test "${with_xpm}" != "no"; then
     SAVE_LDFLAGS="$LDFLAGS"
     LDFLAGS="$LDFLAGS -L/usr/lib/noX"
-    AC_CHECK_HEADER(noX/xpm.h,
-      [AC_CHECK_LIB(Xpm, XpmReadFileToImage, HAVE_XPM=yes)])
+    AC_CHECK_HEADER([noX/xpm.h],
+      [AC_CHECK_LIB([Xpm], [XpmReadFileToImage], [HAVE_XPM=yes])])
     if test "${HAVE_XPM}" = "yes"; then
       AC_CACHE_CHECK([for XpmReturnAllocPixels preprocessor define],
       [emacs_cv_cpp_xpm_return_alloc_pixels],
-      [AC_EGREP_CPP(no_return_alloc_pixels,
+      [AC_EGREP_CPP([no_return_alloc_pixels],
       [#include "noX/xpm.h"
 #ifndef XpmReturnAllocPixels
 no_return_alloc_pixels
 #endif
-      ], emacs_cv_cpp_xpm_return_alloc_pixels=no,
-      emacs_cv_cpp_xpm_return_alloc_pixels=yes)])
+      ], [emacs_cv_cpp_xpm_return_alloc_pixels=no],
+        [emacs_cv_cpp_xpm_return_alloc_pixels=yes])])
 
       if test "$emacs_cv_cpp_xpm_return_alloc_pixels" = "no"; then
         HAVE_XPM=no
@@ -3894,7 +3931,8 @@ no_return_alloc_pixels
   fi
 
   if test "${HAVE_XPM}" = "yes"; then
-    AC_DEFINE(HAVE_XPM, 1, [Define to 1 if you have the Xpm library (-lXpm).])
+    AC_DEFINE([HAVE_XPM], [1],
+      [Define to 1 if you have the Xpm library (-lXpm).])
     LIBXPM=-lXpm
   fi
 fi
@@ -3907,18 +3945,19 @@ if test "${HAVE_X11}" = "yes"; then
   esac
 
   if test "${with_xpm}" != "no"; then
-    AC_CHECK_HEADER(X11/xpm.h,
-      [AC_CHECK_LIB(Xpm, XpmReadFileToPixmap, HAVE_XPM=yes, , -lX11)])
+    AC_CHECK_HEADER([X11/xpm.h],
+      [AC_CHECK_LIB([Xpm], [XpmReadFileToPixmap],
+        [HAVE_XPM=yes], [], [-lX11])])
     if test "${HAVE_XPM}" = "yes"; then
       AC_CACHE_CHECK([for XpmReturnAllocPixels preprocessor define],
       [emacs_cv_cpp_xpm_return_alloc_pixels],
-      [AC_EGREP_CPP(no_return_alloc_pixels,
+      [AC_EGREP_CPP([no_return_alloc_pixels],
       [#include "X11/xpm.h"
 #ifndef XpmReturnAllocPixels
 no_return_alloc_pixels
 #endif
-      ], emacs_cv_cpp_xpm_return_alloc_pixels=no,
-      emacs_cv_cpp_xpm_return_alloc_pixels=yes)])
+      ], [emacs_cv_cpp_xpm_return_alloc_pixels=no],
+        [emacs_cv_cpp_xpm_return_alloc_pixels=yes])])
 
       if test "$emacs_cv_cpp_xpm_return_alloc_pixels" = "no"; then
        HAVE_XPM=no
@@ -3927,7 +3966,8 @@ no_return_alloc_pixels
   fi
 
   if test "${HAVE_XPM}" = "yes"; then
-    AC_DEFINE(HAVE_XPM, 1, [Define to 1 if you have the Xpm library (-lXpm).])
+    AC_DEFINE([HAVE_XPM], [1],
+      [Define to 1 if you have the Xpm library (-lXpm).])
     LIBXPM=-lXpm
   elif test "$opsys,$LUCID_LIBW" = aix4-2,-lXaw; then
     dnl AIX -lXaw needs -lXpm linked too; see Bug#17598 Message#152.
@@ -3941,16 +3981,17 @@ fi
 ### run time).
 if test "${opsys}" = "mingw32"; then
   if test "${with_xpm}" != "no"; then
-    AC_CHECK_HEADER(X11/xpm.h, HAVE_XPM=yes, HAVE_XPM=no, [
+    AC_CHECK_HEADER([X11/xpm.h], [HAVE_XPM=yes], [HAVE_XPM=no], [
 #define FOR_MSW 1])
   fi
 
   if test "${HAVE_XPM}" = "yes"; then
-    AC_DEFINE(HAVE_XPM, 1, [Define to 1 if you have the Xpm library (-lXpm).])
+    AC_DEFINE([HAVE_XPM], [1],
+      [Define to 1 if you have the Xpm library (-lXpm).])
   fi
 fi
 
-AC_SUBST(LIBXPM)
+AC_SUBST([LIBXPM])
 
 ### Use -ljpeg if available, unless '--with-jpeg=no'.
 HAVE_JPEG=no
@@ -3989,7 +4030,7 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = 
"yes" \
        done])
     if test "$emacs_cv_jpeglib" != no; then
       HAVE_JPEG=yes
-      AC_DEFINE([HAVE_JPEG], 1,
+      AC_DEFINE([HAVE_JPEG], [1],
        [Define to 1 if you have the jpeg library (typically -ljpeg).])
       ### mingw32 doesn't use -ljpeg, since it loads the library
       ### dynamically when needed, and doesn't want a run-time
@@ -3999,7 +4040,7 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = 
"yes" \
     fi
   fi
 fi
-AC_SUBST(LIBJPEG)
+AC_SUBST([LIBJPEG])
 
 HAVE_LCMS2=no
 LCMS2_CFLAGS=
@@ -4008,14 +4049,15 @@ if test "${with_lcms2}" != "no"; then
   EMACS_CHECK_MODULES([LCMS2], [lcms2])
 fi
 if test "${HAVE_LCMS2}" = "yes"; then
-  AC_DEFINE([HAVE_LCMS2], 1, [Define to 1 if you have the lcms2 library 
(-llcms2).])
+  AC_DEFINE([HAVE_LCMS2], [1],
+    [Define to 1 if you have the lcms2 library (-llcms2).])
   ### mingw32 doesn't use -llcms2, since it loads the library dynamically.
   if test "${opsys}" = "mingw32"; then
      LCMS2_LIBS=
   fi
 fi
-AC_SUBST(LCMS2_CFLAGS)
-AC_SUBST(LCMS2_LIBS)
+AC_SUBST([LCMS2_CFLAGS])
+AC_SUBST([LCMS2_LIBS])
 
 HAVE_ZLIB=no
 LIBZ=
@@ -4028,13 +4070,14 @@ if test "${with_zlib}" != "no"; then
   esac
 fi
 if test "${HAVE_ZLIB}" = "yes"; then
-  AC_DEFINE([HAVE_ZLIB], 1, [Define to 1 if you have the zlib library (-lz).])
+  AC_DEFINE([HAVE_ZLIB], [1],
+    [Define to 1 if you have the zlib library (-lz).])
   ### mingw32 doesn't use -lz, since it loads the library dynamically.
   if test "${opsys}" = "mingw32"; then
      LIBZ=
   fi
 fi
-AC_SUBST(LIBZ)
+AC_SUBST([LIBZ])
 
 ### Dynamic library support
 case $opsys in
@@ -4099,19 +4142,20 @@ fi
 if test "${HAVE_MODULES}" = yes; then
    MODULES_OBJ="emacs-module.o"
    NEED_DYNLIB=yes
-   AC_DEFINE(HAVE_MODULES, 1, [Define to 1 if dynamic modules are enabled])
-   AC_DEFINE_UNQUOTED(MODULES_SUFFIX, "$MODULES_SUFFIX",
-     [System extension for dynamic modules])
+   AC_DEFINE([HAVE_MODULES], [1], [Define to 1 if dynamic modules are enabled])
+   AC_DEFINE_UNQUOTED([MODULES_SUFFIX], ["$MODULES_SUFFIX"],
+     [System extension for dynamic libraries])
    if test -n "${MODULES_SECONDARY_SUFFIX}"; then
-     AC_DEFINE_UNQUOTED(MODULES_SECONDARY_SUFFIX, "$MODULES_SECONDARY_SUFFIX",
-       [Alternative system extension for dynamic modules.])
+     AC_DEFINE_UNQUOTED([MODULES_SECONDARY_SUFFIX],
+       ["$MODULES_SECONDARY_SUFFIX"],
+       [Alternative system extension for dynamic libraries.])
    fi
 fi
-AC_SUBST(MODULES_OBJ)
-AC_SUBST(LIBMODULES)
-AC_SUBST(HAVE_MODULES)
-AC_SUBST(MODULES_SUFFIX)
-AC_SUBST(MODULES_SECONDARY_SUFFIX)
+AC_SUBST([MODULES_OBJ])
+AC_SUBST([LIBMODULES])
+AC_SUBST([HAVE_MODULES])
+AC_SUBST([MODULES_SUFFIX])
+AC_SUBST([MODULES_SECONDARY_SUFFIX])
 
 AC_CONFIG_FILES([src/emacs-module.h])
 AC_SUBST_FILE([module_env_snippet_25])
@@ -4125,7 +4169,7 @@ module_env_snippet_27="$srcdir/src/module-env-27.h"
 module_env_snippet_28="$srcdir/src/module-env-28.h"
 module_env_snippet_29="$srcdir/src/module-env-29.h"
 emacs_major_version="${PACKAGE_VERSION%%.*}"
-AC_SUBST(emacs_major_version)
+AC_SUBST([emacs_major_version])
 
 ### Emacs Lisp native compiler support
 
@@ -4223,8 +4267,8 @@ if test "${with_native_compilation}" != "no"; then
         if test -n "`$BREW --prefix --installed libgccjit 2>/dev/null`"; then
           MAC_CFLAGS="-I$(dirname $($BREW ls -v libgccjit | \
                                                 grep libgccjit.h))"
-          MAC_LIBS="-L$(dirname $($BREW ls -v libgccjit| \
-                                            grep -E 'libgccjit\.(so|dylib)$'))"
+          MAC_LIBS="-L$(dirname $($BREW ls -v libgccjit \
+                                  | grep -m1 -E 'libgccjit\.(so|dylib)$'))"
         fi
       fi
 
@@ -4252,8 +4296,9 @@ if test "${with_native_compilation}" != "no"; then
     fi
 
     # Check if libgccjit is available.
-    AC_CHECK_LIB(gccjit, gcc_jit_context_acquire, [], [libgccjit_not_found])
-    AC_CHECK_HEADERS(libgccjit.h, [], [libgccjit_dev_not_found])
+    AC_CHECK_LIB([gccjit], [gcc_jit_context_acquire],
+      [], [libgccjit_not_found])
+    AC_CHECK_HEADERS([libgccjit.h], [], [libgccjit_dev_not_found])
     # Check if libgccjit really works.
     AC_RUN_IFELSE([libgccjit_smoke_test], [], [libgccjit_broken])
     HAVE_NATIVE_COMP=yes
@@ -4270,22 +4315,23 @@ if test "${with_native_compilation}" != "no"; then
         LIBGCCJIT_LIBS="-lgccjit -ldl" ;;
     esac
     NEED_DYNLIB=yes
-    AC_DEFINE(HAVE_NATIVE_COMP, 1, [Define to 1 if native compiler is 
available.])
+    AC_DEFINE([HAVE_NATIVE_COMP], [1],
+      [Define to 1 if native compiler is available.])
 
     CFLAGS=$SAVE_CFLAGS
     LIBS=$SAVE_LIBS
 fi
-AC_DEFINE_UNQUOTED(NATIVE_ELISP_SUFFIX, ".eln",
+AC_DEFINE_UNQUOTED([NATIVE_ELISP_SUFFIX], [".eln"],
   [System extension for native compiled elisp])
-AC_SUBST(HAVE_NATIVE_COMP)
-AC_SUBST(LIBGCCJIT_CFLAGS)
-AC_SUBST(LIBGCCJIT_LIBS)
+AC_SUBST([HAVE_NATIVE_COMP])
+AC_SUBST([LIBGCCJIT_CFLAGS])
+AC_SUBST([LIBGCCJIT_LIBS])
 
 DYNLIB_OBJ=
 if test "${NEED_DYNLIB}" = yes; then
   DYNLIB_OBJ="dynlib.o"
 fi
-AC_SUBST(DYNLIB_OBJ)
+AC_SUBST([DYNLIB_OBJ])
 
 ### Use -lpng if available, unless '--with-png=no'.
 HAVE_PNG=no
@@ -4357,8 +4403,8 @@ if test $HAVE_PNG = yes; then
     ]])
   CFLAGS=$SAVE_CFLAGS
 fi
-AC_SUBST(LIBPNG)
-AC_SUBST(PNG_CFLAGS)
+AC_SUBST([LIBPNG])
+AC_SUBST([PNG_CFLAGS])
 
 ### Use -ltiff if available, unless '--with-tiff=no'.
 ### mingw32 doesn't use -ltiff, since it loads the library dynamically.
@@ -4366,29 +4412,32 @@ HAVE_TIFF=no
 LIBTIFF=
 if test "${opsys}" = "mingw32"; then
   if test "${with_tiff}" != "no"; then
-    AC_CHECK_HEADER(tiffio.h, HAVE_TIFF=yes, HAVE_TIFF=no)
+    AC_CHECK_HEADER([tiffio.h], [HAVE_TIFF=yes], [HAVE_TIFF=no])
   fi
   if test "${HAVE_TIFF}" = "yes"; then
-    AC_DEFINE(HAVE_TIFF, 1, [Define to 1 if you have the tiff library 
(-ltiff).])
+    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" \
      || test "$window_system" = "pgtk"; then
   if test "${with_tiff}" != "no"; then
-    AC_CHECK_HEADER(tiffio.h,
+    AC_CHECK_HEADER([tiffio.h],
       [tifflibs="-lz -lm"
       # At least one tiff package requires the jpeg library.
       if test "${HAVE_JPEG}" = yes; then tifflibs="-ljpeg $tifflibs"; fi
-      AC_CHECK_LIB(tiff, TIFFGetVersion, HAVE_TIFF=yes, , $tifflibs)])
+      AC_CHECK_LIB([tiff], [TIFFGetVersion], [HAVE_TIFF=yes], [],
+       [$tifflibs])])
   fi
 
   if test "${HAVE_TIFF}" = "yes"; then
-    AC_DEFINE(HAVE_TIFF, 1, [Define to 1 if you have the tiff library 
(-ltiff).])
+    AC_DEFINE([HAVE_TIFF], [1],
+      [Define to 1 if you have the tiff library (-ltiff).])
     dnl FIXME -lz -lm, as per libpng?
     LIBTIFF=-ltiff
   fi
 fi
-AC_SUBST(LIBTIFF)
+AC_SUBST([LIBTIFF])
 
 ### Use -lgif or -lungif if available, unless '--with-gif=no'.
 ### mingw32 doesn't use -lgif/-lungif, since it loads the library dynamically.
@@ -4396,34 +4445,40 @@ HAVE_GIF=no
 LIBGIF=
 if test "${opsys}" = "mingw32"; then
   if test "${with_gif}" != "no"; then
-    AC_CHECK_HEADER(gif_lib.h, HAVE_GIF=yes, HAVE_GIF=no)
+    AC_CHECK_HEADER([gif_lib.h], [HAVE_GIF=yes], [HAVE_GIF=no])
   fi
   if test "${HAVE_GIF}" = "yes"; then
-    AC_DEFINE(HAVE_GIF, 1, [Define to 1 if you have a gif (or ungif) library.])
+    AC_DEFINE([HAVE_GIF], [1],
+      [Define to 1 if you have a gif (or ungif) library.])
   fi
 elif test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no" \
         || test "${HAVE_W32}" = "yes" || test "${HAVE_NS}" = "yes" \
        || test "${HAVE_BE_APP}" = "yes" || test "$window_system" = "pgtk" \
        && test "${with_gif}" != "no"; then
-  AC_CHECK_HEADER(gif_lib.h,
+  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.
-    [AC_CHECK_LIB(gif, GifMakeMapObject, HAVE_GIF=yes,
-        [AC_CHECK_LIB(gif, EGifPutExtensionLast, HAVE_GIF=yes, 
HAVE_GIF=maybe)])])
+    [AC_CHECK_LIB([gif], [GifMakeMapObject], [HAVE_GIF=yes],
+       [AC_CHECK_LIB([gif], [EGifPutExtensionLast],
+          [HAVE_GIF=yes],
+          [HAVE_GIF=maybe])])])
 
   if test "$HAVE_GIF" = yes; then
     LIBGIF=-lgif
   elif test "$HAVE_GIF" = maybe; then
 # If gif_lib.h but no libgif, try libungif.
-    AC_CHECK_LIB(ungif, EGifPutExtensionLast, HAVE_GIF=yes, HAVE_GIF=no)
+    AC_CHECK_LIB([ungif], [EGifPutExtensionLast],
+      [HAVE_GIF=yes],
+      [HAVE_GIF=no])
     test "$HAVE_GIF" = yes && LIBGIF=-lungif
   fi
 
   if test "${HAVE_GIF}" = "yes"; then
-    AC_DEFINE(HAVE_GIF, 1, [Define to 1 if you have a gif (or ungif) library.])
+    AC_DEFINE([HAVE_GIF], [1],
+      [Define to 1 if you have a gif (or ungif) library.])
   fi
 fi
-AC_SUBST(LIBGIF)
+AC_SUBST([LIBGIF])
 
 dnl Check for required libraries.
 MISSING=
@@ -4489,28 +4544,33 @@ fi
 HAVE_GPM=no
 LIBGPM=
 if test "${with_gpm}" != "no"; then
-  AC_CHECK_HEADER(gpm.h,
-    [AC_CHECK_LIB(gpm, Gpm_Open, HAVE_GPM=yes)])
+  AC_CHECK_HEADER([gpm.h],
+    [AC_CHECK_LIB([gpm], [Gpm_Open], [HAVE_GPM=yes])])
 
   if test "${HAVE_GPM}" = "yes"; then
-    AC_DEFINE(HAVE_GPM, 1, [Define to 1 if you have the gpm library (-lgpm).])
+    AC_DEFINE([HAVE_GPM], [1],
+      [Define to 1 if you have the gpm library (-lgpm).])
     LIBGPM=-lgpm
   fi
 fi
-AC_SUBST(LIBGPM)
+AC_SUBST([LIBGPM])
 
 dnl Check for malloc/malloc.h on darwin
-AC_CHECK_HEADERS_ONCE(malloc/malloc.h)
+AC_CHECK_HEADERS_ONCE([malloc/malloc.h])
 
 GNUSTEP_CFLAGS=
 ### Use NeXTstep API to implement GUI.
 if test "${HAVE_NS}" = "yes"; then
-  AC_DEFINE(HAVE_NS, 1, [Define to 1 if you are using the NeXTstep API, either 
GNUstep or Cocoa on macOS.])
+  AC_DEFINE([HAVE_NS], [1],
+    [Define to 1 if you are using the NeXTstep API,
+     either GNUstep or Cocoa on macOS.])
   if test "${NS_IMPL_COCOA}" = "yes"; then
-    AC_DEFINE(NS_IMPL_COCOA, 1, [Define to 1 if you are using NS windowing 
under macOS.])
+    AC_DEFINE([NS_IMPL_COCOA], [1],
+      [Define to 1 if you are using NS windowing under macOS.])
   fi
   if test "${NS_IMPL_GNUSTEP}" = "yes"; then
-    AC_DEFINE(NS_IMPL_GNUSTEP, 1, [Define to 1 if you are using NS windowing 
under GNUstep.])
+    AC_DEFINE([NS_IMPL_GNUSTEP], [1],
+      [Define to 1 if you are using NS windowing under GNUstep.])
     if test $NS_GNUSTEP_CONFIG != yes; then
       # See also .m.o rule in src/Makefile.in.  */
       # FIXME: are all these flags really needed?  Document here why.  */
@@ -4526,15 +4586,16 @@ fi
 HAVE_X_SM=no
 LIBXSM=
 if test "${HAVE_X11}" = "yes"; then
-  AC_CHECK_HEADER(X11/SM/SMlib.h,
-    [AC_CHECK_LIB(SM, SmcOpenConnection, HAVE_X_SM=yes, , -lICE)])
+  AC_CHECK_HEADER([X11/SM/SMlib.h],
+    [AC_CHECK_LIB([SM], [SmcOpenConnection], [HAVE_X_SM=yes], [], [-lICE])])
 
   if test "${HAVE_X_SM}" = "yes"; then
-    AC_DEFINE(HAVE_X_SM, 1, [Define to 1 if you have the SM library (-lSM).])
+    AC_DEFINE([HAVE_X_SM], [1],
+      [Define to 1 if you have the SM library (-lSM).])
     LIBXSM="-lSM -lICE"
   fi
 fi
-AC_SUBST(LIBXSM)
+AC_SUBST([LIBXSM])
 
 ### Use XRandr (-lXrandr) if available
 HAVE_XRANDR=no
@@ -4546,8 +4607,8 @@ if test "${HAVE_X11}" = "yes"; then
     # Test old way in case pkg-config doesn't have it (older machines).
     # Include Xrender.h by hand to work around bug in older Xrandr.h
     # (e.g. RHEL5) and silence (harmless) configure warning (bug#18465).
-    AC_CHECK_HEADER(X11/extensions/Xrandr.h,
-      [AC_CHECK_LIB(Xrandr, XRRGetScreenResources, HAVE_XRANDR=yes)],
+    AC_CHECK_HEADER([X11/extensions/Xrandr.h],
+      [AC_CHECK_LIB([Xrandr], [XRRGetScreenResources], [HAVE_XRANDR=yes])],
       [], [AC_INCLUDES_DEFAULT
 #include <X11/extensions/Xrender.h>])
     if test $HAVE_XRANDR = yes; then
@@ -4555,11 +4616,12 @@ if test "${HAVE_X11}" = "yes"; then
     fi
   fi
   if test $HAVE_XRANDR = yes; then
-    AC_DEFINE(HAVE_XRANDR, 1, [Define to 1 if you have the XRandr extension.])
+    AC_DEFINE([HAVE_XRANDR], [1],
+      [Define to 1 if you have the XRandr extension.])
   fi
 fi
-AC_SUBST(XRANDR_CFLAGS)
-AC_SUBST(XRANDR_LIBS)
+AC_SUBST([XRANDR_CFLAGS])
+AC_SUBST([XRANDR_LIBS])
 
 ### Use Xinerama (-lXinerama) if available
 HAVE_XINERAMA=no
@@ -4569,18 +4631,20 @@ if test "${HAVE_X11}" = "yes"; then
   EMACS_CHECK_MODULES([XINERAMA], [$XINERAMA_MODULES])
   if test $HAVE_XINERAMA = no; then
     # Test old way in case pkg-config doesn't have it (older machines).
-    AC_CHECK_HEADER(X11/extensions/Xinerama.h,
-      [AC_CHECK_LIB(Xinerama, XineramaQueryExtension, HAVE_XINERAMA=yes)])
+    AC_CHECK_HEADER([X11/extensions/Xinerama.h],
+      [AC_CHECK_LIB([Xinerama], [XineramaQueryExtension],
+        [HAVE_XINERAMA=yes])])
     if test $HAVE_XINERAMA = yes; then
       XINERAMA_LIBS=-lXinerama
     fi
   fi
   if test $HAVE_XINERAMA = yes; then
-    AC_DEFINE(HAVE_XINERAMA, 1, [Define to 1 if you have the Xinerama 
extension.])
+    AC_DEFINE([HAVE_XINERAMA], [1],
+      [Define to 1 if you have the Xinerama extension.])
   fi
 fi
-AC_SUBST(XINERAMA_CFLAGS)
-AC_SUBST(XINERAMA_LIBS)
+AC_SUBST([XINERAMA_CFLAGS])
+AC_SUBST([XINERAMA_LIBS])
 
 ### Use Xfixes (-lXfixes) if available
 HAVE_XFIXES=no
@@ -4590,18 +4654,19 @@ if test "${HAVE_X11}" = "yes"; then
   EMACS_CHECK_MODULES([XFIXES], [$XFIXES_MODULES])
   if test $HAVE_XFIXES = no; then
     # Test old way in case pkg-config doesn't have it (older machines).
-    AC_CHECK_HEADER(X11/extensions/Xfixes.h,
-      [AC_CHECK_LIB(Xfixes, XFixesHideCursor, HAVE_XFIXES=yes)])
+    AC_CHECK_HEADER([X11/extensions/Xfixes.h],
+      [AC_CHECK_LIB([Xfixes], [XFixesHideCursor], [HAVE_XFIXES=yes])])
     if test $HAVE_XFIXES = yes; then
       XFIXES_LIBS=-lXfixes
     fi
   fi
   if test $HAVE_XFIXES = yes; then
-    AC_DEFINE(HAVE_XFIXES, 1, [Define to 1 if you have the Xfixes extension.])
+    AC_DEFINE([HAVE_XFIXES], [1],
+      [Define to 1 if you have the Xfixes extension.])
   fi
 fi
-AC_SUBST(XFIXES_CFLAGS)
-AC_SUBST(XFIXES_LIBS)
+AC_SUBST([XFIXES_CFLAGS])
+AC_SUBST([XFIXES_LIBS])
 
 ## Use XInput 2.0 if available
 HAVE_XINPUT2=no
@@ -4609,11 +4674,12 @@ if test "${HAVE_X11}" = "yes" && test "${with_xinput2}" 
!= "no"; then
    EMACS_CHECK_MODULES([XINPUT], [xi])
    if test $HAVE_XINPUT = yes; then
      # Now check for XInput2.h
-     AC_CHECK_HEADER(X11/extensions/XInput2.h,
-       [AC_CHECK_LIB(Xi, XIGrabButton, HAVE_XINPUT2=yes)])
+     AC_CHECK_HEADER([X11/extensions/XInput2.h],
+       [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 or later 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.])
@@ -4627,31 +4693,36 @@ This might lead to problems if your version of GTK+ is 
not built with support fo
        [], [], [#include <X11/extensions/XInput2.h>])
    fi
 fi
-AC_SUBST(XINPUT_CFLAGS)
-AC_SUBST(XINPUT_LIBS)
+AC_SUBST([XINPUT_CFLAGS])
+AC_SUBST([XINPUT_LIBS])
 
 XSYNC_LIBS=
 XSYNC_CFLAGS=
 HAVE_XSYNC=no
 if test "${HAVE_X11}" = "yes"; then
-   AC_CHECK_HEADER(X11/extensions/sync.h,
-     AC_CHECK_LIB(Xext, XSyncQueryExtension, HAVE_XSYNC=yes),
+   AC_CHECK_HEADER([X11/extensions/sync.h],
+     [AC_CHECK_LIB([Xext], [XSyncQueryExtension], [HAVE_XSYNC=yes])],
      [], [#include <X11/Xlib.h>])
 
   if test "${HAVE_XSYNC}" = "yes"; then
-    AC_DEFINE(HAVE_XSYNC, 1, [Define to 1 if the X Synchronization Extension 
is available.])
+    AC_DEFINE([HAVE_XSYNC], [1],
+      [Define to 1 if the X Synchronization Extension is available.])
     XSYNC_LIBS="-lXext"
+    OLDLIBS="$LIBS"
+    LIBS="-lXext $LIBS" # Set this temporarily for AC_CHECK_FUNC
+    AC_CHECK_FUNCS([XSyncTriggerFence]) # Check for version 3.1
+    LIBS="$OLDLIBS"
   fi
 fi
-AC_SUBST(XSYNC_LIBS)
-AC_SUBST(XSYNC_CFLAGS)
+AC_SUBST([XSYNC_LIBS])
+AC_SUBST([XSYNC_CFLAGS])
 
 ### Use Xdbe (-lXdbe) if available
 HAVE_XDBE=no
 if test "${HAVE_X11}" = "yes"; then
   if test "${with_xdbe}" != "no"; then
-    AC_CHECK_HEADER(X11/extensions/Xdbe.h,
-      [AC_CHECK_LIB(Xext, XdbeAllocateBackBufferName, HAVE_XDBE=yes)],
+    AC_CHECK_HEADER([X11/extensions/Xdbe.h],
+      [AC_CHECK_LIB([Xext], [XdbeAllocateBackBufferName], [HAVE_XDBE=yes])],
       [],
       [#include <X11/Xlib.h>
       ])
@@ -4660,44 +4731,49 @@ if test "${HAVE_X11}" = "yes"; then
     XDBE_LIBS=-lXext
   fi
   if test $HAVE_XDBE = yes; then
-    AC_DEFINE(HAVE_XDBE, 1, [Define to 1 if you have the Xdbe extension.])
+    AC_DEFINE([HAVE_XDBE], [1], [Define to 1 if you have the Xdbe extension.])
   fi
 fi
-AC_SUBST(XDBE_CFLAGS)
-AC_SUBST(XDBE_LIBS)
+AC_SUBST([XDBE_CFLAGS])
+AC_SUBST([XDBE_LIBS])
 
 ### Use the Nonrectangular Window Shape extension if available.
 HAVE_XSHAPE=no
 HAVE_XCB_SHAPE=no
 if test "${HAVE_X11}" = "yes"; then
-  AC_CHECK_HEADER(X11/extensions/shape.h,
-    [AC_CHECK_LIB(Xext, XShapeQueryVersion, HAVE_XSHAPE=yes)],
+  AC_CHECK_HEADER([X11/extensions/shape.h],
+    [AC_CHECK_LIB([Xext], [XShapeQueryVersion], [HAVE_XSHAPE=yes])],
     [],
     [#include <X11/extensions/shape.h>
     ])
   if test $HAVE_XSHAPE = yes; then
     XSHAPE_LIBS=-lXext
-    AC_CHECK_HEADER(xcb/shape.h,
-      [AC_CHECK_LIB(xcb-shape, xcb_shape_combine, HAVE_XCB_SHAPE=yes)], [],
+    AC_CHECK_HEADER([xcb/shape.h],
+      [AC_CHECK_LIB([xcb-shape], [xcb_shape_combine], [HAVE_XCB_SHAPE=yes])],
+      [],
       [#include <xcb/shape.h>])
 
     if test $HAVE_XCB_SHAPE = yes && test "$XCB_LIBS" != ""; then
       XSHAPE_LIBS="$XSHAPE_LIBS -lxcb-shape"
-      AC_DEFINE(HAVE_XCB_SHAPE, 1, [Define to 1 if XCB supports the 
Nonrectangular Window Shape extension.])
+      AC_DEFINE([HAVE_XCB_SHAPE], [1],
+       [Define to 1 if XCB supports the
+        Nonrectangular Window Shape extension.])
     fi
   fi
   if test $HAVE_XSHAPE = yes; then
-    AC_DEFINE(HAVE_XSHAPE, 1, [Define to 1 if you have the Nonrectangular 
Window Shape extension.])
+    AC_DEFINE([HAVE_XSHAPE], [1],
+      [Define to 1 if you have the Nonrectangular Window Shape extension.])
   fi
 fi
-AC_SUBST(XSHAPE_CFLAGS)
-AC_SUBST(XSHAPE_LIBS)
+AC_SUBST([XSHAPE_CFLAGS])
+AC_SUBST([XSHAPE_LIBS])
 
 ### Use Xcomposite (-lXcomposite) if available
 HAVE_XCOMPOSITE=no
 if test "${HAVE_X11}" = "yes"; then
-  AC_CHECK_HEADER(X11/extensions/Xcomposite.h,
-    [AC_CHECK_LIB(Xcomposite, XCompositeRedirectWindow, HAVE_XCOMPOSITE=yes)],
+  AC_CHECK_HEADER([X11/extensions/Xcomposite.h],
+    [AC_CHECK_LIB([Xcomposite], [XCompositeRedirectWindow],
+       [HAVE_XCOMPOSITE=yes])],
     [],
     [#include <X11/extensions/Xcomposite.h>
     ])
@@ -4705,11 +4781,12 @@ if test "${HAVE_X11}" = "yes"; then
     XCOMPOSITE_LIBS=-lXcomposite
   fi
   if test $HAVE_XCOMPOSITE = yes; then
-    AC_DEFINE(HAVE_XCOMPOSITE, 1, [Define to 1 if you have the XCOMPOSITE 
extension.])
+    AC_DEFINE([HAVE_XCOMPOSITE], [1],
+      [Define to 1 if you have the XCOMPOSITE extension.])
   fi
 fi
-AC_SUBST(XCOMPOSITE_CFLAGS)
-AC_SUBST(XCOMPOSITE_LIBS)
+AC_SUBST([XCOMPOSITE_CFLAGS])
+AC_SUBST([XCOMPOSITE_LIBS])
 
 ### Use libxml (-lxml2) if available
 ### mingw32 doesn't use -lxml2, since it loads the library dynamically.
@@ -4729,8 +4806,8 @@ if test "${with_xml2}" != "no"; then
       esac
     fi
     CPPFLAGS="$CPPFLAGS -isystem${xcsdkdir}/usr/include/libxml2"
-    AC_CHECK_HEADER(libxml/HTMLparser.h,
-      [AC_CHECK_DECL(HTML_PARSE_RECOVER, HAVE_LIBXML2=yes, ,
+    AC_CHECK_HEADER([libxml/HTMLparser.h],
+      [AC_CHECK_DECL([HTML_PARSE_RECOVER], [HAVE_LIBXML2=yes], [],
                     [#include <libxml/HTMLparser.h>])])
     CPPFLAGS="$SAVE_CPPFLAGS"
     if test "${HAVE_LIBXML2}" = "yes"; then
@@ -4740,21 +4817,24 @@ if test "${with_xml2}" != "no"; then
   fi
   if test "${HAVE_LIBXML2}" = "yes"; then
     if test "${opsys}" != "mingw32"; then
-      AC_CHECK_LIB(xml2, htmlReadMemory, HAVE_LIBXML2=yes, HAVE_LIBXML2=no,
+      AC_CHECK_LIB([xml2], [htmlReadMemory],
+       [HAVE_LIBXML2=yes],
+       [HAVE_LIBXML2=no],
         [$LIBXML2_LIBS])
     else
       LIBXML2_LIBS=""
     fi
     if test "${HAVE_LIBXML2}" = "yes"; then
-      AC_DEFINE(HAVE_LIBXML2, 1, [Define to 1 if you have the libxml library 
(-lxml2).])
+      AC_DEFINE([HAVE_LIBXML2], [1],
+       [Define to 1 if you have the libxml library (-lxml2).])
     else
       LIBXML2_LIBS=""
       LIBXML2_CFLAGS=""
     fi
   fi
 fi
-AC_SUBST(LIBXML2_LIBS)
-AC_SUBST(LIBXML2_CFLAGS)
+AC_SUBST([LIBXML2_LIBS])
+AC_SUBST([LIBXML2_CFLAGS])
 
 BLESSMAIL_TARGET=
 LIBS_MAIL=
@@ -4858,9 +4938,13 @@ AC_SUBST([HAVE_LIBSECCOMP])
 AC_SUBST([LIBSECCOMP_LIBS])
 AC_SUBST([LIBSECCOMP_CFLAGS])
 
+AC_CHECK_SIZEOF([long])
+SIZEOF_LONG="$ac_cv_sizeof_long"
+AC_SUBST([SIZEOF_LONG])
+
 OLD_LIBS=$LIBS
 LIBS="$LIB_PTHREAD $LIB_MATH $LIBS"
-AC_CHECK_FUNCS(accept4 fchdir gethostname \
+AC_CHECK_FUNCS([accept4 fchdir gethostname \
 getrusage get_current_dir_name \
 lrand48 random rint trunc \
 select getpagesize setlocale newlocale \
@@ -4870,7 +4954,7 @@ sendto recvfrom getsockname getifaddrs freeifaddrs \
 gai_strerror sync \
 getpwent endpwent getgrent endgrent \
 cfmakeraw cfsetspeed __executable_start log2 pthread_setname_np \
-pthread_set_name_np)
+pthread_set_name_np])
 LIBS=$OLD_LIBS
 
 if test "$ac_cv_func_pthread_setname_np" = "yes"; then
@@ -4885,7 +4969,7 @@ if test "$ac_cv_func_pthread_setname_np" = "yes"; then
      [emacs_cv_pthread_setname_np_1arg=no])])
   if test "$emacs_cv_pthread_setname_np_1arg" = "yes"; then
     AC_DEFINE(
-      HAVE_PTHREAD_SETNAME_NP_1ARG, 1,
+      [HAVE_PTHREAD_SETNAME_NP_1ARG], [1],
       [Define to 1 if pthread_setname_np takes a single argument.])
   else
     AC_CACHE_CHECK(
@@ -4899,7 +4983,7 @@ if test "$ac_cv_func_pthread_setname_np" = "yes"; then
        [emacs_cv_pthread_setname_np_3arg=no])])
      if test "$emacs_cv_pthread_setname_np_3arg" = "yes"; then
        AC_DEFINE(
-         HAVE_PTHREAD_SETNAME_NP_3ARG, 1,
+        [HAVE_PTHREAD_SETNAME_NP_3ARG], [1],
          [Define to 1 if pthread_setname_np takes three arguments.])
      fi
   fi
@@ -4932,28 +5016,28 @@ AC_CACHE_CHECK([for __builtin_frame_address],
      [emacs_cv_func___builtin_frame_address=yes],
      [emacs_cv_func___builtin_frame_address=no])])
 if test $emacs_cv_func___builtin_frame_address = yes; then
-  AC_DEFINE([HAVE___BUILTIN_FRAME_ADDRESS], 1,
+  AC_DEFINE([HAVE___BUILTIN_FRAME_ADDRESS], [1],
            [Define to 1 if you have the '__builtin_frame_address' function.])
 fi
 AC_CACHE_CHECK([for __builtin_unwind_init],
-              emacs_cv_func___builtin_unwind_init,
+              [emacs_cv_func___builtin_unwind_init],
 [AC_LINK_IFELSE([AC_LANG_PROGRAM([], [__builtin_unwind_init ();])],
-               emacs_cv_func___builtin_unwind_init=yes,
-               emacs_cv_func___builtin_unwind_init=no)])
+               [emacs_cv_func___builtin_unwind_init=yes],
+               [emacs_cv_func___builtin_unwind_init=no])])
 if test $emacs_cv_func___builtin_unwind_init = yes; then
-  AC_DEFINE(HAVE___BUILTIN_UNWIND_INIT, 1,
+  AC_DEFINE([HAVE___BUILTIN_UNWIND_INIT], [1],
            [Define to 1 if you have the '__builtin_unwind_init' function.])
 fi
 
-AC_CHECK_HEADERS_ONCE(sys/un.h)
+AC_CHECK_HEADERS_ONCE([sys/un.h])
 
 AC_FUNC_FSEEKO
 
 # UNIX98 PTYs.
-AC_CHECK_FUNCS(grantpt)
+AC_CHECK_FUNCS([grantpt])
 
 # PTY-related GNU extensions.
-AC_CHECK_FUNCS(getpt posix_openpt)
+AC_CHECK_FUNCS([getpt posix_openpt])
 
 dnl Run a test program that contains a call to tputs, a call that is
 dnl never executed.  This tests whether a pre-'main' dynamic linker
@@ -5025,14 +5109,15 @@ case "$opsys" in
 
   freebsd)
     AC_MSG_CHECKING([whether FreeBSD is new enough to use terminfo])
-    AC_CACHE_VAL(emacs_cv_freebsd_terminfo,
+    AC_CACHE_VAL([emacs_cv_freebsd_terminfo],
     [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <osreldate.h>]],
 [[#if __FreeBSD_version < 400000
 fail;
 #endif
-]])], emacs_cv_freebsd_terminfo=yes, emacs_cv_freebsd_terminfo=no)])
+]])], [emacs_cv_freebsd_terminfo=yes],
+      [emacs_cv_freebsd_terminfo=no])])
 
-    AC_MSG_RESULT($emacs_cv_freebsd_terminfo)
+    AC_MSG_RESULT([$emacs_cv_freebsd_terminfo])
 
     if test $emacs_cv_freebsd_terminfo = yes; then
       LIBS_TERMCAP="-lncurses"
@@ -5067,7 +5152,8 @@ esac
 
 TERMCAP_OBJ=tparam.o
 if test $TERMINFO = yes; then
-  AC_DEFINE(TERMINFO, 1, [Define to 1 if you use terminfo instead of termcap.])
+  AC_DEFINE([TERMINFO], [1],
+    [Define to 1 if you use terminfo instead of termcap.])
   TERMCAP_OBJ=terminfo.o
   AC_CACHE_CHECK([whether $LIBS_TERMCAP library defines BC],
     [emacs_cv_terminfo_defines_BC],
@@ -5078,15 +5164,15 @@ if test $TERMINFO = yes; then
        [emacs_cv_terminfo_defines_BC=no])
      LIBS=$OLD_LIBS])
   if test "$emacs_cv_terminfo_defines_BC" = yes; then
-    AC_DEFINE([TERMINFO_DEFINES_BC], 1, [Define to 1 if the
+    AC_DEFINE([TERMINFO_DEFINES_BC], [1], [Define to 1 if the
       terminfo library defines the variables BC, PC, and UP.])
   fi
 fi
 if test "X$LIBS_TERMCAP" = "X-lncurses"; then
-  AC_DEFINE(USE_NCURSES, 1, [Define to 1 if you use ncurses.])
+  AC_DEFINE([USE_NCURSES], [1], [Define to 1 if you use ncurses.])
 fi
-AC_SUBST(LIBS_TERMCAP)
-AC_SUBST(TERMCAP_OBJ)
+AC_SUBST([LIBS_TERMCAP])
+AC_SUBST([TERMCAP_OBJ])
 
 # GNU/Linux-specific timer functions.
 AC_CACHE_CHECK([for timerfd interface], [emacs_cv_have_timerfd],
@@ -5099,7 +5185,7 @@ AC_CACHE_CHECK([for timerfd interface], 
[emacs_cv_have_timerfd],
      [emacs_cv_have_timerfd=yes],
      [emacs_cv_have_timerfd=no])])
 if test "$emacs_cv_have_timerfd" = yes; then
-  AC_DEFINE([HAVE_TIMERFD], 1,
+  AC_DEFINE([HAVE_TIMERFD], [1],
     [Define to 1 if timerfd functions are supported as in GNU/Linux.])
 fi
 
@@ -5126,25 +5212,26 @@ LIBRESOLV=
 if test "$with_hesiod" != no ; then
   # Don't set $LIBS here -- see comments above.  FIXME which comments?
   resolv=no
-  AC_CHECK_FUNC(res_send, , [AC_CHECK_FUNC(__res_send, ,
-     [AC_CHECK_LIB(resolv, res_send, resolv=yes,
-                 [AC_CHECK_LIB(resolv, __res_send, resolv=yes)])])])
+  AC_CHECK_FUNC([res_send], [], [AC_CHECK_FUNC([__res_send], [],
+     [AC_CHECK_LIB([resolv], [res_send], [resolv=yes],
+                 [AC_CHECK_LIB([resolv], [__res_send], [resolv=yes])])])])
   if test "$resolv" = yes ; then
     RESOLVLIB=-lresolv
   else
     RESOLVLIB=
   fi
   hesiod=no
-  AC_CHECK_FUNC(hes_getmailhost, , [AC_CHECK_LIB(hesiod, hes_getmailhost,
-       hesiod=yes, :, $RESOLVLIB)])
+  AC_CHECK_FUNC([hes_getmailhost], [],
+    [AC_CHECK_LIB([hesiod], [hes_getmailhost],
+       [hesiod=yes], [:], [$RESOLVLIB])])
 
   if test x"$hesiod" = xyes; then
     LIBHESIOD=-lhesiod
     LIBRESOLV=$RESOLVLIB
   fi
 fi
-AC_SUBST(LIBHESIOD)
-AC_SUBST(LIBRESOLV)
+AC_SUBST([LIBHESIOD])
+AC_SUBST([LIBRESOLV])
 
 # These tell us which Kerberos-related libraries to use.
 COM_ERRLIB=
@@ -5155,45 +5242,51 @@ KRB4LIB=
 
 if test "${with_kerberos}" != no; then
   OLD_LIBS=$LIBS
-  AC_CHECK_LIB(com_err, com_err, have_com_err=yes, have_com_err=no)
+  AC_CHECK_LIB([com_err], [com_err], [have_com_err=yes], [have_com_err=no])
   if test $have_com_err = yes; then
     COM_ERRLIB=-lcom_err
     LIBS="$COM_ERRLIB $LIBS"
   fi
-  AC_CHECK_LIB(crypto, mit_des_cbc_encrypt, have_crypto=yes, have_crypto=no)
+  AC_CHECK_LIB([crypto], [mit_des_cbc_encrypt],
+    [have_crypto=yes],
+    [have_crypto=no])
   if test $have_crypto = yes; then
     CRYPTOLIB=-lcrypto
     LIBS="$CRYPTOLIB $LIBS"
   fi
-  AC_CHECK_LIB(k5crypto, mit_des_cbc_encrypt, have_k5crypto=yes, 
have_k5crypto=no)
+  AC_CHECK_LIB([k5crypto], [mit_des_cbc_encrypt],
+    [have_k5crypto=yes],
+    [have_k5crypto=no])
   if test $have_k5crypto = yes; then
     CRYPTOLIB=-lk5crypto
     LIBS="$CRYPTOLIB $LIBS"
   fi
-  AC_CHECK_LIB(krb5, krb5_init_context, have_krb5=yes, have_krb5=no)
+  AC_CHECK_LIB([krb5], [krb5_init_context], [have_krb5=yes], [have_krb5=no])
   if test $have_krb5=yes; then
     KRB5LIB=-lkrb5
     LIBS="$KRB5LIB $LIBS"
   fi
   dnl FIXME Simplify.  Does not match 22 logic, thanks to default_off?
   if test "${with_kerberos5}" = no; then
-    AC_CHECK_LIB(des425, des_cbc_encrypt, have_des425=yes, have_des425=no )
+    AC_CHECK_LIB([des425], [des_cbc_encrypt],
+      [have_des425=yes],
+      [have_des425=no])
     if test $have_des425 = yes; then
       DESLIB=-ldes425
       LIBS="$DESLIB $LIBS"
     else
-      AC_CHECK_LIB(des, des_cbc_encrypt, have_des=yes, have_des=no)
+      AC_CHECK_LIB([des], [des_cbc_encrypt], [have_des=yes], [have_des=no])
       if test $have_des = yes; then
         DESLIB=-ldes
         LIBS="$DESLIB $LIBS"
       fi
     fi
-    AC_CHECK_LIB(krb4, krb_get_cred, have_krb4=yes, have_krb4=no)
+    AC_CHECK_LIB([krb4], [krb_get_cred], [have_krb4=yes], [have_krb4=no])
     if test $have_krb4 = yes; then
       KRB4LIB=-lkrb4
       LIBS="$KRB4LIB $LIBS"
     else
-      AC_CHECK_LIB(krb, krb_get_cred, have_krb=yes, have_krb=no)
+      AC_CHECK_LIB([krb], [krb_get_cred], [have_krb=yes], [have_krb=no])
       if test $have_krb = yes; then
         KRB4LIB=-lkrb
         LIBS="$KRB4LIB $LIBS"
@@ -5202,25 +5295,25 @@ if test "${with_kerberos}" != no; then
   fi
 
   if test "${with_kerberos5}" != no; then
-    AC_CHECK_HEADERS(krb5.h,
-      [AC_CHECK_MEMBERS([krb5_error.text, krb5_error.e_text],,,
+    AC_CHECK_HEADERS([krb5.h],
+      [AC_CHECK_MEMBERS([krb5_error.text, krb5_error.e_text], [], [],
                        [#include <krb5.h>])])
   else
-    AC_CHECK_HEADERS(krb.h,,
-                    [AC_CHECK_HEADERS(kerberosIV/krb.h,,
-                                      [AC_CHECK_HEADERS(kerberos/krb.h)])])
+    AC_CHECK_HEADERS([krb.h], [],
+                    [AC_CHECK_HEADERS([kerberosIV/krb.h], [],
+                                      [AC_CHECK_HEADERS([kerberos/krb.h])])])
   fi
-  AC_CHECK_HEADERS(com_err.h)
+  AC_CHECK_HEADERS([com_err.h])
   LIBS=$OLD_LIBS
 fi
 
-AC_SUBST(COM_ERRLIB)
-AC_SUBST(CRYPTOLIB)
-AC_SUBST(KRB5LIB)
-AC_SUBST(DESLIB)
-AC_SUBST(KRB4LIB)
+AC_SUBST([COM_ERRLIB])
+AC_SUBST([CRYPTOLIB])
+AC_SUBST([KRB5LIB])
+AC_SUBST([DESLIB])
+AC_SUBST([KRB4LIB])
 
-AC_CHECK_HEADERS(valgrind/valgrind.h)
+AC_CHECK_HEADERS([valgrind/valgrind.h])
 
 AC_CHECK_MEMBERS([struct unipair.unicode], [], [], [[#include <linux/kd.h>]])
 
@@ -5230,7 +5323,7 @@ AC_FUNC_FORK
 
 dnl AC_CHECK_FUNCS_ONCE wouldn’t be right for snprintf, which needs
 dnl the current CFLAGS etc.
-AC_CHECK_FUNCS(snprintf)
+AC_CHECK_FUNCS([snprintf])
 
 dnl posix_spawn.  The chdir and setsid functionality is relatively
 dnl recent, so we check for it specifically.
@@ -5274,12 +5367,12 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM(
 CFLAGS="$OLDCFLAGS"
 LIBS="$OLDLIBS"])
 if test "${emacs_cv_links_glib}" = "yes"; then
-  AC_DEFINE(HAVE_GLIB, 1, [Define to 1 if GLib is linked in.])
+  AC_DEFINE([HAVE_GLIB], [1], [Define to 1 if GLib is linked in.])
   if test "$HAVE_NS" = no ; then
     XGSELOBJ=xgselect.o
   fi
 fi
-AC_SUBST(XGSELOBJ)
+AC_SUBST([XGSELOBJ])
 
 dnl Adapted from Haible's version.
 AC_CACHE_CHECK([for nl_langinfo and CODESET], [emacs_cv_langinfo_codeset],
@@ -5289,7 +5382,7 @@ AC_CACHE_CHECK([for nl_langinfo and CODESET], 
[emacs_cv_langinfo_codeset],
     [emacs_cv_langinfo_codeset=no])
   ])
 if test "$emacs_cv_langinfo_codeset" = yes; then
-  AC_DEFINE([HAVE_LANGINFO_CODESET], 1,
+  AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
     [Define if you have <langinfo.h> and nl_langinfo (CODESET).])
 
   AC_CACHE_CHECK([for nl_langinfo and _NL_PAPER_WIDTH],
@@ -5300,7 +5393,7 @@ if test "$emacs_cv_langinfo_codeset" = yes; then
       [emacs_cv_langinfo__nl_paper_width=no])
     ])
   if test "$emacs_cv_langinfo__nl_paper_width" = yes; then
-    AC_DEFINE([HAVE_LANGINFO__NL_PAPER_WIDTH], 1,
+    AC_DEFINE([HAVE_LANGINFO__NL_PAPER_WIDTH], [1],
       [Define if you have <langinfo.h> and nl_langinfo (_NL_PAPER_WIDTH).])
   fi
 fi
@@ -5313,15 +5406,17 @@ dnl The following looks like a useful start.
 dnl
 dnl AC_SYS_POSIX_TERMIOS
 dnl if test $ac_cv_sys_posix_termios = yes; then
-dnl    AC_DEFINE(HAVE_TERMIOS, 1, [Define to 1 if you have POSIX-style 
functions
-dnl                                and macros for terminal control.])
-dnl    AC_DEFINE(HAVE_TCATTR, 1, [Define to 1 if you have tcgetattr and 
tcsetattr.])
+dnl    AC_DEFINE([HAVE_TERMIOS], [1],
+dnl      [Define to 1 if you have POSIX-style
+dnl       functions and macros for terminal control.])
+dnl    AC_DEFINE([HAVE_TCATTR], [1],
+dnl      [Define to 1 if you have tcgetattr and tcsetattr.])
 dnl fi
 
 dnl Turned on June 1996 supposing nobody will mind it.
 dnl MinGW emulates passwd database, so this feature doesn't make sense there.
 if test "${opsys}" != "mingw32"; then
-   AC_DEFINE(AMPERSAND_FULL_NAME, 1, [Define to use the convention that &
+   AC_DEFINE([AMPERSAND_FULL_NAME], [1], [Define to use the convention that &
      in the full name stands for the login id.])
 fi
 
@@ -5329,22 +5424,23 @@ dnl Everybody supports this, except MS.
 dnl Seems like the kind of thing we should be testing for, though.
 ## Note: PTYs are broken on darwin <6.  Use at your own risk.
 if test "${opsys}" != "mingw32"; then
-  AC_DEFINE(HAVE_PTYS, 1, [Define if the system supports pty devices.])
+  AC_DEFINE([HAVE_PTYS], [1], [Define if the system supports pty devices.])
 fi
 
 dnl Everybody supports this, except MS-DOS.
 dnl Seems like the kind of thing we should be testing for, though.
-AC_DEFINE(HAVE_SOCKETS, 1, [Define if the system supports
+AC_DEFINE([HAVE_SOCKETS], [1], [Define if the system supports
   4.2-compatible sockets.])
 
-AH_TEMPLATE(INTERNAL_TERMINAL, [This is substituted when $TERM is "internal".])
+AH_TEMPLATE([INTERNAL_TERMINAL],
+  [This is substituted when $TERM is "internal".])
 
-AH_TEMPLATE(NULL_DEVICE, [Name of the file to open to get
+AH_TEMPLATE([NULL_DEVICE], [Name of the file to open to get
   a null file, or a data sink.])
 if test "${opsys}" = "mingw32"; then
-  AC_DEFINE(NULL_DEVICE, ["NUL:"])
+  AC_DEFINE([NULL_DEVICE], ["NUL:"])
 else
-  AC_DEFINE(NULL_DEVICE, ["/dev/null"])
+  AC_DEFINE([NULL_DEVICE], ["/dev/null"])
 fi
 
 if test "${opsys}" = "mingw32"; then
@@ -5352,7 +5448,8 @@ if test "${opsys}" = "mingw32"; then
 else
   SEPCHAR=':'
 fi
-AC_DEFINE_UNQUOTED(SEPCHAR, ['$SEPCHAR'], [Character that separates PATH 
elements.])
+AC_DEFINE_UNQUOTED([SEPCHAR], ['$SEPCHAR'],
+  [Character that separates PATH elements.])
 dnl This is for MinGW, and is used in test/Makefile.in.
 dnl The MSYS Bash has heuristics for replacing ':' with ';' when it
 dnl decides that a command-line argument to be passed to a MinGW program
@@ -5362,34 +5459,35 @@ dnl sees a colon-separated list of file names; e.g. 
":." is left alone,
 dnl which breaks in-tree builds.  So we do this manually instead.
 dnl Note that we cannot rely on PATH_SEPARATOR, as that one will always
 dnl be computed as ':' in MSYS Bash.
-AC_SUBST(SEPCHAR)
+AC_SUBST([SEPCHAR])
 
 dnl Everybody supports this, except MS-DOS.
-AC_DEFINE(subprocesses, 1, [Define to enable asynchronous subprocesses.])
+AC_DEFINE([subprocesses], [1], [Define to enable asynchronous subprocesses.])
 
-AC_DEFINE(USER_FULL_NAME, [pw->pw_gecos], [How to get a user's full name.])
+AC_DEFINE([USER_FULL_NAME], [pw->pw_gecos], [How to get a user's full name.])
 
 
-AC_DEFINE(DIRECTORY_SEP, ['/'],
+AC_DEFINE([DIRECTORY_SEP], ['/'],
   [Character that separates directories in a file name.])
 
 if test "${opsys}" = "mingw32"; then
-  AC_DEFINE(IS_DEVICE_SEP(_c_), [((_c_) == ':')],
+  AC_DEFINE([IS_DEVICE_SEP(_c_)], [((_c_) == ':')],
     [Returns true if character is a device separator.])
 
-  AC_DEFINE(IS_DIRECTORY_SEP(_c_), [((_c_) == '/' || (_c_) == '\\')],
+  AC_DEFINE([IS_DIRECTORY_SEP(_c_)], [((_c_) == '/' || (_c_) == '\\')],
     [Returns true if character is a directory separator.])
 
-  AC_DEFINE(IS_ANY_SEP(_c_), [(IS_DIRECTORY_SEP (_c_) || IS_DEVICE_SEP(_c_))],
+  AC_DEFINE([IS_ANY_SEP(_c_)],
+    [(IS_DIRECTORY_SEP (_c_) || IS_DEVICE_SEP (_c_))],
     [Returns true if character is any form of separator.])
 else
-  AC_DEFINE(IS_DEVICE_SEP(_c_), 0,
+  AC_DEFINE([IS_DEVICE_SEP(_c_)], 0,
     [Returns true if character is a device separator.])
 
-  AC_DEFINE(IS_DIRECTORY_SEP(_c_), [((_c_) == DIRECTORY_SEP)],
+  AC_DEFINE([IS_DIRECTORY_SEP(_c_)], [((_c_) == DIRECTORY_SEP)],
     [Returns true if character is a directory separator.])
 
-  AC_DEFINE(IS_ANY_SEP(_c_), [(IS_DIRECTORY_SEP (_c_))],
+  AC_DEFINE([IS_ANY_SEP(_c_)], [(IS_DIRECTORY_SEP (_c_))],
     [Returns true if character is any form of separator.])
 fi
 
@@ -5414,7 +5512,7 @@ if test "$USE_X_TOOLKIT" != "none"; then
       [[#include <X11/Intrinsic.h>
        #include <X11/Xmu/Editres.h>]],
       [[_XEditResCheckMessages (0, 0, 0, 0);]])],
-      [AC_DEFINE([X_TOOLKIT_EDITRES], 1,
+      [AC_DEFINE([X_TOOLKIT_EDITRES], [1],
         [Define to 1 if we should use XEditRes.])])
     LIBS=$OLDLIBS
   fi
@@ -5426,7 +5524,7 @@ case $opsys in
     dnl instead, there's a system variable _sys_nsig.  Unfortunately, we
     dnl need the constant to dimension an array.  So wire in the appropriate
     dnl value here.
-    AC_DEFINE(NSIG_MINIMUM, 32, [Minimum value of NSIG.])
+    AC_DEFINE([NSIG_MINIMUM], [32], [Minimum value of NSIG.])
     ;;
 esac
 
@@ -5459,7 +5557,7 @@ case $opsys in
     dnl of this file, so that we do not check for get_current_dir_name
     dnl on AIX.  But that might be fragile if something else ends
     dnl up testing for get_current_dir_name as a dependency.
-    AC_DEFINE(BROKEN_GET_CURRENT_DIR_NAME, 1, [Define if
+    AC_DEFINE([BROKEN_GET_CURRENT_DIR_NAME], [1], [Define if
       get_current_dir_name should not be used.])
     ;;
 
@@ -5477,7 +5575,7 @@ case $opsys in
     dnl successfully after processing (for example with CRs added if the
     dnl terminal is set up that way which it is here).  The same bytes will
     dnl be seen again in a later read(2), without the CRs.
-    AC_DEFINE(BROKEN_PTY_READ_AFTER_EAGAIN, 1, [Define on FreeBSD to
+    AC_DEFINE([BROKEN_PTY_READ_AFTER_EAGAIN], [1], [Define on FreeBSD to
       work around an issue when reading from a PTY.])
     ;;
 esac
@@ -5485,13 +5583,13 @@ esac
 case $opsys in
   gnu-* | solaris )
     dnl FIXME Can't we test if this exists (eg /proc/$$)?
-    AC_DEFINE(HAVE_PROCFS, 1, [Define if you have the /proc filesystem.])
+    AC_DEFINE([HAVE_PROCFS], [1], [Define if you have the /proc filesystem.])
   ;;
 esac
 
 case $opsys in
   darwin | dragonfly | freebsd | netbsd | openbsd )
-    AC_DEFINE(DONT_REOPEN_PTY, 1, [Define if process.c does not need to
+    AC_DEFINE([DONT_REOPEN_PTY], [1], [Define if process.c does not need to
       close a pty to make it a controlling terminal (it is already a
       controlling terminal of the subprocess, because we did ioctl 
TIOCSCTTY).])
   ;;
@@ -5504,7 +5602,7 @@ case $opsys in
 esac
 
 dnl Used in sound.c
-AC_DEFINE_UNQUOTED(DEFAULT_SOUND_DEVICE, "$sound_device",
+AC_DEFINE_UNQUOTED([DEFAULT_SOUND_DEVICE], ["$sound_device"],
   [Name of the default sound device.])
 
 
@@ -5531,7 +5629,7 @@ dnl to read the input and send it to the true Emacs 
process
 dnl through a pipe.
 case $opsys in
   darwin | gnu-linux | gnu-kfreebsd)
-    AC_DEFINE(INTERRUPT_INPUT, 1, [Define to read input using SIGIO.])
+    AC_DEFINE([INTERRUPT_INPUT], [1], [Define to read input using SIGIO.])
   ;;
 esac
 
@@ -5543,73 +5641,78 @@ dnl NARROWPROTO, we will see the wrong function 
prototypes for X functions
 dnl taking float or double parameters.
 case $opsys in
   cygwin|gnu|gnu-linux|gnu-kfreebsd|freebsd|netbsd|openbsd)
-    AC_DEFINE(NARROWPROTO, 1, [Define if system's imake configuration
+    AC_DEFINE([NARROWPROTO], [1], [Define if system's imake configuration
       file defines 'NeedWidePrototypes' as 'NO'.])
   ;;
 esac
 
 
 dnl Used in process.c, this must be a loop, even if it only runs once.
-AH_TEMPLATE(PTY_ITERATION, [How to iterate over PTYs.])
+AH_TEMPLATE([PTY_ITERATION], [How to iterate over PTYs.])
 dnl Only used if !PTY_ITERATION.  Iterate from FIRST_PTY_LETTER to z,
 dnl trying suffixes 0-16.
-AH_TEMPLATE(FIRST_PTY_LETTER, [Letter to use in finding device name of
+AH_TEMPLATE([FIRST_PTY_LETTER], [Letter to use in finding device name of
   first PTY, if PTYs are supported.])
-AH_TEMPLATE(PTY_OPEN, [How to open a PTY, if non-standard.])
-AH_TEMPLATE(PTY_NAME_SPRINTF, [How to get the device name of the control
+AH_TEMPLATE([PTY_OPEN], [How to open a PTY, if non-standard.])
+AH_TEMPLATE([PTY_NAME_SPRINTF], [How to get the device name of the control
   end of a PTY, if non-standard.])
-AH_TEMPLATE(PTY_TTY_NAME_SPRINTF, [How to get device name of the tty
+AH_TEMPLATE([PTY_TTY_NAME_SPRINTF], [How to get device name of the tty
   end of a PTY, if non-standard.])
 
 case $opsys in
   aix4-2 )
-    AC_DEFINE(PTY_ITERATION, [int c; for (c = 0; !c ; c++)])
+    AC_DEFINE([PTY_ITERATION], [int c; for (c = 0; !c ; c++)])
     dnl You allocate a pty by opening /dev/ptc to get the master side.
     dnl To get the name of the slave side, you just ttyname() the master side.
-    AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptc");])
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [strcpy (pty_name, ttyname (fd));])
+    AC_DEFINE([PTY_NAME_SPRINTF], [strcpy (pty_name, "/dev/ptc");])
+    AC_DEFINE([PTY_TTY_NAME_SPRINTF], [strcpy (pty_name, ttyname (fd));])
     ;;
 
   cygwin )
-    AC_DEFINE(PTY_ITERATION, [int i; for (i = 0; i < 1; i++)])
+    AC_DEFINE([PTY_ITERATION], [int i; for (i = 0; i < 1; i++)])
     dnl multi-line AC_DEFINEs are hard. :(
-    AC_DEFINE(PTY_OPEN, [ do { int dummy; sigset_t blocked, procmask; 
sigemptyset (&blocked); sigaddset (&blocked, SIGCHLD); pthread_sigmask 
(SIG_BLOCK, &blocked, &procmask); if (-1 == openpty (&fd, &dummy, pty_name, 0, 
0)) fd = -1; pthread_sigmask (SIG_SETMASK, &procmask, 0); if (fd >= 0) 
emacs_close (dummy); } while (false)])
-    AC_DEFINE(PTY_NAME_SPRINTF, [])
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [])
+    AC_DEFINE([PTY_OPEN],
+      [ do { int dummy; sigset_t blocked, procmask; sigemptyset (&blocked); 
sigaddset (&blocked, SIGCHLD); pthread_sigmask (SIG_BLOCK, &blocked, 
&procmask); if (-1 == openpty (&fd, &dummy, pty_name, 0, 0)) fd = -1; 
pthread_sigmask (SIG_SETMASK, &procmask, 0); if (fd >= 0) emacs_close (dummy); 
} while (false)])
+    AC_DEFINE([PTY_NAME_SPRINTF], [])
+    AC_DEFINE([PTY_TTY_NAME_SPRINTF], [])
     ;;
 
   gnu | qnxnto )
-    AC_DEFINE(FIRST_PTY_LETTER, ['p'])
+    AC_DEFINE([FIRST_PTY_LETTER], ['p'])
     ;;
 
   gnu-linux | gnu-kfreebsd | dragonfly | freebsd | openbsd | netbsd | darwin | 
nacl )
     dnl if HAVE_GRANTPT
     if test "x$ac_cv_func_grantpt" = xyes; then
-      AC_DEFINE(UNIX98_PTYS, 1, [Define if the system has Unix98 PTYs.])
-      AC_DEFINE(PTY_ITERATION, [int i; for (i = 0; i < 1; i++)])
+      AC_DEFINE([UNIX98_PTYS], [1], [Define if the system has Unix98 PTYs.])
+      AC_DEFINE([PTY_ITERATION], [int i; for (i = 0; i < 1; i++)])
       dnl Note that grantpt and unlockpt may fork.  We must block SIGCHLD
       dnl to prevent sigchld_handler from intercepting the child's death.
-      AC_DEFINE(PTY_TTY_NAME_SPRINTF, [{ char *ptyname = 0; sigset_t blocked; 
sigemptyset (&blocked); sigaddset (&blocked, SIGCHLD); pthread_sigmask 
(SIG_BLOCK, &blocked, 0); if (grantpt (fd) != -1 && unlockpt (fd) != -1) 
ptyname = ptsname(fd); pthread_sigmask (SIG_UNBLOCK, &blocked, 0); if 
(!ptyname) { emacs_close (fd); return -1; } snprintf (pty_name, PTY_NAME_SIZE, 
"%s", ptyname); }])
+      AC_DEFINE([PTY_TTY_NAME_SPRINTF],
+       [{ char *ptyname = 0; sigset_t blocked; sigemptyset (&blocked); 
sigaddset (&blocked, SIGCHLD); pthread_sigmask (SIG_BLOCK, &blocked, 0); if 
(grantpt (fd) != -1 && unlockpt (fd) != -1) ptyname = ptsname(fd); 
pthread_sigmask (SIG_UNBLOCK, &blocked, 0); if (!ptyname) { emacs_close (fd); 
return -1; } snprintf (pty_name, PTY_NAME_SIZE, "%s", ptyname); }])
       dnl if HAVE_POSIX_OPENPT
       if test "x$ac_cv_func_posix_openpt" = xyes; then
-        AC_DEFINE(PTY_OPEN, [do { fd = posix_openpt (O_RDWR | O_CLOEXEC | 
O_NOCTTY); if (fd < 0 && errno == EINVAL) fd = posix_openpt (O_RDWR | 
O_NOCTTY); } while (false)])
-        AC_DEFINE(PTY_NAME_SPRINTF, [])
+       AC_DEFINE([PTY_OPEN],
+         [do { fd = posix_openpt (O_RDWR | O_CLOEXEC | O_NOCTTY); if (fd < 0 
&& errno == EINVAL) fd = posix_openpt (O_RDWR | O_NOCTTY); } while (false)])
+       AC_DEFINE([PTY_NAME_SPRINTF], [])
       dnl if HAVE_GETPT
       elif test "x$ac_cv_func_getpt" = xyes; then
-        AC_DEFINE(PTY_OPEN, [fd = getpt ()])
-        AC_DEFINE(PTY_NAME_SPRINTF, [])
+       AC_DEFINE([PTY_OPEN], [fd = getpt ()])
+       AC_DEFINE([PTY_NAME_SPRINTF], [])
       else
-        AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptmx");])
+       AC_DEFINE([PTY_NAME_SPRINTF], [strcpy (pty_name, "/dev/ptmx");])
       fi
     else
-      AC_DEFINE(FIRST_PTY_LETTER, ['p'])
+      AC_DEFINE([FIRST_PTY_LETTER], ['p'])
     fi
     ;;
 
   hpux*)
-    AC_DEFINE(FIRST_PTY_LETTER, ['p'])
-    AC_DEFINE(PTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ptym/pty%c%x", c, 
i);])
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/pty/tty%c%x", c, 
i);])
+    AC_DEFINE([FIRST_PTY_LETTER], ['p'])
+    AC_DEFINE([PTY_NAME_SPRINTF],
+      [sprintf (pty_name, "/dev/ptym/pty%c%x", c, i);])
+    AC_DEFINE([PTY_TTY_NAME_SPRINTF],
+      [sprintf (pty_name, "/dev/pty/tty%c%x", c, i);])
     ;;
 
   solaris )
@@ -5617,22 +5720,25 @@ case $opsys in
     dnl O_CLOEXEC when opening the pty, and keep the SIGCHLD handler
     dnl from intercepting that death.  If any child but grantpt's should die
     dnl within, it should be caught after sigrelse(2).
-    AC_DEFINE(PTY_OPEN, [fd = open (pty_name, O_RDWR | O_NONBLOCK)])
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [{ char *ptsname (int), *ptyname; int 
grantpt_result; sigset_t blocked; sigemptyset (&blocked); sigaddset (&blocked, 
SIGCHLD); pthread_sigmask (SIG_BLOCK, &blocked, 0); grantpt_result = grantpt 
(fd); pthread_sigmask (SIG_UNBLOCK, &blocked, 0); if (grantpt_result == -1 || 
unlockpt (fd) == -1 || !(ptyname = ptsname (fd))) { emacs_close (fd); return 
-1; } snprintf (pty_name, PTY_NAME_SIZE, "%s", ptyname); }])
+    AC_DEFINE([PTY_OPEN], [fd = open (pty_name, O_RDWR | O_NONBLOCK)])
+    AC_DEFINE([PTY_TTY_NAME_SPRINTF],
+      [{ char *ptsname (int), *ptyname; int grantpt_result; sigset_t blocked; 
sigemptyset (&blocked); sigaddset (&blocked, SIGCHLD); pthread_sigmask 
(SIG_BLOCK, &blocked, 0); grantpt_result = grantpt (fd); pthread_sigmask 
(SIG_UNBLOCK, &blocked, 0); if (grantpt_result == -1 || unlockpt (fd) == -1 || 
!(ptyname = ptsname (fd))) { emacs_close (fd); return -1; } snprintf (pty_name, 
PTY_NAME_SIZE, "%s", ptyname); }])
     ;;
 
   unixware )
     dnl Comments are as per solaris.
-    AC_DEFINE(PTY_OPEN, [fd = open (pty_name, O_RDWR | O_NONBLOCK)])
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [{ char *ptsname (int), *ptyname; int 
grantpt_result; sigset_t blocked; sigemptyset (&blocked); sigaddset (&blocked, 
SIGCHLD); pthread_sigmask (SIG_BLOCK, &blocked, 0); grantpt_result = grantpt 
(fd); pthread_sigmask (SIG_UNBLOCK, &blocked, 0); if (grantpt_result == -1) 
fatal("could not grant slave pty"); if (unlockpt(fd) == -1) fatal("could not 
unlock slave pty"); if (!(ptyname = ptsname(fd))) fatal ("could not enable 
slave pty"); snprintf (pty_name, P [...]
+    AC_DEFINE([PTY_OPEN], [fd = open (pty_name, O_RDWR | O_NONBLOCK)])
+    AC_DEFINE([PTY_TTY_NAME_SPRINTF],
+      [{ char *ptsname (int), *ptyname; int grantpt_result; sigset_t blocked; 
sigemptyset (&blocked); sigaddset (&blocked, SIGCHLD); pthread_sigmask 
(SIG_BLOCK, &blocked, 0); grantpt_result = grantpt (fd); pthread_sigmask 
(SIG_UNBLOCK, &blocked, 0); if (grantpt_result == -1) fatal("could not grant 
slave pty"); if (unlockpt(fd) == -1) fatal("could not unlock slave pty"); if 
(!(ptyname = ptsname(fd))) fatal ("could not enable slave pty"); snprintf 
(pty_name, PTY_NAME_SIZE, "%s", ptyname); }])
     ;;
 
   haiku*)
-    AC_DEFINE(FIRST_PTY_LETTER, ['s'])
-    AC_DEFINE(PTY_NAME_SPRINTF, [])
+    AC_DEFINE([FIRST_PTY_LETTER], ['s'])
+    AC_DEFINE([PTY_NAME_SPRINTF], [])
     dnl on Haiku pty names aren't distinctive, thus the use of posix_openpt
-    AC_DEFINE(PTY_OPEN, [fd = posix_openpt (O_RDWR | O_NONBLOCK)])
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [{ char *ptyname; int grantpt_result; 
sigset_t blocked; sigemptyset (&blocked); sigaddset (&blocked, SIGCHLD); 
pthread_sigmask (SIG_BLOCK, &blocked, 0); grantpt_result = grantpt (fd); 
pthread_sigmask (SIG_UNBLOCK, &blocked, 0); if (grantpt_result == -1) 
fatal("could not grant slave pty"); if (unlockpt(fd) == -1) fatal("could not 
unlock slave pty"); if (!(ptyname = ptsname(fd))) fatal ("could not enable 
slave pty"); snprintf (pty_name, PTY_NAME_SIZE, "% [...]
+    AC_DEFINE([PTY_OPEN], [fd = posix_openpt (O_RDWR | O_NONBLOCK)])
+    AC_DEFINE([PTY_TTY_NAME_SPRINTF],
+      [{ char *ptyname; int grantpt_result; sigset_t blocked; sigemptyset 
(&blocked); sigaddset (&blocked, SIGCHLD); pthread_sigmask (SIG_BLOCK, 
&blocked, 0); grantpt_result = grantpt (fd); pthread_sigmask (SIG_UNBLOCK, 
&blocked, 0); if (grantpt_result == -1) fatal("could not grant slave pty"); if 
(unlockpt(fd) == -1) fatal("could not unlock slave pty"); if (!(ptyname = 
ptsname(fd))) fatal ("could not enable slave pty"); snprintf (pty_name, 
PTY_NAME_SIZE, "%s", ptyname); }])
     ;;
 esac
 
@@ -5641,21 +5747,22 @@ case $opsys in
   solaris | unixware )
     dnl This change means that we don't loop through allocate_pty too
     dnl many times in the (rare) event of a failure.
-    AC_DEFINE(FIRST_PTY_LETTER, ['z'])
-    AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptmx");])
+    AC_DEFINE([FIRST_PTY_LETTER], ['z'])
+    AC_DEFINE([PTY_NAME_SPRINTF], [strcpy (pty_name, "/dev/ptmx");])
     dnl Push various streams modules onto a PTY channel.  Used in process.c.
-    AC_DEFINE(SETUP_SLAVE_PTY, [if (ioctl (std_in, I_PUSH, "ptem") == -1) 
fatal ("ioctl I_PUSH ptem"); if (ioctl (std_in, I_PUSH, "ldterm") == -1) fatal 
("ioctl I_PUSH ldterm"); if (ioctl (std_in, I_PUSH, "ttcompat") == -1) fatal 
("ioctl I_PUSH ttcompat");], [How to set up a slave PTY, if needed.])
+    AC_DEFINE([SETUP_SLAVE_PTY],
+      [if (ioctl (std_in, I_PUSH, "ptem") == -1) fatal ("ioctl I_PUSH ptem"); 
if (ioctl (std_in, I_PUSH, "ldterm") == -1) fatal ("ioctl I_PUSH ldterm"); if 
(ioctl (std_in, I_PUSH, "ttcompat") == -1) fatal ("ioctl I_PUSH ttcompat");], 
[How to set up a slave PTY, if needed.])
     ;;
 esac
 
 
-AH_TEMPLATE(SIGNALS_VIA_CHARACTERS, [Make process_send_signal work by
+AH_TEMPLATE([SIGNALS_VIA_CHARACTERS], [Make process_send_signal work by
 "typing" a signal character on the pty.])
 
 case $opsys in
   dnl Perry Smith <pedz@ddivt1.austin.ibm.com> says this is correct for AIX.
   aix4-2 | cygwin | gnu | dragonfly | freebsd | netbsd | openbsd | darwin )
-    AC_DEFINE(SIGNALS_VIA_CHARACTERS, 1)
+    AC_DEFINE([SIGNALS_VIA_CHARACTERS], [1])
     ;;
 
   dnl 21 Jun 06: Eric Hanchrow <offby1@blarg.net> says this works.
@@ -5668,35 +5775,41 @@ case $opsys in
 #if LINUX_VERSION_CODE < 0x20400
 # error "Linux version too old"
 #endif
-      ]], [[]])], emacs_cv_signals_via_chars=yes, 
emacs_cv_signals_via_chars=no)])
+      ]], [[]])],
+       [emacs_cv_signals_via_chars=yes],
+       [emacs_cv_signals_via_chars=no])])
 
-    test "$emacs_cv_signals_via_chars" = yes && 
AC_DEFINE(SIGNALS_VIA_CHARACTERS, 1)
+    test "$emacs_cv_signals_via_chars" = yes &&
+      AC_DEFINE([SIGNALS_VIA_CHARACTERS], [1])
     ;;
 esac
 
 
-AH_TEMPLATE(TAB3, [Undocumented.])
+AH_TEMPLATE([TAB3], [Undocumented.])
 
 case $opsys in
-  darwin) AC_DEFINE(TAB3, OXTABS) ;;
+  darwin) AC_DEFINE([TAB3], [OXTABS]) ;;
 
   gnu | dragonfly | freebsd | netbsd | openbsd )
-    AC_DEFINE(TABDLY, OXTABS, [Undocumented.])
-    AC_DEFINE(TAB3, OXTABS)
+    AC_DEFINE([TABDLY], [OXTABS], [Undocumented.])
+    AC_DEFINE([TAB3], [OXTABS])
     ;;
 
   gnu-linux | gnu-kfreebsd )
-    AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
+    AC_PREPROC_IFELSE(
+      [AC_LANG_PROGRAM(
+        [[
 #ifndef __ia64__
 # error "not ia64"
 #endif
-      ]], [[]])], AC_DEFINE(GC_MARK_SECONDARY_STACK(),
+        ]], [[]])],
+      [AC_DEFINE([GC_MARK_SECONDARY_STACK()],
         [do { extern void *__libc_ia64_register_backing_store_base; 
__builtin_ia64_flushrs (); mark_memory 
(__libc_ia64_register_backing_store_base, __builtin_ia64_bsp ());} while 
(false)],
-        [Mark a secondary stack, like the register stack on the ia64.]), [])
+       [Mark a secondary stack, like the register stack on the ia64.])], [])
     ;;
 
   hpux*)
-    AC_DEFINE(RUN_TIME_REMAP, 1, [Define if emacs.c needs to call
+    AC_DEFINE([RUN_TIME_REMAP], [1], [Define if emacs.c needs to call
       run_time_remap; for HPUX.])
     ;;
 esac
@@ -5704,7 +5817,7 @@ esac
 
 dnl This won't be used automatically yet.  We also need to know, at least,
 dnl that the stack is continuous.
-AH_TEMPLATE(GC_SETJMP_WORKS, [Define if setjmp is known to save all
+AH_TEMPLATE([GC_SETJMP_WORKS], [Define if setjmp is known to save all
   registers relevant for conservative garbage collection in the jmp_buf.])
 
 
@@ -5724,18 +5837,18 @@ case $opsys in
 #else
 # error "setjmp not known to work on this arch"
 #endif
-    ]], [[]])], AC_DEFINE(GC_SETJMP_WORKS, 1))
+    ]], [[]])], [AC_DEFINE([GC_SETJMP_WORKS], [1])])
     ;;
 esac
 
 
 if test x$GCC = xyes; then
    dnl GC_SETJMP_WORKS is nearly always appropriate for GCC.
-   AC_DEFINE(GC_SETJMP_WORKS, 1)
+   AC_DEFINE([GC_SETJMP_WORKS], [1])
 else
   case $opsys in
     aix* | dragonfly | freebsd | netbsd | openbsd | solaris )
-      AC_DEFINE(GC_SETJMP_WORKS, 1)
+      AC_DEFINE([GC_SETJMP_WORKS], [1])
       ;;
   esac
 fi                              dnl GCC?
@@ -5755,7 +5868,7 @@ AC_CACHE_CHECK([for _setjmp], [emacs_cv_func__setjmp],
      [emacs_cv_func__setjmp=yes],
      [emacs_cv_func__setjmp=no])])
 if test $emacs_cv_func__setjmp = yes; then
-  AC_DEFINE([HAVE__SETJMP], 1, [Define to 1 if _setjmp and _longjmp work.])
+  AC_DEFINE([HAVE__SETJMP], [1], [Define to 1 if _setjmp and _longjmp work.])
 fi
 
 # We need to preserve signal mask to handle C stack overflows.
@@ -5770,13 +5883,13 @@ AC_CACHE_CHECK([for sigsetjmp], 
[emacs_cv_func_sigsetjmp],
      [emacs_cv_func_sigsetjmp=yes],
      [emacs_cv_func_sigsetjmp=no])])
 if test $emacs_cv_func_sigsetjmp = yes; then
-  AC_DEFINE([HAVE_SIGSETJMP], 1,
+  AC_DEFINE([HAVE_SIGSETJMP], [1],
     [Define to 1 if sigsetjmp and siglongjmp work.])
 fi
 
 case $emacs_cv_func_sigsetjmp,$emacs_cv_alternate_stack,$opsys in
   yes,yes,* | *,*,mingw32)
-    AC_DEFINE([HAVE_STACK_OVERFLOW_HANDLING], 1,
+    AC_DEFINE([HAVE_STACK_OVERFLOW_HANDLING], [1],
       [Define to 1 if C stack overflow can be handled in some cases.]);;
 esac
 
@@ -5785,7 +5898,7 @@ case $opsys in
     dnl TIOCGPGRP is broken in SysVr4, so we can't send signals to PTY
     dnl subprocesses the usual way.  But TIOCSIGNAL does work for PTYs,
     dnl and this is all we need.
-    AC_DEFINE(TIOCSIGSEND, TIOCSIGNAL, [Some platforms redefine this.])
+    AC_DEFINE([TIOCSIGSEND], [TIOCSIGNAL], [Some platforms redefine this.])
     ;;
 esac
 
@@ -5793,7 +5906,7 @@ esac
 case $opsys in
   hpux* | solaris )
     dnl Used in xfaces.c.
-    AC_DEFINE(XOS_NEEDS_TIME_H, 1, [Compensate for a bug in Xos.h on
+    AC_DEFINE([XOS_NEEDS_TIME_H], [1], [Compensate for a bug in Xos.h on
       some systems, where it requires time.h.])
     ;;
 esac
@@ -5801,64 +5914,67 @@ esac
 
 dnl Define symbols to identify the version of Unix this is.
 dnl Define all the symbols that apply correctly.
-AH_TEMPLATE(DOS_NT, [Define if the system is MS DOS or MS Windows.])
-AH_TEMPLATE(MSDOS, [Define if the system is MS DOS.])
-AH_TEMPLATE(USG, [Define if the system is compatible with System III.])
-AH_TEMPLATE(USG5_4, [Define if the system is compatible with System V Release 
4.])
+AH_TEMPLATE([DOS_NT], [Define if the system is MS DOS or MS Windows.])
+AH_TEMPLATE([MSDOS], [Define if the system is MS DOS.])
+AH_TEMPLATE([USG], [Define if the system is compatible with System III.])
+AH_TEMPLATE([USG5_4],
+  [Define if the system is compatible with System V Release 4.])
 
 case $opsys in
   aix4-2)
-    AC_DEFINE(USG, [])
+    AC_DEFINE([USG], [])
     dnl This symbol should be defined on AIX Version 3  ???????
     AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
 #ifndef _AIX
 # error "_AIX not defined"
 #endif
-    ]], [[]])], [], AC_DEFINE(_AIX, [], [Define if the system is AIX.]))
+    ]], [[]])], [], [AC_DEFINE([_AIX], [], [Define if the system is AIX.])])
     ;;
 
   cygwin)
-    AC_DEFINE(CYGWIN, 1, [Define if the system is Cygwin.])
+    AC_DEFINE([CYGWIN], [1], [Define if the system is Cygwin.])
     ;;
 
   darwin)
     dnl Not __APPLE__, as this may not be defined on non-macOS Darwin.
     dnl Not DARWIN, because Panther and lower CoreFoundation.h use DARWIN to
     dnl distinguish macOS from pure Darwin.
-    AC_DEFINE(DARWIN_OS, [], [Define if the system is Darwin.])
+    AC_DEFINE([DARWIN_OS], [], [Define if the system is Darwin.])
     ;;
 
   gnu-linux | gnu-kfreebsd )
-    AC_DEFINE(USG, [])
-    AC_DEFINE(GNU_LINUX, [], [Define if ths system is compatible with 
GNU/Linux.])
+    AC_DEFINE([USG], [])
+    AC_DEFINE([GNU_LINUX], [],
+      [Define if ths system is compatible with GNU/Linux.])
     ;;
 
   hpux*)
-    AC_DEFINE(USG, [])
-    AC_DEFINE(HPUX, [], [Define if the system is HPUX.])
+    AC_DEFINE([USG], [])
+    AC_DEFINE([HPUX], [], [Define if the system is HPUX.])
     ;;
 
   mingw32)
-    AC_DEFINE(DOS_NT, [])
-    AC_DEFINE(WINDOWSNT, 1, [Define if compiling for native MS Windows.])
+    AC_DEFINE([DOS_NT], [])
+    AC_DEFINE([WINDOWSNT], [1], [Define if compiling for native MS Windows.])
     if test "x$ac_enable_checking" != "x" ; then
-      AC_DEFINE(EMACSDEBUG, 1, [Define to 1 to enable w32 debug facilities.])
+      AC_DEFINE([EMACSDEBUG], [1],
+       [Define to 1 to enable w32 debug facilities.])
     fi
     ;;
 
   solaris)
-    AC_DEFINE(USG, [])
-    AC_DEFINE(USG5_4, [])
-    AC_DEFINE(SOLARIS2, [], [Define if the system is Solaris.])
+    AC_DEFINE([USG], [])
+    AC_DEFINE([USG5_4], [])
+    AC_DEFINE([SOLARIS2], [], [Define if the system is Solaris.])
     ;;
 
   unixware)
-    AC_DEFINE(USG, [])
-    AC_DEFINE(USG5_4, [])
+    AC_DEFINE([USG], [])
+    AC_DEFINE([USG5_4], [])
     ;;
 
   haiku)
-    AC_DEFINE(HAIKU, [], [Define if the system is Haiku.])
+    AC_DEFINE([HAIKU], [], [Define if the system is Haiku.])
     ;;
 esac
 
@@ -5939,13 +6055,13 @@ case $opsys in
   hpux11)
     dnl It works to open the pty's tty in the parent (Emacs), then
     dnl close and reopen it in the child.
-    AC_DEFINE(USG_SUBTTY_WORKS, 1, [Define for USG systems where it
+    AC_DEFINE([USG_SUBTTY_WORKS], [1], [Define for USG systems where it
       works to open a pty's tty in the parent process, then close and
       reopen it in the child.])
     ;;
 
   solaris)
-    AC_DEFINE(_STRUCTURED_PROC, 1, [Needed for system_process_attributes
+    AC_DEFINE([_STRUCTURED_PROC], [1], [Needed for system_process_attributes
       on Solaris.])
     ;;
 esac
@@ -5968,72 +6084,72 @@ fi
 version=$PACKAGE_VERSION
 
 copyright="Copyright (C) 2022 Free Software Foundation, Inc."
-AC_DEFINE_UNQUOTED(COPYRIGHT, ["$copyright"],
+AC_DEFINE_UNQUOTED([COPYRIGHT], ["$copyright"],
   [Short copyright string for this version of Emacs.])
-AC_SUBST(copyright)
+AC_SUBST([copyright])
 
 ### Specify what sort of things we'll be editing into Makefile and config.h.
 ### Use configuration here uncanonicalized to avoid exceeding size limits.
-AC_SUBST(version)
-AC_SUBST(configuration)
+AC_SUBST([version])
+AC_SUBST([configuration])
 ## Unused?
-AC_SUBST(canonical)
-AC_SUBST(srcdir)
-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)
-AC_SUBST(infodir)
-AC_SUBST(lispdirrel)
-AC_SUBST(lispdir)
-AC_SUBST(standardlisppath)
-AC_SUBST(locallisppath)
-AC_SUBST(lisppath)
-AC_SUBST(x_default_search_path)
-AC_SUBST(etcdir)
-AC_SUBST(archlibdir)
-AC_SUBST(etcdocdir)
-AC_SUBST(bitmapdir)
-AC_SUBST(gamedir)
-AC_SUBST(gameuser)
-AC_SUBST(gamegroup)
+AC_SUBST([canonical])
+AC_SUBST([srcdir])
+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])
+AC_SUBST([infodir])
+AC_SUBST([lispdirrel])
+AC_SUBST([lispdir])
+AC_SUBST([standardlisppath])
+AC_SUBST([locallisppath])
+AC_SUBST([lisppath])
+AC_SUBST([x_default_search_path])
+AC_SUBST([etcdir])
+AC_SUBST([archlibdir])
+AC_SUBST([etcdocdir])
+AC_SUBST([bitmapdir])
+AC_SUBST([gamedir])
+AC_SUBST([gameuser])
+AC_SUBST([gamegroup])
 ## FIXME? Nothing uses @LD_SWITCH_X_SITE@.
 ## src/Makefile.in did add LD_SWITCH_X_SITE (as a cpp define) to the
 ## end of LIBX_BASE, but nothing ever set it.
-AC_SUBST(LD_SWITCH_X_SITE)
-AC_SUBST(C_SWITCH_X_SITE)
-AC_SUBST(GNUSTEP_CFLAGS)
-AC_SUBST(CFLAGS)
+AC_SUBST([LD_SWITCH_X_SITE])
+AC_SUBST([C_SWITCH_X_SITE])
+AC_SUBST([GNUSTEP_CFLAGS])
+AC_SUBST([CFLAGS])
 ## Used in lwlib/Makefile.in.
-AC_SUBST(X_TOOLKIT_TYPE)
-AC_SUBST(ns_appdir)
-AC_SUBST(ns_appbindir)
-AC_SUBST(ns_applibexecdir)
-AC_SUBST(ns_applibdir)
-AC_SUBST(ns_appresdir)
-AC_SUBST(ns_appsrc)
-AC_SUBST(GNU_OBJC_CFLAGS)
-AC_SUBST(OTHER_FILES)
+AC_SUBST([X_TOOLKIT_TYPE])
+AC_SUBST([ns_appdir])
+AC_SUBST([ns_appbindir])
+AC_SUBST([ns_applibexecdir])
+AC_SUBST([ns_applibdir])
+AC_SUBST([ns_appresdir])
+AC_SUBST([ns_appsrc])
+AC_SUBST([GNU_OBJC_CFLAGS])
+AC_SUBST([OTHER_FILES])
 
 if test -n "${term_header}"; then
-    AC_DEFINE_UNQUOTED(TERM_HEADER, "${term_header}",
+    AC_DEFINE_UNQUOTED([TERM_HEADER], ["${term_header}"],
         [Define to the header for the built-in window system.])
 fi
 
-AC_DEFINE_UNQUOTED(EMACS_CONFIGURATION,  "${canonical}",
+AC_DEFINE_UNQUOTED([EMACS_CONFIGURATION],  ["${canonical}"],
                   [Define to the canonical Emacs configuration name.])
-AC_DEFINE_UNQUOTED(EMACS_CONFIG_OPTIONS, "${emacs_config_options}",
+AC_DEFINE_UNQUOTED([EMACS_CONFIG_OPTIONS], "${emacs_config_options}",
                   [Define to the options passed to configure.])
 
 XMENU_OBJ=
 XOBJ=
 FONT_OBJ=
 if test "${HAVE_X_WINDOWS}" = "yes" ; then
-  AC_DEFINE(HAVE_X_WINDOWS, 1,
+  AC_DEFINE([HAVE_X_WINDOWS], [1],
            [Define to 1 if you want to use the X window system.])
   XMENU_OBJ=xmenu.o
   XOBJ="xterm.o xfns.o xselect.o xrdb.o xsmfns.o xsettings.o"
@@ -6060,20 +6176,20 @@ fi
 if test "${HAVE_HARFBUZZ}" = "yes" ; then
   FONT_OBJ="$FONT_OBJ hbfont.o"
 fi
-AC_SUBST(FONT_OBJ)
-AC_SUBST(XMENU_OBJ)
-AC_SUBST(XOBJ)
-AC_SUBST(FONT_OBJ)
+AC_SUBST([FONT_OBJ])
+AC_SUBST([XMENU_OBJ])
+AC_SUBST([XOBJ])
+AC_SUBST([FONT_OBJ])
 
 WIDGET_OBJ=
 MOTIF_LIBW=
 if test "${USE_X_TOOLKIT}" != "none" ; then
   WIDGET_OBJ=widget.o
-  AC_DEFINE(USE_X_TOOLKIT, 1, [Define to 1 if using an X toolkit.])
+  AC_DEFINE([USE_X_TOOLKIT], [1], [Define to 1 if using an X toolkit.])
   if test "${USE_X_TOOLKIT}" = "LUCID"; then
-    AC_DEFINE(USE_LUCID, 1, [Define to 1 if using the Lucid X toolkit.])
+    AC_DEFINE([USE_LUCID], [1], [Define to 1 if using the Lucid X toolkit.])
   elif test "${USE_X_TOOLKIT}" = "MOTIF"; then
-    AC_DEFINE(USE_MOTIF, 1, [Define to 1 if using the Motif X toolkit.])
+    AC_DEFINE([USE_MOTIF], [1], [Define to 1 if using the Motif X toolkit.])
     MOTIF_LIBW=-lXm
     case "$opsys" in
       gnu-linux)
@@ -6095,7 +6211,7 @@ if test "${USE_X_TOOLKIT}" != "none" ; then
     MOTIF_LIBW="$MOTIF_LIBW $LIBXP"
   fi
 fi
-AC_SUBST(WIDGET_OBJ)
+AC_SUBST([WIDGET_OBJ])
 
 TOOLKIT_LIBW=
 case "$USE_X_TOOLKIT" in
@@ -6106,7 +6222,7 @@ esac
 if test "$HAVE_XWIDGETS" = "yes"; then
   TOOLKIT_LIBW="$TOOLKIT_LIBW -lXcomposite"
 fi
-AC_SUBST(TOOLKIT_LIBW)
+AC_SUBST([TOOLKIT_LIBW])
 
 if test "${opsys}" != "mingw32"; then
   if test "$USE_X_TOOLKIT" = "none"; then
@@ -6115,16 +6231,16 @@ if test "${opsys}" != "mingw32"; then
     LIBXT_OTHER="\$(LIBXMU) -lXt \$(LIBXTR6) -lXext"
   fi
 fi
-AC_SUBST(LIBXT_OTHER)
+AC_SUBST([LIBXT_OTHER])
 
 if test "${HAVE_X11}" = "yes" ; then
-  AC_DEFINE(HAVE_X11, 1,
+  AC_DEFINE([HAVE_X11], [1],
            [Define to 1 if you want to use version 11 of X windows.])
   LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)"
 else
   LIBX_OTHER=
 fi
-AC_SUBST(LIBX_OTHER)
+AC_SUBST([LIBX_OTHER])
 
 HAVE_OLDXMENU=no
 if test "$HAVE_GTK" = yes || test "$HAVE_X11" != yes; then
@@ -6137,7 +6253,7 @@ else
   LIBXMENU='$(lwlibdir)/liblw.a'
   AUTODEPEND_PARENTS="$AUTODEPEND_PARENTS lwlib"
 fi
-AC_SUBST(LIBXMENU)
+AC_SUBST([LIBXMENU])
 
 AC_CACHE_CHECK([for struct alignment],
   [emacs_cv_struct_alignment],
@@ -6150,7 +6266,7 @@ AC_CACHE_CHECK([for struct alignment],
      [emacs_cv_struct_alignment=yes],
      [emacs_cv_struct_alignment=no])])
 if test "$emacs_cv_struct_alignment" = yes; then
-  AC_DEFINE([HAVE_STRUCT_ATTRIBUTE_ALIGNED], 1,
+  AC_DEFINE([HAVE_STRUCT_ATTRIBUTE_ALIGNED], [1],
     [Define to 1 if 'struct __attribute__ ((aligned (N)))' aligns the
      structure to an N-byte boundary.])
 fi
@@ -6164,24 +6280,24 @@ AC_CACHE_CHECK([for statement expressions],
      [emacs_cv_statement_expressions=yes],
      [emacs_cv_statement_expressions=no])])
 if test "$emacs_cv_statement_expressions" = yes; then
-  AC_DEFINE([HAVE_STATEMENT_EXPRESSIONS], 1,
+  AC_DEFINE([HAVE_STATEMENT_EXPRESSIONS], [1],
     [Define to 1 if statement expressions work.])
 fi
 
 if test "${GNU_MALLOC}" = "yes" ; then
-  AC_DEFINE(GNU_MALLOC, 1,
+  AC_DEFINE([GNU_MALLOC], [1],
            [Define to 1 if you want to use the GNU memory allocator.])
 fi
 
 RALLOC_OBJ=
 if test "${REL_ALLOC}" = "yes" ; then
-  AC_DEFINE(REL_ALLOC, 1,
+  AC_DEFINE([REL_ALLOC], [1],
            [Define REL_ALLOC if you want to use the relocating allocator for
             buffer space.])
 
   test "$system_malloc" != "yes" && RALLOC_OBJ=ralloc.o
 fi
-AC_SUBST(RALLOC_OBJ)
+AC_SUBST([RALLOC_OBJ])
 
 if test "$opsys" = "cygwin"; then
   CYGWIN_OBJ="cygw32.o"
@@ -6197,9 +6313,9 @@ else
   PRE_ALLOC_OBJ=lastfile.o
   POST_ALLOC_OBJ=
 fi
-AC_SUBST(CYGWIN_OBJ)
-AC_SUBST(PRE_ALLOC_OBJ)
-AC_SUBST(POST_ALLOC_OBJ)
+AC_SUBST([CYGWIN_OBJ])
+AC_SUBST([PRE_ALLOC_OBJ])
+AC_SUBST([POST_ALLOC_OBJ])
 
 dnl Call this 'FORTIFY_SOUR' so that it sorts before the 'FORTIFY_SOURCE'
 dnl verbatim defined above.  The tricky name is apropos, as this hack
@@ -6247,7 +6363,7 @@ LIBS=$SAVE_LIBS
 # timer_getoverrun needs the same library as timer_settime
 OLD_LIBS=$LIBS
 LIBS="$LIB_TIMER_TIME $LIBS"
-AC_CHECK_FUNCS(timer_getoverrun)
+AC_CHECK_FUNCS([timer_getoverrun])
 LIBS=$OLD_LIBS
 
 if test "${opsys}" = "mingw32"; then
@@ -6361,16 +6477,17 @@ fi
 
 LD_SWITCH_SYSTEM_TEMACS="$LDFLAGS_NOCOMBRELOC $LD_SWITCH_SYSTEM_TEMACS"
 
-AC_SUBST(LD_SWITCH_SYSTEM_TEMACS)
+AC_SUBST([LD_SWITCH_SYSTEM_TEMACS])
 
 ## Common for all window systems
 if test "$window_system" != "none"; then
-  AC_DEFINE(HAVE_WINDOW_SYSTEM, 1, [Define if you have a window system.])
-  AC_DEFINE(POLL_FOR_INPUT, 1, [Define if you poll periodically to detect 
C-g.])
+  AC_DEFINE([HAVE_WINDOW_SYSTEM], [1], [Define if you have a window system.])
+  AC_DEFINE([POLL_FOR_INPUT], [1],
+    [Define if you poll periodically to detect C-g.])
   WINDOW_SYSTEM_OBJ="fontset.o fringe.o image.o"
 fi
 
-AC_SUBST(WINDOW_SYSTEM_OBJ)
+AC_SUBST([WINDOW_SYSTEM_OBJ])
 
 AH_TOP([/* GNU Emacs site configuration template file.
 
@@ -6487,7 +6604,7 @@ for opt in ACL BE_APP CAIRO DBUS FREETYPE GCONF GIF GLIB 
GMP GNUTLS GPM GSETTING
     AS_VAR_APPEND([emacs_config_features], ["$optsep$opt"])
     optsep=' '
 done
-AC_DEFINE_UNQUOTED(EMACS_CONFIG_FEATURES, "${emacs_config_features}",
+AC_DEFINE_UNQUOTED([EMACS_CONFIG_FEATURES], ["${emacs_config_features}"],
   [Summary of some of the main features enabled by configure.])
 
 AS_ECHO(["  Does Emacs use -lXaw3d?                                 
${HAVE_XAW3D}
@@ -6531,7 +6648,7 @@ AS_ECHO(["  Does Emacs use -lXaw3d?                       
          ${HAVE_XAW3D
   Does Emacs support legacy unexec dumping?               ${with_unexec}
   Which dumping strategy does Emacs use?                  ${with_dumping}
   Does Emacs have native lisp compiler?                   ${HAVE_NATIVE_COMP}
-  Does Emacs use version 2 of the the X Input Extension?  ${HAVE_XINPUT2}
+  Does Emacs use version 2 of the X Input Extension?      ${HAVE_XINPUT2}
   Does Emacs generate a smaller-size Japanese dictionary? ${with_small_ja_dic}
 "])
 
@@ -6566,7 +6683,7 @@ case $opsys,$emacs_uname_r in
            echo
           ;;
   cygwin,3.0.[[0-7]]'('* | cygwin,3.1.[[0-2]]'('*)
-    AC_DEFINE([HAVE_CYGWIN_O_PATH_BUG], 1,
+    AC_DEFINE([HAVE_CYGWIN_O_PATH_BUG], [1],
       [Define to 1 if opening a FIFO, socket, or symlink with O_PATH is 
buggy.]);;
 esac
 
@@ -6588,7 +6705,7 @@ if test "$HAVE_NS" = "yes"; then
       
nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings:nextstep/templates/InfoPlist.strings.in])
     ns_check_file=Contents/Info.plist
   fi
-  AC_SUBST(ns_check_file)
+  AC_SUBST([ns_check_file])
 fi
 
 AC_CONFIG_FILES([Makefile lib/gnulib.mk])
@@ -6629,10 +6746,10 @@ fi                              dnl -d admin
 
 SUBDIR_MAKEFILES_IN=`echo " ${SUBDIR_MAKEFILES}" | sed -e 's| | $(srcdir)/|g' 
-e 's|Makefile|Makefile.in|g'`
 
-AC_SUBST(SUBDIR_MAKEFILES_IN)
+AC_SUBST([SUBDIR_MAKEFILES_IN])
 
 SMALL_JA_DIC=$with_small_ja_dic
-AC_SUBST(SMALL_JA_DIC)
+AC_SUBST([SMALL_JA_DIC])
 
 dnl You might wonder (I did) why epaths.h is generated by running make,
 dnl rather than just letting configure generate it from epaths.in.
diff --git a/doc/emacs/ChangeLog.1 b/doc/emacs/ChangeLog.1
index c1c5f5407d..048b7bd99a 100644
--- a/doc/emacs/ChangeLog.1
+++ b/doc/emacs/ChangeLog.1
@@ -8529,7 +8529,7 @@
        * text.texi (Cell Justification):
        * trouble.texi (After a Crash):
        * xresources.texi (GTK styles):
-       Delete duplicate duplicate words.
+       Delete duplicate words.
 
 2005-07-17  Richard M. Stallman  <rms@gnu.org>
 
diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi
index 07f66ec10a..77f40c7df2 100644
--- a/doc/emacs/abbrevs.texi
+++ b/doc/emacs/abbrevs.texi
@@ -106,8 +106,10 @@ taken as the expansion.  For example, to define the abbrev 
@samp{foo} as
 mentioned above, insert the text @samp{find outer otter} and then type
 @kbd{C-u 3 C-x a g f o o @key{RET}}.
 
-  An argument of zero to @kbd{C-x a g} means to use the contents of the
-region as the expansion of the abbrev being defined.
+  If you're using @code{transient-mark-mode} (which is the default),
+the active region will be used as the expansion of the abbrev being
+defined.  If not, an argument of zero to @kbd{C-x a g} means to use
+the contents of the region.
 
 @kindex C-x a l
 @findex add-mode-abbrev
diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi
index 94e9d2760e..120c957ff8 100644
--- a/doc/emacs/buffers.texi
+++ b/doc/emacs/buffers.texi
@@ -616,10 +616,11 @@ select it in another window 
(@code{clone-indirect-buffer-other-window}).
 
   The text of the indirect buffer is always identical to the text of its
 base buffer; changes made by editing either one are visible immediately
-in the other.  But in all other respects, the indirect buffer and its
+in the other.  ``Text'' here includes both the characters and their text
+properties.  But in all other respects, the indirect buffer and its
 base buffer are completely separate.  They can have different names,
 different values of point, different narrowing, different markers,
-different major modes, and different local variables.
+different overlays, different major modes, and different local variables.
 
   An indirect buffer cannot visit a file, but its base buffer can.  If
 you try to save the indirect buffer, that actually works by saving the
@@ -649,6 +650,14 @@ both using the minibuffer.
 When this hook runs, the newly created indirect buffer is the current
 buffer.
 
+Note: When a modification is made to the text of a buffer, the
+modification hooks are run only in the base buffer, because most of
+the functions on those hooks are not prepared to work correctly in
+indirect buffers.  So if you need a modification hook function in an
+indirect buffer, you need to manually add that function to the hook
+@emph{in the base buffer} and then make the function operate in the
+desired indirect buffer.
+
 @node Buffer Convenience
 @section Convenience Features and Customization of Buffer Handling
 
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index 46a2291b74..ff7ab83190 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -511,6 +511,9 @@ Set up a customization buffer for just one user option, 
@var{option}.
 @item M-x customize-face @key{RET} @var{face} @key{RET}
 Set up a customization buffer for just one face, @var{face}.
 
+@item M-x customize-icon @key{RET} @var{face} @key{RET}
+Set up a customization buffer for just one icon, @var{icon}.
+
 @item M-x customize-group @key{RET} @var{group} @key{RET}
 Set up a customization buffer for just one group, @var{group}.
 
@@ -2300,6 +2303,8 @@ as a function from Lisp programs.
 @cindex startup (init file)
 @cindex XDG_CONFIG_HOME
 
+@c When updating this, also update ``Setting up a customization file''
+@c in efaq.texi.
   When Emacs is started, it normally tries to load a Lisp program from
 an @dfn{initialization file}, or @dfn{init file} for short.  This
 file, if it exists, specifies how to initialize Emacs for you.
@@ -2449,6 +2454,9 @@ keys which send non-@acronym{ASCII} characters.
 Write a single-quote (@code{'}) followed by the Lisp object you want.
 @end table
 
+  For more information on the Emacs Lisp syntax, @pxref{Introduction,,,
+elisp, The Emacs Lisp Reference Manual}.
+
 @node Init Examples
 @subsection Init File Examples
 
diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi
index 9e14e0f9a9..33e9270d42 100644
--- a/doc/emacs/dired.texi
+++ b/doc/emacs/dired.texi
@@ -41,6 +41,7 @@ you to operate on the listed files.  @xref{Directories}.
 * Operating on Files::        How to copy, rename, print, compress, etc.
                                 either one file or several files.
 * Shell Commands in Dired::   Running a shell command on the marked files.
+* Shell Command Guessing::    Guessing shell commands for files.
 * Transforming File Names::   Using patterns to rename multiple files.
 * Comparison in Dired::       Running @code{diff} by way of Dired.
 * Subdirectories in Dired::   Adding subdirectories to the Dired buffer.
@@ -844,6 +845,26 @@ This is like @samp{ln -s}.  The argument @var{new} is the 
directory to
 make the links in, or (if making just one link) the name to give the
 link.
 
+@findex dired-do-relsymlink
+@kindex Y @r{(Dired)}
+@item Y @var{new} @key{RET}
+Make relative symbolic links to the specified files
+(@code{dired-do-relsymlink}).  The argument @var{new} is the directory
+to make the links in, or (if making just one link) the name to give
+the link.  This is like @code{dired-do-symlink} but creates relative
+symbolic links.  For example:
+
+@example
+    foo -> ../bar/foo
+@end example
+
+@noindent
+It does not create absolute ones like:
+
+@example
+    foo -> /path/that/may/change/any/day/bar/foo
+@end example
+
 @findex dired-do-chmod
 @kindex M @r{(Dired)}
 @cindex changing file permissions (in Dired)
@@ -963,6 +984,18 @@ Byte compile the specified Emacs Lisp files
 (@code{dired-do-byte-compile}).  @xref{Byte Compilation,, Byte
 Compilation, elisp, The Emacs Lisp Reference Manual}.
 
+@findex dired-do-info
+@kindex I @r{(Dired)}
+@cindex running info on files (in Dired)
+@item I
+Run Info on this file (assumed to be a file in Info format).
+
+@findex dired-do-man
+@kindex N @r{(Dired)}
+@cindex running man on files (in Dired)
+@item N
+Run man on this file (assumed to be a file in @code{nroff} format).
+
 @kindex A @r{(Dired)}
 @findex dired-do-find-regexp
 @cindex search multiple files (in Dired)
@@ -1089,6 +1122,73 @@ buffer (@pxref{Dired Updating}).
   @xref{Single Shell}, for information about running shell commands
 outside Dired.
 
+@node Shell Command Guessing
+@section Shell Command Guessing
+@cindex guessing shell commands for files (in Dired)
+
+Based upon the name of a file, Dired tries to guess what shell command
+you might want to apply to it.  For example, if you have point on a
+file named @file{foo.tar} and you press @kbd{!}, Dired will guess that
+you want to run @samp{tar xvf}, and suggest that as the default shell
+command.
+
+You can type @kbd{M-n} to get the default into the minibuffer for
+editing.  If there are several commands for a given file, type
+@kbd{M-n} several times to see each matching command in order.
+
+Dired only tries to guess a command for a single file, never for a
+list of marked files.
+
+@defvar dired-guess-shell-alist-default
+This variable specifies the predefined rules for guessing shell
+commands suitable for certain files.  Set this to @code{nil} to turn
+guessing off.  The elements of @code{dired-guess-shell-alist-user}
+(defined by the user) will override these rules.
+@end defvar
+
+@defvar dired-guess-shell-alist-user
+If non-@code{nil}, this variable specifies the user-defined alist of
+file regexps and their suggested commands.  These rules take
+precedence over the predefined rules in the variable
+@code{dired-guess-shell-alist-default} when
+@code{dired-do-shell-command} is run).  The default is @code{nil}.
+
+Each element of the alist looks like
+
+@example
+(@var{regexp} @var{command}@dots{})
+@end example
+
+@noindent
+where each @var{command} can either be a string or a Lisp expression
+that evaluates to a string.  If several commands are given, all of
+them will temporarily be pushed onto the history.
+
+A @samp{*} in the shell command stands for the file name that matched
+@var{regexp}.  When Emacs invokes the @var{command}, it replaces each
+instance of @samp{*} with the matched file name.
+
+To add rules for @samp{.foo} and @samp{.bar} file extensions, add this
+to your Init file:
+
+@example
+(setq dired-guess-shell-alist-user
+      (list
+       (list "\\.foo$" "@var{foo-command}")  ; fixed rule
+       ;; possibly more rules...
+       (list "\\.bar$"  ; rule with condition test
+             '(if @var{condition}
+                  "@var{bar-command-1}"
+                "@var{bar-command-2}"))))
+@end example
+
+@noindent
+This will override any predefined rules for the same extensions.
+@end defvar
+
+You can find more user options with @kbd{M-x customize-group @key{RET}
+dired-guess @key{RET}}.
+
 @node Transforming File Names
 @section Transforming File Names in Dired
 
@@ -1138,9 +1238,12 @@ Rename each of the selected files to a lower-case name
 @itemx % S @var{from} @key{RET} @var{to} @key{RET}
 @kindex % S @r{(Dired)}
 @findex dired-do-symlink-regexp
-These four commands rename, copy, make hard links and make soft links,
-in each case computing the new name by regular-expression substitution
-from the name of the old file.
+@itemx % Y @var{from} @key{RET} @var{to} @key{RET}
+@kindex % Y @r{(Dired)}
+@findex dired-do-relsymlink-regexp
+These five commands rename, copy, make hard links, make soft links,
+and make relative soft links, in each case computing the new name by
+regular-expression substitution from the name of the old file.
 @end table
 
   The four regular-expression substitution commands effectively
@@ -1298,6 +1401,12 @@ parent directory.
 @kindex > @r{(Dired)}
 @item >
 Move down to the next directory-file line (@code{dired-next-dirline}).
+
+@findex dired-goto-subdir
+@kindex M-G @r{(Dired)}
+@item M-G
+Prompt for a directory and move to its directory-file line
+(@code{dired-goto-subdir}).
 @end table
 
 @node Hiding Subdirectories
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index 16d6d5567e..b7c8825efa 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -24,6 +24,7 @@ the text is displayed.
 * Faces::                  How to change the display style using faces.
 * Colors::                 Specifying colors for faces.
 * Standard Faces::         The main predefined faces.
+* Icons::                  How to change how icons look.
 * Text Scale::             Increasing or decreasing text size in a buffer.
 * Font Lock::              Minor mode for syntactic highlighting using faces.
 * Highlight Interactively:: Tell Emacs what text to highlight.
@@ -851,10 +852,44 @@ This face is used to display on text-mode terminals the 
menu item that
 would be selected if you click a mouse or press @key{RET}.
 @end table
 
+@node Icons
+@section Icons
+@cindex icons, on clickable buttons
+
+Emacs sometimes displays clickable buttons (or other informative
+icons), and you can customize how these look on display.
+
+@vindex icon-preference
+The main customization point here is the @code{icon-preference} user
+option.  By using this, you can tell Emacs your overall preferences
+for icons.  This is a list of icon types, and the first icon type
+that's supported will be used.  The supported types are:
+
+@table @code
+@item image
+Use an image for the icon.
+
+@item emoji
+Use a colorful emoji for the icon.
+
+@item symbol
+Use a monochrome symbol for the icon.
+
+@item text
+Use a simple text for the icon.
+@end table
+
+In addition, each individual icon can be customized with @kbd{M-x
+customize-icon}, and themes can further alter the looks of the icons.
+
+To get a quick description of an icon, use the @kbd{M-x describe-icon}
+command.
+
 @node Text Scale
 @section Text Scale
 
-@cindex adjust buffer face height
+@cindex adjust buffer font size
+@cindex font size of @code{default} face, increase or decrease
 @findex text-scale-adjust
 @kindex C-x C-+
 @kindex C-x C--
@@ -862,17 +897,27 @@ would be selected if you click a mouse or press @key{RET}.
 @kindex C-x C-0
 @kindex C-wheel-down
 @kindex C-wheel-up
-  To increase the height of the default face in the current buffer,
-type @kbd{C-x C-+} or @kbd{C-x C-=}.  To decrease it, type @kbd{C-x
-C--}.  To restore the default (global) face height, type @kbd{C-x
-C-0}.  These keys are all bound to the same command,
+  To increase the font size of the @code{default} face in the current
+buffer, type @kbd{C-x C-+} or @kbd{C-x C-=}.  To decrease it, type
+@kbd{C-x C--}.  To restore the default (global) font size, type
+@kbd{C-x C-0}.  These keys are all bound to the same command,
 @code{text-scale-adjust}, which looks at the last key typed to
-determine which action to take.
+determine which action to take and adjusts the font size accordingly
+by changing the height of the default face.
+
+  Most faces don't have an explicit setting of the @code{:height}
+attribute, and thus inherit the height from the @code{default} face.
+Those faces are also scaled by the above commands.
+
+  Faces other than @code{default} that have an explicit setting of the
+@code{:height} attribute are not affected by these font size changes.
+The @code{header-line} face is an exception: it will be scaled even if
+it has an explicit setting of the @code{:height} attribute.
 
   Similarly, scrolling the mouse wheel with the @kbd{Ctrl} modifier
 pressed, when the mouse pointer is above buffer text, will increase or
-decrease the height of the default face, depending on the direction of
-the scrolling.
+decrease the font size of the affected faces, depending on the
+direction of the scrolling.
 
   The final key of these commands may be repeated without the leading
 @kbd{C-x}.  For instance, @kbd{C-x C-= C-= C-=} increases the face
@@ -882,21 +927,37 @@ of 1.2; to change this factor, customize the variable
 to the @code{text-scale-adjust} command restores the default height,
 the same as typing @kbd{C-x C-0}.
 
-@cindex increase buffer face height
+@cindex adjust global font size
+@findex global-text-scale-adjust
+@vindex global-text-scale-adjust-resizes-frames
+@kindex C-x C-M-+
+@kindex C-x C-M-=
+@kindex C-x C-M--
+@kindex C-x C-M-0
+@kindex C-M-wheel-down
+@kindex C-M-wheel-up
+  Similarly, to change the sizes of the fonts globally, type @kbd{C-x
+C-M-+}, @kbd{C-x C-M-=}, @kbd{C-x C-M--} or @kbd{C-x C-M-0}, or scroll
+the mouse wheel with both the @kbd{Ctrl} and @kbd{Meta} modifiers
+pressed.  To enable frame resizing when the font size is changed
+globally, customize the variable
+@code{global-text-scale-adjust-resizes-frames} (@pxref{Easy
+Customization}).
+
+@cindex increase buffer font size
 @findex text-scale-increase
-@cindex decrease buffer face height
+@cindex decrease buffer font size
 @findex text-scale-decrease
   The commands @code{text-scale-increase} and
-@code{text-scale-decrease} increase or decrease the height of the
-default face, just like @kbd{C-x C-+} and @kbd{C-x C--} respectively.
-You may find it convenient to bind to these commands, rather than
-@code{text-scale-adjust}.
+@code{text-scale-decrease} increase or decrease the size of the font
+in the current buffer, just like @kbd{C-x C-+} and @kbd{C-x C--}
+respectively.  You may find it convenient to bind to these commands,
+rather than @code{text-scale-adjust}.
 
-@cindex set buffer face height
+@cindex set buffer font size
 @findex text-scale-set
-  The command @code{text-scale-set} scales the height of the default
-face in the current buffer to an absolute level specified by its
-prefix argument.
+  The command @code{text-scale-set} scales the size of the font in the
+current buffer to an absolute level specified by its prefix argument.
 
 @findex text-scale-mode
   The above commands automatically enable the minor mode
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index ad0fa5f0cd..b43c966f87 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -1183,7 +1183,6 @@ The Emacs Initialization File
 
 Dealing with Emacs Trouble
 
-* DEL Does Not Delete:: What to do if @key{DEL} doesn't delete.
 * Stuck Recursive::     '[...]' in mode line around the parentheses.
 * Screen Garbled::      Garbage on the screen.
 * Text Garbled::        Garbage in the text.
@@ -1191,7 +1190,7 @@ Dealing with Emacs Trouble
 * Crashing::            What Emacs does when it crashes.
 * After a Crash::       Recovering editing in an Emacs session that crashed.
 * Emergency Escape::    What to do if Emacs stops responding.
-* Long Lines::          Mitigating slowness due to extremely long lines.
+* DEL Does Not Delete:: What to do if @key{DEL} doesn't delete.
 
 Reporting Bugs
 
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index 062185fb4a..5b3b15cd38 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -420,6 +420,9 @@ With prefix argument (@kbd{C-u}), mark the current buffer 
as changed.
 Save the current buffer with a specified file name (@code{write-file}).
 @item M-x set-visited-file-name
 Change the file name under which the current buffer will be saved.
+@item M-x rename-visited-file
+The same as @kbd{M-x set-visited-file-name}, but also rename the file
+the buffer is visiting (if any).
 @end table
 
 @kindex C-x C-s
@@ -652,10 +655,10 @@ Never make numbered backups; always make single backups.
 The usual way to set this variable is globally, through your init file
 or the customization buffer.  However, you can set
 @code{version-control} locally in an individual buffer to control the
-making of backups for that buffer's file (@pxref{Locals}).  You can
-have Emacs set @code{version-control} locally whenever you visit a
-given file (@pxref{File Variables}).  Some modes, such as Rmail mode,
-set this variable.
+making of backups for that buffer's file (@pxref{Locals}).  Some
+modes, such as Rmail mode, set this variable.  You can also have Emacs
+set @code{version-control} locally whenever you visit a given file
+(@pxref{File Variables}).
 
 @cindex @env{VERSION_CONTROL} environment variable
   If you set the environment variable @env{VERSION_CONTROL}, to tell
@@ -2222,13 +2225,16 @@ recently-opened files, reading file names from a buffer.
 
 @findex recentf-mode
 @vindex recentf-mode
+@findex recentf-open
 @findex recentf-save-list
 @findex recentf-edit-list
-  If you enable Recentf mode, with @kbd{M-x recentf-mode}, the
-@samp{File} menu includes a submenu containing a list of recently
-opened files.  @kbd{M-x recentf-save-list} saves the current
-@code{recentf-list} to a file, and @kbd{M-x recentf-edit-list} edits
-it.
+  If you enable Recentf mode, with @kbd{M-x recentf-mode}, Emacs
+maintains a list of recently opened files.  To open a file from this
+list, use the @kbd{M-x recentf-open} command.  When this mode is
+enabled, the @samp{File} menu will include a submenu that you can use
+to visit one of these files.  @kbd{M-x recentf-save-list} saves the
+current @code{recentf-list} to a file, and @kbd{M-x recentf-edit-list}
+edits it.
 
 @c FIXME partial-completion-mode (complete.el) is obsolete.
   The @kbd{M-x ffap} command generalizes @code{find-file} with more
@@ -2267,12 +2273,14 @@ behavior by using the options @code{image-auto-resize} 
and
 @findex image-transform-set-scale
 @findex image-transform-reset
 To resize the image manually you can use the command
-@code{image-transform-fit-to-window} bound to @kbd{s w}
-that fits the image to both the window height and width.
-To scale the image specifying a scale factor, use the command
-@code{image-transform-set-scale} bound to @kbd{s s}.
-To reset all transformations to the initial state, use
-@code{image-transform-reset} bound to @kbd{s 0}.
+@code{image-transform-fit-to-window} bound to @kbd{s w} that fits the
+image to both the window height and width.  To scale the image to a
+percentage of its original size, use the command
+@code{image-transform-set-percent} bound to @kbd{s p}.  To scale
+the image specifying a scale factor, use the command
+@code{image-transform-set-scale} bound to @kbd{s s}.  To reset all
+transformations to the initial state, use @code{image-transform-reset}
+bound to @kbd{s 0}.
 
 @findex image-next-file
 @findex image-previous-file
@@ -2349,6 +2357,29 @@ can be used to transform the image in question to 
@acronym{PNG} before
 displaying.  GraphicsMagick, ImageMagick and @command{ffmpeg} are
 currently supported for image conversions.
 
+@findex image-converter-add-handler
+  In addition, you may wish to add special handlers for certain image
+formats.  These can be added with the
+@code{image-converter-add-handler} function.  For instance, to allow
+viewing Krita files as simple images, you could say something like:
+
+@lisp
+(image-converter-add-handler
+ "kra"
+ (lambda (file data-p)
+   (if data-p
+       (error "Can't decode non-files")
+     (call-process "unzip" nil t nil
+                   "-qq" "-c" "-x" file "mergedimage.png"))))
+@end lisp
+
+The function takes two parameters, where the first is a file name
+suffix, and the second is a function to do the ``conversion''.  This
+function takes two parameters, where the first is the file name or a
+string with the data, and the second says whether the first parameter
+is data or not, and should output an image in
+@code{image-convert-to-format} format in the current buffer.
+
 @findex thumbs-mode
 @cindex mode, Thumbs
   The Image-Dired package can also be used to view images as
diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi
index fa248c1a58..d78cbffaa7 100644
--- a/doc/emacs/frames.texi
+++ b/doc/emacs/frames.texi
@@ -223,8 +223,8 @@ mouse-wheel-mode}.  The variables 
@code{mouse-wheel-follow-mouse} and
 buffers are scrolled.  The variable
 @code{mouse-wheel-progressive-speed} determines whether the scroll
 speed is linked to how fast you move the wheel.  This mode also
-supports increasing or decreasing the height of the default face, by
-default bound to scrolling with the @key{Ctrl} modifier.
+supports increasing or decreasing the font size, by default bound to
+scrolling with the @key{Ctrl} modifier.
 
 @vindex mouse-wheel-scroll-amount-horizontal
 Emacs also supports horizontal scrolling with the @key{Shift}
@@ -1249,6 +1249,13 @@ To drag text from Emacs to other programs, set the option
 @code{mouse-drag-and-drop-region-cross-program} to a non-@code{nil}
 value.
 
+  On the X window system, some programs can drop files on Emacs,
+expecting Emacs to save them.  Normally, Emacs will prompt for a file
+name under which the file will be saved, and then open the file, but
+that behavior can be changed by changing the variable
+@code{x-dnd-direct-save-function}.  @xref{Drag and Drop,,, elisp, The
+Emacs Lisp Reference Manual}.
+
 @node Menu Bars
 @section Menu Bars
 @cindex menu bar mode
diff --git a/doc/emacs/glossary.texi b/doc/emacs/glossary.texi
index a78a2c9e2d..9a53701997 100644
--- a/doc/emacs/glossary.texi
+++ b/doc/emacs/glossary.texi
@@ -182,6 +182,7 @@ corresponding Control character.  @xref{User Input,C-M-}.
 Case conversion means changing text from upper case to lower case or
 vice versa.  @xref{Case}.
 
+@cindex ignore case
 @item Case Folding
 Case folding means ignoring the differences between case variants of
 the same letter: upper-case, lower-case, and title-case.  Emacs
@@ -1456,8 +1457,8 @@ level by aborting (q.v.@:) and quitting (q.v.).  
@xref{Quitting}.
 @item Transient Mark Mode
 The default behavior of the mark (q.v.@:) and region (q.v.), in which
 setting the mark activates it and highlights the region, is called
-Transient Mark mode.  In GNU Emacs 23 and onwards, it is enabled by
-default.  @xref{Disabled Transient Mark}.
+Transient Mark mode.  It is enabled by default.  @xref{Disabled
+Transient Mark}.
 
 @item Transposition
 Transposing two units of text means putting each one into the place
diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi
index 11ee9dc2b2..d206dee385 100644
--- a/doc/emacs/help.texi
+++ b/doc/emacs/help.texi
@@ -542,6 +542,11 @@ previous hyperlink.  These commands act cyclically; for 
instance,
 typing @key{TAB} at the last hyperlink moves back to the first
 hyperlink.
 
+@vindex help-clean-buttons
+  By default, many links in the help buffer are displayed surrounded
+by quote characters.  If the @code{help-clean-buttons} user option is
+non-@code{nil}, these quote characters are removed from the buffer.
+
 @kindex n @r{(Help mode)}
 @kindex p @r{(Help mode)}
 @findex help-goto-next-page
diff --git a/doc/emacs/killing.texi b/doc/emacs/killing.texi
index 4435f6e494..bb8d51158a 100644
--- a/doc/emacs/killing.texi
+++ b/doc/emacs/killing.texi
@@ -610,14 +610,14 @@ yanks the contents of the clipboard at point.
 @cindex primary selection
 @cindex selection, primary
 
-  Under the X Window System, there exists a @dfn{primary selection}
-containing the last stretch of text selected in an X application
-(usually by dragging the mouse).  Typically, this text can be inserted
-into other X applications by @kbd{mouse-2} clicks.  The primary
-selection is separate from the clipboard.  Its contents are more
-fragile; they are overwritten each time you select text with the
-mouse, whereas the clipboard is only overwritten by explicit cut
-or copy commands.
+  Under the X Window System, PGTK and Haiku, there exists a
+@dfn{primary selection} containing the last stretch of text selected
+in an X application (usually by dragging the mouse).  Typically, this
+text can be inserted into other X applications by @kbd{mouse-2}
+clicks.  The primary selection is separate from the clipboard.  Its
+contents are more fragile; they are overwritten each time you select
+text with the mouse, whereas the clipboard is only overwritten by
+explicit cut or copy commands.
 
   Under X, whenever the region is active (@pxref{Mark}), the text in
 the region is saved in the primary selection.  This applies regardless
@@ -639,6 +639,13 @@ regions to the primary selection entirely.
 (@kbd{C-y}) to insert this text if @code{select-enable-primary} is set
 (@pxref{Clipboard}).
 
+@cindex lost-selection-mode
+  By default, Emacs keeps the region active even after text is
+selected in another program; this is contrary to typical X behavior.
+To make Emacs deactivate the region after another program places data
+in the primary selection, enable the global minor mode
+@code{lost-selection-mode}.
+
 @cindex MS-Windows, and primary selection
   MS-Windows provides no primary selection, but Emacs emulates it
 within a single Emacs session by storing the selected text internally.
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index e5b3664a4c..60169d8d8c 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2222,8 +2222,8 @@ where you were with @kbd{M-,}.
 
 @kindex C-M-,
 @findex xref-go-forward
-  Go forward to a place from where you previously went back using @kbd{M-,}.
-This is useful if you find that you went back too far.
+  If you previously went back too far with @kbd{M-,}, @kbd{C-M-,}
+(@code{xref-go-forward}) can be used to go forward again.
 
 @findex xref-etags-mode
   Some major modes install @code{xref} support facilities that might
diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi
index 4e71793b66..e71d653210 100644
--- a/doc/emacs/mini.texi
+++ b/doc/emacs/mini.texi
@@ -734,11 +734,14 @@ highlighting.  This feature uses the special text property
 @section Minibuffer History
 @cindex minibuffer history
 @cindex history of minibuffer input
-
-  Every argument that you enter with the minibuffer is saved in a
-@dfn{minibuffer history list} so you can easily use it again later.
-You can use the following arguments to quickly fetch an earlier
-argument into the minibuffer:
+@cindex completion, walking through candidates
+
+  Everything you type in the minibuffer is saved in a @dfn{minibuffer
+history list} so you can easily use it again later.  This includes
+completion candidates (such as file names, buffer names, command
+names, etc.@:) and any other kind of minibuffer input.  You can use
+the following commands to quickly fetch an earlier or alternative
+response into the minibuffer:
 
 @table @kbd
 @item M-p
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 9709c6ddc1..da1b87b48b 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -1,6 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
-@c Foundation, Inc.
+@c Copyright (C) 1985--2022 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
 @chapter Miscellaneous Commands
@@ -1643,11 +1642,11 @@ interface is similar to the @code{more} program.
 @cindex remote host
 @cindex connecting to remote host
 @cindex Telnet
-@cindex Rlogin
+@cindex SSH
 
   You can login to a remote computer, using whatever commands you
-would from a regular terminal (e.g., using the @command{ssh} or
-@command{telnet} or @code{rlogin} commands), from a Term window.
+would from a regular terminal (e.g., the @command{ssh} command), from
+a Term window.
 
   A program that asks you for a password will normally suppress
 echoing of the password, so the password will not show up in the
@@ -2870,99 +2869,6 @@ new major mode which provides a command to switch back.  
These
 approaches give you more flexibility to go back to unfinished tasks in
 the order you choose.
 
-@ignore
-@c Apart from edt and viper, this is all obsolete.
-@c (Can't believe we were saying "most other editors" into 2014!)
-@c There seems no point having a node just for those, which both have
-@c their own manuals.
-@node Emulation
-@section Emulation
-@cindex emulating other editors
-@cindex other editors
-@cindex EDT
-@cindex vi
-@cindex WordStar
-
-  GNU Emacs can be programmed to emulate (more or less) most other
-editors.  Standard facilities can emulate these:
-
-@table @asis
-@item CRiSP/Brief (PC editor)
-@findex crisp-mode
-@vindex crisp-override-meta-x
-@findex scroll-all-mode
-@cindex CRiSP mode
-@cindex Brief emulation
-@cindex emulation of Brief
-@cindex mode, CRiSP
-@kbd{M-x crisp-mode} enables key bindings to emulate the CRiSP/Brief
-editor.  Note that this rebinds @kbd{M-x} to exit Emacs unless you set
-the variable @code{crisp-override-meta-x}.  You can also use the
-command @kbd{M-x scroll-all-mode} or set the variable
-@code{crisp-load-scroll-all} to emulate CRiSP's scroll-all feature
-(scrolling all windows together).
-
-@item EDT (DEC VMS editor)
-@findex edt-emulation-on
-@findex edt-emulation-off
-Turn on EDT emulation with @kbd{M-x edt-emulation-on}; restore normal
-command bindings with @kbd{M-x edt-emulation-off}.
-
-Most of the EDT emulation commands are keypad keys, and most standard
-Emacs key bindings are still available.  The EDT emulation rebindings
-are done in the global keymap, so there is no problem switching
-buffers or major modes while in EDT emulation.
-
-@item TPU (DEC VMS editor)
-@findex tpu-edt-on
-@cindex TPU
-@kbd{M-x tpu-edt-on} turns on emulation of the TPU editor emulating EDT.
-
-@item vi (Berkeley editor)
-@findex viper-mode
-Viper is an emulator for vi.  It implements several levels of
-emulation; level 1 is closest to vi itself, while level 5 departs
-somewhat from strict emulation to take advantage of the capabilities of
-Emacs.  To invoke Viper, type @kbd{M-x viper-mode}; it will guide you
-the rest of the way and ask for the emulation level.  @inforef{Top,
-Viper, viper}.
-
-@item vi (another emulator)
-@findex vi-mode
-@kbd{M-x vi-mode} enters a major mode that replaces the previously
-established major mode.  All of the vi commands that, in real vi, enter
-input mode are programmed instead to return to the previous major
-mode.  Thus, ordinary Emacs serves as vi's input mode.
-
-Because vi emulation works through major modes, it does not work
-to switch buffers during emulation.  Return to normal Emacs first.
-
-If you plan to use vi emulation much, you probably want to bind a key
-to the @code{vi-mode} command.
-
-@item vi (alternate emulator)
-@findex vip-mode
-@kbd{M-x vip-mode} invokes another vi emulator, said to resemble real vi
-more thoroughly than @kbd{M-x vi-mode}.  Input mode in this emulator
-is changed from ordinary Emacs so you can use @key{ESC} to go back to
-emulated vi command mode.  To get from emulated vi command mode back to
-ordinary Emacs, type @kbd{C-z}.
-
-This emulation does not work through major modes, and it is possible
-to switch buffers in various ways within the emulator.  It is not
-so necessary to assign a key to the command @code{vip-mode} as
-it is with @code{vi-mode} because terminating insert mode does
-not use it.
-
-@inforef{Top, VIP, vip}, for full information.
-
-@item WordStar (old wordprocessor)
-@findex wordstar-mode
-@kbd{M-x wordstar-mode} provides a major mode with WordStar-like
-key bindings.
-@end table
-@end ignore
-
 
 @node Hyperlinking
 @section Hyperlinking and Web Navigation Features
diff --git a/doc/emacs/msdos.texi b/doc/emacs/msdos.texi
index e30d623a77..dd0787cd38 100644
--- a/doc/emacs/msdos.texi
+++ b/doc/emacs/msdos.texi
@@ -986,9 +986,9 @@ printer, put this in your @file{.emacs} file:
 @section Specifying Fonts on MS-Windows
 @cindex font specification (MS Windows)
 
-  Starting with Emacs 23, fonts are specified by their name, size
-and optional properties.  The format for specifying fonts comes from the
-fontconfig library used in modern Free desktops:
+  Fonts are specified by their name, size and optional properties.
+The format for specifying fonts comes from the fontconfig library used
+in modern Free desktops:
 
 @example
   [Family[-PointSize]][:Option1=Value1[:Option2=Value2[...]]]
diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi
index eb4f5b0eda..7e16c82cf5 100644
--- a/doc/emacs/package.texi
+++ b/doc/emacs/package.texi
@@ -483,6 +483,16 @@ The default value is just @code{'(all)}.
 installed will be ignored.  The @samp{muse} package will be listed in
 the package menu with the @samp{held} status.
 
+@findex package-recompile
+@findex package-recompile-all
+  Emacs byte code is quite stable, but it's possible for byte code to
+become outdated, or for the compiled files to rely on macros that have
+changed in new versions of Emacs.  You can use the command @w{@kbd{M-x
+package-recompile}} to recompile a particular package, or
+@w{@kbd{M-x package-recompile-all}} to recompile all the packages.  (The
+latter command might take quite a while to run if you have many
+installed packages.)
+
 @node Package Files
 @section Package Files and Directory Layout
 @cindex package directory
diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi
index f4e12d29e9..582e764c55 100644
--- a/doc/emacs/search.texi
+++ b/doc/emacs/search.texi
@@ -228,8 +228,9 @@ customizing the @code{isearch-wrap-pause} user option.  If 
it is
 @code{t} (the default), signal an error.  (Repeating the search will
 wrap around.)  If @code{no}, issue a @code{ding} and wrap immediately
 after reaching the last match.  If @code{no-ding}, wrap immediately,
-but don't @code{ding}.  Finally, if @code{nil}, never wrap, but just
-stop at the last match.
+but don't @code{ding}.  With the values @code{no} and @code{no-ding}
+the search will try to wrap around also on typing a character.
+Finally, if @code{nil}, never wrap, but just stop at the last match.
 
 @cindex search ring
 @findex isearch-ring-advance
@@ -1428,16 +1429,18 @@ of its accented cousins like @code{@"a} and @code{@'a}, 
i.e., the
 match disregards the diacritics that distinguish these
 variants.  In addition, @code{a} matches other characters that
 resemble it, or have it as part of their graphical representation,
-such as U+249C @sc{parenthesized latin small letter a} and U+2100
-@sc{account of} (which looks like a small @code{a} over @code{c}).
+such as U+00AA @sc{feminine ordinal indicator} and U+24D0
+@sc{circled latin small letter a} (which looks like a small @code{a}
+inside a circle).
 Similarly, the @acronym{ASCII} double-quote character @code{"} matches
 all the other variants of double quotes defined by the Unicode
 standard.  Finally, character folding can make a sequence of one or
 more characters match another sequence of a different length: for
 example, the sequence of two characters @code{ff} matches U+FB00
-@sc{latin small ligature ff}.  Character sequences that are not identical,
-but match under character folding are known as @dfn{equivalent
-character sequences}.
+@sc{latin small ligature ff} and the sequence @code{(a)} matches
+U+249C @sc{parenthesized latin small letter a}.  Character sequences
+that are not identical, but match under character folding are known as
+@dfn{equivalent character sequences}.
 
 @kindex M-s ' @r{(Incremental Search)}
 @findex isearch-toggle-char-fold
diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi
index 8da96de1cb..887e5c6170 100644
--- a/doc/emacs/trouble.texi
+++ b/doc/emacs/trouble.texi
@@ -151,7 +151,6 @@ garbled displays, running out of memory, and crashes and 
hangs.
 Emacs.
 
 @menu
-* DEL Does Not Delete::   What to do if @key{DEL} doesn't delete.
 * Stuck Recursive::       '[...]' in mode line around the parentheses.
 * Screen Garbled::        Garbage on the screen.
 * Text Garbled::          Garbage in the text.
@@ -159,66 +158,9 @@ Emacs.
 * Crashing::              What Emacs does when it crashes.
 * After a Crash::         Recovering editing in an Emacs session that crashed.
 * Emergency Escape::      What to do if Emacs stops responding.
-* Long Lines::            Mitigating slowness due to extremely long lines.
+* DEL Does Not Delete::   What to do if @key{DEL} doesn't delete.
 @end menu
 
-@node DEL Does Not Delete
-@subsection If @key{DEL} Fails to Delete
-@cindex @key{DEL} vs @key{BACKSPACE}
-@cindex @key{BACKSPACE} vs @key{DEL}
-@cindex @key{DEL} does not delete
-
-  Every keyboard has a large key, usually labeled @key{BACKSPACE},
-which is ordinarily used to erase the last character that you typed.
-In Emacs, this key is supposed to be equivalent to @key{DEL}.
-
-  When Emacs starts up on a graphical display, it determines
-automatically which key should be @key{DEL}.  In some unusual cases,
-Emacs gets the wrong information from the system, and @key{BACKSPACE}
-ends up deleting forwards instead of backwards.
-
-  Some keyboards also have a @key{Delete} key, which is ordinarily
-used to delete forwards.  If this key deletes backward in Emacs, that
-too suggests Emacs got the wrong information---but in the opposite
-sense.
-
-  On a text terminal, if you find that @key{BACKSPACE} prompts for a
-Help command, like @kbd{Control-h}, instead of deleting a character,
-it means that key is actually sending the @samp{BS} character.  Emacs
-ought to be treating @key{BS} as @key{DEL}, but it isn't.
-
-@findex normal-erase-is-backspace-mode
-  In all of those cases, the immediate remedy is the same: use the
-command @kbd{M-x normal-erase-is-backspace-mode}.  This toggles
-between the two modes that Emacs supports for handling @key{DEL}, so
-if Emacs starts in the wrong mode, this should switch to the right
-mode.  On a text terminal, if you want to ask for help when @key{BS}
-is treated as @key{DEL}, use @key{F1} instead of @kbd{C-h}; @kbd{C-?}
-may also work, if it sends character code 127.
-
-  To fix the problem in every Emacs session, put one of the following
-lines into your initialization file (@pxref{Init File}).  For the
-first case above, where @key{BACKSPACE} deletes forwards instead of
-backwards, use this line to make @key{BACKSPACE} act as @key{DEL}:
-
-@lisp
-(normal-erase-is-backspace-mode 0)
-@end lisp
-
-@noindent
-For the other two cases, use this line:
-
-@lisp
-(normal-erase-is-backspace-mode 1)
-@end lisp
-
-@vindex normal-erase-is-backspace
-  Another way to fix the problem for every Emacs session is to
-customize the variable @code{normal-erase-is-backspace}: the value
-@code{t} specifies the mode where @key{BS} or @key{BACKSPACE} is
-@key{DEL}, and @code{nil} specifies the other mode.  @xref{Easy
-Customization}.
-
 @node Stuck Recursive
 @subsection Recursive Editing Levels
 @cindex stuck in recursive editing
@@ -490,40 +432,62 @@ program.
 emergency escape---but there are cases where it won't work, when a
 system call hangs or when Emacs is stuck in a tight loop in C code.
 
-@node Long Lines
-@subsection Long Lines
-@cindex long lines
-
-  For a variety of reasons (some of which are fundamental to the Emacs
-redisplay code and the complex range of possibilities it handles;
-others of which are due to modes and features which do not scale well
-in unusual circumstances), Emacs can perform poorly when extremely
-long lines are present (where ``extremely long'' usually means at
-least many thousands of characters).
-
-@cindex @code{so-long} mode
-@findex global-so-long-mode
-@vindex so-long-action
-  A particular problem is that Emacs may ``hang'' for a long time at
-the point of visiting a file with extremely long lines.  This can be
-mitigated by enabling the @file{so-long} library, which detects when a
-visited file contains abnormally long lines, and takes steps to
-disable features which are liable to cause slowness in that situation.
-To enable this library, type @kbd{M-x global-so-long-mode @key{RET}},
-or turn on the @code{global-so-long-mode} in your init file
-(@pxref{Init File}), or customize the @code{global-so-long-mode}
-option.  You can tailor this mode's operation by customizing the
-variable @code{so-long-action}.
-
-  The @file{so-long} library can also significantly improve
-performance when moving and editing in a buffer with long lines.
-Performance is still likely to degrade as you get deeper into the long
-lines, but the improvements from using this library can nevertheless
-be substantial.
-
-@findex so-long-commentary
-  Use @kbd{M-x so-long-commentary} to view the documentation for this
-library and learn more about how to enable and configure it.
+@node DEL Does Not Delete
+@subsection If @key{DEL} Fails to Delete
+@cindex @key{DEL} vs @key{BACKSPACE}
+@cindex @key{BACKSPACE} vs @key{DEL}
+@cindex @key{DEL} does not delete
+
+  Every keyboard has a large key, usually labeled @key{BACKSPACE},
+which is ordinarily used to erase the last character that you typed.
+In Emacs, this key is supposed to be equivalent to @key{DEL}.
+
+  When Emacs starts up on a graphical display, it determines
+automatically which key should be @key{DEL}.  In some unusual cases,
+Emacs gets the wrong information from the system, and @key{BACKSPACE}
+ends up deleting forwards instead of backwards.
+
+  Some keyboards also have a @key{Delete} key, which is ordinarily
+used to delete forwards.  If this key deletes backward in Emacs, that
+too suggests Emacs got the wrong information---but in the opposite
+sense.
+
+  On a text terminal, if you find that @key{BACKSPACE} prompts for a
+Help command, like @kbd{Control-h}, instead of deleting a character,
+it means that key is actually sending the @samp{BS} character.  Emacs
+ought to be treating @key{BS} as @key{DEL}, but it isn't.
+
+@findex normal-erase-is-backspace-mode
+  In all of those cases, the immediate remedy is the same: use the
+command @kbd{M-x normal-erase-is-backspace-mode}.  This toggles
+between the two modes that Emacs supports for handling @key{DEL}, so
+if Emacs starts in the wrong mode, this should switch to the right
+mode.  On a text terminal, if you want to ask for help when @key{BS}
+is treated as @key{DEL}, use @key{F1} instead of @kbd{C-h}; @kbd{C-?}
+may also work, if it sends character code 127.
+
+  To fix the problem in every Emacs session, put one of the following
+lines into your initialization file (@pxref{Init File}).  For the
+first case above, where @key{BACKSPACE} deletes forwards instead of
+backwards, use this line to make @key{BACKSPACE} act as @key{DEL}:
+
+@lisp
+(normal-erase-is-backspace-mode 0)
+@end lisp
+
+@noindent
+For the other two cases, use this line:
+
+@lisp
+(normal-erase-is-backspace-mode 1)
+@end lisp
+
+@vindex normal-erase-is-backspace
+  Another way to fix the problem for every Emacs session is to
+customize the variable @code{normal-erase-is-backspace}: the value
+@code{t} specifies the mode where @key{BS} or @key{BACKSPACE} is
+@key{DEL}, and @code{nil} specifies the other mode.  @xref{Easy
+Customization}.
 
 @node Bugs
 @section Reporting Bugs
diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi
index 2c2700bc15..ab0df3563f 100644
--- a/doc/emacs/xresources.texi
+++ b/doc/emacs/xresources.texi
@@ -382,7 +382,9 @@ which prevents blank areas of a frame that have not yet 
been painted
 from being displayed.  If set to @samp{extended}, it will enable use
 of an alternative frame synchronization protocol, which might be
 supported by some compositing window managers that don't support the
-protocol Emacs uses by default.
+protocol Emacs uses by default, and causes Emacs to synchronize
+display with the monitor refresh rate when a compatible compositing
+window manager is in use.
 
 @item @code{verticalScrollBars} (class @code{ScrollBars})
 Give frames scroll bars on the left if @samp{left}, on the right if
@@ -449,6 +451,12 @@ Foreground color for a selected item.
 Foreground color.
 @item disabledForeground
 Foreground color for a disabled menu item.
+@item highlightForeground
+Foreground color for a menu item highlighted by the mouse or key
+navigation.
+@item highlightBackground
+Background color for a menu item highlighted by the mouse or key
+navigation.
 @ifnottex
 @item horizontalSpacing
 Horizontal spacing in pixels between items.  Default is 3.
diff --git a/doc/lispintro/emacs-lisp-intro.texi 
b/doc/lispintro/emacs-lisp-intro.texi
index 049c8a65a8..47a5a870fd 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -2020,7 +2020,6 @@ the arguments to the function @code{concat} are the 
strings
 @w{@code{"The "}} and @w{@code{" red foxes."}} and the list
 @code{(number-to-string (+ 2 fill-column))}.
 
-@c For GNU Emacs 22, need number-to-string
 @smallexample
 (concat "The " (number-to-string (+ 2 fill-column)) " red foxes.")
 @end smallexample
@@ -10297,9 +10296,8 @@ loop with a list.
 
 @cindex @file{*scratch*} buffer
 The function requires several lines for its output.  If you are
-reading this in a recent instance of GNU Emacs,
-@c GNU Emacs 21, GNU Emacs 22, or a later version,
-you can evaluate the following expression inside of Info, as usual.
+reading this in a recent instance of GNU Emacs, you can evaluate the
+following expression inside of Info, as usual.
 
 If you are using an earlier version of Emacs, you need to copy the
 necessary expressions to your @file{*scratch*} buffer and evaluate
@@ -15134,16 +15132,16 @@ Emacs may produce different results.)
 @end group
 
 @group
-(lengths-list-file "./lisp/makesum.el")
-     @result{} (85 181)
+(lengths-list-file "./lisp/hex-util.el")
+     @result{} (82 71)
 @end group
 
 @group
   (recursive-lengths-list-many-files
    '("./lisp/macros.el"
      "./lisp/mail/mailalias.el"
-     "./lisp/makesum.el"))
-       @result{} (283 263 480 90 38 32 29 95 178 180 321 218 324 85 181)
+     "./lisp/hex-util.el"))
+       @result{} (283 263 480 90 38 32 29 95 178 180 321 218 324 82 71)
 @end group
 @end smallexample
 
@@ -15235,27 +15233,13 @@ Sorting the list returned by the
 @code{recursive-lengths-list-many-files} function is straightforward;
 it uses the @code{<} function:
 
-@ignore
-2006 Oct 29
-In GNU Emacs 22,  eval
-(progn
-  (cd "/usr/local/share/emacs/22.0.50/")
-  (sort
-   (recursive-lengths-list-many-files
-    '("./lisp/macros.el"
-      "./lisp/mail/mailalias.el"
-      "./lisp/makesum.el"))
-   '<))
-
-@end ignore
-
 @smallexample
 @group
 (sort
  (recursive-lengths-list-many-files
   '("./lisp/macros.el"
     "./lisp/mailalias.el"
-    "./lisp/makesum.el"))
+    "./lisp/hex-util.el"))
  '<)
 @end group
 @end smallexample
@@ -15265,7 +15249,7 @@ In GNU Emacs 22,  eval
 which produces:
 
 @smallexample
-(29 32 38 85 90 95 178 180 181 218 263 283 321 324 480)
+(29 32 38 71 82 90 95 178 180 218 263 283 321 324 480)
 @end smallexample
 
 @noindent
@@ -15313,7 +15297,7 @@ as a list that looks like this (but with more elements):
 @group
 ("./lisp/macros.el"
  "./lisp/mail/rmail.el"
- "./lisp/makesum.el")
+ "./lisp/hex-util.el")
 @end group
 @end smallexample
 
@@ -17711,17 +17695,6 @@ or start GNU Emacs with the command @code{emacs -nbc}.
 (setq grep-command "grep -i -nH -e ")
 @end smallexample
 
-@ignore
-@c Evidently, no longer needed in GNU Emacs 22
-
-item Automatically uncompress compressed files when visiting them
-
-smallexample
-(load "uncompress")
-end smallexample
-
-@end ignore
-
 @item Find an existing buffer, even if it has a different name@*
 This avoids problems with symbolic links.
 
diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi
index 1cbe8bc093..6a1d125701 100644
--- a/doc/lispref/buffers.texi
+++ b/doc/lispref/buffers.texi
@@ -981,14 +981,22 @@ of
 Satisfied if @var{expr} doesn't satisfy @code{buffer-match-p} with
 the same buffer and @code{arg}.
 @item or
-Satisfied if @var{oper} is a list and @emph{any} condition if
+Satisfied if @var{expr} is a list and @emph{any} condition in
 @var{expr} satisfies @code{buffer-match-p}, with the same buffer and
 @code{arg}.
 @item and
-Satisfied if @var{oper} is a list and @emph{all} condition if
-@var{expr} satisfies @code{buffer-match-p}, with the same buffer and
+Satisfied if @var{expr} is a list and @emph{all} conditions in
+@var{expr} satisfy @code{buffer-match-p}, with the same buffer and
 @code{arg}.
+@item derived-mode
+Satisfied if the buffer's major mode derives from @var{expr}.
+@item major-mode
+Satisfied if the buffer's major mode is equal to @var{expr}.  Prefer
+using @code{derived-mode} instead when both can work.
 @end table
+@item t
+Satisfied by any buffer.  A convenient alternative to @code{""} (empty
+string), @code{(and)} (empty conjunction) or @code{always}.
 @end itemize
 @end defun
 
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi
index 0a82bba3bc..ede1c4d762 100644
--- a/doc/lispref/commands.texi
+++ b/doc/lispref/commands.texi
@@ -443,9 +443,9 @@ specification.  If the key sequence that invoked the 
command has
 and @acronym{ASCII} characters, do not count where @samp{e} is concerned.
 
 @item f
-A file name of an existing file (@pxref{File Names}).  The default
-directory is @code{default-directory}.  Existing, Completion, Default,
-Prompt.
+A file name of an existing file (@pxref{File Names}).  @xref{Reading
+File Names}, for details about default values.  Existing, Completion,
+Default, Prompt.
 
 @item F
 A file name.  The file need not exist.  Completion, Default, Prompt.
@@ -897,6 +897,10 @@ keymaps.  This command is the normal definition of 
@kbd{M-S-x}
 (that's ``meta shift x'').
 @end deffn
 
+Both these commands prompt for a command name, but with different
+completion rules.  You can toggle between these two modes by using the
+@kbd{M-S-x} command while being prompted.
+
 @node Distinguish Interactive
 @section Distinguish Interactive Calls
 @cindex distinguish interactive calls
@@ -2074,7 +2078,7 @@ and @var{kind} as arguments.
 @item load-changed
 This xwidget event indicates that the @var{xwidget} has reached a
 particular point of the page-loading process.  When these events are
-sent, @var{arg} will contain a string that futher describes the status
+sent, @var{arg} will contain a string that further describes the status
 of the widget:
 
 @table @samp
@@ -2208,6 +2212,17 @@ and @code{mouse-wheel-down-alternate-event} defined in
 @file{mwheel.el} to determine what event types to expect for the mouse
 wheel.
 
+@vindex mouse-wheel-left-event
+@vindex mouse-wheel-right-event
+Similarly, some mice can generate @code{mouse-wheel-left-event} and
+@code{mouse-wheel-right-event} and can be used to scroll if
+@code{mouse-wheel-tilt-scroll} is non-@code{nil}.  However, some mice
+also generate other events at the same time as they're generating
+these scroll events which may get in the way.  The way to fix this is
+generally to unbind these events (for instance, @code{mouse-6} or
+@code{mouse-7}, but this is very hardware and operating system
+dependent).
+
 @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''
@@ -2686,7 +2701,10 @@ the character at that position.
 @cindex timestamp of a mouse event
 @defun posn-timestamp position
 Return the timestamp in @var{position}.  This is the time at which the
-event occurred, in milliseconds.
+event occurred, in milliseconds.  Such a timestamp is reported
+relative to an arbitrary starting time that varies according to the
+window system in use.  On the X Window System, for example, it is the
+number of milliseconds since the X server was started.
 @end defun
 
   These functions compute a position list given particular buffer
@@ -2962,7 +2980,7 @@ returns the key sequence as a vector, never as a string.
 If an input character is upper-case (or has the shift modifier) and
 has no key binding, but its lower-case equivalent has one, then
 @code{read-key-sequence} converts the character to lower case.  (This
-behaviour can be disabled by setting the
+behavior can be disabled by setting the
 @code{translate-upper-case-key-bindings} user option to @code{nil}.)
 Note that @code{lookup-key} does not perform case conversion in this
 way.
@@ -3198,7 +3216,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 &optional help-string show-help
+@defun read-multiple-choice prompt choices &optional help-string show-help 
long-form
 Ask user a multiple choice question.  @var{prompt} should be a string
 that will be displayed as the prompt.
 
@@ -3217,6 +3235,11 @@ 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.
 
+If optional argument @var{long-form} is non-@code{nil}, the user
+will have to type in long-form answers (using @code{completing-read})
+instead of hitting a single key.  The answers must be among the second
+elements of the values in the @var{choices} list.
+
 The return value is the matching value from @var{choices}.
 
 @lisp
diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi
index 3670225dc4..60fc11a22e 100644
--- a/doc/lispref/compile.texi
+++ b/doc/lispref/compile.texi
@@ -979,7 +979,11 @@ Its value should be a number between @minus{}1 and 3.  
Values between
 0 and 3 specify the optimization levels equivalent to the
 corresponding compiler @option{-O0}, @option{-O1}, etc.@: command-line
 options of the compiler.  The value @minus{}1 means disable
-native-compilation; functions and files will be only byte-compiled.
+native-compilation: functions and files will be only byte-compiled;
+however, the @file{*.eln} files will still be produced, they will just
+contain the compiled code in bytecode form.  (This can be achieved at
+function granularity by using the @w{@code{(declare (speed -1))}}
+form, @pxref{Declare Form}.)
 The default value is 2.
 @end defopt
 
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index 528421bf3b..6ba35cffff 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -672,6 +672,10 @@ The value must be a valid color name.  The widget provides 
completion
 for color names, as well as a sample and a button for selecting a
 color name from a list of color names shown in a @file{*Colors*}
 buffer.
+
+@item fringe-bitmap
+The value must be a valid fringe bitmap name.  The widget provides
+completion.
 @end table
 
 @node Composite Types
diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi
index 058c931954..9ae40949d1 100644
--- a/doc/lispref/debugging.texi
+++ b/doc/lispref/debugging.texi
@@ -77,6 +77,7 @@ debugger recursively.  @xref{Recursive Editing}.
 
 @menu
 * Error Debugging::       Entering the debugger when an error happens.
+* Debugging Redisplay::   Getting backtraces from redisplay errors.
 * Infinite Loops::        Stopping and debugging a program that doesn't exit.
 * Function Debugging::    Entering it when a certain function is called.
 * Variable Debugging::    Entering it when a variable is modified.
@@ -105,6 +106,10 @@ debugger, set the variable @code{debug-on-error} to 
non-@code{nil}.
 (The command @code{toggle-debug-on-error} provides an easy way to do
 this.)
 
+Note that, for technical reasons, you cannot use the facilities
+defined in this subsection to debug errors in Lisp that the redisplay
+code has invoked.  @xref{Debugging Redisplay}, for help with these.
+
 @defopt debug-on-error
 This variable determines whether the debugger is called when an error
 is signaled and not handled.  If @code{debug-on-error} is @code{t},
@@ -213,6 +218,45 @@ file, use the option @samp{--debug-init}.  This binds
 bypasses the @code{condition-case} which normally catches errors in the
 init file.
 
+@node Debugging Redisplay
+@subsection Debugging Redisplay Errors
+@cindex redisplay errors
+@cindex debugging redisplay errors
+
+When an error occurs in Lisp code which redisplay has invoked, Emacs's
+usual debugging mechanisms are unusable, for technical reasons.  This
+subsection describes how to get a backtrace from such an error, which
+should be helpful in debugging it.
+
+These directions apply to Lisp forms used, for example, in
+@code{:eval} mode line constructs (@pxref{Mode Line Data}), and in all
+hooks invoked from redisplay, such as:
+
+@itemize
+@item
+@code{fontification-functions} (@pxref{Auto Faces}).
+@item
+@code{window-scroll-functions} (@pxref{Window Hooks}).
+@end itemize
+
+Note that if you have had an error in a hook function called from
+redisplay, the error handling might have removed this function from
+the hook.  You will thus need to reinitialize that hook somehow,
+perhaps with @code{add-hook}, to be able to replay the bug.
+
+To generate a backtrace in these circumstances, set the variable
+@code{backtrace-on-redisplay-error} to non-@code{nil}.  When the error
+occurs, Emacs will dump the backtrace to the buffer
+@file{*Redisplay-trace*}, but won't automatically display it in a
+window.  This is to avoid needlessly corrupting the redisplay you are
+debugging.  You will thus need to display the buffer yourself, with a
+command such as @code{switch-to-buffer-other-frame} @key{C-x 5 b}.
+
+@defvar backtrace-on-redisplay-error
+Set this variable to non-@code{nil} to enable the generation of a
+backtrace when an error occurs in any Lisp called from redisplay.
+@end defvar
+
 @node Infinite Loops
 @subsection Debugging Infinite Loops
 @cindex infinite loops
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index b98c2f8fa9..a56f467e0b 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -27,6 +27,7 @@ that Emacs presents to the user.
 * Window Dividers::     Separating windows visually.
 * Display Property::    Images, margins, text size, etc.
 * Images::              Displaying images in Emacs buffers.
+* Icons::               Displaying icons in Emacs buffers.
 * Xwidgets::            Displaying native widgets in Emacs buffers.
 * Buttons::             Adding clickable buttons to Emacs buffers.
 * Abstract Display::    Emacs's Widget for Object Collections.
@@ -2474,6 +2475,7 @@ Otherwise, it returns @code{nil}.
 The following table lists all the face attributes, their possible
 values, and their effects.
 
+@cindex unspecified, face attribute value
   Apart from the values given below, each face attribute can have the
 value @code{unspecified}.  This special value means that the face
 doesn't specify that attribute directly.  An @code{unspecified}
@@ -2482,7 +2484,13 @@ description @code{:inherit} attribute below); or, 
failing that, to an
 underlying face (@pxref{Displaying Faces}).  (However,
 @code{unspecified} is not a valid value in @code{defface}.)
 
-  The @code{default} face must specify all attributes.
+@cindex reset, face attribute value
+  A face attribute can also have the value @code{reset}.  This special
+value stands for the value of the corresponding attribute of the
+@code{default} face.
+
+  The @code{default} face must explicitly specify all attributes, and
+cannot use the special value @code{reset}.
 
   Some of these attributes are meaningful only on certain kinds of
 displays.  If your display cannot handle a certain attribute, the
@@ -2615,14 +2623,17 @@ Draw a box with lines of width 1, in the foreground 
color.
 Draw a box with lines of width 1, in color @var{color}.
 
 @item @code{(:line-width (@var{vwidth} . @var{hwidth}) :color @var{color} 
:style @var{style})}
-This way you can explicitly specify all aspects of the box.  The values
-@var{vwidth} and @var{hwidth} specifies respectively the width of the
-vertical and horizontal lines to draw; they default to (1 . 1).
-A negative horizontal or vertical width @minus{}@var{n} means to draw a line
-of width @var{n} that occupies the space of the underlying text, thus
-avoiding any increase in the character height or width. For simplification
-the width could be specified with only a single number @var{n} instead
-of a list, such case is equivalent to @code{((abs @var{n}) . @var{n})}.
+You can explicitly specify all aspects of the box with a plist on this
+form.  Any element in this plist can be omitted.
+
+The values @var{vwidth} and @var{hwidth} specifies respectively the
+width of the vertical and horizontal lines to draw; they default to (1
+. 1).  A negative horizontal or vertical width @minus{}@var{n} means
+to draw a line of width @var{n} that occupies the space of the
+underlying text, thus avoiding any increase in the character height or
+width. For simplification the width could be specified with only a
+single number @var{n} instead of a list, such case is equivalent to
+@code{((abs @var{n}) . @var{n})}.
 
 The value @var{style} specifies whether to draw a 3D box.  If it is
 @code{released-button}, the box looks like a 3D button that is not
@@ -2706,6 +2717,13 @@ doesn't specify an explicit value for a face, the value 
from the
 original face definition by @code{defface} is inherited
 (@pxref{Defining Faces}).
 
+Some modes, like @code{hl-line-mode}, use a face with an
+@code{:extend} property to mark the entire current line.  Note,
+however, that Emacs will always allow you to move point after the
+final character in a buffer, and if the buffer ends with a newline
+character, point can be placed on what is seemingly a line at the end
+of the buffer---but Emacs can't highlight that ``line'', because it
+doesn't really exist.
 @end table
 
 @defun font-family-list &optional frame
@@ -3465,6 +3483,12 @@ function finishes are the ones that really matter.
 
 For efficiency, we recommend writing these functions so that they
 usually assign faces to around 400 to 600 characters at each call.
+
+When the buffer text includes very long lines, these functions are
+called with the buffer narrowed to a relatively small region around
+@var{pos}, and with narrowing locked, so the functions cannot use
+@code{widen} to gain access to the rest of the buffer.
+@xref{Narrowing}.
 @end defvar
 
 @node Basic Faces
@@ -4605,6 +4629,7 @@ Used to indicate buffer boundaries.
 Used for different types of fringe cursors.
 
 @item @code{exclamation-mark}, @code{question-mark}
+@itemx @code{large-circle}
 Not used by core Emacs features.
 @end table
 
@@ -5710,6 +5735,12 @@ are supported, unless the image type is 
@code{imagemagick}.  Positive
 values rotate clockwise, negative values counter-clockwise.  Rotation
 is performed after scaling and cropping.
 
+@item :flip @var{flip}
+If this is @code{t}, the image will be horizontally flipped.
+Currently it has no effect if the image type is @code{imagemagick}.
+Vertical flipping can be achieved by rotating the image 180 degrees
+and toggling this value.
+
 @item :transform-smoothing @var{smooth}
 If this is @code{t}, any image transform will have smoothing applied;
 if @code{nil}, no smoothing will be applied.  The exact algorithm used
@@ -5858,6 +5889,14 @@ When you click the mouse when the mouse pointer is over 
a hot-spot, an
 event is composed by combining the @var{id} of the hot-spot with the
 mouse event; for instance, @code{[area4 mouse-1]} if the hot-spot's
 @var{id} is @code{area4}.
+
+Note that the map's coordinates should reflect the displayed image
+after all transforms have been done (rotation, scaling and so on), and
+also note that Emacs (by default) performs auto-scaling of images, so
+to make things match up, you should either specify @code{:scale 1.0}
+when creating the image, or use the result of
+@code{image-compute-scaling-factor} to compute the elements of the
+map.
 @end table
 
 @defun image-mask-p spec &optional frame
@@ -5923,13 +5962,10 @@ There are three formats you can use for @var{data}:
 @itemize @bullet
 @item
 A vector of strings or bool-vectors, each specifying one line of the
-image.  Do specify @code{:height} and @code{:width}.
+image.  Do specify @code{:data-height} and @code{:data-width}.
 
 @item
 A string containing the same byte sequence as an XBM file would contain.
-You must not specify @code{:height} and @code{:width} in this case,
-because omitting them is what indicates the data has the format of an
-XBM file.  The file contents specify the height and width of the image.
 
 @item
 A string or a bool-vector containing the bits of the image (plus
@@ -5937,26 +5973,11 @@ perhaps some extra bits at the end that will not be 
used).  It should
 contain at least @w{@code{@var{stride} * @var{height}}} bits, where
 @var{stride} is the smallest multiple of 8 greater than or equal to
 the width of the image.  In this case, you should specify
-@code{:height}, @code{:width} and @code{:stride}, both to indicate
-that the string contains just the bits rather than a whole XBM file,
-and to specify the size of the image.
+@code{:data-height}, @code{:data-width} and @code{:stride}, both to
+indicate that the string contains just the bits rather than a whole
+XBM file, and to specify the size of the image.
 @end itemize
 
-@item :width @var{width}
-The value, @var{width}, specifies the width of the image, in pixels.
-
-@item :height @var{height}
-The value, @var{height}, specifies the height of the image, in pixels.
-
-Note that @code{:width} and @code{:height} can only be used if passing
-in data that doesn't specify the width and height (e.g., a string or a
-vector containing the bits of the image).  @acronym{XBM} files usually
-specify this themselves, and it's an error to use these two properties
-on these files.  Also note that @code{:width} and @code{:height} are
-used by most other image formats to specify what the displayed image
-is supposed to be, which usually means performing some sort of
-scaling.  This isn't supported for @acronym{XBM} images.
-
 @item :stride @var{stride}
 The number of bool vector entries stored for each row; the smallest
 multiple of 8 greater than or equal to @var{width}.
@@ -6977,6 +6998,165 @@ bytes.  An image of size 200x100 with 24 bits per color 
will have a
 cache size of 60000 bytes, for instance.
 @end defun
 
+@node Icons
+@section Icons
+
+Emacs sometimes uses buttons (for clicking on) or small graphics (to
+illustrate something).  Since Emacs is available on a wide variety of
+systems with different capabilities, and users have different
+preferences, Emacs provides a facility to handle this in a convenient
+way, allowing customization, graceful degradation, accessibility, as
+well as themability: @dfn{Icons}.
+
+The central macro here is @code{define-icon}, and here's a simple
+example:
+
+@lisp
+(define-icon outline-open button
+  '((image "right.svg" "open.xpm" "open.pbm" :height line)
+    (emoji "▶️")
+    (symbol "▶" "➤")
+    (text "open" :face icon-button))
+  "Icon used for buttons for opening a section in outline buffers."
+  :version "29.1"
+  :help-echo "Open this section")
+@end lisp
+
+Which alternative will actually be displayed depends on the value of
+the user option @code{icon-preference} (@pxref{Icons,,, emacs, The GNU
+Emacs Manual}) and on the results of run-time checks for what the
+current frame's terminal can actually display.
+
+The macro in the example above defines @code{outline-open} as an icon,
+and inherits properties from the icon called @code{button} (so this is
+meant as a clickable button to be inserted in a buffer).  It is
+followed by a list of @dfn{icon types} along with the actual icon
+shapes themselves.  In addition, there's a doc string and various
+keywords that contain additional information and properties.
+
+To instantiate an icon, you use @code{icon-string}, which will
+consult the current Customize theming, and the @code{icon-preference}
+user option, and finally what the Emacs is able to actually display.
+If @code{icon-preference} is @code{(image emoji symbol text)} (i.e.,
+allowing all of these forms of icons), in this case,
+@code{icon-string} will first check that Emacs is able to display
+images at all, and then whether it has support for each of those
+different image formats.  If that fails, Emacs will check whether
+Emacs can display emojis (in the current frame).  If that fails, it'll
+check whether it can display the symbol in question.  If that fails,
+it'll use the plain text version.
+
+For instance, if @code{icon-preference} doesn't contain @code{image}
+or @code{emoji}, it'll skip those entries.
+
+Code can confidently call @code{icon-string} in all circumstances and
+be sure that something readable will appear on the screen, no
+matter whether the user is on a graphical terminal or a text terminal,
+and no matter which features Emacs was built with.
+
+@defmac define-icon name parent specs doc &rest keywords
+Define an icon @var{name}, a symbol, with the display alternatives in
+@var{spec}, that can be later instantiated using @code{icon-string}.
+The @var{name} is the name of the resulting keyword.
+
+The resulting icon will inherit specs from @var{parent}, and from
+their parent's parents, and so on, and the lowest descendent element
+wins.
+
+@var{specs} is a list of icon specifications.  The first element of each
+specification is the type, and the rest is something that can be used
+as an icon of that type, and then optionally followed by a keyword
+list.  The following icon types are available:
+
+@cindex icon types
+@table @code
+@item image
+In this case, there may be many images listed as candidates.  Emacs
+will choose the first one that the current Emacs instance can show.
+If an image is listed is an absolute file name, it's used as is, but it's
+otherwise looked up in the list @code{image-load-path}
+(@pxref{Defining Images}).
+
+@item emoji
+This should be a (possibly colorful) emoji.
+
+@item symbol
+This should be a (monochrome) symbol character.
+
+@item text
+Icons should also have a textual fallback.  This can also be used for
+the visually impaired: if @code{icon-preference} is just
+@code{(text)}, all icons will be replaced by text.
+@end table
+
+Various keywords may follow the list of icon specifications.  For
+instance:
+
+@example
+(symbol "▶" "➤" :face icon-button)
+@end example
+
+Unknown keywords are ignored.  The following keywords are allowed:
+
+@cindex icon keywords
+@table @code
+@item :face
+The face to be used for the icon.
+
+@item :height
+This is only valid for @code{image} icons, and can be either a number
+(which specifies the height in pixels), or the symbol @code{line},
+which will use the default line height in the currently selected
+window.
+@end table
+
+@var{doc} should be a doc string.
+
+@var{keywords} is a list of keyword/value pairs.  The following
+keywords are allowed:
+
+@table @code
+@item :version
+The (approximate) Emacs version this button first appeared.  (This
+keyword is mandatory.)
+
+@item :group
+The customization group this icon belongs in.  If not present, it is
+inferred.
+
+@item :help-echo
+The help string shown when hovering over the icon with the mouse
+pointer.
+@end table
+@end defmac
+
+@defun icon-string icon
+This function returns a string suitable for display in the current
+buffer for @var{icon}.
+@end defun
+
+@defun icon-elements icon
+Alternatively, you can get a ``deconstructed'' version of @var{icon}
+with this function.  It returns a plist (@pxref{Property Lists}) where
+the keys are @code{string}, @code{face} and @var{image}.  (The latter
+is only present if the icon is represented by an image.)  This can be
+useful if the icon isn't to be inserted directly in the buffer, but
+needs some sort of pre-processing first.
+@end defun
+
+Icons can be customized with @kbd{M-x customize-icon}.  Themes can
+specify changes to icons with, for instance:
+
+@lisp
+(custom-theme-set-icons
+  'my-theme
+  '(outline-open ((image :height 100)
+                  (text " OPEN ")))
+  '(outline-close ((image :height 100)
+                   (text " CLOSE " :face warning))))
+@end lisp
+
+
 @node Xwidgets
 @section Embedded Native Widgets
 @cindex xwidget
@@ -7309,6 +7489,7 @@ the usual Emacs @code{highlight} face.
 
 @item keymap
 @kindex keymap @r{(button property)}
+@vindex button-map
 The button's keymap, defining bindings active within the button
 region.  By default this is the usual button region keymap, stored
 in the variable @code{button-map}, which defines @key{RET} and
@@ -7523,6 +7704,7 @@ Return @code{t} if button-type @var{type} is a subtype of 
@var{supertype}.
 These are commands and functions for locating and operating on
 buttons in an Emacs buffer.
 
+@cindex buffer-button-map
 @code{push-button} is the command that a user uses to actually push
 a button, and is bound by default in the button itself to @key{RET}
 and to @key{mouse-2} using a local keymap in the button's overlay or
@@ -8360,7 +8542,11 @@ hexadecimal notation.
 
 @item an @acronym{ASCII} string
 Display a box containing that string.  The string should contain at
-most 6 @acronym{ASCII} characters.
+most 6 @acronym{ASCII} characters.  As an exception, if the string
+includes just one character, on text-mode terminals that character
+will be displayed without a box; this allows to handle such
+``acronyms'' as a replacement character for characters that cannot be
+displayed by the terminal.
 
 @item a cons cell @code{(@var{graphical} . @var{text})}
 Display with @var{graphical} on graphical displays, and with
@@ -8426,9 +8612,9 @@ Characters of Unicode General Category [Cf], such as 
U+200E
 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
-emojis).
+Unicode VS-1 through VS-256 (U+FE00 through U+FE0F and U+E0100 through
+U+E01EF), which are used to select between different glyphs for the same
+codepoints (typically emojis).
 
 @item no-font
 Characters for which there is no suitable font, or which cannot be
@@ -8556,7 +8742,7 @@ displayed in the echo area.
 @vindex use-system-tooltips
 When Emacs is built with the GTK+ toolkit or Haiku windowing support,
 it by default displays tooltips using toolkit functions, and the
-appearance of the tooltips is then controlled by by the toolkit's
+appearance of the tooltips is then controlled by the toolkit's
 settings.  Toolkit-provided tooltips can be disabled by changing the
 value of the variable @code{use-system-tooltips} to @code{nil}.  The
 rest of this subsection describes how to control non-toolkit tooltips,
diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi
index 0fc5271d5a..56f7b7bdfa 100644
--- a/doc/lispref/edebug.texi
+++ b/doc/lispref/edebug.texi
@@ -701,7 +701,11 @@ on this process.
 @item e @var{exp} @key{RET}
 Evaluate expression @var{exp} in the context outside of Edebug
 (@code{edebug-eval-expression}).  That is, Edebug tries to minimize
-its interference with the evaluation.  By default, this command
+its interference with the evaluation.  The result is shown in the echo
+area, or, if this command is given a prefix, pop up a new buffer and
+pretty-print the result there.
+
+By default, this command
 suppresses the debugger during evaluation, so that an error in the
 evaluated expression won't add a new error on top of the existing one.
 Set the @code{debug-allow-recursive-debug} user option to a
@@ -715,7 +719,8 @@ Evaluate expression @var{exp} in the context of Edebug 
itself
 Evaluate the expression before point, in the context outside of Edebug
 (@code{edebug-eval-last-sexp}).  With the prefix argument of zero
 (@kbd{C-u 0 C-x C-e}), don't shorten long items (like strings and
-lists).
+lists).  Any other prefix will result in the value being
+pretty-printed in a separate buffer.
 @end table
 
 @cindex lexical binding (Edebug)
@@ -836,7 +841,6 @@ you continue execution, and recreated next time it is 
needed.
 
 @cindex printing (Edebug)
 @cindex printing circular structures
-@pindex cust-print
   If an expression in your program produces a value containing circular
 list structure, you may get an error when Edebug attempts to print it.
 
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index ea8683a6d8..986fb22c75 100644
--- a/doc/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -2445,6 +2445,15 @@ You can use this function for directory names and for 
file names,
 because it recognizes abbreviations even as part of the name.
 @end defun
 
+@defun file-parent-directory filename
+This function returns the directory name of the parent directory of
+@var{filename}.  If @var{filename} is at the root directory of the
+filesystem, it returns @code{nil}.  A relative @var{filename} is
+assumed to be relative to @code{default-directory}, and the return
+value will also be relative in that case.  If the return value is
+non-@code{nil}, it ends in a slash.
+@end defun
+
 @node File Name Expansion
 @subsection Functions that Expand Filenames
 @cindex expansion of file names
diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index 16f7ad312a..262b86672d 100644
--- a/doc/lispref/frames.texi
+++ b/doc/lispref/frames.texi
@@ -1746,15 +1746,16 @@ fit will be clipped by the window manager.
 @item fullscreen
 This parameter specifies whether to maximize the frame's width, height
 or both.  Its value can be @code{fullwidth}, @code{fullheight},
-@code{fullboth}, or @code{maximized}.  A @dfn{fullwidth} frame is as
-wide as possible, a @dfn{fullheight} frame is as tall as possible, and
-a @dfn{fullboth} frame is both as wide and as tall as possible.  A
-@dfn{maximized} frame is like a ``fullboth'' frame, except that it
-usually keeps its title bar and the buttons for resizing and closing
-the frame.  Also, maximized frames typically avoid hiding any task bar
-or panels displayed on the desktop.  A ``fullboth'' frame, on the
-other hand, usually omits the title bar and occupies the entire
-available screen space.
+@code{fullboth}, or @code{maximized}.@footnote{On PGTK frames, setting
+the values @code{fullheight} and @code{fullwidth} has no effect.}  A
+@dfn{fullwidth} frame is as wide as possible, a @dfn{fullheight} frame
+is as tall as possible, and a @dfn{fullboth} frame is both as wide and
+as tall as possible.  A @dfn{maximized} frame is like a ``fullboth''
+frame, except that it usually keeps its title bar and the buttons for
+resizing and closing the frame.  Also, maximized frames typically
+avoid hiding any task bar or panels displayed on the desktop.  A
+``fullboth'' frame, on the other hand, usually omits the title bar and
+occupies the entire available screen space.
 
 Full-height and full-width frames are more similar to maximized
 frames in this regard.  However, these typically display an external
@@ -2179,10 +2180,20 @@ If non-@code{nil}, the frame is visible on all virtual 
desktops on systems
 with virtual desktops.
 
 @vindex shaded@r{, a frame parameter}
-@item sticky
+@item shaded
 If non-@code{nil}, tell the window manager to display the frame in a
 way that its contents are hidden, leaving only the title bar.
 
+@vindex use-frame-synchronization@r{, a frame parameter}
+@item use-frame-synchronization
+If non-@code{nil}, synchronize the frame redisplay with the refresh
+rate of the monitor to avoid graphics tearing.  At present, this is
+only implemented on Haiku and the X window system inside no-toolkit
+and X toolkit builds, does not work correctly with toolkit scroll
+bars, and requires a compositing manager supporting the relevant
+display synchronization protocols.  The @code{synchronizeResize} X
+resource must also be set to the string @code{"extended"}.
+
 @vindex inhibit-double-buffering@r{, a frame parameter}
 @item inhibit-double-buffering
 If non-@code{nil}, the frame is drawn to the screen without double
@@ -4090,6 +4101,20 @@ They can either be the same data types that are 
typically accepted by
 specific drag-n-drop protocol being used.  Plain text may be
 @code{"STRING"} or @code{"text/plain"}, for example.
 
+@vindex x-dnd-direct-save-function
+  However, @code{x-dnd-types-alist} does not handle a special kind of
+drop sent by a program which wants Emacs to save a file in a location
+Emacs must determine by itself.  These drops are handled via the
+variable @code{x-dnd-direct-save-function}, which should be a function
+that accepts two arguments.  If the first argument is non-@code{nil},
+then the second argument is a string describing the name (with no
+leading directory) that the other program recommends the file be saved
+under, and the function should return the complete file name under
+which it will be saved.  Otherwise, the file has already been saved,
+and the second argument is the complete name of the file.  The
+function should then perform whatever action is appropriate (i.e.,
+open the file or refresh the directory listing.)
+
 @cindex initiating drag-and-drop
   On capable window systems, Emacs also supports dragging contents
 from its frames to windows of other applications.
@@ -4186,6 +4211,13 @@ This function is like @code{dnd-begin-file-drag}, except 
that
 dropping multiple files, then the first file will be used instead.
 @end defun
 
+@defun dnd-direct-save file name &optional frame allow-same-frame
+This function is similar to @code{dnd-begin-file-drag} (with the
+default action of copy), but instead of specifying the action you
+specify the name of the copy created by the target program in
+@code{name}.
+@end defun
+
 @cindex initiating drag-and-drop, low-level
   The high-level interfaces described above are implemented on top of
 a lower-level primitive.  If you need to drag content other than files
@@ -4251,6 +4283,40 @@ chosen by the target.  For example, callers should 
delete the buffer
 text that was dragged if this function returns @code{XdndActionMove}.
 @end defun
 
+@cindex drag and drop protocols, X
+
+  On X Windows, several different drag-and-drop protocols are
+supported by @code{x-begin-drag}.  When dragging content that is known
+to not be supported by a specific drag-and-drop protocol, it might be
+desirable to turn that protocol off, by changing the values of the
+following variables:
+
+@defvar x-dnd-disable-motif-protocol
+When this is non-@code{nil}, the Motif drag and drop protocols are
+disabled, and dropping onto programs that only understand them will
+not work.
+@end defvar
+
+@defvar x-dnd-use-offix-drop
+When this is @code{nil}, the OffiX (old KDE) drag and drop protocol is
+disabled.  When this is the symbol @code{files}, the OffiX protocol
+will only be used if @code{"FILE_NAME"} is one of the targets given to
+@code{x-begin-drag}.  Any other value means to use the OffiX protocol
+to drop all supported content.
+@end defvar
+
+@defvar x-dnd-use-unsupported-drop
+When one of the @code{"STRING"}, @code{"UTF8_STRING"},
+@code{"COMPOUND_TEXT"} or @code{"TEXT"} targets is present in the list
+given to @code{x-begin-drag}, Emacs will try to use synthesized mouse
+events and the primary selection to insert the text if the drop target
+doesn't support any drag-and-drop protocol at all.
+
+A side effect is that Emacs will become the owner of the primary
+selection upon such a drop.  If that is not desired, then the drop
+emulation can be disabled by setting this variable to @code{nil}.
+@end defvar
+
 @node Color Names
 @section Color Names
 
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index e3de6009e9..983dfe2ec5 100644
--- a/doc/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -217,6 +217,16 @@ function.  For example:
 @end example
 @end defun
 
+@defun compiled-function-p object
+This function returns @code{t} if @var{object} is a function object
+that is not in the form of ELisp source code but something like
+machine code or byte code instead.  More specifically it returns
+@code{t} if the function is built-in (a.k.a.@: ``primitive'',
+@pxref{What Is a Function}), or byte-compiled (@pxref{Byte
+Compilation}), or natively-compiled (@pxref{Native Compilation}), or
+a function loaded from a dynamic module (@pxref{Dynamic Modules}).
+@end defun
+
 @defun subr-arity subr
 This works like @code{func-arity}, but only for built-in functions and
 without symbol indirection.  It signals an error for non-built-in
@@ -2497,6 +2507,34 @@ the current buffer.
 @item (modes @var{modes})
 Specify that this command is meant to be applicable for @var{modes}
 only.
+
+@item (interactive-args @var{arg} ...)
+Specify the arguments that should be stored for @code{repeat-command}.
+Each @var{arg} is on the form @code{@var{argument-name} @var{form}}.
+
+@item (pure @var{val})
+If @var{val} is non-@code{nil}, this function is @dfn{pure}
+(@pxref{What Is a Function}).  This is the same as the @code{pure}
+property of the function's symbol (@pxref{Standard Properties}).
+
+@item (side-effect-free @var{val})
+If @var{val} is non-@code{nil}, this function is free of side effects,
+so the byte compiler can ignore calls whose value is ignored.  This is
+the same as the @code{side-effect-free} property of the function's
+symbol, @pxref{Standard Properties}.
+
+@item (speed @var{n})
+Specify the value of @code{native-comp-speed} in effect for native
+compilation of this function (@pxref{Native-Compilation Variables}).
+This allows function-level control of the optimization level used for
+native code emitted for the function.  In particular, if @var{n} is
+@minus{}1, native compilation of the function will emit bytecode
+instead of native code for the function.
+
+@item no-font-lock-keyword
+This is valid for macros only.  Macros with this declaration are
+highlighted by font-lock (@pxref{Font Lock Mode}) as normal functions,
+not specially as macros.
 @end table
 
 @end defmac
diff --git a/doc/lispref/hash.texi b/doc/lispref/hash.texi
index a566d89824..25a56bd715 100644
--- a/doc/lispref/hash.texi
+++ b/doc/lispref/hash.texi
@@ -203,7 +203,8 @@ association in @var{table}.
 @defun puthash key value table
 This function enters an association for @var{key} in @var{table}, with
 value @var{value}.  If @var{key} already has an association in
-@var{table}, @var{value} replaces the old associated value.
+@var{table}, @var{value} replaces the old associated value.  This
+function always returns @var{value}.
 @end defun
 
 @defun remhash key table
@@ -219,10 +220,7 @@ otherwise.  In Emacs Lisp, @code{remhash} always returns 
@code{nil}.
 @defun clrhash table
 This function removes all the associations from hash table @var{table},
 so that it becomes empty.  This is also called @dfn{clearing} the hash
-table.
-
-@b{Common Lisp note:} In Common Lisp, @code{clrhash} returns the empty
-@var{table}.  In Emacs Lisp, it returns @code{nil}.
+table.  @code{clrhash} returns the empty @var{table}.
 @end defun
 
 @defun maphash function table
@@ -289,9 +287,13 @@ If two objects @var{obj1} and @var{obj2} are @code{equal}, 
then
 are the same integer.
 
 If the two objects are not @code{equal}, the values returned by
-@code{sxhash-equal} are usually different, but not always; once in a
-rare while, by luck, you will encounter two distinct-looking objects
-that give the same result from @code{sxhash-equal}.
+@code{sxhash-equal} are usually different, but not always.
+@code{sxhash-equal} is designed to be reasonably fast (since it's used
+for indexing hash tables) so it won't recurse deeply into nested
+structures.  In addition; once in a rare while, by luck, you will
+encounter two distinct-looking simple objects that give the same
+result from @code{sxhash-equal}.  So you can't, in general, use
+@code{sxhash-equal} to check whether an object has changed.
 
 @b{Common Lisp note:} In Common Lisp a similar function is called
 @code{sxhash}.  Emacs provides this name as a compatibility alias for
@@ -322,15 +324,13 @@ the same integer.
 compared case-insensitively.
 
 @example
-(defun case-fold-string= (a b)
-  (eq t (compare-strings a nil nil b nil nil t)))
-(defun case-fold-string-hash (a)
+(defun string-hash-ignore-case (a)
   (sxhash-equal (upcase a)))
 
-(define-hash-table-test 'case-fold
-  'case-fold-string= 'case-fold-string-hash)
+(define-hash-table-test 'ignore-case
+  'string-equal-ignore-case 'string-hash-ignore-case)
 
-(make-hash-table :test 'case-fold)
+(make-hash-table :test 'ignore-case)
 @end example
 
   Here is how you could define a hash table test equivalent to the
diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi
index 107d036202..339e1387d2 100644
--- a/doc/lispref/hooks.texi
+++ b/doc/lispref/hooks.texi
@@ -280,7 +280,6 @@ kbd-macro-termination-hook
 signal-hook-function
 
 C functions:
-redisplay-end-trigger-functions
 x-lost-selection-functions
 x-sent-selection-functions
 
@@ -290,7 +289,6 @@ auto-fill-function
 command-error-function
 compose-chars-after-function
 composition-function-table
-deferred-action-function
 input-method-function
 load-read-function
 load-source-file-function
diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi
index a037c228f1..2be31d63a6 100644
--- a/doc/lispref/keymaps.texi
+++ b/doc/lispref/keymaps.texi
@@ -374,7 +374,8 @@ number of keys.  Here's a very basic example:
 @end lisp
 
 This function creates a new sparse keymap, defines the keystrokes in
-@var{pairs}, and returns the new keymap.
+@var{pairs}, and returns the new keymap.  It signals an error if there
+are duplicate key bindings in @var{pairs}.
 
 @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
@@ -438,7 +439,8 @@ variable.  This is what virtually all modes do---a mode 
called
 
 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.
+default value for the variable.  It signals an error if there are
+duplicate key bindings in @var{pairs}.
 
 @var{options} is like the keywords in @code{define-keymap}, but
 there's an additional @code{:doc} keyword that provides the doc
@@ -579,11 +581,10 @@ override any non-@code{nil} binding in any other of the 
@var{maps}.
 @code{button-buffer-map} and @code{special-mode-map}:
 
 @example
-(defvar help-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map
-      (make-composed-keymap button-buffer-map special-mode-map))
-    ... map) ... )
+(defvar-keymap help-mode-map
+  :parent (make-composed-keymap button-buffer-map
+                                special-mode-map)
+  ...)
 @end example
 
 
@@ -1064,6 +1065,20 @@ The optional argument @var{on-exit}, if non-@code{nil}, 
specifies a
 function that is called, with no arguments, after @var{keymap} is
 deactivated.
 
+The optional argument @var{message} specifies the message to display
+after activating the transient map.  If @var{message} is a string, it
+is the format string for the message, and any @samp{%k} specifier in
+that string is replaced with the list of keys from the transient map.
+Any other non-@code{nil} value of @var{message} stands for the default
+message format @samp{Repeat with %k}.
+
+@vindex set-transient-map-timeout
+If the optional argument @var{timeout} is non-@code{nil}, it should be
+a number that specifies how many seconds of idle time to wait before
+deactivating @var{keymap}.  The value of the variable
+@code{set-transient-map-timeout}, if non-@code{nil}, overrides the
+value of this argument.
+
 This function works by adding and removing @var{keymap} from the
 variable @code{overriding-terminal-local-map}, which takes precedence
 over all other active keymaps (@pxref{Searching Keymaps}).
@@ -1869,6 +1884,7 @@ to make entries in @code{input-decode-map} beyond those 
that can be
 deduced from Termcap and Terminfo.  @xref{Terminal-Specific}.
 @end defvar
 
+@cindex function-key-map
 @defvar local-function-key-map
 This variable holds a keymap similar to @code{input-decode-map} except
 that it describes key sequences which should be translated to
@@ -2209,6 +2225,11 @@ If @var{no-remap} is @code{nil}, return the bindings for
 non-@code{nil}, return the bindings for @var{command}, ignoring the
 fact that it is remapped.
 @end table
+
+If a command maps to a key binding like @code{[some-event]}, and
+@code{some-event} has a symbol plist containing a non-@code{nil}
+@code{non-key-event} property, then that binding is ignored by
+@code{where-is-internal}.
 @end defun
 
 @deffn Command describe-bindings &optional prefix buffer-or-name
diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi
index 4a862ab0de..5c5c615f85 100644
--- a/doc/lispref/lists.texi
+++ b/doc/lispref/lists.texi
@@ -340,6 +340,44 @@ If @var{n} is zero, @code{nthcdr} returns all of
 @end example
 @end defun
 
+@defun take n list
+This function returns the @var{n} first elements of @var{list}.  Essentially,
+it returns the part of @var{list} that @code{nthcdr} skips.
+
+@code{take} returns @var{list} if shorter than @var{n} elements;
+it returns @code{nil} if @var{n} is zero or negative.
+
+@example
+@group
+(take 3 '(a b c d))
+     @result{} (a b c)
+@end group
+@group
+(take 10 '(a b c d))
+     @result{} (a b c d)
+@end group
+@group
+(take 0 '(a b c d))
+     @result{} nil
+@end group
+@end example
+@end defun
+
+@defun ntake n list
+This is a version of @code{take} that works by destructively modifying
+the list structure of the argument.  That makes it faster, but the
+original value of @var{list} may be lost.
+
+@code{ntake} returns @var{list} unmodified if shorter than @var{n}
+elements; it returns @code{nil} if @var{n} is zero or negative.
+Otherwise, it returns @var{list} truncated to its first @var{n}
+elements.
+
+This means that it is usually a good idea to use the return value and
+not just rely on the truncation effect unless @var{n} is known to be
+positive.
+@end defun
+
 @defun last list &optional n
 This function returns the last link of @var{list}.  The @code{car} of
 this link is the list's last element.  If @var{list} is null,
@@ -1925,9 +1963,10 @@ and later discarded; this is not possible with a 
property list.
   The following functions can be used to manipulate property lists.
 They all compare property names using @code{eq}.
 
-@defun plist-get plist property
+@defun plist-get plist property &optional predicate
 This returns the value of the @var{property} property stored in the
-property list @var{plist}.  It accepts a malformed @var{plist}
+property list @var{plist}.  Comparisons are done with @var{predicate},
+and defaults to @code{eq}.  It accepts a malformed @var{plist}
 argument.  If @var{property} is not found in the @var{plist}, it
 returns @code{nil}.  For example,
 
@@ -1943,9 +1982,10 @@ returns @code{nil}.  For example,
 @end example
 @end defun
 
-@defun plist-put plist property value
+@defun plist-put plist property value &optional predicate
 This stores @var{value} as the value of the @var{property} property in
-the property list @var{plist}.  It may modify @var{plist} destructively,
+the property list @var{plist}.  Comparisons are done with @var{predicate},
+and defaults to @code{eq}.  It may modify @var{plist} destructively,
 or it may construct a new list structure without altering the old.  The
 function returns the modified property list, so you can store that back
 in the place where you got @var{plist}.  For example,
@@ -1961,19 +2001,20 @@ in the place where you got @var{plist}.  For example,
 @end defun
 
 @defun lax-plist-get plist property
-Like @code{plist-get} except that it compares properties
-using @code{equal} instead of @code{eq}.
+This obsolete function is like @code{plist-get} except that it
+compares properties using @code{equal} instead of @code{eq}.
 @end defun
 
 @defun lax-plist-put plist property value
-Like @code{plist-put} except that it compares properties
-using @code{equal} instead of @code{eq}.
+This obsolete function is like @code{plist-put} except that it
+compares properties using @code{equal} instead of @code{eq}.
 @end defun
 
-@defun plist-member plist property
+@defun plist-member plist property &optional predicate
 This returns non-@code{nil} if @var{plist} contains the given
-@var{property}.  Unlike @code{plist-get}, this allows you to distinguish
-between a missing property and a property with the value @code{nil}.
-The value is actually the tail of @var{plist} whose @code{car} is
-@var{property}.
+@var{property}.  Comparisons are done with @var{predicate}, and
+defaults to @code{eq}.  Unlike @code{plist-get}, this allows you to
+distinguish between a missing property and a property with the value
+@code{nil}.  The value is actually the tail of @var{plist} whose
+@code{car} is @var{property}.
 @end defun
diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi
index 8a2bb5fa2d..4e4f12dc32 100644
--- a/doc/lispref/loading.texi
+++ b/doc/lispref/loading.texi
@@ -149,10 +149,9 @@ up the execution of uncompiled code.  Sometimes, this 
macro expansion
 cannot be done, owing to a cyclic dependency.  In the simplest
 example of this, the file you are loading refers to a macro defined
 in another file, and that file in turn requires the file you are
-loading.  This is generally harmless.  Emacs prints a warning
+loading.  Emacs will issue an error about
 (@samp{Eager macro-expansion skipped due to cycle@dots{}})
-giving details of the problem, but it still loads the file, just
-leaving the macro unexpanded for now.  You may wish to restructure
+giving details of the problem.  You have to restructure
 your code so that this does not happen.  Loading a compiled file does
 not cause macroexpansion, because this should already have happened
 during compilation.  @xref{Compiling Macros}.
@@ -441,7 +440,7 @@ similarly-named file in a directory earlier on 
@code{load-path}.
 For instance, suppose @code{load-path} is set to
 
 @example
-  ("/opt/emacs/site-lisp" "/usr/share/emacs/23.3/lisp")
+  ("/opt/emacs/site-lisp" "/usr/share/emacs/29.1/lisp")
 @end example
 
 @noindent
@@ -699,14 +698,13 @@ Switch to *doctor* buffer and start giving psychotherapy.
 
 @noindent
 @cindex @code{fn} in function's documentation string
-The backslash and newline immediately following the double-quote are a
-convention used only in the preloaded uncompiled Lisp files such as
-@file{loaddefs.el}; they tell @code{make-docfile} to put the
-documentation string in the @file{etc/DOC} file.  @xref{Building Emacs}.
-See also the commentary in @file{lib-src/make-docfile.c}.  @samp{(fn)}
-in the usage part of the documentation string is replaced with the
-function's name when the various help functions (@pxref{Help
-Functions}) display it.
+While the @file{loaddefs.el} isn't for editing, we try to keep it
+somewhat readable for people.  For instance, control characters in
+@code{defvar} values are escaped, and we insert a backslash and
+newline immediately following the double-quote of the doc string to
+keep the line length down.  @samp{(fn)} in the usage part of the
+documentation string is replaced with the function's name when the
+various help functions (@pxref{Help Functions}) display it.
 
   If you write a function definition with an unusual macro that is not
 one of the known and recognized function definition methods, use of an
@@ -729,7 +727,7 @@ variables to control this:
 The value of this constant is a regexp that matches autoload cookies.
 @code{loaddefs-generate} copies the Lisp form that follows the
 cookie into the autoload file it generates.  This will match comments
-like like @samp{;;;###autoload} and @samp{;;;###calc-autoload}.
+like @samp{;;;###autoload} and @samp{;;;###calc-autoload}.
 @end defvar
 
 @defvar generated-autoload-file
@@ -768,7 +766,7 @@ the corresponding list of files to load for it.  Entries to 
this
 mapping are added by calls to @code{register-definition-prefixes}
 which are generated by @code{loaddefs-generate}
 (@pxref{Autoload}).  Files which don't contain any definitions worth
-loading (test files, for examples), should set
+loading (test files, for example), should set
 @code{autoload-compute-prefixes} to @code{nil} as a file-local
 variable.
 
@@ -1033,7 +1031,7 @@ with a call to @code{provide}.  The order of the elements 
in the
 @cindex symbol, where defined
 @cindex where was a symbol defined
 
-@defun symbol-file symbol &optional type
+@defun symbol-file symbol &optional type native-p
 This function returns the name of the file that defined @var{symbol}.
 If @var{type} is @code{nil}, then any kind of definition is acceptable.
 If @var{type} is @code{defun}, @code{defvar}, or @code{defface}, that
@@ -1044,6 +1042,14 @@ The value is normally an absolute file name.  It can 
also be @code{nil},
 if the definition is not associated with any file.  If @var{symbol}
 specifies an autoloaded function, the value can be a relative file name
 without extension.
+
+If the optional third argument @var{native-p} is non-@code{nil}, and
+Emacs was built with native compilation support (@pxref{Native
+Compilation}), this function will try to find the @file{.eln} file
+that defined @var{symbol}, instead of the @file{.elc} or @file{.el}
+file.  If such a @file{.eln} file is found and is not outdated, the
+function will return its absolute file name; otherwise it will report
+the name of either the source or the byte-compiled file.
 @end defun
 
   The basis for @code{symbol-file} is the data in the variable
diff --git a/doc/lispref/maps.texi b/doc/lispref/maps.texi
index 90497728a1..d18b553dc1 100644
--- a/doc/lispref/maps.texi
+++ b/doc/lispref/maps.texi
@@ -125,6 +125,7 @@ setup-language-environment-map, 
describe-language-environment-map,
 menu-bar-epatch-menu, menu-bar-ediff-merge-menu, menu-bar-ediff-menu, etc.
 @end ignore
 
+@cindex minibuffer-inactive-mode-map
 @item minibuffer-inactive-mode-map
 A full keymap used in the minibuffer when it is not active.@*
 @xref{Minibuffer Edit,, Editing in the Minibuffer, emacs, The GNU Emacs 
Manual}.
@@ -156,6 +157,7 @@ The global keymap used for the @kbd{C-x @key{RET}} prefix 
key.
 @vindex narrow-map
 A sparse keymap for subcommands of the prefix @kbd{C-x n}.
 
+@cindex prog-mode-map
 @item prog-mode-map
 The keymap used by Prog mode.@*
 @xref{Basic Major Modes}.
@@ -171,6 +173,7 @@ for multi-buffer replacements.  @xref{Search and Replace, 
query-replace-map}.
 @item search-map
 A sparse keymap that provides global bindings for search-related commands.
 
+@cindex special-mode-map
 @item special-mode-map
 The keymap used by Special mode.@*
 @xref{Basic Major Modes}.
@@ -179,6 +182,7 @@ The keymap used by Special mode.@*
 The global keymap used for the @kbd{C-x t} prefix key for tab-bar related 
commands.@*
 @xref{Tab Bars,,, emacs, The GNU Emacs Manual}.
 
+@cindex tab-bar-map
 @item tab-bar-map
 The keymap defining the contents of the tab bar.@*
 @xref{Tab Bars,,, emacs, The GNU Emacs Manual}.
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index 2e40cb25ef..ba8b548554 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -271,7 +271,7 @@ normal-mode}), but tries to force it not to choose any 
modes in
 
 @defun clean-mode
 Changing the major mode clears out most local variables, but it
-doesn't remove all artefacts in the buffer (like text properties and
+doesn't remove all artifacts in the buffer (like text properties and
 overlays).  It's rare to change a buffer from one major mode to
 another (except from @code{fundamental-mode} to everything else), so
 this is usually not a concern.  It can sometimes be convenient (mostly
@@ -1356,11 +1356,10 @@ the conventions listed above:
 ;; @r{Create the keymap for this mode.}
 @group
 (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.")
+  :doc "Keymap for `text-mode'.
+Many other modes, such as `mail-mode' and `outline-mode', inherit all
+the commands defined in this map."
+  "C-M-i" #'ispell-complete-word)
 @end group
 @end smallexample
 
@@ -3476,7 +3475,8 @@ fontification functions, and gives it two arguments, 
@var{start} and
 @var{end}, which specify the region to be fontified or refontified.
 If @var{function} performs fontifications, it can return a list of the
 form @w{@code{(jit-lock-bounds @var{beg} . @var{end})}}, to indicate
-the bounds of the region it actually fontified; JIT font-lock will use
+the bounds of the region it actually fontified; Just-In-Time (a.k.a.@:
+@acronym{``JIT''}) font-lock will use
 this information to optimize subsequent redisplay cycles and regions
 of buffer text it will pass to future calls to @var{function}.
 
@@ -3496,6 +3496,19 @@ If @var{function} was previously registered as a 
fontification
 function using @code{jit-lock-register}, this function unregisters it.
 @end defun
 
+@cindex debugging font-lock
+@cindex jit-lock functions, debugging
+@deffn Command jit-lock-debug-mode &optional arg
+This is a minor mode whose purpose is to help in debugging code that
+is run by JIT font-lock.  When this mode is enabled, most of the code
+that JIT font-lock normally runs during redisplay cycles, where Lisp
+errors are suppressed, is instead run by a timer.  Thus, this mode
+allows using debugging aids such as @code{debug-on-error}
+(@pxref{Error Debugging}) and Edebug (@pxref{Edebug}) for finding and
+fixing problems in font-lock code and any other code run by JIT
+font-lock.
+@end deffn
+
 @node Levels of Font Lock
 @subsection Levels of Font Lock
 
diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi
index 1bae192455..7b5e9adee2 100644
--- a/doc/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -2022,6 +2022,9 @@ with references to further information.
 @item byte-code-function-p
 @xref{Byte-Code Type, byte-code-function-p}.
 
+@item compiled-function-p
+@xref{Byte-Code Type, compiled-function-p}.
+
 @item case-table-p
 @xref{Case Tables, case-table-p}.
 
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index 11a0d02338..3582801841 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -1541,20 +1541,20 @@ Year numbers count since the year 1 BCE, and do not 
skip zero
 as traditional Gregorian years do; for example, the year number
 @minus{}37 represents the Gregorian year 38 BCE@.
 
-@defun time-convert time &optional form
+@defun time-convert time form
 This function converts a time value into a Lisp timestamp.
 
-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})}.  If @var{form} is
+The @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})}.  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 @code{nil} and the platform timestamp has nanosecond
 resolution.  If @var{form} is @code{list}, this function returns an
 integer list @code{(@var{high} @var{low} @var{micro} @var{pico})}.
-Although an omitted or @code{nil} @var{form} currently acts like
+Although a @code{nil} @var{form} currently acts like
 @code{list}, this is planned to change in a future Emacs version, so
 callers requiring list timestamps should pass @code{list} explicitly.
 
@@ -1754,9 +1754,10 @@ at the 15th of the month when adding months.  
Alternatively, you can use the
 @cindex time formatting
 @cindex formatting time values
 
-  These functions convert time values to text in a string, and vice versa.
-Time values include @code{nil}, finite numbers, and Lisp timestamps
-(@pxref{Time of Day}).
+  These functions convert time values to text in a string, and vice
+versa.  Time values are either represented as a Lisp timestamp
+(@pxref{Time of Day}) or a decoded time structure (@pxref{Time
+Conversion}).
 
 @defun date-to-time string
 This function parses the time-string @var{string} and returns the
@@ -1769,22 +1770,11 @@ The operating system limits the range of time and zone 
values.
 @end defun
 
 @defun parse-time-string string
-This function parses the time-string @var{string} into a list of the
-following form:
-
-@example
-(@var{sec} @var{min} @var{hour} @var{day} @var{mon} @var{year} @var{dow} 
@var{dst} @var{tz})
-@end example
-
-@noindent
-The format of this list is the same as what @code{decode-time} accepts
-(@pxref{Time Conversion}), and is described in more detail there.  Any
-@code{dst} element that cannot be determined from the input is set to
-@minus{}1, and any other unknown element is set to
-@code{nil}.  The argument @var{string} should resemble an RFC 822 (or later) or
-ISO 8601 string, like ``Fri, 25 Mar 2016 16:24:56 +0100'' or
-``1998-09-12T12:21:54-0200'', but this function will attempt to parse
-less well-formed time strings as well.
+This function parses the time-string @var{string} into a decoded time
+structure (@pxref{Time Conversion}).  The argument @var{string} should
+resemble an RFC 822 (or later) or ISO 8601 string, like ``Fri, 25 Mar
+2016 16:24:56 +0100'' or ``1998-09-12T12:21:54-0200'', but this
+function will attempt to parse less well-formed time strings as well.
 @end defun
 
 @vindex ISO 8601 date/time strings
@@ -1801,11 +1791,11 @@ time structures, except the final one, which returns 
three of them
 @end defun
 
 @defun format-time-string format-string &optional time zone
-
-This function converts @var{time} (or the current time, if
-@var{time} is omitted or @code{nil}) to a string according to
-@var{format-string}.  The conversion uses the time zone rule @var{zone}, which
-defaults to the current time zone rule.  @xref{Time Zone Rules}.  The argument
+This function converts @var{time} (which should be a Lisp timestamp,
+and defaults to the current time if @var{time} is omitted or
+@code{nil}) to a string according to @var{format-string}.  The
+conversion uses the time zone rule @var{zone}, which defaults to the
+current time zone rule.  @xref{Time Zone Rules}.  The argument
 @var{format-string} may contain @samp{%}-sequences which say to
 substitute parts of the time.  Here is a table of what the
 @samp{%}-sequences mean:
@@ -2077,7 +2067,12 @@ This returns @code{t} if the time value @var{t1} is less 
than the time value
 
 @defun time-equal-p t1 t2
 This returns @code{t} if the two time values @var{t1} and @var{t2} are
-equal.
+equal.  The result is @code{nil} if either argument is a NaN.
+For the purpose of comparison, a @code{nil} argument represents the
+current time with infinite resolution, so this function returns
+@code{nil} if one argument is @code{nil} and the other is not, and
+callers can therefore use @code{nil} to represent an unknown time
+value that does not equal any timestamp.
 @end defun
 
 @defun time-subtract t1 t2
@@ -2748,6 +2743,13 @@ if it is non-@code{nil}; this can be overridden by 
binding
 @code{coding-system-for-write} to a coding system of you choice
 (@pxref{Explicit Encoding}).
 
+In batch mode, Emacs will enlarge the value of the
+@code{gc-cons-percentage} variable from the default of @samp{0.1} up to
+@samp{1.0}.  Batch jobs that are supposed to run for a long time
+should adjust the limit back down again, because this means that less
+garbage collection will be performed by default (and more memory
+consumed).
+
 @defvar noninteractive
 This variable is non-@code{nil} when Emacs is running in batch mode.
 @end defvar
diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index ca1166caac..7945232bf8 100644
--- a/doc/lispref/positions.texi
+++ b/doc/lispref/positions.texi
@@ -387,6 +387,16 @@ Return the position that @code{(end-of-line @var{count})}
 would move to.
 @end defun
 
+@defun pos-bol &optional count
+Like @code{line-beginning-position}, but ignores fields (and is more
+efficient).
+@end defun
+
+@defun pos-eol &optional count
+Like @code{line-end-position}, but ignores fields (and is more
+efficient).
+@end defun
+
 @deffn Command forward-line &optional count
 @cindex beginning of line
 This function moves point forward @var{count} lines, to the beginning of
@@ -1002,6 +1012,12 @@ positions.
 
 In an interactive call, @var{start} and @var{end} are set to the bounds
 of the current region (point and the mark, with the smallest first).
+
+Note that, in rare circumstances, Emacs may decide to leave, for
+performance reasons, the accessible portion of the buffer unchanged
+after a call to @code{narrow-to-region}.  This can happen when a Lisp
+program is called via low-level hooks, such as
+@code{jit-lock-functions}, @code{post-command-hook}, etc.
 @end deffn
 
 @deffn Command narrow-to-page &optional move-count
@@ -1027,6 +1043,12 @@ It is equivalent to the following expression:
 @end example
 @end deffn
 
+Note that, in rare circumstances, Emacs may decide to leave, for
+performance reasons, the accessible portion of the buffer unchanged
+after a call to @code{widen}.  This can happen when a Lisp program is
+called via low-level hooks, such as @code{jit-lock-functions},
+@code{post-command-hook}, etc.
+
 @defun buffer-narrowed-p
 This function returns non-@code{nil} if the buffer is narrowed, and
 @code{nil} otherwise.
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index 8c8f8fd6b2..db6b4c35ef 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -705,12 +705,13 @@ coding system will apply.  @xref{Default Coding Systems}.
 Initialize the type of device used to communicate with the subprocess.
 Possible values are @code{pty} to use a pty, @code{pipe} to use a
 pipe, or @code{nil} to use the default derived from the value of the
-@code{process-connection-type} variable.  This parameter and the value
-of @code{process-connection-type} are ignored if a non-@code{nil}
-value is specified for the @code{:stderr} parameter; in that case, the
-type will always be @code{pipe}.  On systems where ptys are not
-available (MS-Windows), this parameter is likewise ignored, and pipes
-are used unconditionally.
+@code{process-connection-type} variable.  If @var{type} is a cons cell
+@w{@code{(@var{input} . @var{output})}}, then @var{input} will be used
+for standard input and @var{output} for standard output (and standard
+error if @code{:stderr} is @code{nil}).
+
+On systems where ptys are not available (MS-Windows), this parameter
+is ignored, and pipes are used unconditionally.
 
 @item :noquery @var{query-flag}
 Initialize the process query flag to @var{query-flag}.
@@ -1242,15 +1243,24 @@ that are already closed, the value is either 0 or 256, 
depending on
 whether the connection was closed normally or abnormally.
 @end defun
 
-@defun process-tty-name process
+@defun process-tty-name process &optional stream
 This function returns the terminal name that @var{process} is using for
 its communication with Emacs---or @code{nil} if it is using pipes
 instead of a pty (see @code{process-connection-type} in
-@ref{Asynchronous Processes}).  If @var{process} represents a program
-running on a remote host, the terminal name used by that program on
-the remote host is provided as process property @code{remote-tty}.  If
-@var{process} represents a network, serial, or pipe connection, the
-value is @code{nil}.
+@ref{Asynchronous Processes}).  By default, this function returns the
+terminal name if any of @var{process}'s standard streams use a
+terminal.  If @var{stream} is one of @code{stdin}, @code{stdout}, or
+@code{stderr}, this function returns the terminal name (or @code{nil},
+as above) that @var{process} uses for that stream specifically.  You
+can use this to determine whether a particular stream uses a pipe or a
+pty.
+
+If @var{process} represents a program running on a remote host, this
+function returns the @emph{local} terminal name that communicates with
+@var{process}; you can get the terminal name used by that program on
+the remote host with the process property @code{remote-tty}.  If
+@var{process} represents a network, serial, or pipe connection, this
+function always returns @code{nil}.
 @end defun
 
 @defun process-coding-system process
@@ -1512,7 +1522,7 @@ This variable is a list of functions to be called for
 for @code{signal-process}.  These functions are called in the order of
 the list, until one of them returns non-@code{nil}.  The default
 function, which shall always be the last in this list, is
-@code{signal-default-interrupt-process}.
+@code{internal-default-signal-process}.
 
 This is the mechanism, how Tramp implements @code{signal-process}.
 @end defvar
@@ -1530,20 +1540,11 @@ a buffer, which is called the associated buffer of the 
process
 default filter discards the output.
 
   If the subprocess writes to its standard error stream, by default
-the error output is also passed to the process filter function.  If
-Emacs uses a pseudo-TTY (pty) for communication with the subprocess,
-then it is impossible to separate the standard output and standard
-error streams of the subprocess, because a pseudo-TTY has only one
-output channel.  In that case, if you want to keep the output to those
-streams separate, you should redirect one of them to a file---for
-example, by using an appropriate shell command via
-@code{start-process-shell-command} or a similar function.
-
-  Alternatively, you could use the @code{:stderr} parameter with a
+the error output is also passed to the process filter function.
+Alternatively, you could use the @code{:stderr} parameter with a
 non-@code{nil} value in a call to @code{make-process}
 (@pxref{Asynchronous Processes, make-process}) to make the destination
-of the error output separate from the standard output; in that case,
-Emacs will use pipes for communicating with the subprocess.
+of the error output separate from the standard output.
 
   When a subprocess terminates, Emacs reads any pending output,
 then stops reading output from that subprocess.  Therefore, if the
@@ -1959,7 +1960,6 @@ because @var{seconds} can be floating point to specify
 waiting a fractional number of seconds.  If @var{seconds} is 0, the
 function accepts whatever output is pending but does not wait.
 
-@c Emacs 22.1 feature
 If @var{process} is a process, and the argument @var{just-this-one} is
 non-@code{nil}, only output from that process is handled, suspending output
 from other processes until some output has been received from that
@@ -3204,20 +3204,39 @@ If the vector does not include the port number, 
@var{p}, or if
 @code{:@var{p}} suffix.
 @end defun
 
-@defun network-lookup-address-info name &optional family
-This function is used to perform hostname lookups on @var{name}, which
-is expected to be an ASCII-only string, otherwise an error is
-signaled. Call @code{puny-encode-domain} on @var{name}
-first if you wish to lookup internationalized hostnames.
+@defun network-lookup-address-info name &optional family hints
+This function perform hostname lookups on @var{name}, which is
+expected to be an ASCII-only string, otherwise it signals an error.  Call
+@code{puny-encode-domain} on @var{name} first if you wish to lookup
+internationalized hostnames.
 
-If successful it returns a list of Lisp representations of network
-addresses, otherwise it returns @code{nil}.  In the latter case, it
-also displays the error message hopefully explaining what went wrong.
+If successful, this function returns a list of Lisp representations of network
+addresses (@pxref{Network Processes}, for a description of the
+format), otherwise return @code{nil}.  In the latter case, it also logs
+an error message hopefully explaining what went wrong.
 
-By default both IPv4 and IPv6 lookups are attempted.  The optional
-argument @var{family} controls this behavior, specifying the symbol
-@code{ipv4} or @code{ipv6} restricts lookups to IPv4 and IPv6
+By default, this function attempts both IPv4 and IPv6 lookups.  The
+optional argument @var{family} controls this behavior, specifying the
+symbol @code{ipv4} or @code{ipv6} restricts lookups to IPv4 and IPv6
 respectively.
+
+If optional argument @var{hints} is @code{numeric}, the function
+treats the @var{name} as a numerical IP address (and does not perform DNS
+lookups).  This can be used to check whether a string is a valid
+numerical representation of an IP address, or to convert a numerical
+string to its canonical representation. e.g.@:
+
+@example
+(network-lookup-address-info "127.1" 'ipv4 'numeric)
+    @result{} ([127 0 0 1 0])
+
+(network-lookup-address-info "::1" nil 'numeric)
+    @result{} ([0 0 0 0 0 0 0 1 0])
+@end example
+
+Be warned that there are some surprising valid forms,
+especially for IPv4, e.g @samp{0xe3010203} and @samp{0343.1.2.3} are both
+valid, as are @samp{0} and @samp{1} (but they are invalid for IPv6).
 @end defun
 
 @node Serial Ports
@@ -3493,43 +3512,40 @@ any null bytes in the packed input string will appear 
in the unpacked
 output.
 
 @item strz &optional @var{len}
-If @var{len} is not provided: Variable-length null-terminated unibyte
-string (@pxref{Text Representations}).  When packing, the entire input
-string is copied to the packed output.  The following byte will be
-null (zero) unless a pre-allocated string was provided to
-@code{bindat-pack}, in which case that byte is left unmodified.  The
-length of the packed output is the length of the input string plus one
-(for the null terminator).  The input string must not contain any null
+If @var{len} is not provided, this is a variable-length
+null-terminated unibyte string (@pxref{Text Representations}).  When
+packing into @code{strz}, the entire input string is copied to the
+packed output followed by a null (zero) byte.  (If pre-allocated
+string is provided for packing into @code{strz}, that pre-allocated
+string should have enough space for the additional null byte appended
+to the output string contents, @pxref{Bindat Functions}).  The length
+of the packed output is the length of the input string plus one (for
+the null terminator).  The input string must not contain any null
 bytes.  If the input string is multibyte with only ASCII and
 @code{eight-bit} characters, it is converted to unibyte before it is
-packed; other multibyte strings signal an error.  When unpacking, the
-resulting string contains all bytes up to (but excluding) the null
-byte.
+packed; other multibyte strings signal an error.  When unpacking a
+@code{strz}, the resulting output string will contain all bytes up to
+(but excluding) the null byte that terminated the input string.
 
-@quotation Caution
-If a pre-allocated string is provided to @code{bindat-pack}, the
-packed output will not be properly null-terminated unless the
-pre-allocated string already has a null byte at the appropriate
-location.
-@end quotation
-
-If @var{len} is provided: @code{strz} behaves the same as @code{str}
-with one difference: When unpacking, the first null byte encountered
-in the packed string and all subsequent bytes are excluded from the
-unpacked result.
+If @var{len} is provided, @code{strz} behaves the same as @code{str},
+but with a couple of differences:
 
-@quotation Caution
-The packed output will not be null-terminated unless one of the
-following is true:
-@itemize
+@itemize @bullet
 @item
-The input string is shorter than @var{len} bytes and either no pre-allocated
-string was provided to @code{bindat-pack} or the appropriate byte in
-the pre-allocated string was already null.
+When packing, a null terminator is written after the packed input
+string if the number of characters in the input string is less than
+@var{len}.
+
 @item
-The input string contains a null byte within the first @var{len}
-bytes.
+When unpacking, the first null byte encountered in the packed string
+is interpreted as the terminating byte, and it and all subsequent
+bytes are excluded from the result of the unpacking.
 @end itemize
+
+@quotation Caution
+The packed output will not be null-terminated unless the input string
+is shorter than @var{len} bytes or it contains a null byte within the
+first @var{len} bytes.
 @end quotation
 
 @item vec @var{len} [@var{type}]
@@ -3550,7 +3566,7 @@ and @code{#x1c} @code{#x28} to @w{@code{(3 5 10 11 12)}}.
 
 @item fill @var{len}
 @var{len} bytes used as a mere filler.  In packing, these bytes are
-are left unchanged, which normally means they remain zero.
+left unchanged, which normally means they remain zero.
 When unpacking, this just returns nil.
 
 @item align @var{len}
diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi
index 21a2c6c51e..5ee139a11d 100644
--- a/doc/lispref/searching.texi
+++ b/doc/lispref/searching.texi
@@ -1898,7 +1898,7 @@ attempts.  Other zero-width assertions may also bring 
benefits by
 causing a match to fail early.
 
 @item
-Avoid or-patterns in favour of character alternatives: write
+Avoid or-patterns in favor of character alternatives: write
 @samp{[ab]} instead of @samp{a\|b}.  Recall that @samp{\s-} and @samp{\sw}
 are equivalent to @samp{[[:space:]]} and @samp{[[:word:]]}, respectively.
 
@@ -1933,7 +1933,7 @@ purposes.
 
 @ifnottex
 @item
-Consider using @code{rx} (@pxref{Rx Notation}); it can optimise some
+Consider using @code{rx} (@pxref{Rx Notation}); it can optimize some
 or-patterns automatically and will never introduce capturing groups
 unless explicitly requested.
 @end ifnottex
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index c3f4cff301..39230d0adc 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -577,6 +577,20 @@ starting from the first one for which @var{predicate} 
returns @code{nil}.
 @end example
 @end defun
 
+@defun seq-split sequence length
+  This function returns a list consisting of sub-sequences of
+@var{sequence} of (at most) length @var{length}.  (The final element
+may be shorter than @var{length} if the length of @var{sequence} isn't
+a multiple of @var{length}.
+
+@example
+@group
+(seq-split [0 1 2 3 4] 2)
+@result{} ([0 1] [2 3] [4])
+@end group
+@end example
+@end defun
+
 @defun seq-do function sequence
   This function applies @var{function} to each element of
 @var{sequence} in turn (presumably for side effects), and returns
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi
index addf195fad..374381e595 100644
--- a/doc/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -560,6 +560,12 @@ Representations}.
 @code{string-equal} is another name for @code{string=}.
 @end defun
 
+@defun string-equal-ignore-case string1 string2
+@code{string-equal-ignore-case} compares strings ignoring case
+differences, like @code{char-equal} when @code{case-fold-search} is
+@code{t}.
+@end defun
+
 @cindex locale-dependent string equivalence
 @defun string-collate-equalp string1 string2 &optional locale ignore-case
 This function returns @code{t} if @var{string1} and @var{string2} are
@@ -567,11 +573,19 @@ equal with respect to collation rules.  A collation rule 
is not only
 determined by the lexicographic order of the characters contained in
 @var{string1} and @var{string2}, but also further rules about
 relations between these characters.  Usually, it is defined by the
-@var{locale} environment Emacs is running with.
-
-For example, characters with different coding points but
-the same meaning might be considered as equal, like different grave
-accent Unicode characters:
+@var{locale} environment Emacs is running with and by the Standard C
+library against which Emacs was linked@footnote{
+For more information about collation rules and their locale
+dependencies, see @uref{https://unicode.org/reports/tr10/, The Unicode
+Collation Algorithm}.  Some Standard C libraries, such as the
+@acronym{GNU} C Library (a.k.a.@: @dfn{glibc}) implement large
+portions of the Unicode Collation Algorithm and use the associated
+locale data, Common Locale Data Repository, or @acronym{CLDR}.
+}.
+
+For example, characters with different code points but the same
+meaning, like different grave accent Unicode characters, might, in
+some locales, be considered as equal:
 
 @example
 @group
@@ -759,7 +773,8 @@ The strings are compared by the numeric values of their 
characters.
 For instance, @var{str1} is considered less than @var{str2} if
 its first differing character has a smaller numeric value.  If
 @var{ignore-case} is non-@code{nil}, characters are converted to
-upper-case before comparing them.  Unibyte strings are converted to
+upper-case, using the current buffer's case-table (@pxref{Case
+Tables}), before comparing them.  Unibyte strings are converted to
 multibyte for comparison (@pxref{Text Representations}), so that a
 unibyte string and its conversion to multibyte are always regarded as
 equal.
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 622f03d2a8..8b859042ad 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -243,10 +243,8 @@ using a function specified by the variable
 The default filter function consults the obsolete wrapper hook
 @code{filter-buffer-substring-functions} (see the documentation string
 of the macro @code{with-wrapper-hook} for the details about this
-obsolete facility), and the obsolete variable
-@code{buffer-substring-filters}.  If both of these are @code{nil}, it
-returns the unaltered text from the buffer, i.e., what
-@code{buffer-substring} would return.
+obsolete facility).  If it is @code{nil}, it returns the unaltered
+text from the buffer, i.e., what @code{buffer-substring} would return.
 
 If @var{delete} is non-@code{nil}, the function deletes the text
 between @var{start} and @var{end} after copying it, like
@@ -282,22 +280,12 @@ the same as those of @code{filter-buffer-substring}.
 
 The first hook function is passed a @var{fun} that is equivalent to
 the default operation of @code{filter-buffer-substring}, i.e., it
-returns the buffer-substring between @var{start} and @var{end}
-(processed by any @code{buffer-substring-filters}) and optionally
-deletes the original text from the buffer.  In most cases, the hook
-function will call @var{fun} once, and then do its own processing of
-the result.  The next hook function receives a @var{fun} equivalent to
-this, and so on.  The actual return value is the result of all the
-hook functions acting in sequence.
-@end defvar
-
-@defvar buffer-substring-filters
-The value of this obsolete variable should be a list of functions
-that accept a single string argument and return another string.
-The default @code{filter-buffer-substring} function passes the buffer
-substring to the first function in this list, and the return value of
-each function is passed to the next function.  The return value of the
-last function is passed to @code{filter-buffer-substring-functions}.
+returns the buffer-substring between @var{start} and @var{end} and
+optionally deletes the original text from the buffer.  In most cases,
+the hook function will call @var{fun} once, and then do its own
+processing of the result.  The next hook function receives a @var{fun}
+equivalent to this, and so on.  The actual return value is the result
+of all the hook functions acting in sequence.
 @end defvar
 
 @defun current-word &optional strict really-word
@@ -2378,6 +2366,9 @@ begins.  @xref{Usual Display}.
 amount of horizontal scrolling.  Consequently, a column value can be
 arbitrarily high.  The first (or leftmost) column is numbered 0.  They
 also ignore overlays and text properties, aside from invisibility.
+Invisible text is considered as having zero width, unless
+@code{buffer-invisibility-spec} specifies that invisible text should
+be displayed as ellipsis (@pxref{Invisible Text}).
 
 @defun current-column
 This function returns the horizontal position of point, measured in
@@ -2451,6 +2442,10 @@ This function returns the indentation of the current 
line, which is
 the horizontal position of the first nonblank character.  If the
 contents are entirely blank, then this is the horizontal position of the
 end of the line.
+
+This function considers invisible text as having zero width, unless
+@code{buffer-invisibility-spec} specifies that invisible text should
+be displayed as ellipsis.  @xref{Invisible Text}.
 @end defun
 
 @deffn Command indent-to column &optional minimum
@@ -3406,7 +3401,7 @@ for @var{object} is the current buffer.
 Search for the next region that has text property @var{prop} set to
 @var{value} according to @var{predicate}.
 
-This function is modelled after @code{search-forward} and friends in
+This function is modeled after @code{search-forward} and friends in
 that it moves point, but it returns a structure that describes the
 match instead of returning it in @code{match-beginning} and friends.
 
@@ -3485,7 +3480,7 @@ This will give you a list of all those URLs.
 @end defun
 
 @defun text-property-search-backward prop &optional value predicate not-current
-This is just like @code{text-property-search-backward}, but searches
+This is just like @code{text-property-search-forward}, but searches
 backward instead.  Point is placed at the beginning of the matched
 region instead of the end, though.
 @end defun
@@ -5478,12 +5473,15 @@ available in this Emacs session.
 When libxml2 support is available, the following functions can be used
 to parse HTML or XML text into Lisp object trees.
 
-@defun libxml-parse-html-region start end &optional base-url discard-comments
+@defun libxml-parse-html-region &optional start end base-url discard-comments
 This function parses the text between @var{start} and @var{end} as
 HTML, and returns a list representing the HTML @dfn{parse tree}.  It
 attempts to handle real-world HTML by robustly coping with syntax
 mistakes.
 
+If @var{start} or @var{end} are @code{nil}, they default to the values
+from @code{point-min} and @code{point-max}, respectively.
+
 The optional argument @var{base-url}, if non-@code{nil}, should be a
 string specifying the base URL for relative URLs occurring in links.
 
@@ -5529,7 +5527,7 @@ buffer.  The argument @var{dom} should be a list as 
generated by
 @end defun
 
 @cindex parsing xml
-@defun libxml-parse-xml-region start end &optional base-url discard-comments
+@defun libxml-parse-xml-region &optional start end base-url discard-comments
 This function is the same as @code{libxml-parse-html-region}, except
 that it parses the text as XML rather than HTML (so it is stricter
 about syntax).
diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi
index 30146a89eb..3a1f6de12b 100644
--- a/doc/lispref/tips.texi
+++ b/doc/lispref/tips.texi
@@ -689,6 +689,18 @@ line.  This looks nice in the source code, but looks 
bizarre when users
 view the documentation.  Remember that the indentation before the
 starting double-quote is not part of the string!
 
+@item
+When documentation should display an ASCII apostrophe or grave accent,
+use @samp{\\='} or @samp{\\=`} in the documentation string literal so
+that the character is displayed as-is.
+
+@item
+In documentation strings, do not quote expressions that are not Lisp symbols,
+as these expressions can stand for themselves.  For example, write
+@samp{Return the list (NAME TYPE RANGE) ...}@: instead of
+@samp{Return the list `(NAME TYPE RANGE)' ...}@: or
+@samp{Return the list \\='(NAME TYPE RANGE) ...}.
+
 @anchor{Docstring hyperlinks}
 @item
 @cindex curly quotes
@@ -700,7 +712,7 @@ two exceptions: write @code{t} and @code{nil} without 
surrounding
 punctuation.  For example:
 
 @example
- CODE can be `lambda', nil, or t.
+CODE can be `lambda', nil, or t.
 @end example
 
 Note that when Emacs displays these doc strings, Emacs will usually
@@ -856,7 +868,7 @@ find an alternate phrasing that conveys the meaning.
 @item
 Try to avoid using abbreviations such as ``e.g.'' (for ``for
 example''), ``i.e.'' (for ``that is''), ``no.'' (for ``number''),
-``c.f.'' (for ``in contrast to'') and ``w.r.t.'' (for ``with respect
+``cf.'' (for ``compare''/``see also'') and ``w.r.t.'' (for ``with respect
 to'') as much as possible.  It is almost always clearer and easier to
 read the expanded version.@footnote{We do use these occasionally, but
 try not to overdo it.}
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index c29547d00d..80d6a01412 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -327,7 +327,7 @@ Example of a loop summing a list of numbers:
 
 @anchor{Tail recursion}
 Recursive calls to @var{name} that occur in @emph{tail
-positions} in @var{body} are guaranteed to be optimised as @emph{tail
+positions} in @var{body} are guaranteed to be optimized as @emph{tail
 calls}, which means that they will not consume any additional stack
 space no matter how deeply the recursion runs.  Such recursive calls
 will effectively jump to the top of the loop with new values for the
@@ -1363,7 +1363,7 @@ disappear without prior notice.
 
 The byte-compiler can also warn about lexical variables that are
 special in other Emacs Lisp files, often indicating a missing
-@code{defvar} declaration.  This useful but somewhat specialised check
+@code{defvar} declaration.  This useful but somewhat specialized check
 requires three steps:
 
 @enumerate
@@ -2679,17 +2679,46 @@ cdar      nthcdr
 A call to any of the following Emacs-specific functions:
 
 @smallexample
-alist-get                     process-get
-frame-parameter               process-sentinel
-terminal-parameter            window-buffer
-keymap-parent                 window-display-table
-match-data                    window-dedicated-p
-overlay-get                   window-hscroll
-overlay-start                 window-parameter
-overlay-end                   window-point
-process-buffer                window-start
-process-filter                default-value
+alist-get                     overlay-start
+default-value                 overlay-get
+face-background               process-buffer
+face-font                     process-filter
+face-foreground               process-get
+face-stipple                  process-sentinel
+face-underline-p              terminal-parameter
+file-modes                    window-buffer
+frame-parameter               window-dedicated-p
+frame-parameters              window-display-table
+get-register                  window-hscroll
+getenv                        window-parameter
+keymap-parent                 window-point
+match-data                    window-start
+overlay-end
 @end smallexample
+
+@item
+A call of the form @code{(substring @var{subplace} @var{n} [@var{m}])},
+where @var{subplace} is itself a valid generalized variable whose
+current value is a string, and where the value stored is also a
+string.  The new string is spliced into the specified part of the
+destination string.  For example:
+
+@example
+(setq a (list "hello" "world"))
+     @result{} ("hello" "world")
+(cadr a)
+     @result{} "world"
+(substring (cadr a) 2 4)
+     @result{} "rl"
+(setf (substring (cadr a) 2 4) "o")
+     @result{} "o"
+(cadr a)
+     @result{} "wood"
+a
+     @result{} ("hello" "wood")
+@end example
+
+@c FIXME?  Also 'eq'? (see gv.el)
 @end itemize
 
 @noindent
@@ -2822,6 +2851,16 @@ expression manipulating @var{place} via @var{getter} and 
@var{setter}.
 
 Consult the source file @file{gv.el} for more details.
 
+@defun make-obsolete-generalized-variable obsolete-name current-name when
+This function makes the byte compiler warn that the generalized
+variable @var{obsolete-name} is obsolete.  If @var{current-name} is a
+symbol, then the warning message says to use @var{current-name}
+instead of @var{obsolete-name}.  If @var{current-name} is a string,
+this is the message.  @var{when} should be a string indicating when
+the variable was first made obsolete (usually a version number
+string).
+@end defun
+
 @cindex CL note---no @code{setf} functions
 @quotation
 @b{Common Lisp note:} Common Lisp defines another way to specify the
@@ -2843,7 +2882,7 @@ Common Lisp, this is not an error since the function 
@code{(setf
 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
+packages have various files where 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}).
 
diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi
index 704ed30366..c7f014e2f3 100644
--- a/doc/lispref/windows.texi
+++ b/doc/lispref/windows.texi
@@ -737,7 +737,7 @@ with any other @var{round} it returns the internal value of
 @cindex window width
 @cindex width of a window
 @cindex total width of a window
-The @dfn{total width} of a window is the number of lines comprising its
+The @dfn{total width} of a window is the number of columns comprising its
 body and its left and right decorations (@pxref{Basic Windows}).
 
 @defun window-total-width &optional window round
@@ -747,7 +747,7 @@ the selected window.  If @var{window} is internal, the 
return value is
 the total width occupied by its descendant windows.
 
   If a window's pixel width is not an integral multiple of its frame's
-character width, the number of lines occupied by the window is rounded
+character width, the number of columns occupied by the window is rounded
 internally.  This is done in a way such that, if the window is a parent
 window, the sum of the total widths of all its children internally
 equals the total width of their parent.  This means that although two
@@ -1158,11 +1158,13 @@ frame to its buffer using the command 
@code{fit-frame-to-buffer}.
 This command adjusts the size of @var{frame} to display the contents of
 its buffer exactly.  @var{frame} can be any live frame and defaults to
 the selected one.  Fitting is done only if @var{frame}'s root window is
-live.  The arguments @var{max-height}, @var{min-height}, @var{max-width}
-and @var{min-width} specify bounds on the new total size of
-@var{frame}'s root window.  @var{min-height} and @var{min-width} default
-to the values of @code{window-min-height} and @code{window-min-width}
-respectively.
+live.
+
+The arguments @var{max-height}, @var{min-height}, @var{max-width} and
+@var{min-width}, if non-@code{nil}, specify bounds on the new body size
+of @var{frame}'s root window.  A non-@code{nil} value specified by any
+of these arguments overrides the corresponding value specified by
+the option @code{fit-frame-to-buffer-sizes} described below.
 
 If the optional argument @var{only} is @code{vertically}, this function
 may resize the frame vertically only.  If @var{only} is
@@ -1187,10 +1189,10 @@ here can be overridden for a specific frame by that 
frame's
 
 @defopt fit-frame-to-buffer-sizes
 This option specifies size boundaries for @code{fit-frame-to-buffer}.
-It specifies the total maximum and minimum lines and maximum and minimum
-columns of the root window of any frame that shall be fit to its buffer.
-If any of these values is non-@code{nil}, it overrides the corresponding
-argument of @code{fit-frame-to-buffer}.
+It specifies the maximum and minimum lines and maximum and minimum
+columns of the root window's body of any frame that shall be fit to its
+buffer.  Any value this option specifies will be overridden by the
+corresponding argument of @code{fit-frame-to-buffer}, if non-@code{nil}.
 @end defopt
 
 @deffn Command shrink-window-if-larger-than-buffer &optional window
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in
index d9c5173c07..1d881a5fc7 100644
--- a/doc/misc/Makefile.in
+++ b/doc/misc/Makefile.in
@@ -248,6 +248,7 @@ emacs = "${EMACS}" -batch --no-site-file --no-site-lisp 
--eval '(setq load-prefe
 define org_template
  $(1:.org=.texi): $(1) ${top_srcdir}/lisp/org/ox-texinfo.el
        $${AM_V_GEN}cd "$${srcdir}" && $${emacs} -l ox-texinfo \
+         --eval '(setq gc-cons-threshold 50000000)' \
          -f org-texinfo-export-to-texinfo-batch $$(notdir $$<) $$(notdir $$@)
 endef
 
diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi
index 829d7f4fa0..9dc63af6bc 100644
--- a/doc/misc/auth.texi
+++ b/doc/misc/auth.texi
@@ -384,7 +384,7 @@ This function creates a new item in @var{collection} with 
label
 @var{item} and password @var{password}.  The label @var{item} does not
 have to be unique in @var{collection}.  @var{attributes} are key-value
 pairs set for the created item.  The keys are keyword symbols,
-starting with a colon.  Example:
+starting with a colon; values are strings.  Example:
 
 @example
 ;;; The collection is "session", the label is "my item"
@@ -466,6 +466,10 @@ then fall back to @file{~/.authinfo.gpg}.
                      "~/.authinfo.gpg"))
 @end example
 
+Attribute values in the auth-source spec, which are not strings (like
+port numbers), are stringified prior calling the @file{secrets.el}
+functions.
+
 @node The Unix password store
 @chapter The Unix password store
 
@@ -652,14 +656,8 @@ before @file{~/.authinfo}, the auth-source library will 
try to
 read the GnuPG encrypted @file{.gpg} file first, before
 the unencrypted file.
 
-In Emacs 23 or later there is an option @code{auto-encryption-mode} to
-automatically decrypt @file{*.gpg} files.  It is enabled by default.
-If you are using earlier versions of Emacs, you will need:
-
-@lisp
-(require 'epa-file)
-(epa-file-enable)
-@end lisp
+There is an option @code{auto-encryption-mode} to automatically
+decrypt @file{*.gpg} files.  It is enabled by default.
 
 If you want your GnuPG passwords to be cached, set up @code{gpg-agent}
 or EasyPG Assistant
diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi
index a3b0f16df9..93c65692d0 100644
--- a/doc/misc/autotype.texi
+++ b/doc/misc/autotype.texi
@@ -92,7 +92,6 @@ completions and expansions of text at point.
 * Copyrights::             Inserting and updating copyrights.
 * Executables::            Turning interpreter scripts into executables.
 * Timestamps::             Updating dates and times in modified files.
-* QuickURL::               Inserting URLs based on text at point.
 * Tempo::                  Flexible template insertion.
 * Hippie Expand::          Expansion of text trying various methods.
 * Skeleton Language::      Making skeleton commands insert what you want.
@@ -274,13 +273,13 @@ empty file is visited.  This is accomplished by putting
 
 @vindex auto-insert-alist
   What gets inserted, if anything, is determined by the variable
-@code{auto-insert-alist}.  The @sc{car}s of this list are each either
-a mode name, making an element applicable when a buffer is in that
-mode.  Or they can be a string, which is a regexp matched against the
-buffer's file name.  In that way different kinds of files that have
-the same mode in Emacs can be distinguished.  The @sc{car}s may also
-be cons cells consisting of mode name or regexp as above and an
-additional descriptive string.
+@code{auto-insert-alist}.  The @sc{car} of each element of this list
+is either a mode name, making the element applicable when a buffer is
+in that mode, or a string, which is a regexp matched against a
+buffer's file name (the latter allows to distinguish between different
+kinds of files that have the same mode in Emacs).  The @sc{car} of an
+element may also be a cons cell, consisting of mode name or regexp, as
+above, and an additional descriptive string.
 
   When a matching element is found, the @sc{cdr} says what to do.  It may
 be a string, which is a file name, whose contents are to be inserted, if
@@ -478,31 +477,6 @@ The time stamp is written between the brackets or quotes:
 Time-stamp: <1998-02-18 10:20:51 gildea>
 @end example
 
-@node QuickURL
-@chapter QuickURL: Inserting URLs Based on Text at Point
-
-@vindex quickurl-url-file
-@findex quickurl
-@cindex URLs
-@kbd{M-x quickurl} can be used to insert a URL into a buffer based on
-the text at point.  The URLs are stored in an external file defined by
-the variable @code{quickurl-url-file} as a list of either cons cells of
-the form @code{(@var{key} . @var{URL})} or
-lists of the form @code{(@var{key} @var{URL} @var{comment})}.  These
-specify that @kbd{M-x quickurl} should insert @var{URL} if the word
-@var{key} is at point, for example:
-
-@example
-(("FSF"      "https://www.fsf.org/"; "The Free Software Foundation")
- ("emacs"  . "https://www.gnu.org/software/emacs/";))
-@end example
-
-@findex quickurl-add-url
-@findex quickurl-list
-@kbd{M-x quickurl-add-url} can be used to add a new @var{key}/@var{URL}
-pair.  @kbd{M-x quickurl-list} provides interactive editing of the URL
-list.
-
 @node Tempo
 @chapter Tempo: Flexible Template Insertion
 
diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi
index 9bda6af1c5..98f59b89c0 100644
--- a/doc/misc/calc.texi
+++ b/doc/misc/calc.texi
@@ -1,7 +1,7 @@
 \input texinfo @c -*- mode: texinfo; coding: utf-8 -*-
+@setfilename ../../info/calc.info
 @comment %**start of header (This is for running Texinfo on a region.)
 @c smallbook
-@setfilename ../../info/calc.info
 @c [title]
 @settitle GNU Emacs Calc Manual
 @include docstyle.texi
diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi
index 6134b97751..a6747b1096 100644
--- a/doc/misc/cl.texi
+++ b/doc/misc/cl.texi
@@ -920,69 +920,6 @@ cl-caaar@dots{}cl-cddddr          cl-first@dots{}cl-tenth
 Note that for @code{cl-getf} (as for @code{nthcdr}), the list argument
 of the function must itself be a valid @var{place} form.
 
-@item
-General Emacs Lisp functions:
-@example
-buffer-file-name                   getenv
-buffer-modified-p                  global-key-binding
-buffer-name                        local-key-binding
-buffer-string                      mark
-buffer-substring                   mark-marker
-current-buffer                     marker-position
-current-case-table                 mouse-position
-current-column                     point
-current-global-map                 point-marker
-current-input-mode                 point-max
-current-local-map                  point-min
-current-window-configuration       read-mouse-position
-default-file-modes                 screen-height
-documentation-property             screen-width
-face-background                    selected-window
-face-background-pixmap             selected-screen
-face-font                          selected-frame
-face-foreground                    standard-case-table
-face-underline-p                   syntax-table
-file-modes                         visited-file-modtime
-frame-height                       window-height
-frame-parameters                   window-width
-frame-visible-p                    x-get-secondary-selection
-frame-width                        x-get-selection
-get-register
-@end example
-
-Most of these have directly corresponding ``set'' functions, like
-@code{use-local-map} for @code{current-local-map}, or @code{goto-char}
-for @code{point}.  A few, like @code{point-min}, expand to longer
-sequences of code when they are used with @code{setf}
-(@code{(narrow-to-region x (point-max))} in this case).
-
-@item
-A call of the form @code{(substring @var{subplace} @var{n} [@var{m}])},
-where @var{subplace} is itself a valid generalized variable whose
-current value is a string, and where the value stored is also a
-string.  The new string is spliced into the specified part of the
-destination string.  For example:
-
-@example
-(setq a (list "hello" "world"))
-     @result{} ("hello" "world")
-(cadr a)
-     @result{} "world"
-(substring (cadr a) 2 4)
-     @result{} "rl"
-(setf (substring (cadr a) 2 4) "o")
-     @result{} "o"
-(cadr a)
-     @result{} "wood"
-a
-     @result{} ("hello" "wood")
-@end example
-
-The generalized variable @code{buffer-substring}, listed above,
-also works in this way by replacing a portion of the current buffer.
-
-@c FIXME?  Also 'eq'? (see cl-lib.el)
-
 @c Currently commented out in cl.el.
 @ignore
 @item
@@ -1381,19 +1318,10 @@ bar
 
 A @code{setq} of a symbol macro is treated the same as a @code{setf}.
 I.e., @code{(setq foo 4)} in the above would be equivalent to
-@code{(setf foo 4)}, which in turn expands to @code{(setf (car bar) 4)}.
-
-Likewise, a @code{let} or @code{let*} binding a symbol macro is
-treated like a @code{cl-letf} or @code{cl-letf*}.  This differs from true
-Common Lisp, where the rules of lexical scoping cause a @code{let}
-binding to shadow a @code{symbol-macrolet} binding.  In this package,
-such shadowing does not occur, even when @code{lexical-binding} is
-@c See https://debbugs.gnu.org/12119
-@code{t}.  (This behavior predates the addition of lexical binding to
-Emacs Lisp, and may change in future to respect @code{lexical-binding}.)
-At present in this package, only @code{lexical-let} and
-@code{lexical-let*} will shadow a symbol macro.  @xref{Obsolete
-Lexical Binding}.
+@code{(setf foo 4)}, which in turn expands to @code{(setf (car bar)
+4)}.  A @code{let} (or @code{let*}, @code{lambda}, ...) binding of
+the same symbol will locally shadow the symbol macro as is the case in
+Common Lisp.
 
 There is no analogue of @code{defmacro} for symbol macros; all symbol
 macros are local.  A typical use of @code{cl-symbol-macrolet} is in the
@@ -3756,7 +3684,7 @@ a merged sequence which is (stably) sorted according to
 The functions described here operate on lists.
 
 @menu
-* List Functions::                @code{cl-caddr}, @code{cl-first}, 
@code{cl-list*}, etc.
+* List Functions::                @code{cl-first}, @code{cl-list*}, etc.
 * Substitution of Expressions::   @code{cl-subst}, @code{cl-sublis}, etc.
 * Lists as Sets::                 @code{cl-member}, @code{cl-adjoin}, 
@code{cl-union}, etc.
 * Association Lists::             @code{cl-assoc}, @code{cl-acons}, 
@code{cl-pairlis}, etc.
@@ -3769,14 +3697,6 @@ The functions described here operate on lists.
 This section describes a number of simple operations on lists,
 i.e., chains of cons cells.
 
-@defun cl-caddr x
-This function is equivalent to @code{(car (cdr (cdr @var{x})))}.
-Likewise, this package aliases all 24 @code{c@var{xxx}r} functions
-where @var{xxx} is up to four @samp{a}s and/or @samp{d}s.
-All of these functions are @code{setf}-able, and calls to them
-are expanded inline by the byte-compiler for maximum efficiency.
-@end defun
-
 @defun cl-first x
 This function is a synonym for @code{(car @var{x})}.  Likewise,
 the functions @code{cl-second}, @code{cl-third}, @dots{}, through
@@ -4553,8 +4473,8 @@ For example,
 @end example
 @end ignore
 
-Note that @code{cl-adjoin}, @code{cl-caddr}, and @code{cl-member} all
-have built-in compiler macros to optimize them in common cases.
+Note that @code{cl-adjoin} and @code{cl-member} have built-in compiler
+macros to optimize them in common cases.
 @end defun
 
 @appendixsec Error Checking
diff --git a/doc/misc/dired-x.texi b/doc/misc/dired-x.texi
index 754ccf4065..002164ed91 100644
--- a/doc/misc/dired-x.texi
+++ b/doc/misc/dired-x.texi
@@ -92,7 +92,6 @@ For @file{dired-x.el} as distributed with GNU Emacs 
@value{EMACSVER}.
 * Introduction::
 * Installation::
 * Omitting Files in Dired::
-* Shell Command Guessing::
 * Virtual Dired::
 * Advanced Mark Commands::
 * Multiple Dired Directories::
@@ -135,9 +134,6 @@ Some features provided by Dired Extra:
 Omitting uninteresting files from Dired listing
 (@pxref{Omitting Files in Dired}).
 @item
-Guessing shell commands in Dired buffers
-(@pxref{Shell Command Guessing}).
-@item
 Running Dired command in non-Dired buffers
 (@pxref{Virtual Dired}).
 @item
@@ -165,10 +161,6 @@ When @file{dired-x.el} is loaded, some standard Dired 
functions from
 Dired}), if it is active.  @code{dired-find-buffer-nocreate} and
 @code{dired-initial-position} respect the value of
 @code{dired-find-subdir} (@pxref{Miscellaneous Commands}).
-@code{dired-clean-up-after-deletion} respects the value of
-@code{dired-clean-up-buffers-too}.  @code{dired-read-shell-command} uses
-@code{dired-guess-shell-command} (@pxref{Shell Command Guessing}) to
-offer a smarter default command.
 
 @node Installation
 @chapter Installation
@@ -186,7 +178,6 @@ In your @file{~/.emacs} file, or in the system-wide 
initialization file
 (with-eval-after-load 'dired
   (require 'dired-x)
   ;; Set dired-x global variables here.  For example:
-  ;; (setq dired-guess-shell-gnutar "gtar")
   ;; (setq dired-x-hands-off-my-keys nil)
   ))
 (add-hook 'dired-mode-hook
@@ -438,111 +429,6 @@ Loading @file{dired-x.el} will install Dired Omit by 
putting
 call @code{dired-extra-startup}, which in turn calls @code{dired-omit-startup}
 in your @code{dired-mode-hook}.
 
-@node Shell Command Guessing
-@chapter Shell Command Guessing
-@cindex guessing shell commands for files.
-
-Based upon the name of a file, Dired tries to guess what shell
-command you might want to apply to it.  For example, if you have point
-on a file named @file{foo.tar} and you press @kbd{!}, Dired will guess
-you want to @samp{tar xvf} it and suggest that as the default shell
-command.
-
-The default is mentioned in brackets and you can type @kbd{M-n} to get
-the default into the minibuffer and then edit it, e.g., to change
-@samp{tar xvf} to @samp{tar tvf}.  If there are several commands for a given
-file, e.g., @samp{xtex} and @samp{dvips} for a @file{.dvi} file, you can type
-@kbd{M-n} several times to see each of the matching commands.
-
-Dired only tries to guess a command for a single file, never for a list
-of marked files.
-
-The following variables control guessing of shell commands:
-
-@defvar dired-guess-shell-alist-default
-This variable specifies the predefined rules for guessing shell
-commands suitable for certain files.  Set this to @code{nil} to turn
-guessing off.  The elements of @code{dired-guess-shell-alist-user}
-(defined by the user) will override these rules.
-@end defvar
-
-@defvar dired-guess-shell-alist-user
-If non-@code{nil}, this variables specifies the user-defined alist of
-file regexps and their suggested commands.  These rules take
-precedence over the predefined rules in the variable
-@code{dired-guess-shell-alist-default} (to which they are prepended)
-when @code{dired-do-shell-command} is run).  The default is
-@code{nil}.
-
-Each element of the alist looks like
-
-@example
-(@var{regexp} @var{command}@dots{})
-@end example
-
-@noindent
-where each @var{command} can either be a string or a Lisp expression
-that evaluates to a string.  If several commands are given, all of
-them will temporarily be pushed onto the history.
-
-A @samp{*} in the shell command stands for the file name that matched
-@var{regexp}.  When Emacs invokes the @var{command}, it replaces each
-instance of @samp{*} with the matched file name.
-
-You can set this variable in your @file{~/.emacs}.  For example,
-to add rules for @samp{.foo} and @samp{.bar} file extensions, write
-
-@example
-(setq dired-guess-shell-alist-user
-      (list
-       (list "\\.foo$" "@var{foo-command}");; fixed rule
-       ;; possibly more rules...
-       (list "\\.bar$";; rule with condition test
-              '(if @var{condition}
-                   "@var{bar-command-1}"
-                 "@var{bar-command-2}"))))
-@end example
-
-@noindent
-This will override any predefined rules for the same extensions.
-@end defvar
-
-@defvar dired-guess-shell-case-fold-search
-If this variable is non-@code{nil},
-@code{dired-guess-shell-alist-default} and
-@code{dired-guess-shell-alist-user} are matched case-insensitively.
-The default is @code{t}.
-@end defvar
-
-@cindex passing GNU Tar its @samp{z} switch.
-@defvar dired-guess-shell-gnutar
-If this variable is non-@code{nil}, it specifies the name of the GNU
-Tar executable (e.g., @file{tar} or @file{gnutar}).  GNU Tar's
-@samp{z} switch is used for compressed archives.  If you don't have
-GNU Tar, set this to @code{nil}: a pipe using @command{zcat} is then
-used instead.  The default is @code{nil}.
-@end defvar
-
-@cindex @code{gzip}
-@defvar dired-guess-shell-gzip-quiet
-A non-@code{nil} value of this variable means that @samp{-q} is passed
-to @command{gzip}, possibly overriding a verbose option in the @env{GZIP}
-environment variable.  The default is @code{t}.
-@end defvar
-
-@cindex @code{znew}
-@defvar dired-guess-shell-znew-switches nil
-This variable specifies a string of switches passed to @command{znew}.
-An example is @samp{-K} which will make @command{znew} keep a @file{.Z}
-file when it is smaller than the @file{.gz} file.  The default is
-@code{nil}: no additional switches are passed to @command{znew}.
-@end defvar
-
-@defvar dired-shell-command-history nil
-This variable holds the history list for commands that read
-dired-shell commands.
-@end defvar
-
 @node Virtual Dired
 @chapter Virtual Dired
 
@@ -884,15 +770,6 @@ normal and a wildcard buffer for the same directory, 
@kbd{C-x d @key{RET}}
 will toggle between those two.
 @end table
 
-@table @kbd
-@findex dired-goto-subdir
-@kindex M-G
-@item M-G
-(@code{dired-goto-subdir}) Go to the header line of an inserted directory.
-This command reads its argument, with completion derived from the names of the
-inserted subdirectories.
-@end table
-
 @table @code
 
 @item dired-vm
@@ -920,55 +797,6 @@ to @kbd{V}.  Otherwise, @code{dired-bind-rmail} will be 
bound.
 @findex dired-rmail
 Bound to @kbd{V} if @code{dired-bind-vm} is @code{nil}.  Run Rmail on this
 file (assumed to be mail folder in Rmail format).
-
-@item dired-info
-@kindex I
-@cindex running info.
-@findex dired-info
-Bound to @kbd{I}.  Run Info on this file (assumed to be a file in Info
-format).
-
-@vindex dired-bind-info
-If the variable @code{dired-bind-info} is @code{nil}, @code{dired-info} will
-not be bound to @kbd{I}.
-
-@item dired-man
-@cindex running man.
-@kindex N
-@findex dired-man
-Bound to @kbd{N}.  Run man on this file (assumed to be a file in @code{nroff}
-format).
-
-@vindex dired-bind-man
-If the variable @code{dired-bind-man} is @code{nil}, @code{dired-man} will not
-be bound to @kbd{N}.
-
-@item dired-do-relsymlink
-@cindex relative symbolic links.
-@kindex Y
-@findex dired-do-relsymlink
-Bound to @kbd{Y}.  Relative symlink all marked (or next ARG) files into a
-directory, or make a relative symbolic link to the current file.  This creates
-relative symbolic links like
-
-@example
-    foo -> ../bar/foo
-@end example
-
-@noindent
-not absolute ones like
-
-@example
-    foo -> /ugly/path/that/may/change/any/day/bar/foo
-@end example
-
-@item dired-do-relsymlink-regexp
-@kindex %Y
-@findex dired-do-relsymlink-regexp
-Bound to @kbd{%Y}.  Relative symlink all marked files containing
-@var{regexp} to @var{newname}.  See functions
-@code{dired-do-rename-regexp} and @code{dired-do-relsymlink} for more
-info.
 @end table
 
 @node Bugs
diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi
index af8e2153dd..9867883b24 100644
--- a/doc/misc/ede.texi
+++ b/doc/misc/ede.texi
@@ -1551,14 +1551,14 @@ This is a URL to be sent to a web site for 
documentation.
 @item :web-site-directory @*
 
 A directory where web pages can be found by Emacs.
-For remote locations use a path compatible with ange-ftp or EFS@.
+For remote locations use a path compatible with ange-ftp.
 You can also use TRAMP for use with rcp & scp.
 
 @item :web-site-file @*
 
 A file which contains the website for this project.
 This file can be relative to slot @code{web-site-directory}.
-This can be a local file, use ange-ftp, EFS, or TRAMP.
+This can be a local file, use ange-ftp or TRAMP.
 
 @item :ftp-site
 Type: @code{string} @*
diff --git a/doc/misc/ediff.texi b/doc/misc/ediff.texi
index 39b09b29b3..cbc7556aa8 100644
--- a/doc/misc/ediff.texi
+++ b/doc/misc/ediff.texi
@@ -947,12 +947,14 @@ This function can also be invoked from the Menubar.  
However, in some
 cases, the change will take place only after you execute one of the Ediff
 commands, such as going to the next difference or redisplaying.
 
+@c --> The below can be revisited once the toolbar has been ported to Emacs:
+@ignore
 @item ediff-toggle-use-toolbar
 @findex ediff-toggle-use-toolbar
-Available in XEmacs only.  The Ediff toolbar provides quick access to some
-of the common Ediff functions.  This function toggles the display of the
-toolbar.  If invoked from the menubar, the function may take sometimes
-effect only after you execute an Ediff command, such as going to the next
+The Ediff toolbar provides quick access to some of the common Ediff
+functions.  This function toggles the display of the toolbar.  If
+invoked from the menubar, the function may take sometimes effect only
+after you execute an Ediff command, such as going to the next
 difference.
 
 @item ediff-use-toolbar-p
@@ -961,6 +963,7 @@ The use of the toolbar can also be specified via the 
variable
 @code{ediff-use-toolbar-p} (default is @code{t}).  This variable can be set
 only in @file{.emacs}: do @strong{not} change it interactively.  Use the
 function @code{ediff-toggle-use-toolbar} instead.
+@end ignore
 
 @item ediff-revert-buffers-then-recompute-diffs
 @findex ediff-revert-buffers-then-recompute-diffs
diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi
index 55175a3b89..46c257e42e 100644
--- a/doc/misc/efaq-w32.texi
+++ b/doc/misc/efaq-w32.texi
@@ -130,10 +130,8 @@ from Windows 98 onward, and all versions of the NT family 
starting
 from NT 4.0; this includes all the modern versions from Windows XP and
 on.  The Windows port is built using the Win32 API and supports most
 features of the X version, including variable width fonts, images and
-tooltips.
-
-Emacs on Windows can be compiled as either a 32-bit or a 64-bit
-executable, using the MinGW GCC compiler and development tools.
+tooltips.  Emacs on Windows can be compiled as either a 64-bit or a
+32-bit executable.
 
 @node Other versions of Emacs
 @section What other versions of Emacs run on Windows?
@@ -177,8 +175,8 @@ best-effort basis in the @file{windows} subdirectory of the 
above ftp
 site (as zip files digitally signed by the person who built them).
 See the @file{README} file in that directory for more information.
 Building Emacs from source yourself should be straightforward,
-following the instructions in @file{nt/INSTALL}, so we encourage you
-to give it a try.  @xref{Compiling}.
+following the instructions in the @file{nt} directory, so we
+encourage you to give it a try.  @xref{Compiling}.
 
 @cindex latest development version of Emacs
 @cindex Emacs Development
@@ -190,21 +188,27 @@ development site.
 @section How can I compile Emacs myself?
 @cindex compiling Emacs
 
-To compile Emacs on Windows, you will need the MinGW port of GCC and
-Binutils, the MinGW runtime and development environment, and the MSYS
-suite of tools.  For the details, see the file @file{nt/INSTALL} in
-the Emacs source distribution.
+To compile Emacs on a 64-bit version of Windows 7 or newer, we
+recommend to use the MinGW-w64 port of GCC and Binutils with the MSYS2
+suite of tools.  For the details, see the file @file{nt/INSTALL.W64}
+in the Emacs source distribution.
+
+If you need to build or run Emacs on MS Windows before Windows 7, you
+have to use the MinGW port of GCC and the MSYS suite of tools.  The
+file @file{nt/INSTALL} in Emacs source distribution contains the
+details.
 
 Support for displaying images, as well as XML/HTML rendering and TLS
 networking requires external libraries, the headers and import
 libraries for which will need to be installed where your compiler can
 find them.  Again, the details, including URLs of sites where you can
-download these libraries are in @file{nt/INSTALL}.  @xref{Other useful
-ports}, for auxiliary tools you may wish to install and use in
-conjunction with Emacs.
+download these libraries are in @file{nt/INSTALL.W64} or
+@file{nt/INSTALL}.  @xref{Other useful ports}, for auxiliary tools you
+may wish to install and use in conjunction with Emacs.
 
 After unpacking the source, or checking out of the repository, be sure
-to read the instructions in @file{nt/README} and @file{nt/INSTALL}.
+to read the instructions in @file{nt/README} and the respective
+install file.
 
 @node Debugging
 @section How do I use a debugger on Emacs?
@@ -222,18 +226,18 @@ specific notes about debugging Emacs.
 
 @cindex debugging Emacs with GDB
 GDB is the GNU debugger, which can be used to debug Emacs when it has
-been compiled with MinGW GCC@.  The best results will be obtained if
-you start gdb from the @file{src} directory as @kbd{gdb ./emacs.exe}.
+been compiled with GCC@.  The best results will be obtained if you
+start gdb from the @file{src} directory as @kbd{gdb ./emacs.exe}.
 This will load the init file @file{.gdbinit}@footnote{
 Latest versions of GDB might refuse to load the init file for security
 reasons, unless you customize GDB; alternatively, use an explicit
 @kbd{source ./gdbinit} command after entering GDB.
 } in that directory, to define some extra commands for working with
-lisp while debugging, and set up breakpoints to catch abnormal
-aborts.
+lisp while debugging, and set up breakpoints to catch abnormal aborts.
 
-A Windows port of GDB can be found on MinGW download sites and on some
-others.
+A Windows port of GDB is installed with MinGW64-w64 and MSYS2
+(@samp{mingw-w64-<arch>-toolchain} group) or can be found on MinGW
+download sites and on some others.
 
 @c ------------------------------------------------------------
 @node Installing Emacs
@@ -307,8 +311,8 @@ bsdtar -xf emacs-@value{EMACSVER}.tar.xz
 Expect @command{bsdtar} to unpack the whole distribution without any
 complaints.
 
-Once you unpack the source distribution, look in @file{nt/INSTALL}
-file for build instructions.
+Once you unpack the source distribution, look in the @file{nt}
+directory for build instructions.
 
 @node Installing binaries
 @section How do I install Emacs after unpacking the binary zip?
@@ -926,9 +930,9 @@ an indication of whether the font is outline (.TTF, .ATM) 
or raster (.FON)
 based when fonts are listed, which may let you differentiate between two
 fonts with the same name and different technologies.
 
-Starting with Emacs 23, the preferred font name format will be moving
-to the simpler and more flexible fontconfig format.  XLFD names will
-continue to be supported for backward compatibility.
+Starting with Emacs 23, the preferred font name format is the simpler
+and more flexible fontconfig format.  XLFD names will continue to be
+supported for backward compatibility.
 
 @example
 XLFD: -*-Courier New-normal-r-*-*-13-*-*-*-c-*-iso8859-1
@@ -1645,8 +1649,8 @@ obtained the packages from if you want to use them.
 In your @env{HOME} directory create a file called @file{.mailcap},
 with contents like the following:
 @example
-application/zip "C:/Program Files/7-Zip/7zFM.exe"
-video/* "C:/Program Files/VideoLAN/VLC/vlc.exe"
+application/zip; "C:/Program Files/7-Zip/7zFM.exe"
+video/*; "C:/Program Files/VideoLAN/VLC/vlc.exe"
 @end example
 
 @strong{Warning:} Associating MIME types with @command{start} or other
@@ -1754,11 +1758,13 @@ A number of implementations are listed on the
 Emacs has support for spell checking on demand (@code{ispell}) and as
 your type (@code{flyspell}).  Both packages depend on a copy of
 @command{ispell} 3.2 or a compatible spell-checking program.
-GNU Aspell is a popular choice these days, Windows installers are
-available from the @uref{http://aspell.net/win32/, official site}.
+GNU Aspell is a popular choice these days, outdated Windows installers
+are available from the @uref{http://aspell.net/win32/, official site}.
 Another possibility is Hunspell, which is available from
 @uref{https://sourceforge.net/projects/ezwinports/files/?source=navbar,
-the ezwinports site}.
+the ezwinports site}.  If you're using the MSYS2 distribution, you can
+install a recent version of either GNU Aspell or Hunspell through the
+package manager Pacman.  @xref{Other useful ports}.
 
 Once installed, you will need to configure @code{ispell-program-name}
 to tell ispell and flyspell to use @command{aspell} or
@@ -2096,9 +2102,9 @@ suggestions} for improving the interaction of perldb and 
Emacs.
 
 @menu
 * Cygwin::
-* MinGW::
+* MinGW-w64::
 * EZWinPorts::
-* UWIN::
+* MinGW::
 * GnuWin32::
 * GTK::
 * Read man pages::
@@ -2133,22 +2139,25 @@ Cygwin on your system @env{PATH} for this reason.  
Instead you can
 make the Cygwin tools available within Emacs by setting @code{exec-path}
 in your init file.
 
-@node MinGW
-@section MinGW and MSYS
-@cindex mingw tools
-@cindex msys environment
-@cindex subprocesses, mingw and msys
+@node MinGW-w64
+@section MinGW-w64 and MSYS2
+@cindex mingw-w64 tools
+@cindex msys2 environment
+@cindex subprocesses, mingw-w64 and msys2
 
-@uref{http://www.mingw.org/}
+@uref{https://www.msys2.org/}
 
-MinGW is a set of development tools that produce native Windows
+MinGW-w64 is a set of development tools that produce native Windows
 executables, not dependent on Cygwin's POSIX emulation DLLs.
+MinGW-w64 has forked the original MinGW in 2007 in order to provide
+support for 64 bits and new APIs.
 
-MSYS is a POSIX shell and minimal set of tools that are commonly used in
-configure scripts.  Like Cygwin, this environment uses a non-native
-filesystem mapping to appear more POSIX like to the scripts that it
-runs.  This is intended to complement the MinGW tools to make it easier
-to port software to Windows.
+MSYS2 is software distribution and a building platform for Windows.
+MSYS2 is an independent rewrite of MSYS, based on modern Cygwin and
+MinGW-w64 with the aim of better interoperability with native Windows
+software.  It plays the same role MSYS does in MinGW.  Being a
+distribution, MSYS2 provides tools to build software as well as more
+than 2.600 precompiled packages ready for use.
 
 @node EZWinPorts
 @section EZWinPorts
@@ -2161,16 +2170,22 @@ software.  This includes all the optional libraries 
used by Emacs
 @command{man} command, Grep, xz, bzip2, bsdtar, ID Utils, Findutils,
 Hunspell, Gawk, GNU Make, Groff, GDB.
 
-@node UWIN
-@section UWIN
-@cindex uwin environment
-@cindex subprocesses, uwin
+@node MinGW
+@section MinGW and MSYS
+@cindex mingw tools
+@cindex msys environment
+@cindex subprocesses, mingw and msys
 
-@uref{http://www.research.att.com/sw/tools/uwin/}
+@uref{https://osdn.net/projects/mingw/}
 
-UWIN is another POSIX emulation environment, like Cygwin and MSYS,
-that provides a large number of ported tools.  The shell used by UWIN
-is @command{ksh}, the Korn shell.
+MinGW is another set of development tools that produce native Windows
+executables, not dependent on Cygwin's POSIX emulation DLLs.
+
+MSYS is a POSIX shell and minimal set of tools that are commonly used in
+configure scripts.  Like Cygwin, this environment uses a non-native
+filesystem mapping to appear more POSIX like to the scripts that it
+runs.  This is intended to complement the MinGW tools to make it easier
+to port software to Windows.
 
 @node GnuWin32
 @section GnuWin32
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index a98c4b6a61..a3459abd04 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -27,9 +27,6 @@ latest version of the FAQ is archived.
 The FAQ may be copied and redistributed under these conditions, except that
 the FAQ may not be embedded in a larger literary work unless that work
 itself allows free copying and redistribution.
-
-[This version has been heavily edited since it was included in the Emacs
-distribution in 1999.]
 @end quotation
 @end copying
 
@@ -545,11 +542,11 @@ printed manual}.
 @cindex Reference cards, in other languages
 @item
 You can get a printed reference card listing commands and keys to
-invoke them.  You can order one from the FSF for $2 (or 10 for $18),
-or you can print your own from the @file{etc/refcards/refcard.tex} or
-@file{etc/refcards/refcard.pdf} files in the Emacs distribution.
-The Emacs distribution comes with translations of the reference card
-into several languages; look for files named
+invoke them.  You can order one from the FSF, or you can print your
+own from the @file{etc/refcards/refcard.tex} or
+@file{etc/refcards/refcard.pdf} files in the Emacs distribution.  The
+Emacs distribution comes with translations of the reference card into
+several languages; look for files named
 @file{etc/refcards/@var{lang}-refcard.*}, where @var{lang} is a
 two-letter code of the language.  For example, the German version of
 the reference card is in the files @file{etc/refcards/de-refcard.tex}
@@ -696,9 +693,10 @@ of the file in parentheses, like this:
 @item
 You can create your own Info directory.  You can tell Emacs where that
 Info directory is by adding its pathname to the value of the variable
-@code{Info-default-directory-list}.  For example, to use a private Info
-directory which is a subdirectory of your home directory named @file{Info},
-you could put this in your @file{.emacs} file:
+@code{Info-default-directory-list}.  For example, to use a private
+Info directory which is a subdirectory of your home directory named
+@file{Info}, you could put this in your init file (@pxref{Setting up a
+customization file}):
 
 @lisp
 (add-to-list 'Info-default-directory-list "~/Info/")
@@ -1607,35 +1605,38 @@ is better to write ``Emacs and XEmacs.''
 @end menu
 
 @node Setting up a customization file
-@section How do I set up a @file{.emacs} file properly?
+@section How do I set up an init file properly?
 @cindex @file{.emacs} file, setting up
-@cindex @file{.emacs} file, locating
+@cindex @file{.emacs.d/init.el} file, setting up
 @cindex Init file, setting up
+@cindex Init file, locating
 @cindex Customization file, setting up
 
+When Emacs is started, it normally tries to load a Lisp program from
+an @dfn{initialization file}, or @dfn{init file} for short.  This
+file, if it exists, specifies how to initialize Emacs for you.
+Traditionally, file @file{~/.emacs} is used as the init file, although
+Emacs also looks at @file{~/.emacs.el}, @file{~/.emacs.d/init.el},
+@file{~/.config/emacs/init.el}, or other locations.
 @xref{Init File,,, emacs, The GNU Emacs Manual}.
 
-In general, new Emacs users should not be provided with @file{.emacs}
-files, because this can cause confusing non-standard behavior.  Then
-they send questions to
-@url{https://lists.gnu.org/mailman/listinfo/help-gnu-emacs,
-the help-gnu-emacs mailing list} asking why Emacs
-isn't behaving as documented.
-
 Emacs includes the Customize facility (@pxref{Using Customize}).  This
 allows users who are unfamiliar with Emacs Lisp to modify their
-@file{.emacs} files in a relatively straightforward way, using menus
+init files in a relatively straightforward way, using menus
 rather than Lisp code.
 
 While Customize might indeed make it easier to configure Emacs,
 consider taking a bit of time to learn Emacs Lisp and modifying your
-@file{.emacs} directly.  Simple configuration options are described
+init file directly.  Simple configuration options are described
 rather completely in @ref{Init File,,, emacs, The GNU Emacs Manual},
 for users interested in performing frequently requested, basic tasks.
 
-Sometimes users are unsure as to where their @file{.emacs} file should
-be found.  Visiting the file as @file{~/.emacs} from Emacs will find
-the correct file.
+In general, new Emacs users should not be provided with init
+files, because this can cause confusing non-standard behavior.  Then
+they send questions to
+@url{https://lists.gnu.org/mailman/listinfo/help-gnu-emacs,
+the help-gnu-emacs mailing list} asking why Emacs
+isn't behaving as documented.
 
 @node Using Customize
 @section How do I start using Customize?
@@ -1743,21 +1744,22 @@ always use custom terminal definition with 
@samp{setb24} and
 @samp{setf24}.
 
 @node Debugging a customization file
-@section How do I debug a @file{.emacs} file?
-@cindex Debugging @file{.emacs} file
-@cindex @file{.emacs} debugging
+@section How do I debug an init file?
+@cindex Debugging @file{.emacs.d/init.el} file
+@cindex Debugging init file
+@cindex @file{.emacs.d/init.el} debugging
 @cindex Init file debugging
 @cindex @samp{-debug-init} option
 
 Start Emacs with the @samp{-debug-init} command-line option.  This
-enables the Emacs Lisp debugger before evaluating your @file{.emacs}
+enables the Emacs Lisp debugger before evaluating your init
 file, and places you in the debugger if something goes wrong.  The top
 line in the @file{trace-back} buffer will be the error message, and the
 second or third line of that buffer will display the Lisp code from your
-@file{.emacs} file that caused the problem.
+init file that caused the problem.
 
 You can also evaluate an individual function or argument to a function
-in your @file{.emacs} file by moving the cursor to the end of the
+in your init file by moving the cursor to the end of the
 function or argument and typing @kbd{C-x C-e} (@kbd{M-x
 eval-last-sexp}).
 
@@ -1787,7 +1789,8 @@ You can similarly display the current column with
 @end lisp
 
 @noindent
-in your @file{.emacs} file.  This feature is off by default.
+in your init file (@pxref{Setting up a customization file}).  This
+feature is off by default.
 
 The @code{"%c"} format specifier in the variable @code{mode-line-format}
 will insert the current column's value into the mode line.  See the
@@ -1806,9 +1809,8 @@ optional display.  Alternatively, you can use the
 customize @code{display-line-numbers-type} with the same value as you
 would use with @code{display-line-numbers}.
 
-There is also the @samp{linum} package (distributed with Emacs since
-version 23.1) which will henceforth become obsolete.  Users and
-developers are encouraged to use @samp{display-line-numbers} instead.
+There is also the @samp{linum} package which will henceforth become
+obsolete.  We recommend using @samp{display-line-numbers} instead.
 
 @node Displaying the current file name in the titlebar
 @section How can I modify the titlebar to contain the current file name?
@@ -1834,7 +1836,7 @@ machine at which Emacs was invoked.  This is done by 
setting
 
 To modify the behavior such that frame titlebars contain the buffer's
 name regardless of the number of existing frames, include the following
-in your @file{.emacs}:
+in your init file (@pxref{Setting up a customization file}):
 
 @lisp
 (setq frame-title-format "%b")
@@ -1844,9 +1846,10 @@ in your @file{.emacs}:
 @section How do I turn on abbrevs by default just in mode @var{mymode}?
 @cindex Abbrevs, turning on by default
 
-Abbrev mode expands abbreviations as you type them.  To turn it on in a
-specific buffer, use @kbd{M-x abbrev-mode}.  To turn it on in every
-buffer by default, put this in your @file{.emacs} file:
+Abbrev mode expands abbreviations as you type them.  To turn it on in
+a specific buffer, use @kbd{M-x abbrev-mode}.  To turn it on in every
+buffer by default, put this in your init file (@pxref{Setting up a
+customization file}):
 
 @lisp
 (setq-default abbrev-mode t)
@@ -1896,7 +1899,8 @@ the script.  Use @kbd{C-h v} (or @kbd{M-x 
describe-variable}) on
 @cindex Highlighting and replacing text
 
 Use @code{delete-selection-mode}, which you can start automatically by
-placing the following Lisp form in your @file{.emacs} file:
+placing the following Lisp form in your init file (@pxref{Setting up a
+customization file}):
 
 @lisp
 (delete-selection-mode 1)
@@ -2034,9 +2038,10 @@ The default maximum line width is 70, determined by the 
variable
 To turn on @code{auto-fill-mode} just once for one buffer, use @kbd{M-x
 auto-fill-mode}.
 
-To turn it on for every buffer in a certain mode, you must use the hook
-for that mode.  For example, to turn on @code{auto-fill} mode for all
-text buffers, including the following in your @file{.emacs} file:
+To turn it on for every buffer in a certain mode, you must use the
+hook for that mode.  For example, to turn on @code{auto-fill} mode for
+all text buffers, including the following in your init file
+(@pxref{Setting up a customization file}):
 
 @lisp
 (add-hook 'text-mode-hook 'turn-on-auto-fill)
@@ -2091,7 +2096,8 @@ option:
 emacs -f server-start
 @end example
 
-or by invoking @code{server-start} from @file{.emacs}:
+or by invoking @code{server-start} from init file (@pxref{Setting up a
+customization file}):
 
 @lisp
 (if (@var{some conditions are met}) (server-start))
@@ -2162,7 +2168,8 @@ f()
 @}
 @end example
 
-@noindent To achieve this, add the following line to your @file{.emacs}:
+@noindent To achieve this, add the following line to your init file
+(@pxref{Setting up a customization file}):
 
 @lisp
 (c-set-offset 'case-label '+)
@@ -2213,7 +2220,8 @@ the line or the block according to what you just 
specified.
 
 @item
 If you don't like the result, go back to step 1.  Otherwise, add the
-following line to your @file{.emacs}:
+following line to your init file (@pxref{Setting up a customization
+file}):
 
 @lisp
 (c-set-offset '@var{syntactic-symbol} @var{offset})
@@ -2243,8 +2251,8 @@ customizations inside a C mode hook, like this:
 
 @noindent
 Using @code{c-mode-hook} avoids the need to put a @w{@code{(require
-'cc-mode)}} into your @file{.emacs} file, because @code{c-set-offset}
-might be unavailable when @code{cc-mode} is not loaded.
+'cc-mode)}} into your init file, because @code{c-set-offset} might be
+unavailable when @code{cc-mode} is not loaded.
 
 Note that @code{c-mode-hook} runs for C source files only; use
 @code{c++-mode-hook} for C@t{++} sources, @code{java-mode-hook} for
@@ -2316,8 +2324,8 @@ usage:  xset [-display host:dpy] option ...
 @cindex Previous line, indenting according to
 @cindex Text indentation
 
-Such behavior is automatic (in Text mode) in Emacs 20 and later.  From the
-@file{etc/NEWS} file for Emacs 20.2:
+Such behavior is automatic (in Text mode).  From the @file{etc/NEWS}
+file for Emacs 20.2:
 
 @example
 ** In Text mode, now only blank lines separate paragraphs.  This makes
@@ -2355,7 +2363,8 @@ new paragraph.  There are many packages available to deal 
with this
 @cindex Pairs of parentheses, highlighting
 @cindex Matching parentheses
 
-Call @code{show-paren-mode} in your @file{.emacs} file:
+Call @code{show-paren-mode} in your init file (@pxref{Setting up a
+customization file}):
 
 @lisp
 (show-paren-mode 1)
@@ -2460,8 +2469,9 @@ Emacs Lisp @dfn{form}:
 
 @item
 If you want it evaluated every time you run Emacs, put it in a file
-named @file{.emacs} in your home directory.  This is known as ``your
-@file{.emacs} file,'' and contains all of your personal customizations.
+named @file{.emacs.d/init.el} in your home directory.  This is known
+as ``your init file,'' and contains all of your personal
+customizations (@pxref{Setting up a customization file}).
 
 @item
 You can type the form in the @file{*scratch*} buffer, and then type
@@ -2499,7 +2509,7 @@ about them.
 
 Set the default value of the variable @code{tab-width}.  For example, to set
 @key{TAB} stops every 10 characters, insert the following in your
-@file{.emacs} file:
+init file (@pxref{Setting up a customization file}):
 
 @lisp
 (setq-default tab-width 10)
@@ -2641,8 +2651,9 @@ Quick command-line switch descriptions are also 
available.  For example,
 You probably don't want to do this, since backups are useful, especially
 when something goes wrong.
 
-To avoid seeing backup files (and other ``uninteresting'' files) in Dired,
-load @code{dired-x} by adding the following to your @file{.emacs} file:
+To avoid seeing backup files (and other ``uninteresting'' files) in
+Dired, load @code{dired-x} by adding the following to your init file
+(@pxref{Setting up a customization file}):
 
 @lisp
 (with-eval-after-load 'dired
@@ -2651,7 +2662,7 @@ load @code{dired-x} by adding the following to your 
@file{.emacs} file:
 
 With @code{dired-x} loaded, @kbd{C-x M-o} toggles omitting in each dired 
buffer.
 You can make omitting the default for new dired buffers by putting the
-following in your @file{.emacs}:
+following in your init file:
 
 @lisp
 (add-hook 'dired-mode-hook 'dired-omit-mode)
@@ -2891,31 +2902,32 @@ and cause an annoying delay in display, so several 
features exist to
 work around this.
 
 @cindex Just-In-Time syntax highlighting
-In Emacs 21 and later, turning on @code{font-lock-mode} automatically
-activates the new @dfn{Just-In-Time fontification} provided by
-@code{jit-lock-mode}.  @code{jit-lock-mode} defers the fontification of
-portions of buffer until you actually need to see them, and can also
-fontify while Emacs is idle.  This makes display of the visible portion
-of a buffer almost instantaneous.  For details about customizing
-@code{jit-lock-mode}, type @kbd{C-h f jit-lock-mode @key{RET}}.
+Turning on @code{font-lock-mode} automatically activates
+@dfn{Just-In-Time fontification} provided by @code{jit-lock-mode}.
+@code{jit-lock-mode} defers the fontification of portions of buffer
+until you actually need to see them, and can also fontify while Emacs
+is idle.  This makes display of the visible portion of a buffer almost
+instantaneous.  For details about customizing @code{jit-lock-mode},
+type @kbd{C-h f jit-lock-mode @key{RET}}.
 
 @cindex Levels of syntax highlighting
 @cindex Decoration level, in @code{font-lock-mode}
-In versions of Emacs before 21, different levels of decoration are
-available, from slight to gaudy.  More decoration means you need to wait
-more time for a buffer to be fontified (or a faster machine).  To
-control how decorated your buffers should become, set the value of
-@code{font-lock-maximum-decoration} in your @file{.emacs} file, with a
-@code{nil} value indicating default (usually minimum) decoration, and a
-@code{t} value indicating the maximum decoration.  For the gaudiest
-possible look, then, include the line
+Different levels of decoration are available, from slight to gaudy.
+More decoration means you need to wait more time for a buffer to be
+fontified (or a faster machine).  To control how decorated your
+buffers should become, set the value of
+@code{font-lock-maximum-decoration} in your init file (@pxref{Setting
+up a customization file}), with a @code{nil} value indicating default
+(usually minimum) decoration, and a @code{t} value indicating the
+maximum decoration.  For the gaudiest possible look, then, include the
+line
 
 @lisp
 (setq font-lock-maximum-decoration t)
 @end lisp
 
 @noindent
-in your @file{.emacs} file.  You can also set this variable such that
+in your init file.  You can also set this variable such that
 different modes are highlighted in a different ways; for more
 information, see the documentation for
 @code{font-lock-maximum-decoration} with @kbd{C-h v} (or @kbd{M-x
@@ -2942,7 +2954,8 @@ customize-variable @key{RET} scroll-conservatively 
@key{RET}} and set it
 to a large value like, say, 10000.  For an explanation of what this
 means, @pxref{Auto Scrolling,,, emacs, The GNU Emacs Manual}.
 
-Alternatively, use the following Lisp form in your @file{.emacs}:
+Alternatively, use the following Lisp form in your init file
+(@pxref{Setting up a customization file}):
 
 @lisp
 (setq scroll-conservatively most-positive-fixnum)
@@ -2971,7 +2984,8 @@ default, a backslash (@samp{\}) will appear in the mode 
line.
 @cindex Single space following periods
 @cindex Periods, one space following
 
-Add the following line to your @file{.emacs} file:
+Add the following line to your init file (@pxref{Setting up a
+customization file}):
 
 @lisp
 (setq sentence-end-double-space nil)
@@ -2985,11 +2999,7 @@ Add the following line to your @file{.emacs} file:
 In many systems, @code{ls} is aliased to @samp{ls --color}, which
 prints using ANSI color escape sequences.  Emacs includes the
 @code{ansi-color} package, which lets Shell mode recognize these
-escape sequences.  In Emacs 23.2 and later, the package is enabled by
-default; in earlier versions you can enable it by typing @kbd{M-x
-ansi-color-for-comint-mode} in the Shell buffer, or by adding
-@code{(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)} to
-your init file.
+escape sequences.  It is enabled by default.
 
 @node Fullscreen mode on MS-Windows
 @section How can I start Emacs in fullscreen mode on MS-Windows?
@@ -2997,15 +3007,15 @@ your init file.
 @cindex Fullscreen mode
 
 Beginning with Emacs 24.4 either run Emacs with the @samp{--maximized}
-command-line option or put the following form in your @file{.emacs}
-file:
+command-line option or put the following form in your init file
+(@pxref{Setting up a customization file}):
 
 @lisp
 (add-hook 'emacs-startup-hook 'toggle-frame-maximized)
 @end lisp
 
 With older versions use the function @code{w32-send-sys-command}.  For
-example, you can put the following in your @file{.emacs} file:
+example, you can put the following in your init file:
 
 @lisp
 (add-hook 'emacs-startup-hook
@@ -3063,10 +3073,9 @@ Emacs has an inherent fixed limitation on the size of 
buffers.  This
 limit is stricter than the maximum size of objects supported by other
 programs on the same architecture.
 
-The maximum buffer size on 32-bit machines is 512 MBytes beginning
-with version 23.2.  If Emacs was built using the
-@code{--with-wide-int} flag, the maximum buffer size on 32-bit
-machines is 2 GB.
+The maximum buffer size on 32-bit machines is 512 MBytes.  If Emacs
+was built using the @code{--with-wide-int} flag, the maximum buffer
+size on 32-bit machines is 2 GB.
 
 Emacs compiled on a 64-bit machine can handle much larger buffers; up
 to @code{most-positive-fixnum} (2.3 exabytes).
@@ -3130,8 +3139,8 @@ with the following Lisp form,
 The above solutions try to prevent the shell from producing the
 @samp{^M} characters in the first place.  If this is not possible
 (e.g., if you use a Windows shell), you can get Emacs to remove these
-characters from the buffer by adding this to your @file{.emacs} init
-file:
+characters from the buffer by adding this to your init file
+(@pxref{Setting up a customization file}):
 
 @smalllisp
 (add-hook 'comint-output-filter-functions #'comint-strip-ctrl-m)
@@ -3153,8 +3162,8 @@ stty -icrnl -onlcr -echo susp ^Z
 @cindex @code{explicit-shell-file-name}
 This might happen because Emacs tries to look for the shell in a wrong
 place.  If you know where your shell executable is, set the variable
-@code{explicit-shell-file-name} in your @file{.emacs} file to point to
-its full file name.
+@code{explicit-shell-file-name} in your init file (@pxref{Setting up a
+customization file}) to point to its full file name.
 
 @cindex Antivirus programs, and Shell Mode
 Some people have trouble with Shell Mode on MS-Windows because of
@@ -3196,18 +3205,18 @@ if ("$term" == emacs) set term=dumb
 
 @node Errors with init files
 @section Why does Emacs say @samp{Error in init file}?
-@cindex Error in @file{.emacs}
+@cindex Error in @file{.emacs.d/init.el}
 @cindex Error in init file
 @cindex Init file, errors in
-@cindex @file{.emacs} file, errors in
-@cindex Debugging @file{.emacs} file
+@cindex @file{.emacs.d/init.el} file, errors in
+@cindex Debugging init file
 
-An error occurred while loading either your @file{.emacs} file or the
+An error occurred while loading either your init file or the
 system-wide file @file{site-lisp/default.el}.  Emacs pops the
 @file{*Messages*} buffer, and puts there some additional information
 about the error, to provide some hints for debugging.
 
-For information on how to debug your @file{.emacs} file, see
+For information on how to debug your init file, see
 @ref{Debugging a customization file}.
 
 It may be the case that you need to load some package first, or use a
@@ -3493,8 +3502,8 @@ and any Emacs Info files that might be in 
@file{/usr/local/share/info/}.
 @cindex Apple computers, Emacs for
 @cindex Macintosh, Emacs for
 @cindex macOS, Emacs for
-Beginning with version 22.1, Emacs supports macOS natively.
-See the file @file{nextstep/INSTALL} in the distribution.
+Emacs supports macOS natively.  See the file @file{nextstep/INSTALL}
+in the distribution.
 
 @cindex FAQ for Emacs on MS-Windows
 @cindex Emacs for MS-Windows
@@ -3503,8 +3512,8 @@ There is a separate FAQ for Emacs on MS-Windows,
 @pxref{Top,,,efaq-w32,FAQ for Emacs on MS Windows}.
 
 @cindex GNUstep, Emacs for
-Beginning with version 23.1, Emacs supports GNUstep natively.
-See the file @file{nextstep/INSTALL} in the distribution.
+Emacs supports GNUstep natively.  See the file @file{nextstep/INSTALL}
+in the distribution.
 
 @cindex MS-DOS, Emacs for
 @cindex DOS, Emacs for
@@ -3720,9 +3729,10 @@ information is available from
 @cindex Keys, binding to commands
 @cindex Commands, binding keys to
 
-Keys can be bound to commands either interactively or in your
-@file{.emacs} file.  To interactively bind keys for all modes, type
-@kbd{M-x global-set-key @key{RET} @var{key} @var{cmd} @key{RET}}.
+Keys can be bound to commands either interactively or in your init
+file (@pxref{Setting up a customization file}).  To interactively bind
+keys for all modes, type @kbd{M-x global-set-key @key{RET} @var{key}
+@var{cmd} @key{RET}}.
 
 To bind a key just in the current major mode, type @kbd{M-x
 local-set-key @key{RET} @var{key} @var{cmd} @key{RET}}.
@@ -3733,7 +3743,7 @@ To make the process of binding keys interactively easier, 
use the
 following ``trick'': First bind the key interactively, then immediately
 type @kbd{C-x @key{ESC} @key{ESC} C-a C-k C-g}.  Now, the command needed
 to bind the key is in the kill ring, and can be yanked into your
-@file{.emacs} file.  If the key binding is global, no changes to the
+init file.  If the key binding is global, no changes to the
 command are required.  For example,
 
 @lisp
@@ -3741,9 +3751,9 @@ command are required.  For example,
 @end lisp
 
 @noindent
-can be placed directly into the @file{.emacs} file.  If the key binding is
-local, the command is used in conjunction with the @samp{add-hook} function.
-For example, in TeX mode, a local binding might be
+can be placed directly into your init file.  If the key binding is
+local, the command is used in conjunction with the @samp{add-hook}
+function.  For example, in TeX mode, a local binding might be
 
 @lisp
 (add-hook 'tex-mode-hook
@@ -3801,14 +3811,15 @@ of these forms before attempting to bind the key 
sequence:
 @end lisp
 
 @node Terminal setup code works after Emacs has begun
-@section Why doesn't this [terminal or window-system setup] code work in my 
@file{.emacs} file, but it works just fine after Emacs starts up?
-@cindex Terminal setup code in @file{.emacs}
+@section Why doesn't this [terminal or window-system setup] code work in my 
init file, but it works just fine after Emacs starts up?
+@cindex Terminal setup code in init file
 
-During startup, Emacs initializes itself according to a given code/file
-order.  If some of the code executed in your @file{.emacs} file needs to
-be postponed until the initial terminal or window-system setup code has
-been executed but is not, then you will experience this problem (this
-code/file execution order is not enforced after startup).
+During startup, Emacs initializes itself according to a given
+code/file order.  If some of the code executed in your init file
+(@pxref{Setting up a customization file}) needs to be postponed until
+the initial terminal or window-system setup code has been executed but
+is not, then you will experience this problem (this code/file
+execution order is not enforced after startup).
 
 To postpone the execution of Emacs Lisp code until after terminal or
 window-system setup, treat the code as a @dfn{lambda list} and add it to
@@ -4229,8 +4240,7 @@ Emacs Manual}.  For more sophisticated methods,
 @cindex bidirectional scripts
 
 Emacs supports display and editing of bidirectional scripts, such as
-Arabic, Farsi, and Hebrew, since version 24.1.
-@xref{New in Emacs 24, bidirectional display}.
+Arabic, Farsi, and Hebrew.
 
 
 @node How to add fonts
@@ -4258,7 +4268,8 @@ arrange for these two commands to run whenever you log 
in, e.g., by
 adding them to your window-system startup file, such as
 @file{~/.xsessionrc} or @file{~/.gnomerc}.
 
-Now, add the following line to your @file{~/.emacs} init file:
+Now, add the following line to your init file (@pxref{Setting up a
+customization file}):
 
 @lisp
   (add-to-list 'bdf-directory-list "/usr/share/emacs/fonts/bdf")
@@ -4268,15 +4279,15 @@ Now, add the following line to your @file{~/.emacs} 
init file:
 (Again, modify the file name if you installed the fonts elsewhere.)
 
 Finally, if you wish to use the installed fonts with @code{ps-print},
-add the following line to your @file{~/.emacs}:
+add the following line to your init file:
 
 @lisp
   (setq ps-multibyte-buffer 'bdf-font-except-latin)
 @end lisp
 
-You can now use the Emacs font menu to select the @samp{bdf: 16-dot medium}
-fontset, or you can select it by setting the default font in your
-@file{~/.emacs}:
+You can now use the Emacs font menu to select the @samp{bdf: 16-dot
+medium} fontset, or you can select it by setting the default font in
+your init file:
 
 @lisp
   (set-frame-font "fontset-bdf")
@@ -4338,9 +4349,9 @@ yourself by putting
 @end lisp
 
 @noindent
-in your @file{.emacs} file.  You can automatically include an @samp{FCC}
-field by putting something like the following in your @file{.emacs}
-file:
+in your init file (@pxref{Setting up a customization file}).  You can
+automatically include an @samp{FCC} field by putting something like
+the following in your init file:
 
 @lisp
 (setq mail-archive-file-name (expand-file-name "~/outgoing"))
@@ -4372,8 +4383,7 @@ To expand them before this, use @kbd{M-x 
expand-mail-aliases}.
 Emacs normally only reads the @file{.mailrc} file once per session, when
 you start to compose your first mail message.  If you edit the file
 after this, you can use @kbd{M-x build-mail-aliases} to make Emacs
-reread it.  Prior to Emacs 24.1, this is not an interactive command, so
-you must instead type @kbd{M-: (build-mail-aliases) @key{RET}}.
+reread it.
 
 @item
 If you like, you can expand mail aliases as abbrevs, as soon as you
@@ -4471,7 +4481,7 @@ gnus
 @end example
 
 It is probably unwise to automatically start your mail or news reader
-from your @file{.emacs} file.  This would cause problems if you needed to run
+from your init file.  This would cause problems if you needed to run
 two copies of Emacs at the same time.  Also, this would make it difficult for
 you to start Emacs quickly when you needed to.
 
diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi
index 640712edf3..5f4e1a639b 100644
--- a/doc/misc/emacs-mime.texi
+++ b/doc/misc/emacs-mime.texi
@@ -403,9 +403,9 @@ This selects the function used to render @acronym{HTML}.  
The
 predefined renderers are selected by the symbols @code{shr},
 @code{gnus-w3m}, @code{w3m}@footnote{See
 @uref{http://emacs-w3m.namazu.org/} for more information about
-emacs-w3m}, @code{links}, @code{lynx}, @code{w3m-standalone} or
-@code{html2text}.  You can also specify a function, which will be
-called with a @acronym{MIME} handle as the argument.
+emacs-w3m}, @code{links}, @code{lynx}, or @code{w3m-standalone}.  You
+can also specify a function, which will be called with a
+@acronym{MIME} handle as the argument.
 
 @item mm-html-inhibit-images
 @vindex mm-html-inhibit-images
diff --git a/doc/misc/erc.texi b/doc/misc/erc.texi
index b9297738ea..3db83197f9 100644
--- a/doc/misc/erc.texi
+++ b/doc/misc/erc.texi
@@ -545,20 +545,27 @@ Non-interactively, it takes the following keyword 
arguments.
 @item @var{server}
 @item @var{port}
 @item @var{nick}
+@item @var{user}
 @item @var{password}
 @item @var{full-name}
+@item @var{id}
 @end itemize
 
-That is, if called with the following arguments, @var{server} and
-@var{full-name} will be set to those values, whereas
-@code{erc-compute-port} and @code{erc-compute-nick} will be invoked
-for the values of the other parameters.
+For example, calling the command like so
 
-@example
+@example lisp
 (erc :server "irc.libera.chat" :full-name "J. Random Hacker")
 @end example
+
+@noindent
+sets @var{server} and @var{full-name} directly while leaving the rest
+up to functions like @code{erc-compute-port}.  Note that some
+arguments can't be specified interactively.  @var{id}, in particular,
+is rarely needed (@pxref{Network Identifier}).
+
 @end defun
 
+@noindent
 To connect securely over an encrypted TLS connection, use @kbd{M-x
 erc-tls}.
 
@@ -570,21 +577,25 @@ Non-interactively, it takes the following keyword 
arguments.
 @item @var{server}
 @item @var{port}
 @item @var{nick}
+@item @var{user}
 @item @var{password}
 @item @var{full-name}
+@item @var{id}
 @item @var{client-certificate}
 @end itemize
 
-That is, if called with the following arguments, @var{server} and
-@var{full-name} will be set to those values, whereas
-@code{erc-compute-port} and @code{erc-compute-nick} will be invoked
-for the values of the other parameters, and @code{client-certificate}
-will be @code{nil}.
+That is, if called in the following manner
 
-@example
+@example lisp
 (erc-tls :server "irc.libera.chat" :full-name "J. Random Hacker")
 @end example
 
+@noindent
+the command will set @var{server} and @var{full-name} accordingly,
+while helpers, like @code{erc-compute-nick}, will determine other
+parameters, and some, like @code{client-certificate}, will just be
+@code{nil}.
+
 To use a certificate with @code{erc-tls}, specify the optional
 @var{client-certificate} keyword argument, whose value should be as
 described in the documentation of @code{open-network-stream}: if
@@ -719,29 +730,139 @@ ERC should automatically attempt to connect with another 
nickname.
 You can manually set another nickname with the /NICK command.
 @end defopt
 
+@subheading User
+@defun erc-compute-user &optional user
+Determine a suitable value to send as the first argument of the
+opening @samp{USER} IRC command by consulting the following sources:
+
+@itemize
+@item
+@var{user}, the argument passed to this function
+@item
+The option @code{erc-email-userid}, assuming @code{erc-anonymous-login}
+is non-@code{nil}
+@item
+The result of calling the function @code{user-login-name}
+@end itemize
+
+@end defun
+
+@defopt erc-email-userid
+A permanent username value to send for all connections.  It should be
+a string abiding by the rules of the network.
+@end defopt
+
 @subheading Password
 @cindex password
 
 @defopt erc-prompt-for-password
-If non-@code{nil} (the default), @kbd{M-x erc} prompts for a password.
+If non-@code{nil} (the default), @kbd{M-x erc} and @kbd{M-x erc-tls}
+prompt for a server password.  This only affects interactive
+invocations of @code{erc} and @code{erc-tls}.
 @end defopt
 
+@noindent
 If you prefer, you can set this option to @code{nil} and use the
 @code{auth-source} mechanism to store your password.  For instance, if
-you use @file{~/.authinfo} as your auth-source backend, then put
+the option @code{auth-sources} contains @file{~/.authinfo}, put
 something like the following in that file:
 
 @example
-machine irc.example.net login "#fsf" password sEcReT
+machine irc.example.net login mynick password sEcReT
 @end example
 
 @noindent
-ERC also consults @code{auth-source} to find any channel keys required
-for the channels that you wish to autojoin, as specified by the
-variable @code{erc-autojoin-channels-alist}.
+For server passwords, that is, passwords sent for the IRC @samp{PASS}
+command, the @samp{host} field (@w{@code{machine irc.example.net}} in
+the above example)
+corresponds to the @var{server} parameter used by @code{erc} and
+@code{erc-tls}.  Unfortunately, specifying a network, like
+@samp{Libera.Chat}, or a specific network server, like
+@samp{platinum.libera.chat}, won't normally work for looking up a server
+password because such information isn't available during opening
+introductions.  (Actually, ERC @emph{can} find entries with arbitrary
+@samp{host} values for any context, including server passwords, but
+that requires customizing the more advanced options below.)
+
+If ERC can't find a suitable server password, it will just skip the IRC
+@samp{PASS} command altogether, something users may want when using
+CertFP or engaging NickServ via ERC's ``services'' module.  If that is
+what you'd like to do, you can also customize the option
+@code{erc-auth-source-server-function} to @code{nil} to skip
+server-password lookup for all servers.  Note that some networks and
+IRCds may accept account-services authentication via server password
+using the nonstandard @samp{mynick:sEcReT} convention.
+
+As just mentioned, you can also use @code{auth-source} to authenticate
+to account services the traditional way, through a bot called
+@samp{NickServ}.  To tell ERC to do that, set
+@code{erc-use-auth-source-for-nickserv-password} to @code{t}.  For
+these and most other queries, entries featuring custom identifiers and
+networks are matched first, followed by network-specific servers and
+dialed endpoints (typically, the @var{server} argument passed to
+@code{erc}). The following netrc-style entries appear in order of
+precedence:
 
-For more details, @pxref{Top,,auth-source, auth, Emacs auth-source Library}.
+@example
+machine Libera/cellphone login MyNick password sEcReT
+machine Libera.Chat login MyNick password sEcReT
+machine zirconium.libera.chat login MyNick password sEcReT
+machine irc.libera.chat login MyNick password sEcReT
+@end example
 
+@noindent
+Remember that field labels vary per backend, so @samp{machine} (in
+netrc's case) maps to auth-source's generalized notion of a host,
+hence the @samp{:host} keyword property.  Also, be sure to mind the
+syntax of your chosen backend medium.  For example, always quote
+channel names in a netrc file.
+
+If this all seems overly nuanced or just plain doesn't appeal to you,
+see options @code{erc-auth-source-services-function} and friends, described
+below.  These let you query auth-source your way.  Most users can
+simply ignore the passed-in arguments and get by with something like
+the following:
+
+@lisp
+(defun my-fancy-auth-source-func (&rest _)
+  (let* ((host (read-string "host: " nil nil "default"))
+         (pass (auth-source-pick-first-password :host host)))
+    (if (and pass (string-search "libera" host))
+        (concat "MyNick:" pass)
+      pass)))
+@end lisp
+
+Lastly, ERC also consults @code{auth-source} to find ``keys'' that may
+be required by certain channels you join.  When modifying a
+traditional @code{auth-source} entry for this purpose, put the channel
+name in the @samp{user} field (for example, @samp{login "#fsf"}, in
+netrc's case).  The actual key goes in the @samp{password} (or
+@samp{secret}) field.
+
+@noindent
+For details, @pxref{Top,,auth-source, auth, Emacs auth-source Library}.
+
+@defopt erc-auth-source-server-function
+@end defopt
+@defopt erc-auth-source-services-function
+@end defopt
+@defopt erc-auth-source-join-function
+
+ERC calls these functions with keyword arguments recognized by
+@code{auth-source-search}, namely, those deemed most relevant to the
+current context, if any.  For example, with NickServ queries,
+@code{:user} is the ``desired'' nickname rather than the current one.
+Generalized names, like @code{:user} and @code{:host}, are always used
+over back-end specific ones, like @code{:login} or @code{:machine}.
+ERC expects a string to use as the secret or nil, if the search fails.
+
+@findex erc-auth-source-search
+The default value for all three options is the function
+@code{erc-auth-source-search}.  It tries to merge relevant contextual
+parameters with those provided or discovered from the logical connection
+or the underlying transport.  Some auth-source back ends may not be
+compatible; netrc, plstore, json, and secrets are currently supported.
+@end defopt
 
 @subheading Full name
 
@@ -752,10 +873,14 @@ This tries a number of increasingly more default methods 
until a
 non-@code{nil} value is found.
 
 @itemize @bullet
-@item @var{full-name} (the argument passed to this function)
-@item The @code{erc-user-full-name} option
-@item The value of the IRCNAME environment variable
-@item The result from the @code{user-full-name} function
+@item
+@var{full-name} (the argument passed to this function)
+@item
+The @code{erc-user-full-name} option
+@item
+The value of the IRCNAME environment variable
+@item
+The result from the @code{user-full-name} function
 @end itemize
 
 @end defun
@@ -766,6 +891,31 @@ User full name.
 This can be either a string or a function to call.
 @end defopt
 
+
+@subheading ID
+@anchor{Network Identifier}
+
+ERC uses an abstract designation, called @dfn{network context
+identifier}, for referring to a connection internally.  While normally
+derived from a combination of logical and physical connection
+parameters, an ID can also be explicitly provided via an entry-point
+command (like @code{erc-tls}).  Use this in rare situations where ERC
+would otherwise have trouble discerning between connections.
+
+One such situation might arise when using multiple connections to the
+same network with the same nick but different (nonstandard) @samp{device}
+identifiers, which some bouncers may support.  Another might be when
+mimicking the experience offered by popular standalone clients, which
+normally offer ``named'' persistent configurations with server buffers
+reflecting those names.  Yet another use case might involve
+third-party code needing to identify a connection unequivocally, but in
+a human-friendly way suitable for UI components.
+
+When providing an ID as an entry-point argument, strings and symbols
+make the most sense, but any reasonably printable object is
+acceptable.
+
+
 @node Sample Configuration
 @section Sample Configuration
 @cindex configuration, sample
@@ -827,12 +977,6 @@ stuff, to the current ERC buffer."
 (setq erc-autojoin-channels-alist
       '(("Libera.Chat" "#emacs" "#erc")))
 
-;; Rename server buffers to reflect the current network name instead
-;; of SERVER:PORT (e.g., "Libera.Chat" instead of
-;; "irc.libera.chat:6667").  This is useful when using a bouncer like
-;; ZNC where you have multiple connections to the same server.
-(setq erc-rename-buffers t)
-
 ;; Interpret mIRC-style color commands in IRC chats
 (setq erc-interpret-mirc-color t)
 
@@ -891,15 +1035,6 @@ lurkers.  The function @code{erc-lurker-p} determines 
whether a given
 nickname is considered a lurker.
 @end defopt
 
-@defopt erc-rename-buffers
-If non, @code{nil}, this will rename server buffers to reflect the
-current network name instead of IP:PORT
-
-@example
-(setq erc-rename-buffers t)
-@end example
-@end defopt
-
 @node Getting Help and Reporting Bugs
 @chapter Getting Help and Reporting Bugs
 @cindex help, getting
@@ -924,7 +1059,7 @@ contributors are frequently around and willing to answer 
your
 questions.
 
 @item
-To report a bug in ERC, use @kbd{M-x report-emacs-bug}.
+To report a bug in ERC, use @kbd{M-x erc-bug}.
 
 @end itemize
 
diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi
index 91288db45a..1b7f38daad 100644
--- a/doc/misc/ert.texi
+++ b/doc/misc/ert.texi
@@ -321,7 +321,7 @@ Show the list of @code{should} forms executed in the test
 @kindex m@r{, in ert results buffer}
 @findex ert-results-pop-to-messages-for-test-at-point
 Show any messages that were generated (with the Lisp function
-@code{message}) in in a test or any of the code that it invoked
+@code{message}) in a test or any of the code that it invoked
 (@code{ert-results-pop-to-messages-for-test-at-point}).
 
 @item L
@@ -822,7 +822,7 @@ that's pretty difficult to read and write, especially when 
the text in
 question is multi-line.
 
 So ert provides a function called @code{ert-test-erts-file} that takes
-two parameters: The name of a specially-formatted @dfn{erts} file, and
+two parameters: the name of a specially-formatted @dfn{erts} file, and
 (optionally) a function that performs the transform.
 
 @findex erts-mode
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index 85e5a4933f..13f13163dd 100644
--- a/doc/misc/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -201,7 +201,7 @@ history and invoking commands in a script file.
 * Aliases::
 * History::
 * Completion::
-* for loop::
+* Control Flow::
 * Scripts::
 @end menu
 
@@ -219,12 +219,18 @@ same name; if there is no match, it then tries to execute 
it as an
 external command.
 
 The semicolon (@code{;}) can be used to separate multiple command
-invocations on a single line.  A command invocation followed by an
-ampersand (@code{&}) will be run in the background.  Eshell has no job
-control, so you can not suspend or background the current process, or
-bring a background process into the foreground.  That said, background
-processes invoked from Eshell can be controlled the same way as any
-other background process in Emacs.
+invocations on a single line.  You can also separate commands with
+@code{&&} or @code{||}. When using @code{&&}, Eshell will execute the
+second command only if the first succeeds (i.e.@: has an exit
+status of 0); with @code{||}, Eshell will execute the second command
+only if the first fails.
+
+A command invocation followed by an ampersand (@code{&}) will be run
+in the background.  Eshell has no job control, so you can not suspend
+or background the current process, or bring a background process into
+the foreground.  That said, background processes invoked from Eshell
+can be controlled the same way as any other background process in
+Emacs.
 
 @node Arguments
 @section Arguments
@@ -354,11 +360,11 @@ 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
+The command @kbd{cd =} shows the directory ring.  Each line is
 numbered.
 
 @item
-With @kbd{cd =foo}, Eshell searches the directory stack for a directory
+With @kbd{cd =foo}, Eshell searches the directory ring for a directory
 matching the regular expression @samp{foo}, and changes to that
 directory.
 
@@ -845,46 +851,77 @@ For example, you could handle a subset of the options for 
the
 
 @end defmac
 
+@node Variables
+@section Variables
+Since Eshell is just an Emacs @acronym{REPL}@footnote{
+Short for ``Read-Eval-Print Loop''.
+}
+, it does not have its own scope, and simply stores variables the same
+you would in an Elisp program.  Eshell provides a command version of
+@code{setq} for convenience.
+
 @subsection Built-in variables
 Eshell knows a few built-in variables:
 
 @table @code
 
-@item $+
+@vindex $PWD
 @vindex $+
+@item $PWD
+@itemx $+
 This variable always contains the current working directory.
 
-@item $-
+@vindex $OLDPWD
 @vindex $-
+@item $OLDPWD
+@itemx $-
 This variable always contains the previous working directory (the
 current working directory from before the last @code{cd} command).
+When using @code{$-}, you can also access older directories in the
+directory ring via subscripting, e.g.@: @samp{$-[1]} refers to the
+working directory @emph{before} the previous one.
 
-@item $_
 @vindex $_
-It refers to the last argument of the last command.
+@item $_
+This refers to the last argument of the last command.  With a
+subscript, you can access any argument of the last command.  For
+example, @samp{$_[1]} refers to the second argument of the last
+command (excluding the command name itself).
 
-@item $$
 @vindex $$
-This is the result of the last command.  In case of an external
-command, it is @code{t} or @code{nil}.
+@item $$
+This is the result of the last command.  For external commands, it is
+@code{t} if the exit code was 0 or @code{nil} otherwise.
 
-@item $?
+@vindex eshell-lisp-form-nil-is-failure
 @vindex $?
-This variable contains the exit code of the last command (0 or 1 for
-Lisp functions, based on successful completion).
+@item $?
+This variable contains the exit code of the last command.  If the last
+command was a Lisp function, it is 0 for successful completion or 1
+otherwise.  If @code{eshell-lisp-form-nil-is-failure} is
+non-@code{nil}, then a command with a Lisp form, like
+@samp{(@var{command} @var{args}@dots{})}, that returns @code{nil} will
+set this variable to 2.
+
+@vindex $COLUMNS
+@vindex $LINES
+@item $COLUMNS
+@itemx $LINES
+These variables tell the number of columns and lines, respectively,
+that are currently visible in the Eshell window.  They are both
+copied to the environment, so external commands invoked from
+Eshell can consult them to do the right thing.
+
+@item $INSIDE_EMACS
+This variable indicates to external commands that they are being
+invoked from within Emacs so they can adjust their behavior if
+necessary.  Its value is @code{@var{emacs-version},eshell}.
 
 @end table
 
 @xref{Aliases}, for the built-in variables @samp{$*}, @samp{$1},
 @samp{$2}, @dots{}, in alias definitions.
 
-@node Variables
-@section Variables
-Since Eshell is just an Emacs REPL@footnote{Read-Eval-Print Loop}, it
-does not have its own scope, and simply stores variables the same you
-would in an Elisp program.  Eshell provides a command version of
-@code{setq} for convenience.
-
 @node Aliases
 @section Aliases
 
@@ -981,19 +1018,46 @@ command for which this function provides completions; 
you can also name
 the function @code{pcomplete/MAJOR-MODE/COMMAND} to define completions
 for a specific major mode.
 
-@node for loop
-@section @code{for} loop
+@node Control Flow
+@section Control Flow
 Because Eshell commands can not (easily) be combined with lisp forms,
-Eshell provides a command-oriented @command{for}-loop for convenience.
-The syntax is as follows:
+Eshell provides command-oriented control flow statements for
+convenience.
 
-@example
-@code{for VAR in TOKENS @{ command invocation(s) @}}
-@end example
+Most of Eshell's control flow statements accept a @var{conditional}.
+This can take a few different forms.  If @var{conditional} is a dollar
+expansion, the condition is satisfied if the result is a
+non-@code{nil} value.  If @var{conditional} is a @samp{@{
+@var{subcommand} @}} or @samp{(@var{lisp form})}, the condition is
+satisfied if the command's exit status is 0.
+
+@table @code
+
+@item if @var{conditional} @{ @var{true-commands} @}
+@itemx if @var{conditional} @{ @var{true-commands} @} @{ @var{false-commands} 
@}
+Evaluate @var{true-commands} if @var{conditional} is satisfied;
+otherwise, evaluate @var{false-commands}.
+
+@item unless @var{conditional} @{ @var{false-commands} @}
+@itemx unless @var{conditional} @{ @var{false-commands} @} @{ 
@var{true-commands} @}
+Evaluate @var{false-commands} if @var{conditional} is not satisfied;
+otherwise, evaluate @var{true-commands}.
+
+@item while @var{conditional} @{ @var{commands} @}
+Repeatedly evaluate @var{commands} so long as @var{conditional} is
+satisfied.
 
-where @samp{TOKENS} is a space-separated sequence of values of
-@var{VAR} for each iteration.  This can even be the output of a
-command if @samp{TOKENS} is replaced with @samp{@{ command invocation @}}.
+@item until @var{conditional} @{ @var{commands} @}
+Repeatedly evaluate @var{commands} until @var{conditional} is
+satisfied.
+
+@item for @var{var} in @var{list}@dots{} @{ @var{commands} @}
+Iterate over each element of of @var{list}, storing the element in
+@var{var} and evaluating @var{commands}.  If @var{list} is not a list,
+treat it as a list of one element.  If you specify multiple
+@var{lists}, this will iterate over each of them in turn.
+
+@end table
 
 @node Scripts
 @section Scripts
@@ -1045,7 +1109,7 @@ back to a number as above).  For example, @samp{$list("a" 
"b")c}
 returns @samp{("a" "bc")}.
 
 @item anything else
-Concatenate the string represenation of each value.
+Concatenate the string representation of each value.
 
 @end table
 
@@ -1570,7 +1634,7 @@ integration: using the remote shell's pipelining avoids 
copying the
 data which will flow through the pipeline to local Emacs buffers and
 then right back again.
 
-Eshell recognises a special syntax to make it easier to convert
+Eshell recognizes a special syntax to make it easier to convert
 pipelines so as to bypass Eshell's pipelining.  Prefixing at least one
 @code{|}, @code{<} or @code{>} with an asterisk marks a command as
 intended for the operating system shell.  To make it harder to invoke
@@ -1588,7 +1652,7 @@ nor the decoded data, into Emacs buffers, as would 
normally happen.
 The command is interpreted as extending up to the next @code{|}
 character which is not preceded by an unescaped asterisk following
 whitespace, or the end of the input if there is no such character.
-Thus, all @code{<} and @code{>} redirections occuring before the next
+Thus, all @code{<} and @code{>} redirections occurring before the next
 asterisk-unprefixed @code{|} are implicitly prefixed with (whitespace
 and) asterisks.  An exception is that Eshell-specific redirects right
 at the end of the command are excluded.  This allows input like this:
@@ -1784,11 +1848,6 @@ scrolls back.
 
 @item Menu support was removed, but never put back
 
-@item Using C-p and C-n with rebind gets into a locked state
-
-This happened a few times in Emacs 21, but has been irreproducible
-since.
-
 @item If an interactive process is currently running, @kbd{M-!} doesn't work
 
 @item Use a timer instead of @code{sleep-for} when killing child processes
@@ -1902,11 +1961,6 @@ glob match.
 
 At the moment, this is not supported.
 
-@item Error if a glob doesn't expand due to a predicate
-
-An error should be generated only if @code{eshell-error-if-no-glob} is
-non-@code{nil}.
-
 @item @samp{(+ @key{RET} @key{SPC} @key{TAB}} does not cause 
@code{indent-according-to-mode} to occur
 
 @item Create @code{eshell-auto-accumulate-list}
@@ -2082,11 +2136,10 @@ it).
 
 @item Make the shell spawning commands be visual
 
-That is, make (@command{su}, @command{bash}, @command{telnet},
-@command{rlogin}, @command{rsh}, etc.)@: be part of
-@code{eshell-visual-commands}.  The only exception is if the shell is
-being used to invoke a single command.  Then, the behavior should be
-based on what that command is.
+That is, make (@command{su}, @command{bash}, @command{ssh}, etc.)@: be
+part of @code{eshell-visual-commands}.  The only exception is if the
+shell is being used to invoke a single command.  Then, the behavior
+should be based on what that command is.
 
 @item Create a smart viewing command named @command{open}
 
diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi
index 7fd5add67e..0037ba78d3 100644
--- a/doc/misc/eudc.texi
+++ b/doc/misc/eudc.texi
@@ -292,7 +292,7 @@ LDAP:
 (setopt eudc-server-hotlist
         '(("" . bbdb)
           ("ldaps://ldap.gnu.org" . ldap)))
-(setopt 'ldap-host-parameters-alist
+(setopt ldap-host-parameters-alist
         '(("ldaps://ldap.gnu.org"
                   base "ou=people,dc=gnu,dc=org"
                   binddn "gnu\\emacsuser"
@@ -346,10 +346,10 @@ configure EUDC for LDAP:
 @lisp
 (with-eval-after-load "message"
   (define-key message-mode-map (kbd "TAB") 'eudc-expand-try-all))
-(setopt 'eudc-server-hotlist
+(setopt eudc-server-hotlist
         '(("" . bbdb)
           ("ldaps://ldap.gnu.org" . ldap)))
-(setopt 'ldap-host-parameters-alist
+(setopt ldap-host-parameters-alist
         '(("ldaps://ldap.gnu.org"
                   auth-source t)))
 @end lisp
@@ -376,9 +376,9 @@ and the @file{.emacs} expressions become:
 @lisp
 (with-eval-after-load "message"
   (define-key message-mode-map (kbd "TAB") 'eudc-expand-try-all))
-(setopt 'eudc-server-hotlist
+(setopt eudc-server-hotlist
         '(("" . bbdb) ("" . ldap)))
-(setopt 'ldap-host-parameters-alist
+(setopt ldap-host-parameters-alist
         '(("" auth-source t)))
 @end lisp
 
@@ -423,11 +423,12 @@ all macOS versions since 10.0 (which was released 2001).
 configurations.
 
 @file{eudcb-mab.el} reverse engineers the format of the database file
-used by the macOS Contacts app, and accesses its contents directly.
-While this may promise some performance advantages, it comes at the
-cost of using an undocumented interface.  Hence, users of
-@file{eudcb-mab.el} are recommended to double check the compatibility
-of @file{eudcb-mab.el} before upgrading to a new version of macOS.
+using the external command-line utility named contacts, which needs to
+be installed separately.  While this may promise some performance
+advantages, it comes at the cost of using an undocumented interface.
+Hence, users of @file{eudcb-mab.el} are recommended to double check
+the compatibility of @file{eudcb-mab.el} and the required, external
+command-line utility before upgrading to a new version of macOS.
 @file{eudcb-mab.el} is retained for backwards compatibility with
 existing configurations, and may be removed in a future release.
 
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index f23180c1d4..1060cd805a 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -69,7 +69,7 @@ Indices
 @chapter Overview
 @dfn{EWW}, the Emacs Web Wowser, is a web browser for GNU Emacs.  It
 can load, parse, and display various web pages using @dfn{shr.el}.
-However a GNU Emacs with @code{libxml2} support is required.
+However, a GNU Emacs with @code{libxml2} support is required.
 
 @node Basics
 @chapter Basic Usage
@@ -213,7 +213,7 @@ switch EWW buffers through a minibuffer prompt, press 
@kbd{s}
 @cindex External Browser
   Although EWW and shr.el do their best to render webpages in GNU
 Emacs some websites use features which can not be properly represented
-or are not implemented (E.g., JavaScript).  If you have trouble
+or are not implemented (e.g., JavaScript).  If you have trouble
 viewing a website with EWW then hit @kbd{&}
 (@code{eww-browse-with-external-browser}) inside the EWW buffer to
 open the website in the external browser specified by
diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi
index 630aaa282f..6d09fd4ec9 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--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1995--2022 Free Software Foundation, Inc.
 @c
 @c @setfilename gnus-faq.info
 @c @settitle Frequently Asked Questions
@@ -13,7 +13,6 @@
 @section Frequently Asked Questions
 
 @menu
-* FAQ - Changes::
 * FAQ - Introduction::                       About Gnus and this FAQ.
 * FAQ 1 - Installation FAQ::                 Installation of Gnus.
 * FAQ 2 - Startup / Group buffer::           Start up questions and the
@@ -41,21 +40,6 @@ This is the new Gnus Frequently Asked Questions list.
 Please submit features and suggestions to the
 @email{ding@@gnus.org, ding list}.
 
-@node FAQ - Changes
-@subsection Changes
-
-
-
-@itemize @bullet
-
-@item
-2008-06-15: Adjust for message-fill-column.  Add x-face-file.
-Clarify difference between ding and gnu.emacs.gnus.  Remove
-reference to discontinued service.
-
-@item
-2006-04-15: Added tip on how to delete sent buffer on exit.
-@end itemize
 
 @node FAQ - Introduction
 @subsection Introduction
@@ -63,11 +47,11 @@ reference to discontinued service.
 This is the Gnus Frequently Asked Questions list.
 
 Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented
-as a part of Emacs. It's been around in some form for almost a decade
-now, and has been distributed as a standard part of Emacs for much of
-that time. Gnus 5 is the latest (and greatest) incarnation. The
+as a part of Emacs.  It's been around in some form since the early
+1990s, and has been distributed as a standard part of Emacs for much
+of that time. Gnus 5 is the latest (and greatest) incarnation.  The
 original version was called GNUS, and was written by Masanobu UMEDA@.
-When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and
+When autumn crept up in 1994, Lars Magne Ingebrigtsen grew bored and
 decided to rewrite Gnus.
 
 Its biggest strength is the fact that it is extremely
@@ -84,11 +68,6 @@ would like to thank Steve Baur and Per Abrahamsen for doing 
a wonderful
 job with this FAQ before him. We would like to do the same: thanks,
 Justin!
 
-This version is much nicer than the unofficial hypertext
-versions that are archived at Utrecht, Oxford, Smart Pages, Ohio
-State, and other FAQ archives. See the resources question below
-if you want information on obtaining it in another format.
-
 The information contained here was compiled with the assistance
 of the Gnus development mailing list, and any errors or
 misprints are the Gnus team's fault, sorry.
@@ -98,11 +77,9 @@ misprints are the Gnus team's fault, sorry.
 
 @menu
 * FAQ 1-1::    What is the latest version of Gnus?
-* FAQ 1-2::    What's new in 5.10?
-* FAQ 1-3::    Where and how to get Gnus?
-* FAQ 1-4::    I sometimes read references to No Gnus and Oort Gnus,
+* FAQ 1-2::    Where and how to get Gnus?
+* FAQ 1-3::    I sometimes read references to No Gnus and Oort Gnus,
                what are those?
-* FAQ 1-5::    Which version of Emacs do I need?
 @end menu
 
 @node FAQ 1-1
@@ -112,80 +89,28 @@ What is the latest version of Gnus?
 
 @subsubheading Answer
 
-Jingle please: Gnus 5.10 is released, get it while it's
-hot! As well as the step in version number is rather
-small, Gnus 5.10 has tons of new features which you
-shouldn't miss. The current release (5.13) should be at
-least as stable as the latest release of the 5.8 series.
+The latest version of Gnus is bundled with Emacs.
 
 @node FAQ 1-2
 @subsubheading Question 1.2
 
-What's new in 5.10?
-
-@subsubheading Answer
-
-First of all, you should have a look into the file
-GNUS-NEWS in the toplevel directory of the Gnus tarball,
-there the most important changes are listed. Here's a
-short list of the changes I find especially
-important/interesting:
-
-@itemize @bullet
-
-@item
-Major rewrite of the Gnus agent, Gnus agent is now
-active by default.
-
-@item
-Many new article washing functions for dealing with
-ugly formatted articles.
-
-@item
-Anti Spam features.
-
-@item
-Message-utils now included in Gnus.
-
-@item
-New format specifiers for summary lines, e.g., %B for
-a complex trn-style thread tree.
-@end itemize
-
-@node FAQ 1-3
-@subsubheading Question 1.3
-
 Where and how to get Gnus?
 
 @subsubheading Answer
 
 Gnus is bundled with Emacs.
 
-@node FAQ 1-4
-@subsubheading Question 1.4
+@node FAQ 1-3
+@subsubheading Question 1.3
 
 I sometimes read references to No Gnus and Oort Gnus,
 what are those?
 
 @subsubheading Answer
 
-Oort Gnus was the name of the development version of
-Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is
-the name of the current development version which will
-once become Gnus 5.12 or Gnus 6. (If you're wondering why
-not 5.11, the odd version numbers are normally used for
-the Gnus versions bundled with Emacs)
-
-@node FAQ 1-5
-@subsubheading Question 1.5
-
-Which version of Emacs do I need?
-
-@subsubheading Answer
-
-Gnus 5.13 requires an Emacs version that is greater than or equal
-to Emacs 23.1, although there are some features that
-only work on Emacs 24.
+Oort Gnus was the name of the development version of Gnus, which
+became Gnus 5.10 in autumn 2003.  No Gnus was the name of the
+development version that became Gnus 5.12.
 
 @node FAQ 2 - Startup / Group buffer
 @subsection Startup / Group buffer
@@ -718,9 +643,8 @@ in @file{~/.gnus.el} to load enough old articles to prevent 
teared threads, repl
 all articles (Warning: Both settings enlarge the amount of data which is
 fetched when you enter a group and slow down the process of entering a group).
 
-If you already use Gnus 5.10, you can say
-@samp{/o N}
-In summary buffer to load the last N messages, this feature is not available 
in 5.8.8
+You can say @samp{/o N} in the summary buffer to load the last N
+messages.
 
 If you don't want all old messages, but the parent of the message you're just 
reading,
 you can say @samp{^}, if you want to retrieve the whole thread
@@ -820,11 +744,10 @@ Can I use some other browser than w3m to render my 
HTML-mails?
 
 @subsubheading Answer
 
-Only if you use Gnus 5.10 or younger. In this case you've got the
-choice between shr, w3m, links, lynx and html2text, which
-one is used can be specified in the variable
-mm-text-html-renderer, so if you want links to render your
-mail say
+You've got the choice between @samp{shr}, @samp{w3m}, @samp{links},
+and @samp{lynx}.  Which one is used is specified in the variable
+@code{mm-text-html-renderer}, so if you want links to render your
+mail, say:
 
 @example
 (setq mm-text-html-renderer 'links)
@@ -847,8 +770,7 @@ long lines'' (@samp{W w}), ``Decode ROT13''
 the dumb quoting used by many users of Microsoft products
 (@samp{W Y f} gives you full deuglify.
 See @samp{W Y C-h} or have a look at the menus for
-other deuglifications).  Outlook deuglify is only available since
-Gnus 5.10.
+other deuglifications).
 
 @node FAQ 4-9
 @subsubheading Question 4.9
@@ -1038,7 +960,7 @@ you'll find useful things like positioning the cursor and
 tabulators which allow you a summary in table form, but
 sadly hard tabulators are broken in 5.8.8.
 
-Since 5.10, Gnus offers you some very nice new specifiers,
+Gnus offers you some very nice new specifiers,
 e.g., %B which draws a thread-tree and %&user-date which
 gives you a date where the details are dependent of the
 articles age. Here's an example which uses both:
@@ -1245,7 +1167,7 @@ How to set stuff like From, Organization, Reply-To, 
signature...?
 @subsubheading Answer
 
 There are other ways, but you should use posting styles
-for this. (See below why).
+for this.  (See below why.)
 This example should make the syntax clear:
 
 @example
@@ -1329,19 +1251,14 @@ Is there a spell-checker? Perhaps even on-the-fly 
spell-checking?
 
 @subsubheading Answer
 
-You can use ispell.el to spell-check stuff in Emacs. So the
-first thing to do is to make sure that you've got either
-@uref{https://www.cs.hmc.edu/~geoff/ispell.html, ispell}
-or @uref{http://aspell.net, aspell}
-installed and in your Path. Then you need
-ispell.el
-and for on-the-fly spell-checking
-@uref{https://www-sop.inria.fr/members/Manuel.Serrano/flyspell/flyspell.html, 
flyspell.el}.
-Ispell.el is shipped with Emacs,
-flyspell.el is shipped with Emacs, so there should be no need to install them
-manually.
+You can use ispell.el to spell-check stuff in Emacs, and flyspell.el
+for on-the-fly spell-checking.  So the first thing to do is to make
+sure that you've got either
+@uref{https://hunspell.github.io/, hunspell},
+@uref{https://www.cs.hmc.edu/~geoff/ispell.html, ispell} or
+@uref{http://aspell.net, aspell} installed and in your Path.
 
-Ispell.el assumes you use ispell, if you choose aspell say
+Ispell.el assumes you use ispell.  If you use aspell say
 
 @example
 (setq ispell-program-name "aspell")
@@ -1494,14 +1411,14 @@ Now you only have to tell Gnus to include the X-face in 
your postings by saying
 @end example
 @noindent
 
-in @file{~/.gnus.el}.  If you use Gnus 5.10, you can simply add an entry
+in @file{~/.gnus.el}.  You can add an entry
 
 @example
 (x-face-file "~/.xface")
 @end example
 @noindent
 
-to gnus-posting-styles.
+to @code{gnus-posting-styles}.
 
 @node FAQ 5-9
 @subsubheading Question 5.9
@@ -1519,21 +1436,6 @@ Put this in @file{~/.gnus.el}:
 @end example
 @noindent
 
-if you already use Gnus 5.10, if you still use 5.8.8 or
-5.9 try this instead:
-
-@example
-(with-eval-after-load "gnus-msg"
-  (unless (boundp 'gnus-confirm-mail-reply-to-news)
-    (defadvice gnus-summary-reply (around reply-in-news activate)
-      "Request confirmation when replying to news."
-      (interactive)
-      (when (or (not (gnus-news-group-p gnus-newsgroup-name))
-                (y-or-n-p "Really reply by mail to article author?"))
-        ad-do-it))))
-@end example
-@noindent
-
 @node FAQ 5-10
 @subsubheading Question 5.10
 
@@ -1541,14 +1443,7 @@ How to tell Gnus not to generate a sender header?
 
 @subsubheading Answer
 
-Since 5.10 Gnus doesn't generate a sender header by
-default. For older Gnus' try this in @file{~/.gnus.el}:
-
-@example
-(with-eval-after-load "message"
-  (add-to-list 'message-syntax-checks '(sender . disabled)))
-@end example
-@noindent
+Gnus doesn't generate a sender header by default.
 
 @node FAQ 5-11
 @subsubheading Question 5.11
@@ -1729,7 +1624,7 @@ more then one article."
 You can now say @samp{M-x
 my-archive-article} in summary buffer to
 archive the article under the cursor in a nnml
-group. (Change nnml to your preferred back end)
+group. (Change nnml to your preferred back end.)
 
 Of course you can also make sure the cache is enabled by saying
 
@@ -1756,7 +1651,7 @@ if you found the posting there, tell Google to display
 the raw message, look for the message-id, and say
 @samp{M-^ the@@message.id @key{RET}} in a
 summary buffer.
-Since Gnus 5.10 there's also a Gnus interface for
+There's a Gnus interface for
 groups.google.com which you can call with
 @samp{G W}) in group buffer.
 
@@ -1770,25 +1665,6 @@ instead. Further on there are the
 gnus-summary-limit-to-foo functions, which can help you,
 too.
 
-Of course you can also use grep to search through your
-local mail, but this is both slow for big archives and
-inconvenient since you are not displaying the found mail
-in Gnus.  Here nnir comes into action.  Nnir is a front end
-to search engines like swish-e or swish++ and
-others.  You index your mail with one of those search
-engines and with the help of nnir you can search through
-the indexed mail and generate a temporary group with all
-messages which met your search criteria.  If this sounds
-cool to you, get nnir.el from
-@c FIXME Isn't this file in Gnus?
-@ignore
-@c Dead link 2013/7.
-@uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/}
-or
-@end ignore
-@uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}.
-Instructions on how to use it are at the top of the file.
-
 @node FAQ 6-4
 @subsubheading Question 6.4
 
@@ -1937,16 +1813,9 @@ So what was this thing about the Agent?
 The Gnus agent is part of Gnus, it allows you to fetch
 mail and news and store them on disk for reading them
 later when you're offline. It kind of mimics offline
-newsreaders like Forte Agent. If you want to use
-the Agent place the following in @file{~/.gnus.el} if you are
-still using 5.8.8 or 5.9 (it's the default since 5.10):
-
-@example
-(setq gnus-agent t)
-@end example
-@noindent
+newsreaders like Forte Agent.  It is enabled by default.
 
-Now you've got to select the servers whose groups can be
+You've got to select the servers whose groups can be
 stored locally.  To do this, open the server buffer
 (that is press @samp{^} while in the
 group buffer).  Now select a server by moving point to
@@ -2051,10 +1920,9 @@ I can't find anything in the Gnus manual about X
 @subsubheading Answer
 
 There's not only the Gnus manual but also the manuals for message,
-emacs-mime, sieve, EasyPG Assistant, and pgg. Those packages are
-distributed with Gnus and used by Gnus but aren't really part of core
-Gnus, so they are documented in different info files, you should have
-a look in those manuals, too.
+emacs-mime, sieve, and EasyPG Assistant.  Those packages are
+distributed with Emacs and used by Gnus.  They are documented in
+separate info files, so you should have a look in those manuals, too.
 
 @node FAQ 8-3
 @subsubheading Question 8.3
@@ -2161,42 +2029,19 @@ How to speed up the process of entering a group?
 
 @subsubheading Answer
 
-A speed killer is setting the variable
-gnus-fetch-old-headers to anything different from @code{nil},
-so don't do this if speed is an issue. To speed up
-building of summary say
-
-@example
-(gnus-compile)
-@end example
-@noindent
+A speed killer is setting the variable @code{gnus-fetch-old-headers}
+to anything different from @code{nil}, so don't do this if speed is an
+issue.
 
-at the bottom of your @file{~/.gnus.el}, this will make gnus
-byte-compile things like
-gnus-summary-line-format.
-then you could increase the value of gc-cons-threshold
-by saying something like
+You could increase the value of @code{gc-cons-threshold} by saying
+something like:
 
 @example
 (setq gc-cons-threshold 3500000)
 @end example
 @noindent
 
-in ~/.emacs. If you don't care about width of CJK
-characters or use Gnus 5.10 or younger together with a
-recent GNU Emacs, you should say
-
-@example
-(setq gnus-use-correct-string-widths nil)
-@end example
-@noindent
-
-in @file{~/.gnus.el} (thanks to Jesper harder for the last
-two suggestions). Finally if you are still using 5.8.8
-or 5.9 and experience speed problems with summary
-buffer generation, you definitely should update to
-5.10 since there quite some work on improving it has
-been done.
+in ~/.emacs.
 
 @node FAQ 9-3
 @subsubheading Question 9.3
@@ -2227,10 +2072,6 @@ between core Gnus and the real NNTP-, POP3-, IMAP- or
 whatever-server which offers Gnus a standardized interface
 to functions like "get message", "get Headers" etc.
 
-@item Emacs
-When the term Emacs is used in this FAQ, it means GNU
-Emacs.
-
 @item Message
 In this FAQ message means either a mail or a posting to a
 Usenet Newsgroup or to some other fancy back end, no matter
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index a0be13dac8..738ff94b9f 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -883,10 +883,7 @@ History
 
 * Gnus Versions::               What Gnus versions have been released.
 * Why?::                        What's the point of Gnus?
-* Compatibility::               Just how compatible is Gnus with @sc{gnus}?
 * Conformity::                  Gnus tries to conform to all standards.
-* Emacsen::                     Gnus can be run on a few modern Emacsen.
-* Gnus Development::            How Gnus is developed.
 * Contributors::                Oodles of people.
 * New Features::                Pointers to some of the new stuff in Gnus.
 
@@ -1806,8 +1803,7 @@ long as Gnus is active.
 @end menu
 
 You can customize the Group Mode tool bar, see @kbd{M-x
-customize-apropos @key{RET} gnus-group-tool-bar}.  This feature is only
-available in Emacs.
+customize-apropos @key{RET} gnus-group-tool-bar}.
 
 The tool bar icons are now (de)activated correctly depending on the
 cursor position.  Therefore, moving around in the Group Buffer is
@@ -4839,8 +4835,7 @@ group buffer (@pxref{Selecting a Group}).
 You can have as many summary buffers open as you wish.
 
 You can customize the Summary Mode tool bar, see @kbd{M-x
-customize-apropos @key{RET} gnus-summary-tool-bar}.  This feature is only
-available in Emacs.
+customize-apropos @key{RET} gnus-summary-tool-bar}.
 
 @kindex v @r{(Summary)}
 @cindex keys, reserved for users (Summary)
@@ -5070,7 +5065,7 @@ Opening bracket for adopted articles.  The default is 
@samp{<}.
 
 @item ]
 Closing bracket, which is normally @samp{]}, but can also be @samp{>}
-for adopted articles.  This can be customised using following settings:
+for adopted articles.  This can be customized using following settings:
 
 @table @code
 @item gnus-sum-closing-bracket
@@ -8621,14 +8616,6 @@ uuencoded files that have had trailing spaces deleted.
 @vindex gnus-uu-pre-uudecode-hook
 Hook run before sending a message to @code{uudecode}.
 
-@item gnus-uu-view-with-metamail
-@vindex gnus-uu-view-with-metamail
-@cindex metamail
-Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
-commands defined by the rule variables and just fudge a @acronym{MIME}
-content type based on the file name.  The result will be fed to
-@code{metamail} for viewing.
-
 @item gnus-uu-save-in-digest
 @vindex gnus-uu-save-in-digest
 Non-@code{nil} means that @code{gnus-uu}, when asked to save without
@@ -9359,14 +9346,11 @@ Use @uref{http://emacs-w3m.namazu.org/, emacs-w3m}.
 Use @uref{http://w3m.sourceforge.net/, w3m}.
 
 @item links
-Use @uref{https://almende.github.io/chap-links-library/, CHAP Links}.
+Use @uref{http://links.twibright.com/, Links}.
 
 @item lynx
 Use @uref{https://lynx.browser.org/, Lynx}.
 
-@item html2text
-Use html2text---a simple @acronym{HTML} converter included with Gnus.
-
 @end table
 
 @item W D F
@@ -11576,8 +11560,8 @@ things to work:
 To handle @acronym{PGP} and @acronym{PGP/MIME} messages, you have to
 install an OpenPGP implementation such as GnuPG@.  The Lisp interface
 to GnuPG included with Emacs is called EasyPG (@pxref{Top, ,EasyPG,
-epa, EasyPG Assistant user's manual}), but PGG (@pxref{Top, ,PGG, pgg,
-PGG Manual}), and Mailcrypt are also supported.
+epa, EasyPG Assistant user's manual}), but Mailcrypt is also
+supported.
 
 @item
 To handle @acronym{S/MIME} message, you need to install OpenSSL@.  OpenSSL 
0.9.6
@@ -11615,18 +11599,16 @@ public-key matching the @samp{From:} header as the 
recipient;
 @item mml1991-use
 @vindex mml1991-use
 Symbol indicating elisp interface to OpenPGP implementation for
-@acronym{PGP} messages.  The default is @code{epg}, but @code{pgg},
-and @code{mailcrypt} are also supported although
-deprecated.  By default, Gnus uses the first available interface in
-this order.
+@acronym{PGP} messages.  The default is @code{epg}, but
+@code{mailcrypt} is also supported although deprecated.  By default,
+Gnus uses the first available interface in this order.
 
 @item mml2015-use
 @vindex mml2015-use
 Symbol indicating elisp interface to OpenPGP implementation for
 @acronym{PGP/MIME} messages.  The default is @code{epg}, but
-@code{pgg}, and @code{mailcrypt} are also supported
-although deprecated.  By default, Gnus uses the first available
-interface in this order.
+@code{mailcrypt} is also supported although deprecated.  By default,
+Gnus uses the first available interface in this order.
 
 @end table
 
@@ -15440,8 +15422,6 @@ files.  If a positive number, delete files older than 
number of days
 (the deletion will only happen when receiving new mail).  You may also
 set @code{mail-source-delete-incoming} to @code{nil} and call
 @code{mail-source-delete-old-incoming} from a hook or interactively.
-@code{mail-source-delete-incoming} defaults to @code{10} in alpha Gnusae
-and @code{2} in released Gnusae.  @xref{Gnus Development}.
 
 @item mail-source-delete-old-incoming-confirm
 @vindex mail-source-delete-old-incoming-confirm
@@ -17357,11 +17337,6 @@ changes to a wiki (e.g., 
@url{https://cliki.net/site/recent-changes}).
 @acronym{RSS} has a quite regular and nice interface, and it's
 possible to get the information Gnus needs to keep groups updated.
 
-Note: you had better use Emacs which supports the @code{utf-8} coding
-system because @acronym{RSS} uses UTF-8 for encoding non-@acronym{ASCII}
-text by default.  It is also used by default for non-@acronym{ASCII}
-group names.
-
 @kindex G R @r{(Group)}
 Use @kbd{G R} from the group buffer to subscribe to a feed---you will be
 prompted for the location, the title and the description of the feed.
@@ -17410,7 +17385,7 @@ The directory where @code{nnrss} stores its files.  The 
default is
 @vindex nnrss-file-coding-system
 The coding system used when reading and writing the @code{nnrss} groups
 data files.  The default is the value of
-@code{mm-universal-coding-system} (which defaults to @code{emacs-mule}).
+@code{mm-universal-coding-system} (which defaults to @code{utf-8-emacs}).
 
 @item nnrss-ignore-article-fields
 @vindex nnrss-ignore-article-fields
@@ -17518,16 +17493,16 @@ If you have a directory that has lots of articles in 
separate files in
 it, you might treat it as a newsgroup.  The files have to have numerical
 names, of course.
 
-This might be an opportune moment to mention @code{ange-ftp} (and its
-successor @code{efs}), that most wonderful of all wonderful Emacs
-packages.  When I wrote @code{nndir}, I didn't think much about it---a
-back end to read directories.  Big deal.
+This might be an opportune moment to mention @code{ange-ftp}, that
+most wonderful of all wonderful Emacs packages.  When I wrote
+@code{nndir}, I didn't think much about it---a back end to read
+directories.  Big deal.
 
 @code{ange-ftp} changes that picture dramatically.  For instance, if you
 enter the @code{ange-ftp} file name
 @file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} as the directory name,
-@code{ange-ftp} or @code{efs} will actually allow you to read this
-directory over at @samp{sina} as a newsgroup.  Distributed news ahoy!
+@code{ange-ftp} will actually allow you to read this directory over at
+@samp{sina} as a newsgroup.  Distributed news ahoy!
 
 @code{nndir} will use @acronym{NOV} files if they are present.
 
@@ -21962,7 +21937,7 @@ you can set up a local @acronym{IMAP} server, which you 
then access via
 @code{nnimap}.  This is a rather massive setup for accessing some mbox
 files, so just change to MH or Maildir already...  However, if you're
 really, really passionate about using mbox, you might want to look into
-the package @file{mairix.el}, which comes with Emacs 23.
+the package @file{mairix.el}, which comes with Emacs.
 
 @node What nnmairix does
 @subsection What nnmairix does
@@ -24216,8 +24191,7 @@ people have started putting nonsense addresses into 
their @code{From}
 lines.  I think this is counterproductive---it makes it difficult for
 people to send you legitimate mail in response to things you write, as
 well as making it difficult to see who wrote what.  This rewriting may
-perhaps be a bigger menace than the unsolicited commercial email itself
-in the end.
+perhaps be a bigger menace than the spam itself in the end.
 
 The biggest problem I have with email spam is that it comes in under
 false pretenses.  I press @kbd{g} and Gnus merrily informs me that I
@@ -24243,33 +24217,13 @@ This is annoying.  Here's what you can do about it.
 @cindex UCE
 @cindex unsolicited commercial email
 
-First, some background on spam.
-
-If you have access to e-mail, you are familiar with spam (technically
-termed @acronym{UCE}, Unsolicited Commercial E-mail).  Simply put, it
-exists because e-mail delivery is very cheap compared to paper mail,
-so only a very small percentage of people need to respond to an UCE to
-make it worthwhile to the advertiser.  Ironically, one of the most
-common spams is the one offering a database of e-mail addresses for
-further spamming.  Senders of spam are usually called @emph{spammers},
-but terms like @emph{vermin}, @emph{scum}, @emph{sociopaths}, and
-@emph{morons} are in common use as well.
-
 Spam comes from a wide variety of sources.  It is simply impossible to
-dispose of all spam without discarding useful messages.  A good
-example is the TMDA system, which requires senders
-unknown to you to confirm themselves as legitimate senders before
-their e-mail can reach you.  Without getting into the technical side
-of TMDA, a downside is clearly that e-mail from legitimate sources may
-be discarded if those sources can't or won't confirm themselves
-through the TMDA system.  Another problem with TMDA is that it
-requires its users to have a basic understanding of e-mail delivery
-and processing.
+dispose of all spam without discarding useful messages.
 
 The simplest approach to filtering spam is filtering, at the mail
 server or when you sort through incoming mail.  If you get 200 spam
-messages per day from @samp{random-address@@vmadmin.com}, you block
-@samp{vmadmin.com}.  If you get 200 messages about @samp{VIAGRA}, you
+messages per day from @samp{random-address@@example.org}, you block
+@samp{example.org}.  If you get 200 messages about @samp{VIAGRA}, you
 discard all messages with @samp{VIAGRA} in the message.  If you get
 lots of spam from Bulgaria, for example, you try to filter all mail
 from Bulgarian IPs.
@@ -24380,7 +24334,7 @@ In my experience, this will sort virtually everything 
into the right
 group.  You still have to check the @samp{spam} group from time to time to
 check for legitimate mail, though.  If you feel like being a good net
 citizen, you can even send off complaints to the proper authorities on
-each unsolicited commercial email---at your leisure.
+each spam---at your leisure.
 
 This works for me.  It allows people an easy way to contact me (they can
 just press @kbd{r} in the usual way), and I'm not bothered at all with
@@ -24396,8 +24350,8 @@ Be careful with this approach.  Spammers are wise to it.
 @cindex Vipul's Razor
 @cindex DCC
 
-The days where the hints in the previous section were sufficient in
-avoiding spam are coming to an end.  There are many tools out there
+The days where the hints in the previous section were sufficient to
+avoid spam are over.  There are many tools out there
 that claim to reduce the amount of spam you get.  This section could
 easily become outdated fast, as new products replace old, but
 fortunately most of these tools seem to have similar interfaces.  Even
@@ -24478,7 +24432,7 @@ spam.  And here is the nifty function:
 @subsection Hashcash
 @cindex hashcash
 
-A novel technique to fight spam is to require senders to do something
+One technique to fight spam is to require senders to do something
 costly and demonstrably unique for each message they send.  This has
 the obvious drawback that you cannot rely on everyone in the world
 using this technique, since it is not part of the Internet standards,
@@ -25135,8 +25089,8 @@ The @code{gnus-article-sort-by-chars} entry simplifies 
detection of
 false positives for me.  I receive lots of worms (sweN, @dots{}), that all
 have a similar size.  Grouping them by size (i.e., chars) makes finding
 other false positives easier.  (Of course worms aren't @i{spam}
-(@acronym{UCE}, @acronym{UBE}) strictly speaking.  Anyhow, bogofilter is
-an excellent tool for filtering those unwanted mails for me.)
+strictly speaking.  Anyhow, bogofilter is an excellent tool for
+filtering those unwanted mails for me.)
 
 @item @b{Ham folders:}
 
@@ -26778,7 +26732,7 @@ on finding a separator line between the head and the 
body.  If this
 variable is @code{nil}, there is no upper read bound.  If it is
 @code{t}, the back ends won't try to read the articles piece by piece,
 but read the entire articles.  This makes sense with some versions of
-@code{ange-ftp} or @code{efs}.
+@code{ange-ftp}.
 
 @item nnheader-head-chop-length
 @vindex nnheader-head-chop-length
@@ -26917,10 +26871,7 @@ renamed it back again to ``Gnus''.  But in mixed case. 
 ``Gnus'' vs.
 @menu
 * Gnus Versions::               What Gnus versions have been released.
 * Why?::                        What's the point of Gnus?
-* Compatibility::               Just how compatible is Gnus with @sc{gnus}?
 * Conformity::                  Gnus tries to conform to all standards.
-* Emacsen::                     Gnus can be run on a few modern Emacsen.
-* Gnus Development::            How Gnus is developed.
 * Contributors::                Oodles of people.
 * New Features::                Pointers to some of the new stuff in Gnus.
 @end menu
@@ -27000,71 +26951,6 @@ every one of you to explore and invent.
 May Gnus never be complete.  @kbd{C-u 100 M-x all-hail-emacs}.
 
 
-@node Compatibility
-@subsection Compatibility
-
-@cindex compatibility
-Gnus was designed to be fully compatible with @sc{gnus}.  Almost all key
-bindings have been kept.  More key bindings have been added, of course,
-but only in one or two obscure cases have old bindings been changed.
-
-Our motto is:
-@quotation
-@cartouche
-@center In a cloud bones of steel.
-@end cartouche
-@end quotation
-
-All commands have kept their names.  Some internal functions have changed
-their names.
-
-The @code{gnus-uu} package has changed drastically.  @xref{Decoding
-Articles}.
-
-One major compatibility question is the presence of several summary
-buffers.  All variables relevant while reading a group are
-buffer-local to the summary buffer they belong in.  Although many
-important variables have their values copied into their global
-counterparts whenever a command is executed in the summary buffer, this
-change might lead to incorrect values being used unless you are careful.
-
-All code that relies on knowledge of @sc{gnus} internals will probably
-fail.  To take two examples: Sorting @code{gnus-newsrc-alist} (or
-changing it in any way, as a matter of fact) is strictly verboten.  Gnus
-maintains a hash table that points to the entries in this alist (which
-speeds up many functions), and changing the alist directly will lead to
-peculiar results.
-
-@cindex hilit19
-@cindex highlighting
-Old hilit19 code does not work at all.  In fact, you should probably
-remove all hilit code from all Gnus hooks
-(@code{gnus-group-prepare-hook} and @code{gnus-summary-prepare-hook}).
-Gnus provides various integrated functions for highlighting.  These are
-faster and more accurate.  To make life easier for everybody, Gnus will
-by default remove all hilit calls from all hilit hooks.  Uncleanliness!
-Away!
-
-Packages like @code{expire-kill} will no longer work.  As a matter of
-fact, you should probably remove all old @sc{gnus} packages (and other
-code) when you start using Gnus.  More likely than not, Gnus already
-does what you have written code to make @sc{gnus} do.  (Snicker.)
-
-Even though old methods of doing things are still supported, only the
-new methods are documented in this manual.  If you detect a new method of
-doing something while reading this manual, that does not mean you have
-to stop doing it the old way.
-
-Gnus understands all @sc{gnus} startup files.
-
-@findex gnus-bug
-@cindex reporting bugs
-@cindex bugs
-Overall, a casual user who hasn't written much code that depends on
-@sc{gnus} internals should suffer no problems.  If problems occur,
-please let me know by issuing that magic command @kbd{M-x gnus-bug}.
-
-
 @node Conformity
 @subsection Conformity
 
@@ -27147,79 +27033,6 @@ mentioned above, don't hesitate to drop a note to Gnus 
Towers and let us
 know.
 
 
-@node Emacsen
-@subsection Emacsen
-@cindex Emacsen
-@cindex Mule
-@cindex Emacs
-
-This version of Gnus should work on:
-
-@itemize @bullet
-
-@item
-Emacs 23.1 and up.
-
-@end itemize
-
-This Gnus version will absolutely not work on any Emacsen older than
-that.  Not reliably, at least.  Older versions of Gnus may work on older
-Emacs versions.  Particularly, Gnus 5.10.8 should also work on Emacs
-20.7.
-
-@c No-merge comment: The paragraph added in v5-10 here must not be
-@c synced here!
-
-@node Gnus Development
-@subsection Gnus Development
-
-Gnus is developed in a two-phased cycle.  The first phase involves much
-discussion on the development mailing list @samp{ding@@gnus.org}, where people
-propose changes and new features, post patches and new back ends.  This
-phase is called the @dfn{alpha} phase, since the Gnusae released in this
-phase are @dfn{alpha releases}, or (perhaps more commonly in other
-circles) @dfn{snapshots}.  During this phase, Gnus is assumed to be
-unstable and should not be used by casual users.  Gnus alpha releases
-have names like ``Oort Gnus'' and ``No Gnus''.  @xref{Gnus Versions}.
-
-After futzing around for 10--100 alpha releases, Gnus is declared
-@dfn{frozen}, and only bug fixes are applied.  Gnus loses the prefix,
-and is called things like ``Gnus 5.10.1'' instead.  Normal people are
-supposed to be able to use these, and these are mostly discussed on the
-@samp{gnu.emacs.gnus} newsgroup.  This newgroup is mirrored to the
-mailing list @samp{info-gnus-english@@gnu.org} which is carried on Gmane
-as @samp{gmane.emacs.gnus.user}.  These releases are finally integrated
-in Emacs.
-
-@cindex Incoming*
-@vindex mail-source-delete-incoming
-Some variable defaults differ between alpha Gnusae and released Gnusae,
-in particular, @code{mail-source-delete-incoming}.  This is to prevent
-lossage of mail if an alpha release hiccups while handling the mail.
-@xref{Mail Source Customization}.
-
-The division of discussion between the ding mailing list and the Gnus
-newsgroup is not purely based on publicity concerns.  It's true that
-having people write about the horrible things that an alpha Gnus release
-can do (sometimes) in a public forum may scare people off, but more
-importantly, talking about new experimental features that have been
-introduced may confuse casual users.  New features are frequently
-introduced, fiddled with, and judged to be found wanting, and then
-either discarded or totally rewritten.  People reading the mailing list
-usually keep up with these rapid changes, while people on the newsgroup
-can't be assumed to do so.
-
-So if you have problems with or questions about the alpha versions,
-direct those to the ding mailing list @samp{ding@@gnus.org}.  This list
-is also available on Gmane as @samp{gmane.emacs.gnus.general}.
-
-@cindex Incoming*
-@vindex mail-source-delete-incoming
-Some variable defaults differ between alpha Gnusae and released Gnusae,
-in particular, @code{mail-source-delete-incoming}.  This is to prevent
-lossage of mail if an alpha release hiccups while handling the mail.
-@xref{Mail Source Customization}.
-
 @node Contributors
 @subsection Contributors
 @cindex contributors
@@ -29796,19 +29609,6 @@ Ahem.
 @item
 Make sure your computer is switched on.
 
-@item
-Make sure that you really load the current Gnus version.  If you have
-been running @sc{gnus}, you need to exit Emacs and start it up again before
-Gnus will work.
-
-@item
-Try doing an @kbd{M-x gnus-version}.  If you get something that looks
-like @c
-@samp{Gnus v5.13} @c Adjust ../Makefile.in if you change this line!
-@c
-you have the right files loaded.  Otherwise you have some old @file{.el}
-files lying around.  Delete these.
-
 @item
 Read the help group (@kbd{G h} in the group buffer) for a
 @acronym{FAQ} and a how-to.
@@ -29817,7 +29617,7 @@ Read the help group (@kbd{G h} in the group buffer) for 
a
 @vindex max-lisp-eval-depth
 Gnus works on many recursive structures, and in some extreme (and very
 rare) cases Gnus may recurse down ``too deeply'' and Emacs will beep at
-you.  If this happens to you, set @code{max-lisp-eval-depth} to 500 or
+you.  If this happens to you, set @code{max-lisp-eval-depth} to 2000 or
 something like that.
 @end enumerate
 
@@ -29828,10 +29628,9 @@ If all else fails, report the problem as a bug.
 
 @findex gnus-bug
 If you find a bug in Gnus, you can report it with the @kbd{M-x
-gnus-bug} command.  @kbd{M-x set-variable @key{RET} debug-on-error
-@key{RET} t @key{RET}}, and send me the backtrace.  I will fix bugs,
-but I can only fix them if you send me a precise description as to how
-to reproduce the bug.
+gnus-bug} command.  @kbd{M-x toggle-debug-on-error}, and send me the
+backtrace.  I will fix bugs, but I can only fix them if you send me a
+precise description as to how to reproduce the bug.
 
 You really can never be too detailed in a bug report.  Always use the
 @kbd{M-x gnus-bug} command when you make bug reports, even if it creates
@@ -29862,7 +29661,7 @@ edebug.  Debugging Lisp code is documented in the Elisp 
manual
 (@pxref{Debugging, , Debugging Lisp Programs, elisp, The GNU Emacs
 Lisp Reference Manual}).  To get you started with edebug, consider if
 you discover some weird behavior when pressing @kbd{c}, the first
-step is to do @kbd{C-h k c} and click on the hyperlink (Emacs only) in
+step is to do @kbd{C-h k c} and click on the hyperlink in
 the documentation buffer that leads you to the function definition,
 then press @kbd{M-x edebug-defun @key{RET}} with point inside that function,
 return to Gnus and press @kbd{c} to invoke the code.  You will be
@@ -29874,7 +29673,7 @@ evaluate expressions using @kbd{M-:} or inspect 
variables using
 @cindex elp
 @cindex profile
 @cindex slow
-Sometimes, a problem do not directly generate an elisp error but
+Sometimes, a problem do not directly generate an Emacs Lisp error but
 manifests itself by causing Gnus to be very slow.  In these cases, you
 can use @kbd{M-x toggle-debug-on-quit} and press @kbd{C-g} when things are
 slow, and then try to analyze the backtrace (repeating the procedure
diff --git a/doc/misc/htmlfontify.texi b/doc/misc/htmlfontify.texi
index 0ab000b70f..dabe2e36ff 100644
--- a/doc/misc/htmlfontify.texi
+++ b/doc/misc/htmlfontify.texi
@@ -10,8 +10,7 @@
 This manual documents Htmlfontify, a source code -> crosslinked +
 formatted + syntax colorized html transformer.
 
-Copyright @copyright{} 2002--2003, 2013--2022 Free Software Foundation,
-Inc.
+Copyright @copyright{} 2002--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -34,7 +33,7 @@ modify this GNU manual.''
 @titlepage
 @title Htmlfontify User Manual
 @sp 4
-@subtitle Htmlfontify version 0.20
+@subtitle Htmlfontify version 0.21
 @sp 1
 @subtitle Jun 2002
 @sp 5
@@ -1539,13 +1538,6 @@ Htmlfontify has a couple of external requirements:
 
 @itemize @bullet
 
-@item
-GNU Emacs 20.7+ or 21.1+
-
-Other versions may work---these have been used successfully by the
-author.  If you intend to use Htmlfontify in batch mode, 21.1+ is
-pretty much required.
-
 @item
 A copy of etags (exuberant-ctags or GNU etags).  Htmlfontify attempts
 to autodetect the version you have and customize itself accordingly,
diff --git a/doc/misc/idlwave.texi b/doc/misc/idlwave.texi
index 26a6e6c7a3..0ba87b2e58 100644
--- a/doc/misc/idlwave.texi
+++ b/doc/misc/idlwave.texi
@@ -217,7 +217,7 @@ Integrity checks and auto-termination of logical blocks.
 @item
 Routine name space conflict search with likelihood-of-use ranking.
 @item
-Support for @file{imenu} (Emacs) and @file{func-menu} (XEmacs).
+Support for @file{imenu}.
 @item
 Documentation support.
 @item
@@ -392,7 +392,7 @@ that IDLWAVE has many more capabilities than covered here, 
which can
 be discovered by reading the entire manual, or hovering over the
 shoulder of your nearest IDLWAVE guru for a few days.
 
-It is assumed that you have access to Emacs or XEmacs with the full
+It is assumed that you have access to Emacs with the full
 IDLWAVE package including online help.  We also assume that you are
 familiar with Emacs and can read the nomenclature of key presses in
 Emacs (in particular, @kbd{C} stands for @key{CONTROL} and @kbd{M} for
@@ -1011,9 +1011,9 @@ Non-@code{nil} means use last match on line for
 @cindex Font lock
 
 Highlighting of keywords, comments, strings etc.@: can be accomplished
-with @code{font-lock}.  If you are using @code{global-font-lock-mode}
-(in Emacs), or have @code{font-lock} turned on in any other buffer in
-XEmacs, it should also automatically work in IDLWAVE buffers.  If you'd
+with @code{font-lock}.  If you are using @code{global-font-lock-mode},
+or have @code{font-lock-mode} turned on in any other buffer,
+it should also automatically work in IDLWAVE buffers.  If you'd
 prefer invoking font-lock individually by mode, you can enforce it in
 @code{idlwave-mode} with the following line in your @file{.emacs}:
 
@@ -2298,12 +2298,11 @@ Regexp matching the start of a document library header.
 @cindex Motion commands
 @cindex Program structure, moving through
 @cindex Code structure, moving through
-@cindex @file{Func-menu}, XEmacs package
-@cindex @file{Imenu}, Emacs package
+@cindex @file{Imenu}
 @cindex Function definitions, jumping to
 @cindex Procedure definitions, jumping to
 
-IDLWAVE supports both @file{Imenu} and @file{Func-menu}, two packages
+IDLWAVE supports @file{Imenu}, a package
 which make it easy to jump to the definitions of functions and
 procedures in the current file with a pop-up selection.  To bind
 @file{Imenu} to a mouse-press, use in your @file{.emacs}:
@@ -4022,7 +4021,7 @@ user is King!
 
 IDLWAVE was developed on a UNIX system.  However, thanks to the
 portability of Emacs, much of IDLWAVE does also work under different
-operating systems like Windows (with NTEmacs or NTXEmacs).
+operating systems like Windows (with NTEmacs).
 
 The only real problem is that there is no command-line version of IDL
 for Windows with which IDLWAVE can interact.  As a
@@ -4117,24 +4116,6 @@ configuration files (e.g., @file{.cshrc}), but from the 
file
 @file{~/.MacOSX/environment.plist}.  Either include your path settings
 there, or start Emacs and IDLWAVE from the shell.
 
-@item @strong{I get errors like @samp{Symbol's function is void:
-overlayp}}
-
-You don't have the @samp{fsf-compat} package installed, which IDLWAVE
-needs to run under XEmacs.  Install it, or find an XEmacs distribution
-which includes it by default.
-
-@item @strong{I'm getting errors like @samp{Symbol's value as variable is void:
-cl-builtin-gethash} on completion or routine info.}
-
-This error arises if you upgraded Emacs from 20.x to 21.x without
-re-installing IDLWAVE@.  Old Emacs and new Emacs are not byte-compatible
-in compiled lisp files.  Presumably, you kept the original .elc files in
-place, and this is the source of the error.  If you recompile (or just
-"make; make install") from source, it should resolve this problem.
-Another option is to recompile the @file{idlw*.el} files by hand using
-@kbd{M-x byte-compile-file}.
-
 @item @strong{@kbd{M-@key{TAB}} doesn't complete words, it switches
 windows on my desktop.}
 
@@ -4262,20 +4243,6 @@ is updated).
 Starting with IDL 6.2, the HTML help and its catalog are
 distributed with IDL, and so should never be inconsistent.
 
-@item @strong{I get errors such as @samp{void-variable
-browse-url-browser-function} or similar when attempting to load IDLWAVE
-under XEmacs.}
-
-You don't have the @samp{browse-url} (or other required) XEmacs package.
-Unlike Emacs, XEmacs distributes many packages separately from the
-main program.  IDLWAVE is actually among these, but is not always the
-most up to date.  When installing IDLWAVE as an XEmacs package, it
-should prompt you for required additional packages.  When installing it
-from source, it won't and you'll get this error.  The easiest solution
-is to install all the packages when you install XEmacs (the so-called
-@samp{sumo} bundle).  The minimum set of XEmacs packages required by
-IDLWAVE is @samp{fsf-compat, xemacs-base, mail-lib}.
-
 @end enumerate
 
 @node GNU Free Documentation License
diff --git a/doc/misc/message.texi b/doc/misc/message.texi
index 29fbdfe178..6a6beb7a1f 100644
--- a/doc/misc/message.texi
+++ b/doc/misc/message.texi
@@ -1152,12 +1152,11 @@ programs are required to make things work, and some 
small general hints.
 @uref{https://www.gnupg.org/, GNU Privacy Guard} or
 @uref{https://www.openssl.org/, OpenSSL}.  The default Emacs interface
 to the S/MIME implementation is EasyPG (@pxref{Top,,EasyPG Assistant
-User's Manual, epa, EasyPG Assistant User's Manual}), which has been
-included in Emacs since version 23 and which relies on the command
-line tool @command{gpgsm} provided by @acronym{GnuPG}.  That tool
-implements certificate management, including certificate revocation
-and expiry, while such tasks need to be performed manually, if OpenSSL
-is used.
+User's Manual, epa, EasyPG Assistant User's Manual}), which is
+included in Emacs and relies on the command line tool @command{gpgsm}
+provided by @acronym{GnuPG}.  That tool implements certificate
+management, including certificate revocation and expiry, while such
+tasks need to be performed manually, if OpenSSL is used.
 
 The choice between EasyPG and OpenSSL is controlled by the variable
 @code{mml-smime-use}, which needs to be set to the value @code{epg}
@@ -1250,8 +1249,8 @@ as @uref{https://www.gnupg.org/, GNU Privacy Guard}.  
Pre-OpenPGP
 implementations such as PGP 2.x and PGP 5.x are also supported.  The
 default Emacs interface to the PGP implementation is EasyPG
 (@pxref{Top,,EasyPG Assistant User's Manual, epa, EasyPG Assistant
-User's Manual}), but PGG (@pxref{Top, ,PGG, pgg, PGG Manual}) and
-Mailcrypt are also supported.  @xref{PGP Compatibility}.
+User's Manual}), but Mailcrypt is also supported.  @xref{PGP
+Compatibility}.
 
 As stated earlier, messages encrypted with OpenPGP can be formatted
 according to two different standards, namely @acronym{PGP} or
@@ -1340,8 +1339,7 @@ your PGP implementation, so we refer to it.
 If you have imported your old PGP 2.x key into GnuPG, and want to send
 signed and encrypted messages to your fellow PGP 2.x users, you'll
 discover that the receiver cannot understand what you send. One
-solution is to use PGP 2.x instead (e.g., if you use @code{pgg}, set
-@code{pgg-default-scheme} to @code{pgp}). You could also convince your
+solution is to use PGP 2.x instead. You could also convince your
 fellow PGP 2.x users to convert to GnuPG@.
 @vindex mml-signencrypt-style-alist
 As a final workaround, you can make the sign and encryption work in
diff --git a/doc/misc/mh-e.texi b/doc/misc/mh-e.texi
index c1cf44a027..2106c674f3 100644
--- a/doc/misc/mh-e.texi
+++ b/doc/misc/mh-e.texi
@@ -213,10 +213,8 @@ more niceties about GNU Emacs and MH@. Now I'm fully 
hooked on both of
 them.
 
 The MH-E package is distributed with Emacs@footnote{Version
-@value{VERSION} of MH-E appeared in Emacs 24.4. It is supported in GNU
-Emacs 23 and higher, as well as XEmacs 21.4.22 and 21.5.31. MH-E is
-known not to work with GNU Emacs versions 20 and below, and XEmacs
-version 21.5.9--21.5.16. It is compatible with MH versions 6.8.4 and
+@value{VERSION} of MH-E appeared in Emacs 24.4.
+It is compatible with MH versions 6.8.4 and
 higher, all versions of nmh, and GNU mailutils 1.0 and higher}, so you
 shouldn't have to do anything special to use it. Gnus is also
 required; version 5.10 or higher is recommended. This manual covers
@@ -1490,7 +1488,7 @@ Binding} of @samp{m}.
 @cindex Unix commands, @command{xbuffy}
 
 You can use @command{xbuffy} to automate the incorporation of this
-mail using the Emacs 23 command @command{emacsclient} as follows:
+mail using the Emacs command @command{emacsclient} as follows:
 
 @smallexample
 box ~/mail/mh-e
@@ -1501,9 +1499,6 @@ box ~/mail/mh-e
     command emacsclient --eval '(mh-inc-spool-mh-e)'
 @end smallexample
 
-In XEmacs, the command @command{gnuclient} is used in a similar
-fashion.
-
 @findex mh-inc-folder
 @kindex i
 @vindex mh-inc-folder-hook
@@ -2090,8 +2085,7 @@ and @samp{X-Image-URL:} will be used. The option
 This feature will be turned on by default if your system supports it.
 
 The first header field used, if present, is the Gnus-specific
-@samp{Face:} field@footnote{The @samp{Face:} field appeared in GNU
-Emacs 21 and XEmacs. For more information, see
+@samp{Face:} field@footnote{For more information, see
 @uref{https://quimby.gnus.org/circus/face/}.}.
 
 @cindex @command{uncompface}
@@ -2104,12 +2098,9 @@ Emacs 21 and XEmacs. For more information, see
 Next is the traditional @samp{X-Face:} header field@footnote{The
 display of this field requires the
 @uref{ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.Z,
-@command{uncompface} program}. Recent versions of XEmacs have internal
-support for @samp{X-Face:} images. If your version of XEmacs does not,
-then you'll need both @command{uncompface} and the
-@uref{http://www.jpl.org/ftp/pub/elisp/, @samp{x-face} package}.}. MH-E
-renders the foreground and background of the image using the
-associated attributes of the face @code{mh-show-xface}.
+@command{uncompface} program}.} MH-E renders the foreground and
+background of the image using the associated attributes of the face
+@code{mh-show-xface}.
 
 @cindex @command{convert}
 @cindex @command{wget}
@@ -2562,13 +2553,6 @@ produces pretty nice output, and it highlights links. It 
renders
 @samp{&ndash;} and @samp{&reg;} okay. It sometimes fails to wrap lines
 properly. It always downloads remote images.
 @c -------------------------
-@cindex browser, @samp{html2text}
-@cindex @samp{html2text}
-@item @samp{html2text}
-The @samp{html2text} browser requires an external program. Some users
-have reported problems with it, such as filling the entire message as
-if it were one paragraph, or displaying chunks of raw HTML.
-@c -------------------------
 @cindex browser, @samp{links}
 @cindex @samp{links}
 @item @samp{links}
@@ -2830,24 +2814,6 @@ The appearance of the buttons is controlled by the faces
 @code{mh-show-pgg-unknown} depending on the validity of the signature.
 The latter is used whether the signature is unknown or untrusted.
 
-@cindex @samp{pgg} customization group
-@cindex PGG
-@cindex customization group, @samp{pgg}
-
-The @samp{pgg} customization group may have some settings which may
-interest you.
-@iftex
-See @cite{The PGG Manual}.
-@end iftex
-@ifinfo
-@xref{Top, , The PGG Manual, pgg, The PGG Manual}.
-@end ifinfo
-@ifhtml
-See
-@uref{https://www.gnu.org/software/emacs/manual/pgg.html,
-@cite{The PGG Manual}}.
-@end ifhtml
-
 @node Printing
 @section Printing Your Mail
 
@@ -5594,33 +5560,6 @@ variety of mail security mechanisms. The default is 
@samp{PGP (MIME)}
 if it is supported; otherwise, the default is @samp{None}. Other
 mechanisms include vanilla @samp{PGP} and @samp{S/MIME}.
 
-@cindex @samp{pgg} customization group
-@cindex PGG
-@cindex customization group, @samp{pgg}
-
-The @samp{pgg} customization group may have some settings which may
-interest you.
-@iftex
-See @cite{The PGG Manual}.
-@end iftex
-@ifinfo
-@xref{Top, , The PGG Manual, pgg, The PGG Manual}.
-@end ifinfo
-@ifhtml
-See
-@uref{https://www.gnu.org/software/emacs/manual/pgg.html,
-@cite{The PGG Manual}}.
-@end ifhtml
-
-@cindex header field, @samp{Fcc}
-@cindex @samp{Fcc} header field
-@vindex pgg-encrypt-for-me
-
-In particular, I turn on the option @code{pgg-encrypt-for-me} so that
-all messages I encrypt are encrypted with my public key as well. If
-you keep a copy of all of your outgoing mail with a @samp{Fcc:} header
-field, this setting is vital so that you can read the mail you write!
-
 @node Checking Recipients
 @section Checking Recipients
 
@@ -6448,17 +6387,9 @@ too long to list here).
 @item mh-tool-bar-search-function
 Function called by the tool bar search button (default:
 @code{mh-search}).
-@c -------------------------
-@item mh-xemacs-tool-bar-position
-Tool bar location (default: @samp{Same As Default Tool Bar}).
-@c -------------------------
-@item mh-xemacs-use-tool-bar-flag
-If @samp{on}, use tool bar (default: @samp{on}, if supported).
 @end vtable
 
-In GNU Emacs, icons for some of MH-E's functions are added to the tool
-bar. In XEmacs, you have the opportunity to create a separate tool bar for
-the MH-E icons.
+Icons for some of MH-E's functions are added to the tool bar.
 
 @vindex mh-tool-bar-folder-buttons
 @vindex mh-tool-bar-letter-buttons
@@ -6480,24 +6411,6 @@ option @code{mh-tool-bar-search-function}. By default, 
this is set to
 Function} from the @samp{Value Menu} and enter a function of your own
 choosing.
 
-@vindex mh-xemacs-use-tool-bar-flag
-
-XEmacs provides a couple of extra options. The first,
-@code{mh-xemacs-use-tool-bar-flag}, controls whether to show the MH-E
-icons at all. By default, this option is turned on if the window
-system supports tool bars. If your system doesn't support tool bars,
-then you won't be able to turn on this option.
-
-@vindex mh-xemacs-tool-bar-position
-
-The second extra option is @code{mh-xemacs-tool-bar-position} which
-controls the placement of the tool bar along the four edges of the
-frame. You can choose from one of @samp{Same As Default Tool Bar},
-@samp{Top}, @samp{Bottom}, @samp{Left}, or @samp{Right}. If this
-variable is set to anything other than @samp{Same As Default Tool Bar}
-and the default tool bar is in a different location, then two tool
-bars will be displayed: the MH-E tool bar and the default tool bar.
-
 @node Searching
 @chapter Searching Through Messages
 
diff --git a/doc/misc/modus-themes.org b/doc/misc/modus-themes.org
index 7b566f51c2..1b4bf88a0c 100644
--- a/doc/misc/modus-themes.org
+++ b/doc/misc/modus-themes.org
@@ -1,25 +1,23 @@
-#+title: Modus themes for GNU Emacs
-#+author: Protesilaos Stavrou
-#+email: info@protesilaos.com
-#+language: en
-#+options: ':t toc:nil author:t email:t num:t
-#+startup: content
-
-#+macro: stable-version 2.4.0
-#+macro: release-date 2022-06-01
-#+macro: development-version 2.5.0-dev
-#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
-#+macro: space @@texinfo:@: @@
-#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
-
-#+texinfo_filename: modus-themes.info
-#+texinfo_dir_category: Emacs misc features
-#+texinfo_dir_title: Modus Themes: (modus-themes)
-#+texinfo_dir_desc: Elegant, highly legible and customizable themes
-#+texinfo_header: @set MAINTAINERSITE @uref{https://protesilaos.com,maintainer 
webpage}
-#+texinfo_header: @set MAINTAINER Protesilaos Stavrou
-#+texinfo_header: @set MAINTAINEREMAIL @email{info@protesilaos.com}
-#+texinfo_header: @set MAINTAINERCONTACT 
@uref{mailto:info@protesilaos.com,contact the maintainer}
+#+title:                 Modus themes for GNU Emacs
+#+author:                Protesilaos Stavrou
+#+email:                 info@protesilaos.com
+#+language:              en
+#+options:               ':t toc:nil author:t email:t num:t
+#+startup:               content
+#+macro:                 stable-version 2.6.0
+#+macro:                 release-date 2022-08-19
+#+macro:                 development-version 2.7.0-dev
+#+macro:                 file @@texinfo:@file{@@$1@@texinfo:}@@
+#+macro:                 space @@texinfo:@: @@
+#+macro:                 kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
+#+texinfo_filename:      modus-themes.info
+#+texinfo_dir_category:  Emacs misc features
+#+texinfo_dir_title:     Modus Themes: (modus-themes)
+#+texinfo_dir_desc:      Elegant, highly legible and customizable themes
+#+texinfo_header:        @set MAINTAINERSITE 
@uref{https://protesilaos.com,maintainer webpage}
+#+texinfo_header:        @set MAINTAINER Protesilaos Stavrou
+#+texinfo_header:        @set MAINTAINEREMAIL @email{info@protesilaos.com}
+#+texinfo_header:        @set MAINTAINERCONTACT 
@uref{mailto:info@protesilaos.com,contact the maintainer}
 
 #+texinfo: @insertcopying
 
@@ -198,6 +196,9 @@ sudo apt install elpa-modus-themes
 
 They are now ready to be used: 
[[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]].
 
+NOTE that Debian's package is severely out-of-date as of this writing
+2022-07-24 09:57 +0300.
+
 *** GNU Guix
 :properties:
 :custom_id: h:a4ca52cd-869f-46a5-9e16-4d9665f5b88e
@@ -360,7 +361,7 @@ package configurations in their setup.  We use this as an 
example:
   :config
   ;; Load the theme of your choice:
   (load-theme 'modus-operandi) ;; OR (load-theme 'modus-vivendi)
-  :bind ("<f5>" . modus-themes-toggle)
+  :bind ("<f5>" . modus-themes-toggle))
 
 
 
@@ -618,7 +619,7 @@ By default, customizing a theme-related user option through 
the Custom
 interfaces or with {{{kbd(M-x customize-set-variable)}}} will not reload the
 currently active Modus theme.
 
-Enable this behaviour by setting this variable to ~nil~.
+Enable this behavior by setting this variable to ~nil~.
 
 Regardless of this option, the active theme must be reloaded for changes
 to user options to take effect 
([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]).
@@ -1199,7 +1200,7 @@ Brief: Set the overall style of completion framework 
interfaces.
 
 Symbol: ~modus-themes-completions~ (=alist= type properties)
 
-This affects Company, Corfu, Flx, Helm, Icomplete/Fido, Ido, Ivy, Mct,
+This affects Company, Corfu, Flx, Helm, Icomplete/Fido, Ido, Ivy,
 Orderless, Selectrum, Vertico.  The value is an alist that takes the
 form of a =(key . properties)= combination.  Here is a sample, followed
 by a description of the particularities:
@@ -1252,7 +1253,7 @@ accepts is as follows (order is not significant):
 
 The ~popup~ key takes the same values as ~selection~.
 
-Apart from specfying each key separately, a fallback list is accepted.
+Apart from specifying each key separately, a fallback list is accepted.
 This is only useful when the desired aesthetic is the same across all
 keys that are not explicitly referenced.  For example, this:
 
@@ -1476,6 +1477,9 @@ with underlines.
 This style affects several packages that enable ~hl-line-mode~, such as
 =elfeed=, =notmuch=, and =mu4e=.
 
+[ Also check the =lin= package on GNU ELPA (by the author of the
+  modus-themes) for a stylistic enhancement to ~hl-line-mode~. ]
+
 ** Option for line numbers
 :properties:
 :alt_title: Line numbers
@@ -2000,16 +2004,21 @@ Putting it all together, the alist can look like this:
 :end:
 #+vindex: modus-themes-headings
 
-Brief: Control the style of headings.  This can be particularised for
-each level of heading (e.g. Org has eight levels).
+Brief: Heading styles with optional list of values for levels 0-8.
 
 Symbol: ~modus-themes-headings~ (=alist= type, multiple properties)
 
-This is an alist that accepts a =(key . list-of-values)= combination.  The
-key is either a number, representing the heading's level or ~t~, which
-pertains to the fallback style.  The list of values covers symbols that
-refer to properties, as described below.  Here is a sample, followed by
-a presentation of all available properties:
+This is an alist that accepts a =(key . list-of-values)= combination.
+The key is either a number, representing the heading's level (0-8) or t,
+which pertains to the fallback style.
+
+Level 0 is a special heading: it is used for what counts as a document
+title or equivalent, such as the =#+title= construct we find in Org
+files.  Levels 1-8 are regular headings.
+
+The list of values covers symbols that refer to properties, as described
+below.  Here is a complete sample, followed by a presentation of all
+available properties:
 
 #+begin_src emacs-lisp
 (setq modus-themes-headings
@@ -2162,7 +2171,7 @@ things with precision 
([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization
 This section is of interest only to users who are prepared to maintain
 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".
+they are labeled as "do-it-yourself" or "DIY".
 
 ** More accurate colors in terminal emulators
 :PROPERTIES:
@@ -2605,7 +2614,7 @@ this example:
 Whenever we enter a ~diff-mode~ buffer, we now get a magenta-colored
 region.
 
-Perhaps you may wish to generalise those findings in to a set of
+Perhaps you may wish to generalize those findings in to a set of
 functions that also accept an arbitrary face.  We shall leave the
 experimentation up to you.
 
@@ -2624,8 +2633,7 @@ contrast on an on-demand basis.
 
 One way to achieve this is to design a command that cycles through three
 distinct levels of intensity, though the following can be adapted to any
-kind of cyclic behaviour, such as to switch between red, green, and
-blue.
+kind of cyclic behavior, such as to switch between red, green, and blue.
 
 In the following example, we employ the ~modus-themes-color~ function
 which reads a symbol that represents an entry in the active theme's
@@ -2848,7 +2856,6 @@ both themes and expands to some more assosiations in the 
palette:
               (bg-inactive . "#f6ece5")
               (bg-region . "#c6bab1")
               (bg-header . "#ede3e0")
-              (bg-tab-bar . "#dcd3d3")
               (bg-tab-active . "#fdf6eb")
               (bg-tab-inactive . "#c8bab8"))
             modus-themes-vivendi-color-overrides
@@ -2860,7 +2867,6 @@ both themes and expands to some more assosiations in the 
palette:
               (bg-inactive . "#1a1e39")
               (bg-region . "#393a53")
               (bg-header . "#202037")
-              (bg-tab-bar . "#262b41")
               (bg-tab-active . "#120f18")
               (bg-tab-inactive . "#3a3a5a")))
     (setq modus-themes-operandi-color-overrides nil
@@ -2879,7 +2885,6 @@ look like this:
   (bg-inactive . "#e6e6e6")
   (bg-region . "#b5b5b5")
   (bg-header . "#e4e4e4")
-  (bg-tab-bar . "#d1d1d4")
   (bg-tab-active . "#f5f5f5")
   (bg-tab-inactive . "#c0c0c0"))
 #+end_src
@@ -2897,6 +2902,9 @@ fall below the minimum 7:1 contrast ratio that governs 
the design of the
 themes (the WCAG AAA legibility standard).  Alternatively, this can also
 be done programmatically ([[#h:4589acdc-2505-41fc-9f5e-699cfc45ab00][Override 
color saturation]]).
 
+The above are expanded into a fully fledged derivative elsewhere in this
+document ([[#h:736c0ff5-8c9c-4565-82cf-989e57d07d4a][Override colors 
completely]]).
+
 For manual interventions it is advised to inspect the source code of
 ~modus-themes-operandi-colors~ and ~modus-themes-vivendi-colors~ for the
 inline commentary: it explains what the intended use of each palette
@@ -3092,6 +3100,286 @@ Blend background colors with BG-BLEND and foreground 
colors with FG-BLEND."
 (modus-themes-tinted-mode 1)
 #+end_src
 
+** Override colors completely
+:PROPERTIES:
+:CUSTOM_ID: h:736c0ff5-8c9c-4565-82cf-989e57d07d4a
+:END:
+
+Based on the ideas we have already covered in these sections, the
+following code block provides a complete, bespoke pair of color palettes
+which override the defaults.  They are implemented as a minor mode, as
+explained before ([[#h:307d95dd-8dbd-4ece-a543-10ae86f155a6][Override 
colors]]).  We call them "Summertime" for
+convenience.
+
+#+begin_src emacs-lisp
+;; Read the relevant blog post:
+;; 
<https://protesilaos.com/codelog/2022-07-26-modus-themes-color-override-demo/>
+(define-minor-mode modus-themes-summertime
+  "Refashion the Modus themes by overriding their colors.
+
+This is a complete technology demonstration to show how to
+manually override the colors of the Modus themes.  I have taken
+good care of those overrides to make them work as a fully fledged
+color scheme that is compatible with all user options of the
+Modus themes.
+
+These overrides are usable by those who (i) like something more
+fancy than the comparatively austere looks of the Modus themes,
+and (ii) can cope with a lower contrast ratio.
+
+The overrides are set up as a minor mode, so that the user can
+activate the effect on demand.  Those who want to load the
+overrides at all times can either add them directly to their
+configuration or enable `modus-themes-summertime' BEFORE loading
+either of the Modus themes (if the overrides are evaluated after
+the theme, the theme must be reloaded).
+
+Remember that all changes to theme-related variables require a
+reload of the theme to take effect (the Modus themes have lots of
+user options, apart from those overrides).
+
+The `modus-themes-summertime' IS NOT an official extension to the
+Modus themes and DOES NOT comply with its lofty accessibility
+standards.  It is included in the official manual as guidance for
+those who want to make use of the color overriding facility we
+provide."
+  :init-value nil
+  :global t
+  (if modus-themes-summertime
+      (setq modus-themes-operandi-color-overrides
+            '((bg-main . "#fff0f2")
+              (bg-dim . "#fbe6ef")
+              (bg-alt . "#f5dae6")
+              (bg-hl-line . "#fad8e3")
+              (bg-active . "#efcadf")
+              (bg-inactive . "#f3ddef")
+              (bg-active-accent . "#ffbbef")
+              (bg-region . "#dfc5d1")
+              (bg-region-accent . "#efbfef")
+              (bg-region-accent-subtle . "#ffd6ef")
+              (bg-header . "#edd3e0")
+              (bg-tab-active . "#ffeff2")
+              (bg-tab-inactive . "#f8d3ef")
+              (bg-tab-inactive-accent . "#ffd9f5")
+              (bg-tab-inactive-alt . "#e5c0d5")
+              (bg-tab-inactive-alt-accent . "#f3cce0")
+              (fg-main . "#543f78")
+              (fg-dim . "#5f476f")
+              (fg-alt . "#7f6f99")
+              (fg-unfocused . "#8f6f9f")
+              (fg-active . "#563068")
+              (fg-inactive . "#8a5698")
+              (fg-docstring . "#5f5fa7")
+              (fg-comment-yellow . "#a9534f")
+              (fg-escape-char-construct . "#8b207f")
+              (fg-escape-char-backslash . "#a06d00")
+              (bg-special-cold . "#d3e0f4")
+              (bg-special-faint-cold . "#e0efff")
+              (bg-special-mild . "#c4ede0")
+              (bg-special-faint-mild . "#e0f0ea")
+              (bg-special-warm . "#efd0c4")
+              (bg-special-faint-warm . "#ffe4da")
+              (bg-special-calm . "#f0d3ea")
+              (bg-special-faint-calm . "#fadff9")
+              (fg-special-cold . "#405fb8")
+              (fg-special-mild . "#407f74")
+              (fg-special-warm . "#9d6f4f")
+              (fg-special-calm . "#af509f")
+              (bg-completion . "#ffc5e5")
+              (bg-completion-subtle . "#f7cfef")
+              (red . "#ed2f44")
+              (red-alt . "#e0403d")
+              (red-alt-other . "#e04059")
+              (red-faint . "#ed4f44")
+              (red-alt-faint . "#e0603d")
+              (red-alt-other-faint . "#e06059")
+              (green . "#217a3c")
+              (green-alt . "#417a1c")
+              (green-alt-other . "#006f3c")
+              (green-faint . "#318a4c")
+              (green-alt-faint . "#518a2c")
+              (green-alt-other-faint . "#20885c")
+              (yellow . "#b06202")
+              (yellow-alt . "#a95642")
+              (yellow-alt-other . "#a06f42")
+              (yellow-faint . "#b07232")
+              (yellow-alt-faint . "#a96642")
+              (yellow-alt-other-faint . "#a08042")
+              (blue . "#275ccf")
+              (blue-alt . "#475cc0")
+              (blue-alt-other . "#3340ef")
+              (blue-faint . "#476ce0")
+              (blue-alt-faint . "#575ccf")
+              (blue-alt-other-faint . "#3f60d7")
+              (magenta . "#bf317f")
+              (magenta-alt . "#d033c0")
+              (magenta-alt-other . "#844fe4")
+              (magenta-faint . "#bf517f")
+              (magenta-alt-faint . "#d053c0")
+              (magenta-alt-other-faint . "#846fe4")
+              (cyan . "#007a9f")
+              (cyan-alt . "#3f709f")
+              (cyan-alt-other . "#107f7f")
+              (cyan-faint . "#108aaf")
+              (cyan-alt-faint . "#3f80af")
+              (cyan-alt-other-faint . "#3088af")
+              (red-active . "#cd2f44")
+              (green-active . "#116a6c")
+              (yellow-active . "#993602")
+              (blue-active . "#475ccf")
+              (magenta-active . "#7f2ccf")
+              (cyan-active . "#007a8f")
+              (red-nuanced-bg . "#ffdbd0")
+              (red-nuanced-fg . "#ed6f74")
+              (green-nuanced-bg . "#dcf0dd")
+              (green-nuanced-fg . "#3f9a4c")
+              (yellow-nuanced-bg . "#fff3aa")
+              (yellow-nuanced-fg . "#b47232")
+              (blue-nuanced-bg . "#e3e3ff")
+              (blue-nuanced-fg . "#201f6f")
+              (magenta-nuanced-bg . "#fdd0ff")
+              (magenta-nuanced-fg . "#c0527f")
+              (cyan-nuanced-bg . "#dbefff")
+              (cyan-nuanced-fg . "#0f3f60")
+              (bg-diff-heading . "#b7cfe0")
+              (fg-diff-heading . "#041645")
+              (bg-diff-added . "#d6f0d6")
+              (fg-diff-added . "#004520")
+              (bg-diff-changed . "#fcefcf")
+              (fg-diff-changed . "#524200")
+              (bg-diff-removed . "#ffe0ef")
+              (fg-diff-removed . "#891626")
+              (bg-diff-refine-added . "#84cfa4")
+              (fg-diff-refine-added . "#002a00")
+              (bg-diff-refine-changed . "#cccf8f")
+              (fg-diff-refine-changed . "#302010")
+              (bg-diff-refine-removed . "#da92b0")
+              (fg-diff-refine-removed . "#500010")
+              (bg-diff-focus-added . "#a6e5c6")
+              (fg-diff-focus-added . "#002c00")
+              (bg-diff-focus-changed . "#ecdfbf")
+              (fg-diff-focus-changed . "#392900")
+              (bg-diff-focus-removed . "#efbbcf")
+              (fg-diff-focus-removed . "#5a0010"))
+            modus-themes-vivendi-color-overrides
+            '((bg-main . "#25152a")
+              (bg-dim . "#2a1930")
+              (bg-alt . "#382443")
+              (bg-hl-line . "#332650")
+              (bg-active . "#463358")
+              (bg-inactive . "#2d1f3a")
+              (bg-active-accent . "#50308f")
+              (bg-region . "#5d4a67")
+              (bg-region-accent . "#60509f")
+              (bg-region-accent-subtle . "#3f285f")
+              (bg-header . "#3a2543")
+              (bg-tab-active . "#26162f")
+              (bg-tab-inactive . "#362647")
+              (bg-tab-inactive-accent . "#36265a")
+              (bg-tab-inactive-alt . "#3e2f5a")
+              (bg-tab-inactive-alt-accent . "#3e2f6f")
+              (fg-main . "#debfe0")
+              (fg-dim . "#d0b0da")
+              (fg-alt . "#ae85af")
+              (fg-unfocused . "#8e7f9f")
+              (fg-active . "#cfbfef")
+              (fg-inactive . "#b0a0c0")
+              (fg-docstring . "#c8d9f7")
+              (fg-comment-yellow . "#cf9a70")
+              (fg-escape-char-construct . "#ff75aa")
+              (fg-escape-char-backslash . "#dbab40")
+              (bg-special-cold . "#2a3f58")
+              (bg-special-faint-cold . "#1e283f")
+              (bg-special-mild . "#0f3f31")
+              (bg-special-faint-mild . "#0f281f")
+              (bg-special-warm . "#44331f")
+              (bg-special-faint-warm . "#372213")
+              (bg-special-calm . "#4a314f")
+              (bg-special-faint-calm . "#3a223f")
+              (fg-special-cold . "#c0b0ff")
+              (fg-special-mild . "#bfe0cf")
+              (fg-special-warm . "#edc0a6")
+              (fg-special-calm . "#ff9fdf")
+              (bg-completion . "#502d70")
+              (bg-completion-subtle . "#451d65")
+              (red . "#ff5f6f")
+              (red-alt . "#ff8f6d")
+              (red-alt-other . "#ff6f9d")
+              (red-faint . "#ffa0a0")
+              (red-alt-faint . "#f5aa80")
+              (red-alt-other-faint . "#ff9fbf")
+              (green . "#51ca5c")
+              (green-alt . "#71ca3c")
+              (green-alt-other . "#51ca9c")
+              (green-faint . "#78bf78")
+              (green-alt-faint . "#99b56f")
+              (green-alt-other-faint . "#88bf99")
+              (yellow . "#f0b262")
+              (yellow-alt . "#f0e242")
+              (yellow-alt-other . "#d0a272")
+              (yellow-faint . "#d2b580")
+              (yellow-alt-faint . "#cabf77")
+              (yellow-alt-other-faint . "#d0ba95")
+              (blue . "#778cff")
+              (blue-alt . "#8f90ff")
+              (blue-alt-other . "#8380ff")
+              (blue-faint . "#82b0ec")
+              (blue-alt-faint . "#a0acef")
+              (blue-alt-other-faint . "#80b2f0")
+              (magenta . "#ff70cf")
+              (magenta-alt . "#ff77f0")
+              (magenta-alt-other . "#ca7fff")
+              (magenta-faint . "#e0b2d6")
+              (magenta-alt-faint . "#ef9fe4")
+              (magenta-alt-other-faint . "#cfa6ff")
+              (cyan . "#30cacf")
+              (cyan-alt . "#60caff")
+              (cyan-alt-other . "#40b79f")
+              (cyan-faint . "#90c4ed")
+              (cyan-alt-faint . "#a0bfdf")
+              (cyan-alt-other-faint . "#a4d0bb")
+              (red-active . "#ff6059")
+              (green-active . "#64dc64")
+              (yellow-active . "#ffac80")
+              (blue-active . "#4fafff")
+              (magenta-active . "#cf88ff")
+              (cyan-active . "#50d3d0")
+              (red-nuanced-bg . "#440a1f")
+              (red-nuanced-fg . "#ffcccc")
+              (green-nuanced-bg . "#002904")
+              (green-nuanced-fg . "#b8e2b8")
+              (yellow-nuanced-bg . "#422000")
+              (yellow-nuanced-fg . "#dfdfb0")
+              (blue-nuanced-bg . "#1f1f5f")
+              (blue-nuanced-fg . "#bfd9ff")
+              (magenta-nuanced-bg . "#431641")
+              (magenta-nuanced-fg . "#e5cfef")
+              (cyan-nuanced-bg . "#042f49")
+              (cyan-nuanced-fg . "#a8e5e5")
+              (bg-diff-heading . "#304466")
+              (fg-diff-heading . "#dae7ff")
+              (bg-diff-added . "#0a383a")
+              (fg-diff-added . "#94ba94")
+              (bg-diff-changed . "#2a2000")
+              (fg-diff-changed . "#b0ba9f")
+              (bg-diff-removed . "#50163f")
+              (fg-diff-removed . "#c6adaa")
+              (bg-diff-refine-added . "#006a46")
+              (fg-diff-refine-added . "#e0f6e0")
+              (bg-diff-refine-changed . "#585800")
+              (fg-diff-refine-changed . "#ffffcc")
+              (bg-diff-refine-removed . "#952838")
+              (fg-diff-refine-removed . "#ffd9eb")
+              (bg-diff-focus-added . "#1d4c3f")
+              (fg-diff-focus-added . "#b4dfb4")
+              (bg-diff-focus-changed . "#424200")
+              (fg-diff-focus-changed . "#d0daaf")
+              (bg-diff-focus-removed . "#6f0f39")
+              (fg-diff-focus-removed . "#eebdba")))
+    (setq modus-themes-operandi-color-overrides nil
+          modus-themes-vivendi-color-overrides nil)))
+#+end_src
+
 ** Font configurations for Org and others
 :properties:
 :custom_id: h:defcf4fc-8fa8-4c29-b12e-7119582cc929
@@ -3117,6 +3405,9 @@ the ~variable-pitch~ (proportional spacing) and 
~fixed-pitch~ (monospaced)
 faces respectively.  It may also be convenient to set your main typeface
 by configuring the ~default~ face the same way.
 
+[ The =fontaine= package on GNU ELPA (by the author of the modus-themes)
+  is designed to handle this case. ]
+
 Put something like this in your initialization file (also consider
 reading the doc string of ~set-face-attribute~):
 
@@ -3347,7 +3638,7 @@ it if you plan to control face attributes.
 :end:
 #+cindex: Org custom emphasis faces
 
-Org provides the user option ~org-emphasis-alist~ which assosiates a
+Org provides the user option ~org-emphasis-alist~ which associates a
 character with a face, list of faces, or face attributes.  The default
 specification of that variable looks like this:
 
@@ -4119,6 +4410,64 @@ Or include a ~let~ form, if needed:
 Normally, we do not touch user options, though this is an exception:
 otherwise the defaults are not always legible.
 
+** Add support for solaire-mode
+:PROPERTIES:
+:CUSTOM_ID: h:439c9e46-52e2-46be-b1dc-85841dd99671
+:END:
+
+The =solaire-mode= package dims the background of what it considers
+ancillary "UI" buffers, such as the minibuffer and Dired buffers.  The
+Modus themes used to support Solaire on the premise that the user was
+(i) opting in to it, (ii) understood why certain buffers were more gray,
+and (iii) knew what other adjustments had to be made to prevent broken
+visuals (e.g. the default style of the ~modus-themes-completions~ uses a
+subtle gray background for the selection, which with Solaire becomes
+practically invisible).
+
+However, the assumption that users opt in to this feature does not
+always hold true.  There are cases where it is enabled by defaultsuch as
+in the popular Doom Emacs configuration.  Thus, the unsuspecting user
+who loads ~modus-operandi~ or ~modus-vivendi~ without the requisite
+customizations is getting a sub-par experience; an experience that we
+did not intend and cannot genuinely fix.
+
+Because the Modus themes are meant to work everywhere, we cannot make an
+exception for Doom Emacs and/or Solaire users.  Furthermore, we shall
+not introduce hacks, such as by adding a check in all relevant faces to
+be adjusted based on Solaire or whatever other package.  Hacks of this
+sort are unsustainable and penalize the entire userbase.  Besides, the
+themes are built into Emacs and we must keep their standard high.
+
+The fundamental constraint with Solaire is that Emacs does not have a
+real distinction between "content" and "UI" buffers.  For themes to work
+with Solaire, they need to be designed around that package.  Such is an
+arrangement that compromises on our accessibility standards and/or
+hinders our efforts to provide the best possible experience while using
+the Modus themes.
+
+As such, =solaire-mode= is not---and will not be---supported by the
+Modus themes (or any other of my themes, for that matter).  Users who
+want it must style the faces manually.  Below is some sample code, based
+on what we cover at length elsewhere in this manual:
+
+[[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]].
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the 
themes' palette]].
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-custom-faces ()
+  (modus-themes-with-colors
+    (custom-set-faces
+     `(solaire-default-face ((,class :inherit default :background ,bg-alt 
:foreground ,fg-dim)))
+     `(solaire-line-number-face ((,class :inherit solaire-default-face 
:foreground ,fg-unfocused)))
+     `(solaire-hl-line-face ((,class :background ,bg-active)))
+     `(solaire-org-hide-face ((,class :background ,bg-alt :foreground 
,bg-alt))))))
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+#+end_src
+
+As always, re-load the theme for changes to take effect.
+
 * Face coverage
 :properties:
 :custom_id: h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19
@@ -4165,9 +4514,9 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + calendar and diary
 + calfw
 + calibredb
-+ centaur-tabs
 + cfrs
 + change-log and log-view (such as ~vc-print-log~, ~vc-print-root-log~)
++ chart
 + cider
 + circe
 + citar
@@ -4187,13 +4536,12 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + css-mode
 + csv-mode
 + ctrlf
-+ cursor-flash
 + custom (what you get with {{{kbd(M-x customize)}}})
 + dap-mode
-+ dashboard (emacs-dashboard)
 + deadgrep
 + debbugs
 + deft
++ denote
 + devdocs
 + dictionary
 + diff-hl
@@ -4210,7 +4558,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + diredp (dired+)
 + display-fill-column-indicator-mode
 + doom-modeline
-+ dynamic-ruler
 + easy-jekyll
 + ebdb
 + ediff
@@ -4251,7 +4598,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + flyspell
 + flx
 + freeze-it
-+ frog-menu
 + focus
 + fold-this
 + font-lock (generic syntax highlighting)
@@ -4289,6 +4635,7 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + imenu-list
 + indium
 + info
++ info+ (info-plus)
 + info-colors
 + interaction-log
 + ioccur
@@ -4303,6 +4650,7 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + kaocha-runner
 + keycast
 + ledger-mode
++ leerzeichen
 + line numbers (~display-line-numbers-mode~ and global variant)
 + lsp-mode
 + lsp-ui
@@ -4314,7 +4662,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + marginalia
 + markdown-mode
 + markup-faces (~adoc-mode~)
-+ mct
 + mentor
 + messages
 + mini-modeline
@@ -4341,14 +4688,12 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + org-superstar
 + org-table-sticky-header
 + org-tree-slide
-+ org-treescope
 + origami
 + outline-mode
 + outline-minor-faces
 + package (what you get with {{{kbd(M-x list-packages)}}})
 + page-break-lines
 + pandoc-mode
-+ paradox
 + paren-face
 + pass
 + pdf-tools
@@ -4391,7 +4736,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + smart-mode-line
 + smartparens
 + smerge
-+ solaire
 + spaceline
 + speedbar
 + stripes
@@ -4420,7 +4764,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + typescript
 + undo-tree
 + vc (vc-dir.el, vc-hooks.el)
-+ vc-annotate (the output of {{{kbd(C-x v g)}}})
 + vertico
 + vertico-quick
 + vimish-fold
@@ -4464,9 +4807,11 @@ supported by the themes.
 + bufler
 + counsel-notmuch
 + counsel-org-capture-string
++ dashboard (emacs-dashboard)
 + define-word
 + disk-usage
 + dtache
++ dynamic-ruler
 + easy-kill
 + edit-indirect
 + egerrit
@@ -4542,7 +4887,7 @@ The =git-gutter= and =git-gutter-fr= packages default to 
drawing bitmaps
 for the indicators they display (e.g. bitmap of a plus sign for added
 lines).  In Doom Emacs, these bitmaps are replaced with contiguous lines
 which may look nicer, but require a change to the foreground of the
-relevant faces to yield the desired colour combinations.
+relevant faces to yield the desired color combinations.
 
 Since this is Doom-specific, we urge users to apply changes in their
 local setup.  Below is some sample code, based on what we cover at
@@ -4564,6 +4909,8 @@ length elsewhere in this manual:
 (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
 #+end_src
 
+As always, re-load the theme for changes to take effect.
+
 If the above does not work, try this instead:
 
 #+begin_src emacs-lisp
@@ -4599,6 +4946,8 @@ This seems to make all comments use the appropriate face:
 (add-hook 'php-mode-hook #'my-multine-comments)
 #+end_src
 
+As always, re-load the theme for changes to take effect.
+
 ** Note on underlines in compilation buffers
 :properties:
 :custom_id: h:420f5a33-c7a9-4112-9b04-eaf2cbad96bd
@@ -4838,6 +5187,8 @@ implementation:
 (add-hook 'modus-themes-after-load-theme-hook 
#'my-modus-themes-highlight-parentheses)
 #+end_src
 
+As always, re-load the theme for changes to take effect.
+
 ** Note on mmm-mode.el background colors
 :properties:
 :custom_id: h:99cf0d6c-e478-4e26-9932-3bf3427d13f6
@@ -5181,24 +5532,6 @@ candidates.  That style still meets the contrast ratio 
target of >= 7:1
 ANSI color number 1 (red) from the already-supported array of
 ~ansi-color-names-vector~.
 
-** Note on vc-annotate-background-mode
-:properties:
-:custom_id: h:5095cbd1-e17a-419c-93e8-951c186362a3
-:end:
-
-Due to the unique way ~vc-annotate~ ({{{kbd(C-x v g)}}}) applies colors, 
support
-for its background mode (~vc-annotate-background-mode~) is disabled at the
-theme level.
-
-Normally, such a drastic measure should not belong in a theme: assuming
-the user's preferences is bad practice.  However, it has been deemed
-necessary in the interest of preserving color contrast accessibility
-while still supporting a useful built-in tool.
-
-If there actually is a way to avoid such a course of action, without
-prejudice to the accessibility standard of this project, then please
-report as much or send patches 
([[#h:9c3cd842-14b7-44d7-84b2-a5c8bc3fc3b1][Contributing]]).
-
 ** Note on pdf-tools link hints
 :properties:
 :custom_id: h:2659d13e-b1a5-416c-9a89-7c3ce3a76574
@@ -5743,9 +6076,10 @@ The Modus themes are a collective effort.  Every bit of 
work matters.
   Carlo Zancanaro, Christian Tietze, Daniel Mendler, Eli Zaretskii,
   Fritz Grabo, Illia Ostapyshyn, Kévin Le Gouguec, Kostadin Ninev,
   Madhavan Krishnan, Manuel Giraud, Markus Beppler, Matthew Stevenson,
-  Mauro Aranda, Nicolas De Jaeghere, Philip Kaludercic, Pierre
-  Téchoueyres, Rudolf Adamkovič, Stephen Gildea, Shreyas Ragavan, Stefan
-  Kangas, Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen Xie.
+  Mauro Aranda, Nicolas De Jaeghere, Paul David, Philip Kaludercic,
+  Pierre Téchoueyres, Rudolf Adamkovič, Stephen Gildea, Shreyas Ragavan,
+  Stefan Kangas, Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen
+  Xie.
 
 + Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
   Adrian Manea, Alex Griffin, Alex Koen, Alex Peitsinis, Alexey Shmalko,
@@ -5758,22 +6092,22 @@ The Modus themes are a collective effort.  Every bit of 
work matters.
   Gautier Ponsinet, Gerry Agbobada, Gianluca Recchia, Gonçalo Marrafa,
   Guilherme Semente, Gustavo Barros, Hörmetjan Yiltiz, Ilja Kocken, Iris
   Garcia, Ivan Popovych, Jeremy Friesen, Jerry Zhang, Johannes Grødem,
-  John Haman, Jorge Morais, Joshua O'Connor, Julio C. Villasante, Kenta
-  Usami, Kevin Fleming, Kévin Le Gouguec, Kostadin Ninev, Len Trigg,
-  Lennart C. Karssen, Magne Hov, Manuel Uberti, Mark Bestley, Mark
-  Burton, Markus Beppler, Mauro Aranda, Maxime Tréca, Michael
-  Goldenberg, Morgan Smith, Morgan Willcock, Murilo Pereira, Nicky van
-  Foreest, Nicolas De Jaeghere, Paul Poloskov, Pengji Zhang, Pete
-  Kazmier, Peter Wu, Philip Kaludercic, Pierre Téchoueyres, Przemysław
-  Kryger, Robert Hepple, Roman Rudakov, Ryan Phillips, Rytis Paškauskas,
-  Rudolf Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška,
-  Shreyas Ragavan, Simon Pugnet, Tassilo Horn, Thibaut Verron, Thomas
-  Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz
-  Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent Foley.  As
-  well as users: Ben, CsBigDataHub1, Emacs Contrib, Eugene, Fourchaux,
-  Fredrik, Moesasji, Nick, TheBlob42, Trey, bepolymathe, bit9tream,
-  derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn,
-  pRot0ta1p.
+  John Haman, Jonas Collberg, Jorge Morais, Joshua O'Connor, Julio
+  C. Villasante, Kenta Usami, Kevin Fleming, Kévin Le Gouguec, Kostadin
+  Ninev, Len Trigg, Lennart C. Karssen, Magne Hov, Manuel Uberti, Mark
+  Bestley, Mark Burton, Markus Beppler, Matt Armstrong, Mauro Aranda,
+  Maxime Tréca, Michael Goldenberg, Morgan Smith, Morgan Willcock,
+  Murilo Pereira, Nicky van Foreest, Nicolas De Jaeghere, Paul Poloskov,
+  Pengji Zhang, Pete Kazmier, Peter Wu, Philip Kaludercic, Pierre
+  Téchoueyres, Przemysław Kryger, Robert Hepple, Roman Rudakov, Ryan
+  Phillips, Rytis Paškauskas, Rudolf Adamkovič, Sam Kleinman, Samuel
+  Culpepper, Saša Janiška, Shreyas Ragavan, Simon Pugnet, Tassilo Horn,
+  Thibaut Verron, Thomas Heartman, Togan Muftuoglu, Tony Zorman, Trey
+  Merkley, Tomasz Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh,
+  Vincent Foley.  As well as users: Ben, CsBigDataHub1, Emacs Contrib,
+  Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer Emacs, TheBlob42,
+  Trey, bepolymathe, bit9tream, derek-upham, doolio, fleimgruber,
+  gitrj95, iSeeU, jixiuf, okamsn, pRot0ta1p.
 
 + Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii,
   Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core
@@ -5784,10 +6118,12 @@ The Modus themes are a collective effort.  Every bit of 
work matters.
 + Inspiration for certain features :: Bozhidar Batsov (zenburn-theme),
   Fabrice Niessen (leuven-theme).
 
-Special thanks (from A-Z) to Gustavo Barros, Manuel Uberti, Nicolas De
-Jaeghere, and Omar Antolín Camarena for their long time contributions
-and insightful commentary on key aspects of the themes' design and/or
-aspects of their functionality.
+Special thanks (from A-Z) to Daniel Mendler, Gustavo Barros, Manuel
+Uberti, Nicolas De Jaeghere, and Omar Antolín Camarena for their long
+time contributions and insightful commentary on key aspects of the
+themes' design and/or aspects of their functionality.
+
+All errors are my own.
 
 * Other notes about the project
 :properties:
diff --git a/doc/misc/org.org b/doc/misc/org.org
index baab2efeda..7971c417a5 100644
--- a/doc/misc/org.org
+++ b/doc/misc/org.org
@@ -2866,12 +2866,12 @@ For more information and examples see the 
[[https://orgmode.org/worg/org-tutoria
 - transpose ::
 
   When =y=, =yes=, or =t= attempt to transpose the table data before
-  plotting.  Also recognises the shorthand option =trans=.
+  plotting.  Also recognizes the shorthand option =trans=.
 
 - =type= ::
 
   Specify the type of the plot, by default one of  =2d=, =3d=, =radar=, or 
=grid=.
-  Available types can be customised with ~org-plot/preset-plot-types~.
+  Available types can be customized with ~org-plot/preset-plot-types~.
 
 - =with= ::
 
@@ -3352,7 +3352,7 @@ current buffer:
   ~org-link-email-description-format~.  By default, it refers to the
   addressee and the subject.
 
-- /Web browsers: W3, W3M and EWW/ ::
+- /Web browsers: W3M and EWW/ ::
 
   Here the link is the current URL, with the page title as the
   description.
@@ -8544,8 +8544,8 @@ commands:
   Search for a regular expression in all agenda files and additionally
   in the files listed in ~org-agenda-text-search-extra-files~.  This
   uses the Emacs command ~multi-occur~.  A prefix argument can be used
-  to specify the number of context lines for each match, default is
-  1.
+  to specify the number of context lines for each match, the default
+  is 1.
 
 - {{{kbd(#)}}} ::
 
diff --git a/doc/misc/rcirc.texi b/doc/misc/rcirc.texi
index 8253e40408..8c798d6c33 100644
--- a/doc/misc/rcirc.texi
+++ b/doc/misc/rcirc.texi
@@ -639,9 +639,9 @@ password to use.
 @item certfp
 @cindex certfp authentication
 Use this symbol if you want to use CertFP authentication.  The
-necessary arguments are the path to the client certificate key and
-password.  The CertFP authentication requires a @acronym{TLS}
-connection.
+necessary arguments are the path to the key and to the client
+certificate associated with the account.  The CertFP authentication
+requires a @acronym{TLS} connection.
 
 @end table
 
diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi
index c3b7b0b0f6..0c95b388cb 100644
--- a/doc/misc/reftex.texi
+++ b/doc/misc/reftex.texi
@@ -38,7 +38,6 @@ Con@TeX{}t
 @set SUPPORTADDRESS @AUCTeX{} user mailing list (@email{auctex@@gnu.org})
 @set DEVELADDRESS @AUCTeX{} developer mailing list 
(@email{auctex-devel@@gnu.org})
 @set BUGADDRESS @AUCTeX{} bug mailing list (@email{bug-auctex@@gnu.org})
-@set XEMACSFTP @uref{ftp://ftp.xemacs.org/pub/xemacs/packages/,XEmacs FTP site}
 @c %**end of header
 
 @copying
@@ -249,10 +248,7 @@ reports or suggestions.
 @cindex Installation
 
 @RefTeX{} has been bundled and pre-installed with Emacs since
-version 20.2.  It has also been bundled and pre-installed with XEmacs
-19.16--20.x.  XEmacs 21.x users want to install the corresponding
-plug-in package which is available from the @value{XEMACSFTP}.  See the
-XEmacs 21.x documentation on package installation for details.
+version 20.2.
 
 @findex turn-on-reftex
 @findex reftex-mode
@@ -3584,7 +3580,7 @@ the @value{BUGADDRESS}.
 
 There are also several Usenet groups which have competent readers who
 might be able to help: @code{comp.emacs}, @code{gnu.emacs.help},
-@code{comp.emacs.xemacs}, and @code{comp.text.tex}.
+and @code{comp.text.tex}.
 
 Thanks to the people on the Net who have used @RefTeX{} and helped
 developing it with their reports.  In particular thanks to @i{Ralf
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index 8872e5e055..f86af0db3e 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{2022-04-09.08}
+\def\texinfoversion{2022-08-20.19}
 %
 % Copyright 1985, 1986, 1988, 1990-2022 Free Software Foundation, Inc.
 %
@@ -725,32 +725,22 @@ where each line of input produces a line of output.}
   \dimen2 = \ht\strutbox
   \advance\dimen2 by \dp\strutbox
   \ifdim\dimen0 > \dimen2
+    % This is similar to the 'needspace' module in LaTeX.
+    % The first penalty allows a break if the end of the page is
+    % not too far away.  Following penalties and skips are discarded.
+    % Otherwise, require at least \dimen0 of vertical space.
     %
-    % Do a \strut just to make the height of this box be normal, so the
-    % normal leading is inserted relative to the preceding line.
-    % And a page break here is fine.
-    \vtop to #1\mil{\strut\vfil}%
-    %
-    % TeX does not even consider page breaks if a penalty added to the
-    % main vertical list is 10000 or more.  But in order to see if the
-    % empty box we just added fits on the page, we must make it consider
-    % page breaks.  On the other hand, we don't want to actually break the
-    % page after the empty box.  So we use a penalty of 9999.
-    %
-    % There is an extremely small chance that TeX will actually break the
-    % page at this \penalty, if there are no other feasible breakpoints in
-    % sight.  (If the user is using lots of big @group commands, which
-    % almost-but-not-quite fill up a page, TeX will have a hard time doing
-    % good page breaking, for example.)  However, I could not construct an
-    % example where a page broke at this \penalty; if it happens in a real
-    % document, then we can reconsider our strategy.
+    % (We used to use a \vtop to reserve space, but this had spacing issues
+    % when followed by a section heading, as it was not a "discardable item".
+    % This also has the benefit of providing glue before the page break if
+    % there isn't enough space.)
+    \vskip0pt plus \dimen0
+    \penalty-100
+    \vskip0pt plus -\dimen0
+    \vskip \dimen0
     \penalty9999
-    %
-    % Back up by the size of the box, whether we did a page break or not.
-    \kern -#1\mil
-    %
-    % Do not allow a page break right after this kern.
-    \nobreak
+    \vskip -\dimen0
+    \penalty0\relax % this hides the above glue from \safewhatsit and \dobreak
   \fi
 }
 
@@ -2558,7 +2548,7 @@ end
 \def\it{\fam=\itfam \setfontstyle{it}}
 \def\sl{\fam=\slfam \setfontstyle{sl}}
 \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
-\def\tt{\fam=\ttfam \setfontstyle{tt}}\def\ttstylename{tt}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
 
 % Texinfo sort of supports the sans serif font style, which plain TeX does not.
 % So we set up a \sf.
@@ -2691,6 +2681,14 @@ end
 %
 \def\ifmonospace{\ifdim\fontdimen3\font=0pt }
 
+% Check if internal flag is clear, i.e. has not been @set.
+\def\ifflagclear#1#2#3{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+  #2\else#3\fi
+}
+
+
+
 {
 \catcode`\'=\active
 \catcode`\`=\active
@@ -2707,14 +2705,14 @@ end
 %
 \def\codequoteright{%
   \ifmonospace
-    \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
-      \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+    \ifflagclear{txicodequoteundirected}{%
+      \ifflagclear{codequoteundirected}{%
         '%
-      \else \char'15 \fi
-    \else \char'15 \fi
-   \else
-     '%
-   \fi
+      }{\char'15 }%
+    }{\char'15 }%
+  \else
+    '%
+  \fi
 }
 %
 % and a similar option for the left quote char vs. a grave accent.
@@ -2723,16 +2721,16 @@ end
 %
 \def\codequoteleft{%
   \ifmonospace
-    \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
-      \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+    \ifflagclear{txicodequotebacktick}{%
+      \ifflagclear{codequotebacktick}{%
         % [Knuth] pp. 380,381,391
         % \relax disables Spanish ligatures ?` and !` of \tt font.
         \relax`%
-      \else \char'22 \fi
-    \else \char'22 \fi
-   \else
-     \relax`%
-   \fi
+      }{\char'22 }%
+    }{\char'22 }%
+  \else
+    \relax`%
+  \fi
 }
 
 % Commands to set the quote options.
@@ -2779,15 +2777,16 @@ end
 \def\dosmartslant#1#2{%
   \ifusingtt
     {{\ttsl #2}\let\next=\relax}%
-    {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
+    {\def\next{{#1#2}\smartitaliccorrection}}%
   \next
 }
 \def\smartslanted{\dosmartslant\sl}
 \def\smartitalic{\dosmartslant\it}
 
-% Output an italic correction unless \next (presumed to be the following
-% character) is such as not to need one.
-\def\smartitaliccorrection{%
+% Output an italic correction unless the following character is such as
+% not to need one.
+\def\smartitaliccorrection{\futurelet\next\smartitaliccorrectionx}
+\def\smartitaliccorrectionx{%
   \ifx\next,%
   \else\ifx\next-%
   \else\ifx\next.%
@@ -2798,18 +2797,18 @@ end
   \aftersmartic
 }
 
-% Unconditional use \ttsl, and no ic.  @var is set to this for defuns.
-\def\ttslanted#1{{\ttsl #1}}
-
-% @cite is like \smartslanted except unconditionally use \sl.  We never want
-% ttsl for book titles, do we?
-\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
+% @cite unconditionally uses \sl with \smartitaliccorrection.
+\def\cite#1{{\sl #1}\smartitaliccorrection}
 
+% @var unconditionally uses \sl.  This gives consistency for
+% parameter names whether they are in @def, @table @code or a
+% regular paragraph.
+% The \null is to reset \spacefactor.
 \def\aftersmartic{}
 \def\var#1{%
   \let\saveaftersmartic = \aftersmartic
   \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
-  \smartslanted{#1}%
+  {\sl #1}\smartitaliccorrection
 }
 
 \let\i=\smartitalic
@@ -2817,8 +2816,14 @@ end
 \let\dfn=\smartslanted
 \let\emph=\smartitalic
 
-% Explicit font changes: @r, @sc, undocumented @ii.
-\def\r#1{{\rm #1}}              % roman font
+% @r for roman font, used for code comment
+\def\r#1{{%
+  \usenormaldash % get --, --- ligatures even if in @code
+  \defcharsdefault  % in case on def line
+  \rm #1}}
+{\catcode`-=\active \gdef\usenormaldash{\let-\normaldash}}
+
+% @sc, undocumented @ii.
 \def\sc#1{{\smallcaps#1}}       % smallcaps font
 \def\ii#1{{\it #1}}             % italic font
 
@@ -2856,7 +2861,7 @@ end
 
 % @t, explicit typewriter.
 \def\t#1{%
-  {\tt \plainfrenchspacing #1}%
+  {\tt \defcharsdefault \plainfrenchspacing #1}%
   \null
 }
 
@@ -4432,7 +4437,7 @@ $$%
 
 \message{conditionals,}
 
-% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotlatex, @ifnotplaintext,
 % @ifnotxml always succeed.  They currently do nothing; we don't
 % attempt to check whether the conditionals are properly nested.  But we
 % have to remember that they are conditionals, so that @end doesn't
@@ -4446,6 +4451,7 @@ $$%
 \makecond{ifnotdocbook}
 \makecond{ifnothtml}
 \makecond{ifnotinfo}
+\makecond{ifnotlatex}
 \makecond{ifnotplaintext}
 \makecond{ifnotxml}
 
@@ -4458,10 +4464,12 @@ $$%
 \def\ifdocbook{\doignore{ifdocbook}}
 \def\ifhtml{\doignore{ifhtml}}
 \def\ifinfo{\doignore{ifinfo}}
+\def\iflatex{\doignore{iflatex}}
 \def\ifnottex{\doignore{ifnottex}}
 \def\ifplaintext{\doignore{ifplaintext}}
 \def\ifxml{\doignore{ifxml}}
 \def\ignore{\doignore{ignore}}
+\def\latex{\doignore{latex}}
 \def\menu{\doignore{menu}}
 \def\xml{\doignore{xml}}
 
@@ -4985,25 +4993,24 @@ $$%
 \catcode`\-=13
 \catcode`\`=13
   \gdef\indexnonalnumdisappear{%
-    \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else
+    \ifflagclear{txiindexlquoteignore}{}{%
       % @set txiindexlquoteignore makes us ignore left quotes in the sort term.
       % (Introduced for FSFS 2nd ed.)
       \let`=\empty
-    \fi
+    }%
     %
-    \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else
+    \ifflagclear{txiindexbackslashignore}{}{%
       \backslashdisappear
-    \fi
-    %
-    \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else
+    }%
+    \ifflagclear{txiindexhyphenignore}{}{%
       \def-{}%
-    \fi
-    \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else
+    }%
+    \ifflagclear{txiindexlessthanignore}{}{%
       \def<{}%
-    \fi
-    \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else
+    }%
+    \ifflagclear{txiindexatsignignore}{}{%
       \def\@{}%
-    \fi
+    }%
   }
 
   \gdef\indexnonalnumreappear{%
@@ -5295,9 +5302,7 @@ $$%
   %
   \atdummies
   %
-  \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax\else
-    \escapeisbackslash
-  \fi
+  \ifflagclear{txiindexescapeisbackslash}{}{\escapeisbackslash}%
   %
   % For texindex which always views { and } as separators.
   \def\{{\lbracechar{}}%
@@ -5481,9 +5486,9 @@ $$%
 % old index files using \ as the escape character.  Reading this would
 % at best lead to typesetting garbage, at worst a TeX syntax error.
 \def\printindexzz#1#2\finish{%
-  \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax
+  \ifflagclear{txiindexescapeisbackslash}{%
     \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
-      \expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax
+      \ifflagclear{txiskipindexfileswithbackslash}{%
 \errmessage{%
 ERROR: A sorted index file in an obsolete format was skipped.
 To fix this problem, please upgrade your version of 'texi2dvi'
@@ -5499,15 +5504,15 @@ this, Texinfo will try to use index files in the old 
format.
 If you continue to have problems, deleting the index files and starting again
 might help (with 'rm \jobname.?? \jobname.??s')%
 }%
-      \else
+      }{%
         (Skipped sorted index file in obsolete format)
-      \fi
+      }%
     \else
       \begindoublecolumns
       \input \jobname.\indexname s
       \enddoublecolumns
     \fi
-  \else
+  }{%
     \begindoublecolumns
     \catcode`\\=0\relax
     %
@@ -5517,7 +5522,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
     \catcode`\@=0\relax
     \input \jobname.\indexname s
     \enddoublecolumns
-  \fi
+  }%
 }
 
 % These macros are used by the sorted index file itself.
@@ -7277,22 +7282,6 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 \let\Eraggedright\par
 
-\envdef\raggedleft{%
-  \parindent=0pt \leftskip0pt plus2em
-  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
-  \hbadness=10000 % Last line will usually be underfull, so turn off
-                  % badness reporting.
-}
-\let\Eraggedleft\par
-
-\envdef\raggedcenter{%
-  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
-  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
-  \hbadness=10000 % Last line will usually be underfull, so turn off
-                  % badness reporting.
-}
-\let\Eraggedcenter\par
-
 
 % @quotation does normal linebreaking (hence we can't use \nonfillstart)
 % and narrows the margins.  We keep \parskip nonzero in general, since
@@ -7515,9 +7504,11 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % file; b) letting users define the frontmatter in as flexible order as
 % possible is desirable.
 %
-\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
-\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
-%
+\def\copying{\checkenv{}\begingroup\macrobodyctxt\docopying}
+{\catcode`\ =\other
+\gdef\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+}
+
 \def\insertcopying{%
   \begingroup
     \parindent = 0pt  % paragraph indentation looks wrong on title page
@@ -7599,21 +7590,15 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 \def\Edefun{\endgraf\medbreak}
 
-% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
-% the only thing remaining is to define \deffnheader.
+% \makedefun{deffoo}{ (definition of \deffooheader) }
 %
+% Define \deffoo, \deffoox  \Edeffoo and \deffooheader.
 \def\makedefun#1{%
   \expandafter\let\csname E#1\endcsname = \Edefun
   \edef\temp{\noexpand\domakedefun
     \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
   \temp
 }
-
-% \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) }
-%
-% Define \deffn and \deffnx, without parameters.
-% \deffnheader has to be defined explicitly.
-%
 \def\domakedefun#1#2#3{%
   \envdef#1{%
     \startdefun
@@ -7646,74 +7631,51 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \fi\fi
 }
 
-% \dosubind {index}{topic}{subtopic}
-%
-% If SUBTOPIC is present, precede it with a space, and call \doind.
-% (At some time during the 20th century, this made a two-level entry in an
-% index such as the operation index.  Nobody seemed to notice the change in
-% behaviour though.)
-\def\dosubind#1#2#3{%
-  \def\thirdarg{#3}%
-  \ifx\thirdarg\empty
-    \doind{#1}{#2}%
-  \else
-    \doind{#1}{#2\space#3}%
-  \fi
-}
-
 % Untyped functions:
 
 % @deffn category name args
-\makedefun{deffn}{\deffngeneral{}}
-
-% @deffn category class name args
-\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
-
-% \defopon {category on}class name args
-\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+\makedefun{deffn}#1 #2 #3\endheader{%
+  \doind{fn}{\code{#2}}%
+  \defname{#1}{}{#2}\magicamp\defunargs{#3\unskip}%
+}
 
-% \deffngeneral {subind}category name args
-%
-\def\deffngeneral#1#2 #3 #4\endheader{%
-  \dosubind{fn}{\code{#3}}{#1}%
-  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+% @defop category class name args
+\makedefun{defop}#1 {\defopheaderx{#1\ \putwordon}}
+\def\defopheaderx#1#2 #3 #4\endheader{%
+  \doind{fn}{\code{#3}\space\putwordon\ \code{#2}}%
+  \defname{#1\ \code{#2}}{}{#3}\magicamp\defunargs{#4\unskip}%
 }
 
 % Typed functions:
 
 % @deftypefn category type name args
-\makedefun{deftypefn}{\deftypefngeneral{}}
+\makedefun{deftypefn}#1 #2 #3 #4\endheader{%
+  \doind{fn}{\code{#3}}%
+  \doingtypefntrue
+  \defname{#1}{#2}{#3}\defunargs{#4\unskip}%
+}
 
 % @deftypeop category class type name args
-\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
-
-% \deftypeopon {category on}class type name args
-\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-
-% \deftypefngeneral {subind}category type name args
-%
-\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
-  \dosubind{fn}{\code{#4}}{#1}%
+\makedefun{deftypeop}#1 {\deftypeopheaderx{#1\ \putwordon}}
+\def\deftypeopheaderx#1#2 #3 #4 #5\endheader{%
+  \doind{fn}{\code{#4}\space\putwordon\ \code{#1\ \code{#2}}}%
   \doingtypefntrue
-  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+  \defname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}%
 }
 
 % Typed variables:
 
 % @deftypevr category type var args
-\makedefun{deftypevr}{\deftypecvgeneral{}}
+\makedefun{deftypevr}#1 #2 #3 #4\endheader{%
+  \doind{vr}{\code{#3}}%
+  \defname{#1}{#2}{#3}\defunargs{#4\unskip}%
+}
 
 % @deftypecv category class type var args
-\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
-
-% \deftypecvof {category of}class type var args
-\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
-
-% \deftypecvgeneral {subind}category type var args
-%
-\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
-  \dosubind{vr}{\code{#4}}{#1}%
-  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+\makedefun{deftypecv}#1 {\deftypecvheaderx{#1\ \putwordof}}
+\def\deftypecvheaderx#1#2 #3 #4 #5\endheader{%
+  \doind{vr}{\code{#4}\space\putwordof\ \code{#2}}%
+  \defname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}%
 }
 
 % Untyped variables:
@@ -7722,10 +7684,8 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \makedefun{defvr}#1 {\deftypevrheader{#1} {} }
 
 % @defcv category class var args
-\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
-
-% \defcvof {category of}class var args
-\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+\makedefun{defcv}#1 {\defcvheaderx{#1\ \putwordof}}
+\def\defcvheaderx#1#2 {\deftypecvheaderx{#1}#2 {} }
 
 % Types:
 
@@ -7743,10 +7703,10 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \makedefun{defvar}{\defvrheader{\putwordDefvar} }
 \makedefun{defopt}{\defvrheader{\putwordDefopt} }
 \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
-\makedefun{defmethod}{\defopon\putwordMethodon}
-\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
-\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
-\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+\makedefun{defmethod}{\defopheaderx\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopheaderx\putwordMethodon}
+\makedefun{defivar}{\defcvheaderx\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvheaderx\putwordInstanceVariableof}
 
 % \defname, which formats the name of the @def (not the args).
 % #1 is the category, such as "Function".
@@ -7765,9 +7725,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \rettypeownlinefalse
   \ifdoingtypefn  % doing a typed function specifically?
     % then check user option for putting return type on its own line:
-    \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
-      \rettypeownlinetrue
-    \fi
+    \ifflagclear{txideftypefnnl}{}{\rettypeownlinetrue}%
   \fi
   %
   % How we'll format the category name.  Putting it in brackets helps
@@ -7832,30 +7790,18 @@ might help (with 'rm \jobname.?? \jobname.??s')%
     \fi           % no return type
     #3% output function name
   }%
-  {\rm\enskip}% hskip 0.5 em of \rmfont
+  \ifflagclear{txidefnamenospace}{%
+    {\rm\enskip}% hskip 0.5 em of \rmfont
+  }{}%
   %
   \boldbrax
   % arguments will be output next, if any.
 }
 
-% Print arguments in slanted roman (not ttsl), inconsistently with using
-% tt for the name.  This is because literal text is sometimes needed in
-% the argument list (groff manual), and ttsl and tt are not very
-% distinguishable.  Prevent hyphenation at `-' chars.
-%
+% Print arguments.  Use slanted for @def*, typewriter for @deftype*.
 \def\defunargs#1{%
-  % use sl by default (not ttsl),
-  % tt for the names.
-  \df \sl \hyphenchar\font=0
-  %
-  % On the other hand, if an argument has two dashes (for instance), we
-  % want a way to get ttsl.  We used to recommend @var for that, so
-  % leave the code in, but it's strange for @var to lead to typewriter.
-  % Nowadays we recommend @code, since the difference between a ttsl hyphen
-  % and a tt hyphen is pretty tiny.  @code also disables ?` !`.
-  \def\var##1{{\setregularquotes\ttslanted{##1}}}%
+  \df \ifdoingtypefn \tt \else \sl \fi
   #1%
-  \sl\hyphenchar\font=45
 }
 
 % We want ()&[] to print specially on the defun line.
@@ -7874,9 +7820,12 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % so TeX would otherwise complain about undefined control sequence.
 {
   \activeparens
-  \global\let(=\lparen \global\let)=\rparen
-  \global\let[=\lbrack \global\let]=\rbrack
-  \global\let& = \&
+  \gdef\defcharsdefault{%
+    \let(=\lparen \let)=\rparen
+    \let[=\lbrack \let]=\rbrack
+    \let& = \&%
+  }
+  \globaldefs=1 \defcharsdefault
 
   \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
   \gdef\magicamp{\let&=\amprm}
@@ -8060,24 +8009,17 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \catcode`\_=\other
   \catcode`\|=\other
   \catcode`\~=\other
-  \passthroughcharstrue
-}
-
-\def\scanargctxt{% used for copying and captions, not macros.
-  \scanctxt
   \catcode`\@=\other
-  \catcode`\\=\other
   \catcode`\^^M=\other
+  \catcode`\\=\active
+  \passthroughcharstrue
 }
 
-\def\macrobodyctxt{% used for @macro definitions
+\def\macrobodyctxt{% used for @macro definitions and @copying
   \scanctxt
   \catcode`\ =\other
-  \catcode`\@=\other
   \catcode`\{=\other
   \catcode`\}=\other
-  \catcode`\^^M=\other
-  \usembodybackslash
 }
 
 % Used when scanning braced macro arguments.  Note, however, that catcode
@@ -8086,14 +8028,10 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \def\macroargctxt{%
   \scanctxt
   \catcode`\ =\active
-  \catcode`\@=\other
-  \catcode`\^^M=\other
-  \catcode`\\=\active
 }
 
 \def\macrolineargctxt{% used for whole-line arguments without braces
   \scanctxt
-  \catcode`\@=\other
   \catcode`\{=\other
   \catcode`\}=\other
 }
@@ -8137,7 +8075,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
      \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
      \addtomacrolist{\the\macname}%
   \fi
-  \begingroup \macrobodyctxt
+  \begingroup \macrobodyctxt \usembodybackslash
   \ifrecursive \expandafter\parsermacbody
   \else \expandafter\parsemacbody
   \fi}
@@ -8941,7 +8879,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
       % output the `[mynode]' via the macro below so it can be overridden.
       \xrefprintnodename\printedrefname
       %
-      \expandafter\ifx\csname SETtxiomitxrefpg\endcsname\relax
+      \ifflagclear{txiomitxrefpg}{%
         % But we always want a comma and a space:
         ,\space
         %
@@ -8956,7 +8894,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
                   \tokenafterxref ,%    @NL
         \else\ifx\tie\tokenafterxref ,% @tie
         \fi\fi\fi\fi\fi\fi
-      \fi
+      }{}%
     \fi\fi
   \fi
   \endlink
@@ -9604,7 +9542,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 %
 \def\caption{\docaption\thiscaption}
 \def\shortcaption{\docaption\thisshortcaption}
-\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\docaption{\checkenv\float \bgroup\scanctxt\defcaption}
 \def\defcaption#1#2{\egroup \def#1{#2}}
 
 % The parameter is the control sequence identifying the counter we are
@@ -10324,9 +10262,9 @@ directory should work if nowhere else does.}
   % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp
   % to the corresponding UTF-8 sequence.
   \gdef\parseXMLCharref{%
-    \ifnum\countUTFz < "A0\relax
+    \ifnum\countUTFz < "20\relax
       \errhelp = \EMsimple
-      \errmessage{Cannot define Unicode char value < 00A0}%
+      \errmessage{Cannot define Unicode char value < 0020}%
     \else\ifnum\countUTFz < "800\relax
       \parseUTFviiiA,%
       \parseUTFviiiB C\UTFviiiTwoOctetsName.,%
@@ -10396,6 +10334,103 @@ directory should work if nowhere else does.}
 % least make most of the characters not bomb out.
 %
 \def\unicodechardefs{%
+  \DeclareUnicodeCharacter{0020}{ } % space
+  \DeclareUnicodeCharacter{0021}{\char"21 }% % space to terminate number
+  \DeclareUnicodeCharacter{0022}{\char"22 }%
+  \DeclareUnicodeCharacter{0023}{\char"23 }%
+  \DeclareUnicodeCharacter{0024}{\char"24 }%
+  \DeclareUnicodeCharacter{0025}{\char"25 }%
+  \DeclareUnicodeCharacter{0026}{\char"26 }%
+  \DeclareUnicodeCharacter{0027}{\char"27 }%
+  \DeclareUnicodeCharacter{0028}{\char"28 }%
+  \DeclareUnicodeCharacter{0029}{\char"29 }%
+  \DeclareUnicodeCharacter{002A}{\char"2A }%
+  \DeclareUnicodeCharacter{002B}{\char"2B }%
+  \DeclareUnicodeCharacter{002C}{\char"2C }%
+  \DeclareUnicodeCharacter{002D}{\char"2D }%
+  \DeclareUnicodeCharacter{002E}{\char"2E }%
+  \DeclareUnicodeCharacter{002F}{\char"2F }%
+  \DeclareUnicodeCharacter{0030}{0}%
+  \DeclareUnicodeCharacter{0031}{1}%
+  \DeclareUnicodeCharacter{0032}{2}%
+  \DeclareUnicodeCharacter{0033}{3}%
+  \DeclareUnicodeCharacter{0034}{4}%
+  \DeclareUnicodeCharacter{0035}{5}%
+  \DeclareUnicodeCharacter{0036}{6}%
+  \DeclareUnicodeCharacter{0037}{7}%
+  \DeclareUnicodeCharacter{0038}{8}%
+  \DeclareUnicodeCharacter{0039}{9}%
+  \DeclareUnicodeCharacter{003A}{\char"3A }%
+  \DeclareUnicodeCharacter{003B}{\char"3B }%
+  \DeclareUnicodeCharacter{003C}{\char"3C }%
+  \DeclareUnicodeCharacter{003D}{\char"3D }%
+  \DeclareUnicodeCharacter{003E}{\char"3E }%
+  \DeclareUnicodeCharacter{003F}{\char"3F }%
+  \DeclareUnicodeCharacter{0040}{\char"40 }%
+  \DeclareUnicodeCharacter{0041}{A}%
+  \DeclareUnicodeCharacter{0042}{B}%
+  \DeclareUnicodeCharacter{0043}{C}%
+  \DeclareUnicodeCharacter{0044}{D}%
+  \DeclareUnicodeCharacter{0045}{E}%
+  \DeclareUnicodeCharacter{0046}{F}%
+  \DeclareUnicodeCharacter{0047}{G}%
+  \DeclareUnicodeCharacter{0048}{H}%
+  \DeclareUnicodeCharacter{0049}{I}%
+  \DeclareUnicodeCharacter{004A}{J}%
+  \DeclareUnicodeCharacter{004B}{K}%
+  \DeclareUnicodeCharacter{004C}{L}%
+  \DeclareUnicodeCharacter{004D}{M}%
+  \DeclareUnicodeCharacter{004E}{N}%
+  \DeclareUnicodeCharacter{004F}{O}%
+  \DeclareUnicodeCharacter{0050}{P}%
+  \DeclareUnicodeCharacter{0051}{Q}%
+  \DeclareUnicodeCharacter{0052}{R}%
+  \DeclareUnicodeCharacter{0053}{S}%
+  \DeclareUnicodeCharacter{0054}{T}%
+  \DeclareUnicodeCharacter{0055}{U}%
+  \DeclareUnicodeCharacter{0056}{V}%
+  \DeclareUnicodeCharacter{0057}{W}%
+  \DeclareUnicodeCharacter{0058}{X}%
+  \DeclareUnicodeCharacter{0059}{Y}%
+  \DeclareUnicodeCharacter{005A}{Z}%
+  \DeclareUnicodeCharacter{005B}{\char"5B }%
+  \DeclareUnicodeCharacter{005C}{\char"5C }%
+  \DeclareUnicodeCharacter{005D}{\char"5D }%
+  \DeclareUnicodeCharacter{005E}{\char"5E }%
+  \DeclareUnicodeCharacter{005F}{\char"5F }%
+  \DeclareUnicodeCharacter{0060}{\char"60 }%
+  \DeclareUnicodeCharacter{0061}{a}%
+  \DeclareUnicodeCharacter{0062}{b}%
+  \DeclareUnicodeCharacter{0063}{c}%
+  \DeclareUnicodeCharacter{0064}{d}%
+  \DeclareUnicodeCharacter{0065}{e}%
+  \DeclareUnicodeCharacter{0066}{f}%
+  \DeclareUnicodeCharacter{0067}{g}%
+  \DeclareUnicodeCharacter{0068}{h}%
+  \DeclareUnicodeCharacter{0069}{i}%
+  \DeclareUnicodeCharacter{006A}{j}%
+  \DeclareUnicodeCharacter{006B}{k}%
+  \DeclareUnicodeCharacter{006C}{l}%
+  \DeclareUnicodeCharacter{006D}{m}%
+  \DeclareUnicodeCharacter{006E}{n}%
+  \DeclareUnicodeCharacter{006F}{o}%
+  \DeclareUnicodeCharacter{0070}{p}%
+  \DeclareUnicodeCharacter{0071}{q}%
+  \DeclareUnicodeCharacter{0072}{r}%
+  \DeclareUnicodeCharacter{0073}{s}%
+  \DeclareUnicodeCharacter{0074}{t}%
+  \DeclareUnicodeCharacter{0075}{u}%
+  \DeclareUnicodeCharacter{0076}{v}%
+  \DeclareUnicodeCharacter{0077}{w}%
+  \DeclareUnicodeCharacter{0078}{x}%
+  \DeclareUnicodeCharacter{0079}{y}%
+  \DeclareUnicodeCharacter{007A}{z}%
+  \DeclareUnicodeCharacter{007B}{\char"7B }%
+  \DeclareUnicodeCharacter{007C}{\char"7C }%
+  \DeclareUnicodeCharacter{007D}{\char"7D }%
+  \DeclareUnicodeCharacter{007E}{\char"7E }%
+  % \DeclareUnicodeCharacter{007F}{} % DEL
+  %
   \DeclareUnicodeCharacter{00A0}{\tie}%
   \DeclareUnicodeCharacter{00A1}{\exclamdown}%
   \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
@@ -11080,24 +11115,26 @@ directory should work if nowhere else does.}
 % provide a definition macro to replace/pass-through a Unicode character
 %
 \def\DeclareUnicodeCharacterNative#1#2{%
-  \catcode"#1=\active
-  \def\dodeclareunicodecharacternative##1##2##3{%
+  \ifnum"#1>"7F % only make non-ASCII chars active
+    \catcode"#1=\active
+    \def\dodeclareunicodecharacternative##1##2##3{%
+      \begingroup
+        \uccode`\~="##2\relax
+        \uppercase{\gdef~}{%
+          \ifpassthroughchars
+            ##1%
+          \else
+            ##3%
+          \fi
+        }
+      \endgroup
+    }
     \begingroup
-      \uccode`\~="##2\relax
-      \uppercase{\gdef~}{%
-        \ifpassthroughchars
-          ##1%
-        \else
-          ##3%
-        \fi
-      }
+      \uccode`\.="#1\relax
+      \uppercase{\def\UTFNativeTmp{.}}%
+      \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}%
     \endgroup
-  }
-  \begingroup
-    \uccode`\.="#1\relax
-    \uppercase{\def\UTFNativeTmp{.}}%
-    \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}%
-  \endgroup
+  \fi
 }
 
 % Native Unicode handling (XeTeX and LuaTeX) character replacing definition.
@@ -11276,7 +11313,7 @@ directory should work if nowhere else does.}
   \textleading = 12.5pt
   %
   \internalpagesizes{160mm}{120mm}%
-                    {\voffset}{\hoffset}%
+                    {\voffset}{-11.4mm}%
                     {\bindingoffset}{8pt}%
                     {210mm}{148mm}%
   %
@@ -11358,6 +11395,7 @@ directory should work if nowhere else does.}
 \message{and turning on texinfo input format.}
 
 \def^^L{\par} % remove \outer, so ^L can appear in an @comment
+\catcode`\^^K = 10 % treat vertical tab as whitespace
 
 % DEL is a comment character, in case @c does not suffice.
 \catcode`\^^? = 14
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index 12d4987726..0e55b6c1d2 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -50,13 +50,10 @@ This file documents @w{@value{tramp} @value{trampver}}, a 
remote file
 editing package for Emacs.
 
 @value{tramp} stands for ``Transparent Remote (file) Access, Multiple
-Protocol''.  This package provides remote file editing, similar to
-Ange FTP@.
-
-The difference is that Ange FTP uses FTP to transfer files between the
-local and the remote host, whereas @value{tramp} uses a combination of
-@command{rsh} and @command{rcp} or other work-alike programs, such as
-@command{ssh}/@command{scp}.
+Protocol''.  This package provides an easy, convenient, and consistent
+interface to editing remote files transparently, just as if they are
+local files.  This extends to editing, version control, @code{dired},
+and more.
 
 You can find the latest version of this document on the web at
 @uref{@value{trampurl}}.
@@ -182,10 +179,10 @@ interface to remote files as if they are local files.  
@value{tramp}'s
 transparency extends to editing, version control, and @code{dired}.
 
 @value{tramp} can access remote hosts using any number of access
-methods, such as @command{rsh}, @command{rlogin}, @command{telnet},
-and related programs.  If these programs can successfully pass
-@acronym{ASCII} characters, @value{tramp} can use them.
-@value{tramp} does not require or mandate 8-bit clean connections.
+methods, such as @command{ssh}, @command{scp}, @command{telnet}, and
+related programs.  If these programs can successfully pass
+@acronym{ASCII} characters, @value{tramp} can use them.  @value{tramp}
+does not require or mandate 8-bit clean connections.
 
 @value{tramp}'s most common access method is through @command{ssh}, a
 more secure alternative to @command{ftp} and other older access
@@ -233,10 +230,10 @@ first time connecting to that host, here's what happens:
 
 @itemize
 @item
-@value{tramp} invokes @samp{telnet @var{host}} or @samp{rsh @var{host}
--l @var{user}} and establishes an external process to connect to the
-remote host.  @value{tramp} communicates with the process through an
-Emacs buffer, which also shows output from the remote host.
+@value{tramp} invokes @samp{telnet @var{host}} or @samp{ssh -l
+@var{user} @var{host}} and establishes an external process to connect
+to the remote host.  @value{tramp} communicates with the process
+through an Emacs buffer, which also shows output from the remote host.
 
 @item
 The remote host may prompt for a login name (for @command{telnet}, for
@@ -246,7 +243,7 @@ followed by a newline.
 
 @item
 The remote host may then prompt for a password or passphrase (for
-@command{rsh} or for @command{telnet}).  @value{tramp} displays the
+@command{ssh} or for @command{telnet}).  @value{tramp} displays the
 password prompt in the minibuffer.  @value{tramp} then sends whatever
 is entered to the remote host, followed by a newline.
 
@@ -312,7 +309,7 @@ I hope this has provided you with a basic overview of what 
happens
 behind the scenes when you open a file with @value{tramp}.
 
 
-@c For the end user
+@c For the end user.
 @node Obtaining @value{tramp}
 @chapter Obtaining @value{tramp}
 @cindex obtaining @value{tramp}
@@ -670,6 +667,11 @@ may be used in your init file:
 (with-eval-after-load 'tramp (tramp-change-syntax 'simplified))
 @end lisp
 
+@vindex enable-remote-dir-locals
+Changing other variables via directory-local variables on a remote
+directory must be enabled by setting @code{enable-remote-dir-locals}
+to non-@code{nil}, @xref{Directory Variables, , , emacs}.
+
 
 @menu
 * Connection types::            Types of connections to remote hosts.
@@ -2430,7 +2432,7 @@ example below:
 @end lisp
 
 @vindex password-word-equivalents
-This user option is, by default, initialised from
+This user option is, by default, initialized from
 @code{password-word-equivalents} when @value{tramp} is loaded, and it
 is usually more convenient to add new passphrases to that user option
 instead of altering this user option.
@@ -2973,14 +2975,31 @@ where @samp{192.168.0.26} is the Android device's IP 
address.
 (@pxref{Predefined connection information}).
 
 @item
-@value{tramp} requires preserving @env{PATH} environment variable from
-user settings.  Android devices prefer @file{/system/xbin} path over
-@file{/system/bin}.  Both of these are set as follows:
+On the Android device the directory names are prefixed with an
+application specific prefix, which is
+@file{/data/data/com.termux/files/usr/bin} instead of @file{/usr/bin}
+in the @code{Termux} case.  You must adapt the file names in
+@code{tramp-remote-path}, for example via connection-local
+@ifinfo
+settings (@pxref{Connection Variables, , , emacs}):
+@end ifinfo
+@ifnotinfo
+settings:
+@end ifnotinfo
 
 @lisp
 @group
-(add-to-list 'tramp-remote-path 'tramp-own-remote-path)
-(add-to-list 'tramp-remote-path "/system/xbin")
+(connection-local-set-profile-variables
+ 'tramp-connection-local-termux-profile
+ `((tramp-remote-path
+    . ,(mapcar
+       (lambda (x)
+         (if (stringp x) (concat "/data/data/com.termux/files" x) x))
+       (copy-tree tramp-remote-path)))))
+
+(connection-local-set-profiles
+ '(:application tramp :machine "192.168.0.26")
+ 'tramp-connection-local-termux-profile)
 @end group
 @end lisp
 
@@ -2989,7 +3008,9 @@ When the Android device is not @samp{rooted}, specify a 
writable
 directory for temporary files:
 
 @lisp
-(add-to-list 'tramp-remote-process-environment "TMPDIR=$HOME")
+(add-to-list 'tramp-connection-properties
+             (list (regexp-quote "192.168.0.26")
+                  "tmpdir" "/data/data/com.termux/files/home/tmp"))
 @end lisp
 
 @item
@@ -3017,11 +3038,17 @@ the previous example, fix the connection properties as 
follows:
 @group
 (add-to-list 'tramp-connection-properties
              (list (regexp-quote "android") "remote-shell" "sh"))
+(add-to-list 'tramp-connection-properties
+             (list (regexp-quote "android")
+                  "tmpdir" "/data/data/com.termux/files/home/tmp"))
+(connection-local-set-profiles
+ '(:application tramp :machine "android")
+ 'tramp-connection-local-termux-profile)
 @end group
 @end lisp
 
 @noindent
-Open a remote connection with a more concise command @kbd{C-x C-f
+Open a remote connection with the more concise command @kbd{C-x C-f
 @trampfn{ssh,android,} @key{RET}}.
 @end itemize
 
@@ -3124,6 +3151,14 @@ auto-saved files to the same directory as the original 
file.
 Alternatively, set the user option @code{tramp-auto-save-directory}
 to direct all auto saves to that location.
 
+@c Since Emacs 29.
+@vindex remote-file-name-inhibit-auto-save-visited
+An alternative to @code{auto-save-mode} is
+@code{auto-save-visited-mode}.  In this mode, auto-saving is identical
+to explicit saving.  If you want to disable this behavior for remote
+files, set user option
+@code{remote-file-name-inhibit-auto-save-visited} to non-@code{nil}.
+
 @vindex lock-file-name-transforms
 And still more issues to handle.  Since @w{Emacs 28}, file locks use a
 similar user option as auto-save files, called
@@ -3373,7 +3408,7 @@ names.  Beside the @code{default} value, @var{syntax} can 
be
 @item @code{simplified}
 @cindex simplified syntax
 
-The remote file name syntax is similar to the syntax used by Ange FTP@.
+This remote file name syntax is similar to the syntax used by Ange FTP@.
 A remote file name has the form
 @code{@value{prefix}user@@host@value{postfix}path/to/file}.  The
 @code{user@@} part is optional, and the method is determined by
@@ -3385,7 +3420,7 @@ A remote file name has the form
 @clear unified
 @set separate
 @include trampver.texi
-The remote file name syntax is similar to the syntax used by XEmacs.
+This remote file name syntax originated in the XEmacs text editor.
 A remote file name has the form
 @code{@trampfn{method,user@@host,path/to/file}}.  The @code{method}
 and @code{user@@} parts are optional.
@@ -4791,9 +4826,12 @@ authentication delays.  During these operations, 
@value{tramp}'s
 responsiveness slows down.  Some suggestions within the scope of
 @value{tramp}'s settings include:
 
+@itemize @minus
+@item
 Use an external method, such as @option{scp}, which are faster than
-internal methods.
+internal methods for large files.
 
+@item
 Keep the file @code{tramp-persistency-file-name}, which is where
 @value{tramp} caches remote information about hosts and files.  Caching
 is enabled by default.  Don't disable it.
@@ -4804,6 +4842,7 @@ files are not independently updated outside 
@value{tramp}'s control.
 That cache cleanup will be necessary if the remote directories or
 files are updated independent of @value{tramp}.
 
+@item
 Disable version control to avoid delays:
 
 @lisp
@@ -4823,9 +4862,17 @@ about, for example:
 (setq vc-handled-backends '(SVN Git))
 @end lisp
 
+@item
+@vindex remote-file-name-inhibit-locks
+Disable file locks.  Set @code{remote-file-name-inhibit-locks} to
+@code{t} if you know that different Emacs sessions are not modifying
+the same remote file.
+
+@item
 Disable excessive traces.  Set @code{tramp-verbose} to 3 or lower,
 default being 3.  Increase trace levels temporarily when hunting for
 bugs.
+@end itemize
 
 
 @item
@@ -5325,13 +5372,6 @@ minibuffer:
   (before my-minibuffer-complete activate)
   (expand-abbrev))
 @end group
-
-@group
-;; If you use partial-completion-mode
-(defadvice PC-do-completion
-  (before my-PC-do-completion activate)
-  (expand-abbrev))
-@end group
 @end lisp
 
 The reduced typing: @kbd{C-x C-f xy @key{TAB}}.
@@ -5621,6 +5661,7 @@ Disable @value{tramp} file name completion:
 (customize-set-variable 'ido-enable-tramp-completion nil)
 @end lisp
 
+@c Obsolete since Emacs 29.1.
 @item
 @file{rlogin.el}
 
@@ -5679,10 +5720,19 @@ local host's root directory as @file{/ssh:example.com:}.
 To unload @value{tramp}, type @kbd{M-x tramp-unload-tramp @key{RET}}.
 Unloading @value{tramp} resets Ange FTP plugins also.
 @end itemize
+
+
+@item
+What is the difference between Ange FTP and @value{tramp}?
+
+The difference is that Ange FTP uses @command{ftp} to transfer files
+between the local and the remote host, whereas @value{tramp} uses a
+combination of @command{ssh} and @command{scp} or other work-alike
+programs.
 @end itemize
 
 
-@c For the developer
+@c For the developer.
 @node Files directories and localnames
 @chapter How file names, directories and localnames are mangled and managed
 
@@ -5811,15 +5861,15 @@ The verbosity levels are
 @*@indent @w{ 4}  activities
 @*@indent @w{ 5}  internal
 @*@indent @w{ 6}  sent and received strings
-@*@indent @w{ 7}  file caching
-@*@indent @w{ 8}  connection properties
+@*@indent @w{ 7}  connection properties
+@*@indent @w{ 8}  file caching
 @*@indent @w{ 9}  test commands
 @*@indent @w{10}  traces (huge)
 @*@indent @w{11}  call traces (maintainer only)
 
 With @code{tramp-verbose} greater than or equal to 4, messages are
 also written to a @value{tramp} debug buffer.  Such debug buffers are
-essential to bug and problem analyses.  For @value{tramp} bug reports,
+essential to bug and problem analyzes.  For @value{tramp} bug reports,
 set the @code{tramp-verbose} level to 6 (@pxref{Bug Reports}).
 
 The debug buffer is in
diff --git a/doc/misc/transient.texi b/doc/misc/transient.texi
index d634ad5197..24c3090ef7 100644
--- a/doc/misc/transient.texi
+++ b/doc/misc/transient.texi
@@ -47,9 +47,9 @@ General Public License for more details.
 Taking inspiration from prefix keys and prefix arguments, Transient
 implements a similar abstraction involving a prefix command, infix
 arguments and suffix commands.  We could call this abstraction a
-``transient command'', but because it always involves at least two
+“transient command”, but because it always involves at least two
 commands (a prefix and a suffix) we prefer to call it just a
-``transient''.
+“transient”.
 
 When the user calls a transient prefix command, a transient
 (temporary) keymap is activated, which binds the transient's infix
@@ -97,7 +97,7 @@ Usage
 * Getting Help for Suffix Commands::
 * Enabling and Disabling Suffixes::
 * Other Commands::
-* Other Options::
+* Configuration::
 
 Defining New Commands
 
@@ -144,20 +144,20 @@ Related Abstractions and Packages
 Taking inspiration from prefix keys and prefix arguments, Transient
 implements a similar abstraction involving a prefix command, infix
 arguments and suffix commands.  We could call this abstraction a
-``transient command'', but because it always involves at least two
+“transient command”, but because it always involves at least two
 commands (a prefix and a suffix) we prefer to call it just a
-``transient''.
+“transient”.
 
+@cindex transient prefix command
 @quotation
 Transient keymaps are a feature provided by Emacs.  Transients as
 implemented by this package involve the use of transient keymaps.
 
-@cindex transient prefix command
 Emacs provides a feature that it calls @dfn{prefix commands}.  When we
-talk about ``prefix commands'' in this manual, then we mean our own kind
-of ``prefix commands'', unless specified otherwise.  To avoid ambiguity
+talk about “prefix commands” in this manual, then we mean our own kind
+of “prefix commands”, unless specified otherwise.  To avoid ambiguity
 we sometimes use the terms @dfn{transient prefix command} for our kind and
-``regular prefix command'' for the Emacs' kind.
+“regular prefix command” for Emacs' kind.
 
 @end quotation
 
@@ -208,7 +208,7 @@ looks a bit like this:
 
 @quotation
 This is a simplified version of @code{magit-tag}.  Info manuals do not
-support images or colored text, so the above ``screenshot'' lacks some
+support images or colored text, so the above “screenshot” lacks some
 information; in practice you would be able to tell whether the
 arguments @code{--force} and @code{--annotate} are enabled or not based on 
their
 color.
@@ -216,11 +216,11 @@ color.
 @end quotation
 
 @cindex command dispatchers
-Transient can be used to implement simple ``command dispatchers''.  The
+Transient can be used to implement simple “command dispatchers”.  The
 main benefit then is that the user can see all the available commands
 in a popup buffer.  That is useful by itself because it frees the user
 from having to remember all the keys that are valid after a certain
-prefix key or command.  Magit's @code{magit-dispatch} (on @code{C-x M-g}) 
command is
+prefix key or command.  Magit's @code{magit-dispatch} (on @kbd{C-x M-g}) 
command is
 an example of using Transient to merely implement a command
 dispatcher.
 
@@ -235,22 +235,22 @@ argument means to a certain command.
 
 Transient suffix commands, on the other hand, can accept dozens of
 different arguments without the user having to remember anything.
-When using Transient, one can call a command with arguments that
-are just as complex as when calling the same function non-interactively
+When using Transient, one can call a command with arguments that are
+just as complex as when calling the same function non-interactively
 from Lisp.
 
 Invoking a transient command with arguments is similar to invoking a
 command in a shell with command-line completion and history enabled.
 One benefit of the Transient interface is that it remembers history
-not only on a global level (``this command was invoked using these
-arguments, and previously it was invoked using those other arguments''),
+not only on a global level (“this command was invoked using these
+arguments, and previously it was invoked using those other arguments”),
 but also remembers the values of individual arguments independently.
 @xref{Using History}.
 
-After a transient prefix command is invoked, @kbd{C-h @var{key}} can be used to
-show the documentation for the infix or suffix command that @kbd{@var{key}} is
+After a transient prefix command is invoked, @kbd{C-h @var{KEY}} can be used to
+show the documentation for the infix or suffix command that @kbd{@var{KEY}} is
 bound to (@pxref{Getting Help for Suffix Commands}), and infixes and
-suffixes can be removed from the transient using @kbd{C-x l @var{key}}.  
Infixes
+suffixes can be removed from the transient using @kbd{C-x l @var{KEY}}.  
Infixes
 and suffixes that are disabled by default can be enabled the same way.
 @xref{Enabling and Disabling Suffixes}.
 
@@ -273,11 +273,12 @@ to implementing yet).
 * Getting Help for Suffix Commands::
 * Enabling and Disabling Suffixes::
 * Other Commands::
-* Other Options::
+* Configuration::
 @end menu
 
 @node Invoking Transients
 @section Invoking Transients
+
 @cindex invoking transients
 
 A transient prefix command is invoked like any other command by
@@ -290,9 +291,9 @@ disabled while the transient state is in effect.
 There are two kinds of commands that are available after invoking a
 transient prefix command; infix and suffix commands.  Infix commands
 set some value (which is then shown in a popup buffer), without
-leaving the transient.  Suffix commands, on the other hand, usually quit
-the transient and they may use the values set by the infix commands,
-i.e.@: the infix @strong{arguments}.
+leaving the transient.  Suffix commands, on the other hand, usually
+quit the transient and they may use the values set by the infix
+commands, i.e., the infix @strong{arguments}.
 
 Instead of setting arguments to be used by a suffix command, infix
 commands may also set some value by side-effect, e.g., by setting the
@@ -300,11 +301,12 @@ value of some variable.
 
 @node Aborting and Resuming Transients
 @section Aborting and Resuming Transients
+
 @cindex aborting transients
 @cindex resuming transients
 
 @cindex quit transient
-To quit the transient without invoking a suffix command press @code{C-g}.
+To quit the transient without invoking a suffix command press @kbd{C-g}.
 
 Key bindings in transient keymaps may be longer than a single event.
 After pressing a valid prefix key, all commands whose bindings do not
@@ -314,7 +316,7 @@ prefix key, but not the complete transient).
 
 A transient prefix command can be bound as a suffix of another
 transient.  Invoking such a suffix replaces the current transient
-state with a new transient state, i.e.@: the available bindings change
+state with a new transient state, i.e., the available bindings change
 and the information displayed in the popup buffer is updated
 accordingly.  Pressing @kbd{C-g} while a nested transient is active only
 quits the innermost transient, causing a return to the previous
@@ -325,13 +327,12 @@ the latter, then you can later resume the stack of 
transients using
 @kbd{M-x transient-resume}.
 
 @table @asis
+@item @kbd{C-g} (@code{transient-quit-seq})
+@itemx @kbd{C-g} (@code{transient-quit-one})
 @kindex C-g
-@findex transient-quit-seq
-@item @kbd{C-g} @tie{}@tie{}@tie{}@tie{}(@code{transient-quit-seq})
 @kindex C-g
+@findex transient-quit-seq
 @findex transient-quit-one
-@item @kbd{C-g} @tie{}@tie{}@tie{}@tie{}(@code{transient-quit-one})
-
 This key quits the currently active incomplete key sequence, if any,
 or else the current transient.  When quitting the current transient,
 it returns to the previous transient, if any.
@@ -342,22 +343,20 @@ To learn how to get that binding back see 
@code{transient-bind-q-to-quit}'s
 doc string.
 
 @table @asis
+@item @kbd{C-q} (@code{transient-quit-all})
 @kindex C-q
 @findex transient-quit-all
-@item @kbd{C-q} @tie{}@tie{}@tie{}@tie{}(@code{transient-quit-all})
-
 This command quits the currently active incomplete key sequence, if
 any, and all transients, including the active transient and all
 suspended transients, if any.
 
+@item @kbd{C-z} (@code{transient-suspend})
 @kindex C-z
 @findex transient-suspend
-@item @kbd{C-z} @tie{}@tie{}@tie{}@tie{}(@code{transient-suspend})
-
 Like @code{transient-quit-all}, this command quits an incomplete key
 sequence, if any, and all transients.  Additionally, it saves the
 stack of transients so that it can easily be resumed (which is
-particularly useful if you quickly need to do ``something else'', and
+particularly useful if you quickly need to do “something else” and
 the stack is deeper than a single transient, and/or you have already
 changed the values of some infix arguments).
 
@@ -365,43 +364,39 @@ Note that only a single stack of transients can be saved 
at a time.
 If another stack is already saved, then saving a new stack discards
 the previous stack.
 
-@kindex M-x transient-resume
+@item @kbd{M-x transient-resume}
 @findex transient-resume
-@item @kbd{M-x transient-resume} 
@tie{}@tie{}@tie{}@tie{}(@code{transient-resume})
-
 This command resumes the previously suspended stack of transients,
 if any.
 @end table
 
 @node Common Suffix Commands
 @section Common Suffix Commands
+
 @cindex common suffix commands
 
 A few shared suffix commands are available in all transients.  These
 suffix commands are not shown in the popup buffer by default.
 
-This includes the aborting commands mentioned in the previous section, as
-well as some other commands that are all bound to @kbd{C-x @var{key}}.  After
+This includes the aborting commands mentioned in the previous section,
+as well as some other commands that are all bound to @kbd{C-x @var{KEY}}.  
After
 @kbd{C-x} is pressed, a section featuring all these common commands is
 temporarily shown in the popup buffer.  After invoking one of them,
-the section disappears again.  Note, however, that one of these commands
-is described as ``Show common permanently''; invoke that if you want the
-common commands to always be shown for all transients.
+the section disappears again.  Note, however, that one of these
+commands is described as “Show common permanently”; invoke that if you
+want the common commands to always be shown for all transients.
 
 @table @asis
+@item @kbd{C-x t} (@code{transient-toggle-common})
 @kindex C-x t
 @findex transient-toggle-common
-@item @kbd{C-x t} @tie{}@tie{}@tie{}@tie{}(@code{transient-toggle-common})
-
 This command toggles whether the generic commands that are common to
 all transients are always displayed or only after typing the
 incomplete prefix key sequence @kbd{C-x}.  This only affects the current
 Emacs session.
-
 @end table
 
 @defopt transient-show-common-commands
-
 This option controls whether shared suffix commands are shown
 alongside the transient-specific infix and suffix commands.  By
 default, the shared commands are not shown to avoid overwhelming
@@ -412,14 +407,15 @@ commands.  The value of this option can be changed for 
the current
 Emacs session by typing @kbd{C-x t} while a transient is active.
 @end defopt
 
-The other common commands are described in either the previous or
-in one of the following sections.
+The other common commands are described in either the previous or in
+one of the following sections.
 
 Some of Transient's key bindings differ from the respective bindings
 of Magit-Popup; see @ref{FAQ} for more information.
 
 @node Saving Values
 @section Saving Values
+
 @cindex saving values of arguments
 
 After setting the infix arguments in a transient, the user can save
@@ -429,8 +425,7 @@ Most transients will start out with the saved arguments 
when they are
 invoked.  There are a few exceptions, though.  Some transients are
 designed so that the value that they use is stored externally as the
 buffer-local value of some variable.  Invoking such a transient again
-uses the buffer-local value.@footnote{
-@code{magit-diff} and @code{magit-log} are two prominent examples, and their
+uses the buffer-local value. @footnote{@code{magit-diff} and @code{magit-log} 
are two prominent examples, and their
 handling of buffer-local values is actually a bit more complicated
 than outlined above and even customizable.}
 
@@ -440,30 +435,32 @@ history.  That value won't be used when the transient is 
next invoked,
 but it is easily accessible (@pxref{Using History}).
 
 @table @asis
+@item @kbd{C-x s} (@code{transient-set})
 @kindex C-x s
 @findex transient-set
-@item @kbd{C-x s} @tie{}@tie{}@tie{}@tie{}(@code{transient-set})
-
 This command saves the value of the active transient for this Emacs
 session.
 
+@item @kbd{C-x C-s} (@code{transient-save})
 @kindex C-x C-s
 @findex transient-save
-@item @kbd{C-x C-s} @tie{}@tie{}@tie{}@tie{}(@code{transient-save})
-
 Save the value of the active transient persistently across Emacs
 sessions.
 
+@item @kbd{C-x C-k} (@code{transient-save})
+@kindex C-x C-k
+@findex transient-save
+Clear the set and saved value of the active transient.
 @end table
 
 @defopt transient-values-file
-
 This option names the file that is used to persist the values of
 transients between Emacs sessions.
 @end defopt
 
 @node Using History
 @section Using History
+
 @cindex value history
 
 Every time the user invokes a suffix command the transient's current
@@ -472,32 +469,28 @@ same way one can cycle through the history of commands 
that read
 user-input in the minibuffer.
 
 @table @asis
+@item @kbd{C-M-p} (@code{transient-history-prev})
+@itemx @kbd{C-x p}
 @kindex C-M-p
-@findex transient-history-prev
-@item @kbd{C-M-p} @tie{}@tie{}@tie{}@tie{}(@code{transient-history-prev})
 @kindex C-x p
 @findex transient-history-prev
-@item @kbd{C-x p} @tie{}@tie{}@tie{}@tie{}(@code{transient-history-prev})
-
 This command switches to the previous value used for the active
 transient.
 
+@item @kbd{C-M-n} (@code{transient-history-next})
+@itemx @kbd{C-x n}
 @kindex C-M-n
-@findex transient-history-next
-@item @kbd{C-M-n} @tie{}@tie{}@tie{}@tie{}(@code{transient-history-next})
 @kindex C-x n
 @findex transient-history-next
-@item @kbd{C-x n} @tie{}@tie{}@tie{}@tie{}(@code{transient-history-next})
-
 This command switches to the next value used for the active
 transient.
 @end table
 
 In addition to the transient-wide history, Transient of course
 supports per-infix history.  When an infix reads user-input using the
-minibuffer, the user can use the regular minibuffer history
-commands to cycle through previously used values.  Usually the same
-keys as those mentioned above are bound to those commands.
+minibuffer, the user can use the regular minibuffer history commands
+to cycle through previously used values.  Usually the same keys as
+those mentioned above are bound to those commands.
 
 Authors of transients should arrange for different infix commands that
 read the same kind of value to also use the same history key
@@ -506,19 +499,18 @@ read the same kind of value to also use the same history 
key
 Both kinds of history are saved to a file when Emacs is exited.
 
 @defopt transient-history-file
-
 This option names the file that is used to persist the history of
 transients and their infixes between Emacs sessions.
 @end defopt
 
 @defopt transient-history-limit
-
 This option controls how many history elements are kept at the time
 the history is saved in @code{transient-history-file}.
 @end defopt
 
 @node Getting Help for Suffix Commands
 @section Getting Help for Suffix Commands
+
 @cindex getting help
 
 Transients can have many suffixes and infixes that the user might not
@@ -527,14 +519,13 @@ provides access to the documentation directly from the 
active
 transient.
 
 @table @asis
+@item @kbd{C-h} (@code{transient-help})
 @kindex C-h
 @findex transient-help
-@item @kbd{C-h} @tie{}@tie{}@tie{}@tie{}(@code{transient-help})
-
-This command enters help mode.  When help mode is active,
-typing a key shows information about the suffix command that the key
-is normally bound to (instead of invoking it).  Pressing @kbd{C-h} a
-second time shows information about the @emph{prefix} command.
+This command enters help mode.  When help mode is active, typing a
+key shows information about the suffix command that the key normally
+is bound to (instead of invoking it).  Pressing @kbd{C-h} a second time
+shows information about the @emph{prefix} command.
 
 After typing a key, the stack of transient states is suspended and
 information about the suffix command is shown instead.  Typing @kbd{q} in
@@ -550,6 +541,7 @@ non-infix suffixes this is usually appropriate.
 
 @node Enabling and Disabling Suffixes
 @section Enabling and Disabling Suffixes
+
 @cindex enabling suffixes
 @cindex disabling suffixes
 
@@ -571,7 +563,7 @@ displayed at any level.
 
 The levels of individual transients and/or their individual suffixes
 can be changed interactively, by invoking the transient and then
-pressing @kbd{C-x l} to enter the ``edit'' mode, see below.
+pressing @kbd{C-x l} to enter the “edit” mode, see below.
 
 The default level for both transients and their suffixes is 4.  The
 @code{transient-default-level} option only controls the default for
@@ -582,23 +574,20 @@ very important suffixes on a lower level, so that they 
remain
 available even if the user lowers the transient level.
 
 @defopt transient-default-level
-
 This option controls which suffix levels are made available by
 default.  It sets the transient-level for transients for which the
 user has not set that individually.
 @end defopt
 
 @defopt transient-levels-file
-
 This option names the file that is used to persist the levels of
 transients and their suffixes between Emacs sessions.
 @end defopt
 
 @table @asis
+@item @kbd{C-x l} (@code{transient-set-level})
 @kindex C-x l
 @findex transient-set-level
-@item @kbd{C-x l} @tie{}@tie{}@tie{}@tie{}(@code{transient-set-level})
-
 This command enters edit mode.  When edit mode is active, then all
 infixes and suffixes that are currently usable are displayed along
 with their levels.  The colors of the levels indicate whether they
@@ -616,9 +605,9 @@ To change the transient level press @kbd{C-x l} again.
 To exit edit mode press @kbd{C-g}.
 
 Note that edit mode does not display any suffixes that are not
-currently usable.  @code{magit-rebase}, for example, shows different suffixes
-depending on whether a rebase is already in progress or not.  The
-predicates also apply in edit mode.
+currently usable.  @code{magit-rebase}, for example, shows different
+suffixes depending on whether a rebase is already in progress or
+not.  The predicates also apply in edit mode.
 
 Therefore, to control which suffixes are available given a certain
 state, you have to make sure that that state is currently active.
@@ -633,27 +622,29 @@ following commands.  These commands are never shown in 
the transient
 window, and the key bindings are the same as for @code{scroll-up-command} and
 @code{scroll-down-command} in other buffers.
 
-@findex transient-scroll-up arg
 @deffn Command transient-scroll-up arg
-
-This command scrolls text of transient popup window upward @var{arg}
-lines.  If @var{arg} is @code{nil}, then it scrolls near full screen.  This
+This command scrolls text of transient popup window upward @var{ARG}
+lines.  If @var{ARG} is @code{nil}, then it scrolls near full screen.  This
 is a wrapper around @code{scroll-up-command} (which see).
 @end deffn
 
-@findex transient-scroll-down arg
 @deffn Command transient-scroll-down arg
-
-This command scrolls text of transient popup window down @var{arg}
-lines.  If @var{arg} is @code{nil}, then it scrolls near full screen.  This
+This command scrolls text of transient popup window down @var{ARG}
+lines.  If @var{ARG} is @code{nil}, then it scrolls near full screen.  This
 is a wrapper around @code{scroll-down-command} (which see).
 @end deffn
 
-@node Other Options
-@section Other Options
+@node Configuration
+@section Configuration
 
-@defopt transient-show-popup
+More options are described in @ref{Common Suffix Commands}, in @ref{Saving 
Values}, in @ref{Using History} and in @ref{Enabling and Disabling Suffixes}.
+
+@anchor{Essential Options}
+@subheading Essential Options
+
+Also see @ref{Common Suffix Commands}.
 
+@defopt transient-show-popup
 This option controls whether the current transient's infix and
 suffix commands are shown in the popup buffer.
 
@@ -662,13 +653,11 @@ suffix commands are shown in the popup buffer.
 If @code{t} (the default) then the popup buffer is shown as soon as a
 transient prefix command is invoked.
 
-
 @item
 If @code{nil}, then the popup buffer is not shown unless the user
 explicitly requests it, by pressing an incomplete prefix key
 sequence.
 
-
 @item
 If a number, then the a brief one-line summary is shown instead of
 the popup buffer.  If zero or negative, then not even that summary
@@ -676,45 +665,43 @@ is shown; only the pressed key itself is shown.
 
 The popup is shown when the user explicitly requests it by
 pressing an incomplete prefix key sequence.  Unless this is zero,
-the popup is shown after that many seconds of inactivity
-(using the absolute value).
+the popup is shown after that many seconds of inactivity (using
+the absolute value).
 @end itemize
 @end defopt
 
 @defopt transient-enable-popup-navigation
-
 This option controls whether navigation commands are enabled in the
 transient popup buffer.
 
 While a transient is active the transient popup buffer is not the
 current buffer, making it necessary to use dedicated commands to act
 on that buffer itself.  This is disabled by default.  If this option
-is non-nil, then the following features are available:
+is non-@code{nil}, then the following features are available:
 
 @itemize
 @item
-@key{UP} moves the cursor to the previous suffix.
-@key{DOWN} moves the cursor to the next suffix.
-@key{RET} invokes the suffix the cursor is on.
-
+@kbd{@key{UP}} moves the cursor to the previous suffix.
 @item
-@key{mouse-1} invokes the clicked on suffix.
-
+@kbd{@key{DOWN}} moves the cursor to the next suffix.
+@item
+@kbd{@key{RET}} invokes the suffix the cursor is on.
+@item
+@kbd{mouse-1} invokes the clicked on suffix.
 @item
 @kbd{C-s} and @kbd{C-r} start isearch in the popup buffer.
 @end itemize
 @end defopt
 
 @defopt transient-display-buffer-action
-
 This option specifies the action used to display the transient popup
 buffer.  The transient popup buffer is displayed in a window using
-@code{(display-buffer @var{buffer} transient-display-buffer-action)}.
+@code{(display-buffer @var{BUFFER} transient-display-buffer-action)}.
 
-The value of this option has the form @code{(@var{function} . @var{alist})},
-where @var{function} is a function or a list of functions.  Each such
+The value of this option has the form @code{(@var{FUNCTION} . @var{ALIST})},
+where @var{FUNCTION} is a function or a list of functions.  Each such
 function should accept two arguments: a buffer to display and an
-alist of the same form as @var{alist}.  @xref{Choosing Window,,,elisp,},
+alist of the same form as @var{ALIST}.  @xref{Choosing Window,,,elisp,},
 for details.
 
 The default is:
@@ -727,7 +714,7 @@ The default is:
 @end lisp
 
 This displays the window at the bottom of the selected frame.
-Another useful @var{function} is @code{display-buffer-below-selected}, which
+Another useful @var{FUNCTION} is @code{display-buffer-below-selected}, which
 is what @code{magit-popup} used by default.  For more alternatives see
 @ref{Buffer Display Action Functions,,,elisp,}, and see @ref{Buffer Display
 Action Alists,,,elisp,}.
@@ -748,8 +735,20 @@ If you change the value of this option, then you might also
 want to change the value of @code{transient-mode-line-format}.
 @end defopt
 
-@defopt transient-mode-line-format
+@anchor{Accessibility Options}
+@subheading Accessibility Options
+
+@defopt transient-force-single-column
+This option controls whether the use of a single column to display
+suffixes is enforced.  This might be useful for users with low
+vision who use large text and might otherwise have to scroll in two
+dimensions.
+@end defopt
+
+@anchor{Auxiliary Options}
+@subheading Auxiliary Options
 
+@defopt transient-mode-line-format
 This option controls whether the transient popup buffer has a
 mode-line, separator line, or neither.
 
@@ -759,23 +758,28 @@ good value.
 
 If @code{line} (the default), then the buffer also has no mode-line, but a
 thin line is drawn instead, using the background color of the face
-@code{transient-separator}.  Text-mode frames cannot display thin lines, and
-therefore fall back to treating @code{line} like @code{nil}.
+@code{transient-separator}.  Text-mode frames cannot display thin lines,
+and therefore fall back to treating @code{line} like @code{nil}.
 
 Otherwise this can be any mode-line format.  @xref{Mode Line
 Format,,,elisp,}, for details.
 @end defopt
 
-@defopt transient-read-with-initial-input
+@defopt transient-semantic-coloring
+This option controls whether prefixes and suffixes are colored in
+a Hydra-like fashion.
 
-This option controls whether the last history element is used as the
-initial minibuffer input when reading the value of an infix argument
-from the user.  If @code{nil}, there is no initial input and the first
-element has to be accessed the same way as the older elements.
+If non-@code{nil}, then the key binding of each suffix is colorized to
+indicate whether it exits the transient state or not.  The color of
+the prefix is indicated using the line that is drawn when the value
+of @code{transient-mode-line-format} is @code{line}.
+
+For more information about how Hydra uses colors see
+@uref{https://github.com/abo-abo/hydra#color} and
+@uref{https://oremacs.com/2015/02/19/hydra-colors-reloaded}.
 @end defopt
 
 @defopt transient-highlight-mismatched-keys
-
 This option controls whether key bindings of infix commands that do
 not match the respective command-line argument should be highlighted.
 For other infix commands this option has no effect.
@@ -795,7 +799,6 @@ The highlighting is done using one of the faces
 @end defopt
 
 @defopt transient-substitute-key-function
-
 This function is used to modify key bindings.  If the value of this
 option is @code{nil} (the default), then no substitution is performed.
 
@@ -819,14 +822,52 @@ optimized for lisp.
 @end lisp
 @end defopt
 
-@defopt transient-detect-key-conflicts
+@defopt transient-read-with-initial-input
+This option controls whether the last history element is used as the
+initial minibuffer input when reading the value of an infix argument
+from the user.  If @code{nil}, there is no initial input and the first
+element has to be accessed the same way as the older elements.
+@end defopt
+
+@defopt transient-hide-during-minibuffer-read
+This option controls whether the transient buffer is hidden while
+user input is being read in the minibuffer.
+@end defopt
+
+@defopt transient-align-variable-pitch
+This option controls whether columns are aligned pixel-wise in the
+popup buffer.
+
+If this is non-@code{nil}, then columns are aligned pixel-wise to support
+variable-pitch fonts.  Keys are not aligned, so you should use a
+fixed-pitch font for the @code{transient-key} face.  Other key faces
+inherit from that face unless a theme is used that breaks that
+relationship.
+
+This option is intended for users who use a variable-pitch font for
+the @code{default} face.
+@end defopt
+
+@defopt transient-force-fixed-pitch
+This option controls whether to force the use of a monospaced font
+in popup buffer.  Even if you use a proportional font for the
+@code{default} face, you might still want to use a monospaced font in
+transient's popup buffer.  Setting this option to @code{t} causes 
@code{default}
+to be remapped to @code{fixed-pitch} in that buffer.
+@end defopt
+
+@anchor{Developer Options}
+@subheading Developer Options
 
+These options are mainly intended for developers.
+
+@defopt transient-detect-key-conflicts
 This option controls whether key binding conflicts should be
-detected at the time the transient is invoked.  If so, this
-results in an error, which prevents the transient from being used.
-Because of that, conflicts are ignored by default.
+detected at the time the transient is invoked.  If so, this results
+in an error, which prevents the transient from being used.  Because
+of that, conflicts are ignored by default.
 
-Conflicts cannot be determined earlier, i.e.@: when the transient is
+Conflicts cannot be determined earlier, i.e., when the transient is
 being defined and when new suffixes are being added, because at that
 time there can be false-positives.  It is actually valid for
 multiple suffixes to share a common key binding, provided the
@@ -834,48 +875,51 @@ predicates of those suffixes prevent that more than one 
of them is
 enabled at a time.
 @end defopt
 
-@defopt transient-force-fixed-pitch
+@defopt transient-highlight-higher-levels
+This option controls whether suffixes that would not be available by
+default are highlighted.
 
-This option controls whether to force the use of a monospaced font
-in popup buffer.  Even if you use a proportional font for the
-@code{default} face, you might still want to use a monospaced font in
-transient's popup buffer.  Setting this option to @code{t} causes 
@code{default}
-to be remapped to @code{fixed-pitch} in that buffer.
+When non-@code{nil} then the descriptions of suffixes are highlighted if
+their level is above 4, the default of @code{transient-default-level}.
+Assuming you have set that variable to 7, this highlights all
+suffixes that won't be available to users without them making the
+same customization.
 @end defopt
 
 @node Modifying Existing Transients
 @chapter Modifying Existing Transients
+
 @cindex modifying existing transients
 
-To an extent, transients can be customized interactively, see @ref{Enabling 
and Disabling Suffixes}.  This section explains how existing transients
-can be further modified non-interactively.
+To an extent, transients can be customized interactively, see
+@ref{Enabling and Disabling Suffixes}.  This section explains how existing
+transients can be further modified non-interactively.
 
 The following functions share a few arguments:
 
 @itemize
 @item
-@var{prefix} is a transient prefix command, a symbol.
-
+@var{PREFIX} is a transient prefix command, a symbol.
 
 @item
-@var{suffix} is a transient infix or suffix specification in the same form
+@var{SUFFIX} is a transient infix or suffix specification in the same form
 as expected by @code{transient-define-prefix}.  Note that an infix is a
-special kind of suffix.  Depending on context ``suffixes'' means
-``suffixes (including infixes)'' or ``non-infix suffixes''.  Here it
+special kind of suffix.  Depending on context “suffixes” means
+“suffixes (including infixes)” or “non-infix suffixes”.  Here it
 means the former.  @xref{Suffix Specifications}.
 
-@var{suffix} may also be a group in the same form as expected by
+@var{SUFFIX} may also be a group in the same form as expected by
 @code{transient-define-prefix}.  @xref{Group Specifications}.
 
 
 @item
-@var{loc} is a command, a key vector, a key description (a string as
+@var{LOC} is a command, a key vector, a key description (a string as
 returned by @code{key-description}), or a list specifying coordinates (the
 last element may also be a command or key).  For example @code{(1 0 -1)}
 identifies the last suffix (@code{-1}) of the first subgroup (@code{0}) of the
 second group (@code{1}).
 
-If @var{loc} is a list of coordinates, then it can be used to identify a
+If @var{LOC} is a list of coordinates, then it can be used to identify a
 group, not just an individual suffix command.
 
 The function @code{transient-get-suffix} can be useful to determine whether
@@ -885,55 +929,53 @@ at the definition of the transient prefix command.
 @end itemize
 
 These functions operate on the information stored in the
-@code{transient--layout} property of the @var{prefix} symbol.  Suffix entries 
in
-that tree are not objects but have the form @code{(@var{level}
-@var{class} @var{plist})}, where
-@var{plist} should set at least @code{:key}, @code{:description} and
-@code{:command}.
-
-@defun transient-insert-suffix prefix loc suffix
+@code{transient--layout} property of the @var{PREFIX} symbol.  Suffix entries 
in
+that tree are not objects but have the form @code{(@var{LEVEL} @var{CLASS} 
@var{PLIST})}, where
+@var{PLIST} should set at least @code{:key}, @code{:description} and 
@code{:command}.
 
-This function inserts suffix or group @var{suffix} into @var{prefix}
-before @var{loc}.
+@defun transient-insert-suffix prefix loc suffix &optional keep-other
 @end defun
-
-@defun transient-append-suffix prefix loc suffix
-
-This function inserts suffix or group @var{suffix} into @var{prefix}
-after @var{loc}.
+@defun transient-append-suffix prefix loc suffix &optional keep-other
+These functions insert the suffix or group @var{SUFFIX} into @var{PREFIX} 
before
+or after @var{LOC}.
+
+Conceptually adding a binding to a transient prefix is similar to
+adding a binding to a keymap, but this is complicated by the fact
+that multiple suffix commands can be bound to the same key, provided
+they are never active at the same time, see @ref{Predicate Slots}.
+
+Unfortunately both false-positives and false-negatives are possible.
+To deal with the former use non-nil @var{KEEP-OTHER@.}  To deal with the
+latter remove the conflicting binding explicitly.
 @end defun
 
 @defun transient-replace-suffix prefix loc suffix
-
-This function replaces the suffix or group at @var{loc} in @var{prefix} with
-suffix or group @var{suffix}.
+This function replaces the suffix or group at @var{LOC} in @var{PREFIX} with
+suffix or group @var{SUFFIX}.
 @end defun
 
 @defun transient-remove-suffix prefix loc
-
-This function removes the suffix or group at @var{loc} in @var{prefix}.
+This function removes the suffix or group at @var{LOC} in @var{PREFIX}.
 @end defun
 
 @defun transient-get-suffix prefix loc
-
-This function returns the suffix or group at @var{loc} in @var{prefix}.  The
+This function returns the suffix or group at @var{LOC} in @var{PREFIX}.  The
 returned value has the form mentioned above.
 @end defun
 
 @defun transient-suffix-put prefix loc prop value
-
-This function edits the suffix or group at @var{loc} in @var{prefix},
-by setting the @var{prop} of its plist to @var{value}.
+This function edits the suffix or group at @var{LOC} in @var{PREFIX}, by 
setting
+the @var{PROP} of its plist to @var{VALUE}.
 @end defun
 
 Most of these functions do not signal an error if they cannot perform
 the requested modification.  The functions that insert new suffixes
-show a warning if @var{loc} cannot be found in @var{prefix}, without
-signaling an error.  The reason for doing it like this is that
-establishing a key binding (and that is what we essentially are trying
-to do here) should not prevent the rest of the configuration from
-loading.  Among these functions only @code{transient-get-suffix} and
-@code{transient-suffix-put} may signal an error.
+show a warning if @var{LOC} cannot be found in @var{PREFIX} without signaling 
an
+error.  The reason for doing it like this is that establishing a key
+binding (and that is what we essentially are trying to do here) should
+not prevent the rest of the configuration from loading.  Among these
+functions only @code{transient-get-suffix} and @code{transient-suffix-put} may
+signal an error.
 
 @node Defining New Commands
 @chapter Defining New Commands
@@ -957,12 +999,11 @@ defines the complete transient, not just the transient 
prefix command
 that is used to invoke that transient.
 
 @defmac transient-define-prefix name arglist [docstring] [keyword 
value]@dots{} group@dots{} [body@dots{}]
-
-This macro defines @var{name} as a transient prefix command and binds the
+This macro defines @var{NAME} as a transient prefix command and binds the
 transient's infix and suffix commands.
 
-@var{arglist} are the arguments that the prefix command takes.
-@var{docstring} is the documentation string and is optional.
+@var{ARGLIST} are the arguments that the prefix command takes.
+@var{DOCSTRING} is the documentation string and is optional.
 
 These arguments can optionally be followed by keyword-value pairs.
 Each key has to be a keyword symbol, either @code{:class} or a keyword
@@ -970,11 +1011,11 @@ argument supported by the constructor of that class.  The
 @code{transient-prefix} class is used if the class is not specified
 explicitly.
 
-@var{group}s add key bindings for infix and suffix commands and specify
+@var{GROUP}s add key bindings for infix and suffix commands and specify
 how these bindings are presented in the popup buffer.  At least one
-@var{group} has to be specified.  @xref{Binding Suffix and Infix Commands}.
+@var{GROUP} has to be specified.  @xref{Binding Suffix and Infix Commands}.
 
-The @var{body} is optional.  If it is omitted, then @var{arglist} is ignored 
and
+The @var{BODY} is optional.  If it is omitted, then @var{ARGLIST} is ignored 
and
 the function definition becomes:
 
 @lisp
@@ -983,15 +1024,15 @@ the function definition becomes:
   (transient-setup 'NAME))
 @end lisp
 
-If @var{body} is specified, then it must begin with an @code{interactive} form
-that matches @var{arglist}, and it must call @code{transient-setup}.  It may,
+If @var{BODY} is specified, then it must begin with an @code{interactive} form
+that matches @var{ARGLIST}, and it must call @code{transient-setup}.  It may,
 however, call that function only when some condition is satisfied.
 
 @cindex scope of a transient
 All transients have a (possibly @code{nil}) value, which is exported when
 suffix commands are called, so that they can consume that value.
 For some transients it might be necessary to have a sort of
-secondary value, called a ``scope''.  Such a scope would usually be
+secondary value, called a “scope”.  Such a scope would usually be
 set in the command's @code{interactive} form and has to be passed to the
 setup function:
 
@@ -1013,8 +1054,8 @@ described below.
 
 Users and third-party packages can add additional bindings using
 functions such as @code{transient-insert-suffix} (@pxref{Modifying
-Existing Transients}).  These functions take a ``suffix
-specification'' as one of their arguments, which has the same form as
+Existing Transients}).  These functions take a “suffix
+specification” as one of their arguments, which has the same form as
 the specifications used in @code{transient-define-prefix}.
 
 @menu
@@ -1024,6 +1065,7 @@ the specifications used in @code{transient-define-prefix}.
 
 @node Group Specifications
 @subsection Group Specifications
+
 @cindex group specifications
 
 The suffix and infix commands of a transient are organized in groups.
@@ -1043,39 +1085,39 @@ brackets to do the latter.
 Group specifications then have this form:
 
 @lisp
-[@{@var{level}@} @{@var{description}@}
- @{@var{keyword} @var{value}@}...
- @var{element}...]
+[@{@var{LEVEL}@} @{@var{DESCRIPTION}@}
+ @{@var{KEYWORD} @var{VALUE}@}...
+ @var{ELEMENT}...]
 @end lisp
 
-The @var{level} is optional and defaults to 4.  @xref{Enabling and
+The @var{LEVEL} is optional and defaults to 4.  @xref{Enabling and
 Disabling Suffixes}.
 
-The @var{description} is optional.  If present, it is used as the heading of
+The @var{DESCRIPTION} is optional.  If present, it is used as the heading of
 the group.
 
-The @var{keyword}-@var{value} pairs are optional.  Each keyword has to be a
+The @var{KEYWORD}-@var{VALUE} pairs are optional.  Each keyword has to be a
 keyword symbol, either @code{:class} or a keyword argument supported by the
 constructor of that class.
 
 @itemize
 @item
 One of these keywords, @code{:description}, is equivalent to specifying
-@var{description} at the very beginning of the vector.  The recommendation
+@var{DESCRIPTION} at the very beginning of the vector.  The recommendation
 is to use @code{:description} if some other keyword is also used, for
-consistency, or @var{description} otherwise, because it looks better.
+consistency, or @var{DESCRIPTION} otherwise, because it looks better.
 
 @item
-Likewise @code{:level} is equivalent to @var{level}.
+Likewise @code{:level} is equivalent to @var{LEVEL}.
 
 @item
 Other important keywords include the @code{:if...} keywords.  These
 keywords control whether the group is available in a certain
 situation.
 
-For example, one group of the @code{magit-rebase} transient uses
-@code{:if magit-rebase-in-progress-p}, which contains the suffixes
-that are useful while rebase is already in progress; and another that uses
+For example, one group of the @code{magit-rebase} transient uses @code{:if
+  magit-rebase-in-progress-p}, which contains the suffixes that are
+useful while rebase is already in progress; and another that uses
 @code{:if-not magit-rebase-in-progress-p}, which contains the suffixes that
 initiate a rebase.
 
@@ -1096,9 +1138,9 @@ suffixes, which assumes that a predicate like this is 
used:
 @end lisp
 
 @item
-The value of @code{:setup-children}, if non-@code{nil}, is a function
-that takes two arguments the group object itself and a list of children.
-The children are given as a, potentially empty, list consisting
+The value of @code{:setup-children}, if non-@code{nil}, is a function that 
takes
+two arguments the group object itself and a list of children.
+The children are given as a (potentially empty) list consisting
 of either group or suffix specifications.  It can make arbitrary
 changes to the children including constructing new children from
 scratch.  Also see @code{transient-setup-children}.
@@ -1109,21 +1151,21 @@ contained in a group are right padded, effectively 
aligning the
 descriptions.
 @end itemize
 
-The @var{element}s are either all subgroups (vectors), or all suffixes
+The @var{ELEMENT}s are either all subgroups (vectors), or all suffixes
 (lists) and strings.  (At least currently no group type exists that
 would allow mixing subgroups with commands at the same level, though
 in principle there is nothing that prevents that.)
 
-If the @var{element}s are not subgroups, then they can be a mixture of lists
+If the @var{ELEMENT}s are not subgroups, then they can be a mixture of lists
 that specify commands and strings.  Strings are inserted verbatim.
 The empty string can be used to insert gaps between suffixes, which is
 particularly useful if the suffixes are outlined as a table.
 
 Variables are supported inside group specifications.  For example in
 place of a direct subgroup specification, a variable can be used whose
-value is a vector that qualifies as a group specification.  Likewise, a
-variable can be used where a suffix specification is expected.  Lists
-of group or suffix specifications are also supported.  Indirect
+value is a vector that qualifies as a group specification.  Likewise,
+a variable can be used where a suffix specification is expected.
+Lists of group or suffix specifications are also supported.  Indirect
 specifications are resolved when the transient prefix is being
 defined.
 
@@ -1131,6 +1173,7 @@ The form of suffix specifications is documented in the 
next node.
 
 @node Suffix Specifications
 @subsection Suffix Specifications
+
 @cindex suffix specifications
 
 A transient's suffix and infix commands are bound when the transient
@@ -1140,37 +1183,36 @@ prefix command is defined using 
@code{transient-define-prefix}, see
 individual suffix command.
 
 The same form is also used when later binding additional commands
-using functions such as @code{transient-insert-suffix},
-see @ref{Modifying Existing Transients}.
+using functions such as @code{transient-insert-suffix}, see @ref{Modifying 
Existing Transients}.
 
-Note that an infix is a special kind of suffix.  Depending on context
-``suffixes'' means ``suffixes (including infixes)'' or ``non-infix
-suffixes''.  Here it means the former.
+Note that an infix is a special kind of suffix. Depending on context
+“suffixes” means “suffixes (including infixes)” or “non-infix
+suffixes”.  Here it means the former.
 
 Suffix specifications have this form:
 
 @lisp
-([@var{level}]
- [@var{key}] [@var{description}]
- @var{command}|@var{argument} [@var{keyword} @var{value}]...)
+([@var{LEVEL}]
+ [@var{KEY}] [@var{DESCRIPTION}]
+ @var{COMMAND}|@var{ARGUMENT} [@var{KEYWORD} @var{VALUE}]...)
 @end lisp
 
-@var{level}, @var{key} and @var{description} can also be specified using the 
@var{keyword}s
+@var{LEVEL}, @var{KEY} and @var{DESCRIPTION} can also be specified using the 
@var{KEYWORD}s
 @code{:level}, @code{:key} and @code{:description}.  If the object that is 
associated with
-@var{command} sets these properties, then they do not have to be specified
+@var{COMMAND} sets these properties, then they do not have to be specified
 here.  You can however specify them here anyway, possibly overriding
 the object's values just for the binding inside this transient.
 
 @itemize
 @item
-@var{level} is the suffix level, an integer between 1 and 7.
+@var{LEVEL} is the suffix level, an integer between 1 and 7.
 @xref{Enabling and Disabling Suffixes}.
 
 @item
-@var{key} is the key binding, either a vector or key description string.
+@var{KEY} is the key binding, either a vector or key description string.
 
 @item
-@var{description} is the description, either a string or a function that
+@var{DESCRIPTION} is the description, either a string or a function that
 returns a string.  The function should be a lambda expression to
 avoid ambiguity.  In some cases a symbol that is bound as a function
 would also work but to be safe you should use @code{:description} in that
@@ -1182,7 +1224,7 @@ argument that is mandatory in all cases.
 
 @itemize
 @item
-Usually @var{command} is a symbol that is bound as a function, which has
+@var{COMMAND} should be a symbol that is bound as a function, which has
 to be defined or at least autoloaded as a command by the time the
 containing prefix command is invoked.
 
@@ -1190,15 +1232,13 @@ Any command will do; it does not need to have an object 
associated
 with it (as would be the case if @code{transient-define-suffix} or
 @code{transient-define-infix} were used to define it).
 
-The command can also be a closure or lambda expression, but that
-should only be used for dynamic transients whose suffixes are
-defined when the prefix command is invoked.  See information about
-the @code{:setup-children} function in @ref{Group Specifications}.
+Anonymous, dynamically defined suffix commands are also support.
+See information about the @code{:setup-children} function in @ref{Group 
Specifications}.
 
 As mentioned above, the object that is associated with a command can
 be used to set the default for certain values that otherwise have to
 be set in the suffix specification.  Therefore if there is no object,
-then you have to make sure to specify the @var{key} and the @var{description}.
+then you have to make sure to specify the @var{KEY} and the @var{DESCRIPTION}.
 
 As a special case, if you want to add a command that might be neither
 defined nor autoloaded, you can use a workaround like:
@@ -1209,8 +1249,8 @@ defined nor autoloaded, you can use a workaround like:
     :if (lambda () (featurep 'no-library))))
 @end lisp
 
-Instead of @code{featurep} you could also use @code{require} with a
-non-nil value for @var{noerror}.
+Instead of @code{featurep} you could also use @code{require} with a 
non-@code{nil} value
+for @var{NOERROR}.
 
 @item
 The mandatory argument can also be a command-line argument, a
@@ -1227,30 +1267,29 @@ used.
 
 Unless the class is specified explicitly, the appropriate class is
 guessed based on the long argument.  If the argument ends with @samp{=}
-(e.g. @samp{--format=}) then @code{transient-option} is used, otherwise
+(e.g., @samp{--format=}) then @code{transient-option} is used, otherwise
 @code{transient-switch}.
 @end itemize
 
-Finally, details can be specified using optional
-@var{keyword}-@var{value} pairs.
+Finally, details can be specified using optional @var{KEYWORD}-@var{VALUE} 
pairs.
 Each keyword has to be a keyword symbol, either @code{:class} or a keyword
 argument supported by the constructor of that class.  See @ref{Suffix Slots}.
 
 @node Defining Suffix and Infix Commands
 @section Defining Suffix and Infix Commands
+
 @cindex defining suffix commands
 @cindex defining infix commands
 
-Note that an infix is a special kind of suffix.  Depending on context
-``suffixes'' means ``suffixes (including infixes)'' or ``non-infix
-suffixes''.
+Note that an infix is a special kind of suffix. Depending on context
+“suffixes” means “suffixes (including infixes)” or “non-infix
+suffixes”.
 
 @defmac transient-define-suffix name arglist [docstring] [keyword 
value]@dots{} body@dots{}
+This macro defines @var{NAME} as a transient suffix command.
 
-This macro defines @var{name} as a transient suffix command.
-
-@var{arglist} are the arguments that the command takes.
-@var{docstring} is the documentation string and is optional.
+@var{ARGLIST} are the arguments that the command takes.
+@var{DOCSTRING} is the documentation string and is optional.
 
 These arguments can optionally be followed by keyword-value pairs.
 Each keyword has to be a keyword symbol, either @code{:class} or a keyword
@@ -1258,17 +1297,16 @@ argument supported by the constructor of that class.  
The
 @code{transient-suffix} class is used if the class is not specified
 explicitly.
 
-The @var{body} must begin with an @code{interactive} form that matches 
@var{arglist}.
+The @var{BODY} must begin with an @code{interactive} form that matches 
@var{ARGLIST}.
 The infix arguments are usually accessed by using @code{transient-args}
 inside @code{interactive}.
 @end defmac
 
 @defmac transient-define-infix name arglist [docstring] [keyword value]@dots{}
+This macro defines @var{NAME} as a transient infix command.
 
-This macro defines @var{name} as a transient infix command.
-
-@var{arglist} is always ignored (but mandatory never-the-less) and
-reserved for future use.  @var{docstring} is the documentation string and
+@var{ARGLIST} is always ignored (but mandatory never-the-less) and
+reserved for future use.  @var{DOCSTRING} is the documentation string and
 is optional.
 
 The keyword-value pairs are mandatory.  All transient infix commands
@@ -1297,13 +1335,12 @@ Different infix commands behave differently because the 
concrete
 methods are different for different infix command classes.  In rare
 cases the above command function might not be suitable, even if you
 define your own infix command class.  In that case you have to use
-@code{transient-suffix-command} to define the infix command and use @code{t} as
-the value of the @code{:transient} keyword.
+@code{transient-define-suffix} to define the infix command and use @code{t} as 
the
+value of the @code{:transient} keyword.
 @end defmac
 
 @defmac transient-define-argument name arglist [docstring] [keyword 
value]@dots{}
-
-This macro defines @var{name} as a transient infix command.
+This macro defines @var{NAME} as a transient infix command.
 
 This is an alias for @code{transient-define-infix}.  Only use this alias
 to define an infix command that actually sets an infix argument.
@@ -1313,7 +1350,6 @@ To define an infix command that, for example, sets a 
variable, use
 
 @node Using Infix Arguments
 @section Using Infix Arguments
-@cindex using infix arguments
 
 The functions and the variables described below allow suffix commands
 to access the value of the transient from which they were invoked;
@@ -1332,61 +1368,56 @@ function, which for infix arguments serves about the 
same purpose as
 @code{prefix-arg} serves for prefix arguments.
 
 @defun transient-args prefix
-
 This function returns the value of the transient prefix command
-@var{prefix}.
+@var{PREFIX}.
 
 If the current command was invoked from the transient prefix command
-@var{prefix}, then it returns the active infix arguments.  If the current
-command was not invoked from @var{prefix}, then it returns the set, saved
-or default value for @var{prefix}.
+@var{PREFIX}, then it returns the active infix arguments.  If the current
+command was not invoked from @var{PREFIX}, then it returns the set, saved
+or default value for @var{PREFIX}.
 @end defun
 
 @defun transient-arg-value arg args
-
-This function return the value of @var{arg} as it appears in @var{args}.
+This function return the value of @var{ARG} as it appears in @var{ARGS}.
 
 For a switch a boolean is returned.  For an option the value is
 returned as a string, using the empty string for the empty value,
-or @code{nil} if the option does not appear in @var{args}.
+or @code{nil} if the option does not appear in @var{ARGS}.
 @end defun
 
 @defun transient-suffixes prefix
-
 This function returns the suffixes of the transient prefix command
-@var{prefix}.  This is a list of objects.  This function should only be
+@var{PREFIX}.  This is a list of objects.  This function should only be
 used if you need the objects (as opposed to just their values) and
-if the current command is not being invoked from @var{prefix}.
+if the current command is not being invoked from @var{PREFIX}.
 @end defun
 
 @defvar transient-current-suffixes
-
 The suffixes of the transient from which this suffix command was
 invoked.  This is a list of objects.  Usually it is sufficient to
 instead use the function @code{transient-args}, which returns a list of
 values.  In complex cases it might be necessary to use this variable
-instead, i.e.@: if you need access to information beside the value.
+instead, i.e., if you need access to information beside the value.
 @end defvar
 
 @defvar transient-current-prefix
-
 The transient from which this suffix command was invoked.  The
 returned value is a @code{transient-prefix} object, which holds information
 associated with the transient prefix command.
 @end defvar
 
 @defvar transient-current-command
-
 The transient from which this suffix command was invoked.  The
 returned value is a symbol, the transient prefix command.
 @end defvar
 
 @node Transient State
 @section Transient State
+
 @cindex transient state
 
-Invoking a transient prefix command ``activates'' the respective
-transient, i.e.@: it puts a transient keymap into effect, which binds
+Invoking a transient prefix command “activates” the respective
+transient, i.e., it puts a transient keymap into effect, which binds
 the transient's infix and suffix commands.
 
 The default behavior while a transient is active is as follows:
@@ -1397,20 +1428,20 @@ Invoking an infix command does not affect the transient 
state; the
 transient remains active.
 
 @item
-Invoking a (non-infix) suffix command ``deactivates'' the transient
+Invoking a (non-infix) suffix command “deactivates” the transient
 state by removing the transient keymap and performing some
 additional cleanup.
 
 @item
 Invoking a command that is bound in a keymap other than the
 transient keymap is disallowed and trying to do so results in a
-warning.  This does not ``deactivate'' the transient.
+warning.  This does not “deactivate” the transient.
 @end itemize
 
 But these are just the defaults.  Whether a certain command
-deactivates or ``exits'' the transient is configurable.  There is more
-than one way in which a command can be ``transient'' or ``non-transient'';
-the exact behavior is implemented by calling a so-called ``pre-command''
+deactivates or “exits” the transient is configurable.  There is more
+than one way in which a command can be “transient” or “non-transient”;
+the exact behavior is implemented by calling a so-called “pre-command”
 function.  Whether non-suffix commands are allowed to be called is
 configurable per transient.
 
@@ -1426,10 +1457,8 @@ Valid values are booleans and the pre-commands described 
below.
 @itemize
 @item
 @code{t} is equivalent to @code{transient--do-stay}.
-
 @item
 @code{nil} is equivalent to @code{transient--do-exit}.
-
 @item
 If @code{transient} is unbound (and that is actually the default for
 non-infix suffixes) then the value of the prefix's
@@ -1439,18 +1468,18 @@ essentially equivalent to it being @code{nil}.
 @end itemize
 
 @item
-A suffix command can be a prefix command itself, i.e. a
-``sub-prefix''.  While a sub-prefix is active we nearly always want
-@kbd{C-g} to take the user back to the ``super-prefix''.  However in rare
+A suffix command can be a prefix command itself, i.e., a
+“sub-prefix”.  While a sub-prefix is active we nearly always want
+@kbd{C-g} to take the user back to the “super-prefix”.  However in rare
 cases this may not be desirable, and that makes the following
 complication necessary:
 
 For @code{transient-suffix} objects the @code{transient} slot is unbound.  We 
can
 ignore that for the most part because, as stated above, @code{nil} and the
-slot being unbound are equivalent, and mean ``do exit''.  That isn't
+slot being unbound are equivalent, and mean “do exit”.  That isn't
 actually true for suffixes that are sub-prefixes though.  For such
-suffixes unbound means ``do exit but allow going back'', which is the
-default, while @code{nil} means ``do exit permanently'', which requires that
+suffixes unbound means “do exit but allow going back”, which is the
+default, while @code{nil} means “do exit permanently”, which requires that
 slot to be explicitly set to that value.
 
 @item
@@ -1465,7 +1494,7 @@ called by @code{transient--pre-command}, a function on 
@code{pre-command-hook} a
 the value that they return determines whether the transient is exited.
 To do so the value of one of the constants @code{transient--exit} or
 @code{transient--stay} is used (that way we don't have to remember if @code{t} 
means
-``exit'' or ``stay'').
+“exit” or “stay”).
 
 Additionally, these functions may change the value of @code{this-command}
 (which explains why they have to be called using @code{pre-command-hook}),
@@ -1480,7 +1509,6 @@ The default for infixes is @code{transient--do-stay}.  
This is also the only
 function that makes sense for infixes.
 
 @defun transient--do-stay
-
 Call the command without exporting variables and stay transient.
 @end defun
 
@@ -1490,27 +1518,55 @@ Call the command without exporting variables and stay 
transient.
 The default for suffixes is @code{transient--do-exit}.
 
 @defun transient--do-exit
-
 Call the command after exporting variables and exit the transient.
 @end defun
 
-@defun transient--do-call
+@defun transient--do-return
+Call the command after exporting variables and return to parent
+prefix.  If there is no parent prefix, then call @code{transient--do-exit}.
+@end defun
 
+@defun transient--do-call
 Call the command after exporting variables and stay transient.
 @end defun
 
-@defun transient--do-replace
+The following pre-commands are suitable for sub-prefixes.  Only the
+first should ever explicitly be set as the value of the @code{transient}
+slot.
+
+@defun transient--do-recurse
+Call the transient prefix command, preparing for return to active
+transient.
+
+Whether we actually return to the parent transient is ultimately
+under the control of each invoked suffix.  The difference between
+this pre-command and @code{transient--do-replace} is that it changes the
+value of the @code{transient-suffix} slot to @code{transient--do-return}.
+
+If there is no parent transient, then only call this command and
+skip the second step.
+@end defun
 
+@defun transient--do-replace
 Call the transient prefix command, replacing the active transient.
 
-This is used for suffixes that are prefixes themselves, i.e.@: for
-sub-prefixes.
+Unless @code{transient--do-recurse} is explicitly used, this pre-command
+is automatically used for suffixes that are prefixes themselves,
+i.e., for sub-prefixes.
+@end defun
+
+@defun transient--do-suspend
+Suspend the active transient, saving the transient stack.
+
+This is used by the command @code{transient-suspend} and optionally also by
+“external events” such as @code{handle-switch-frame}.  Such bindings should
+be added to @code{transient-predicate-map}.
 @end defun
 
 @anchor{Pre-commands for Non-Suffixes}
 @subheading Pre-commands for Non-Suffixes
 
-The default for non-suffixes, i.e@: commands that are bound in other
+The default for non-suffixes, i.e., commands that are bound in other
 keymaps beside the transient keymap, is @code{transient--do-warn}.  Silently
 ignoring the user-error is also an option, though probably not a good
 one.
@@ -1520,12 +1576,10 @@ If you want to let the user invoke non-suffix commands, 
then use
 slot.
 
 @defun transient--do-warn
-
 Call @code{transient-undefined} and stay transient.
 @end defun
 
 @defun transient--do-noop
-
 Call @code{transient-noop} and stay transient.
 @end defun
 
@@ -1533,21 +1587,18 @@ Call @code{transient-noop} and stay transient.
 @subheading Special Pre-Commands
 
 @defun transient--do-quit-one
-
 If active, quit help or edit mode, else exit the active transient.
 
 This is used when the user pressed @kbd{C-g}.
 @end defun
 
 @defun transient--do-quit-all
-
 Exit all transients without saving the transient stack.
 
 This is used when the user pressed @kbd{C-q}.
 @end defun
 
 @defun transient--do-suspend
-
 Suspend the active transient, saving the transient stack.
 
 This is used when the user pressed @kbd{C-z}.
@@ -1555,6 +1606,7 @@ This is used when the user pressed @kbd{C-z}.
 
 @node Classes and Methods
 @chapter Classes and Methods
+
 @cindex classes and methods
 
 Transient uses classes and generic functions to make it possible to
@@ -1591,7 +1643,7 @@ holds a function that is used to read a new value for an 
infix
 command.  The values of such slots are regular functions.
 
 Generic functions are used when a function should do something
-different based on the type of the command, i.e. when all commands
+different based on the type of the command, i.e., when all commands
 of a certain type should behave the same way but different from the
 behavior for other types.  Object slots that hold a regular function
 as value are used when the task that they perform is likely to
@@ -1613,7 +1665,7 @@ differ even between different commands of the same type.
 @section Group Classes
 
 The type of a group can be specified using the @code{:class} property at the
-beginning of the class specification, e.g. @code{[:class transient-columns
+beginning of the class specification, e.g., @code{[:class transient-columns
 ...]} in a call to @code{transient-define-prefix}.
 
 @itemize
@@ -1622,7 +1674,7 @@ The abstract @code{transient-child} class is the base 
class of both
 @code{transient-group} (and therefore all groups) as well as of
 @code{transient-suffix} (and therefore all suffix and infix commands).
 
-This class exists because the elements (a.k.a.@: ``children'') of certain
+This class exists because the elements (or “children”) of certain
 groups can be other groups instead of suffix and infix commands.
 
 @item
@@ -1632,8 +1684,8 @@ group classes.
 @item
 The @code{transient-column} class is the simplest group.
 
-This is the default ``flat'' group.  If the class is not specified
-explicitly and the first element is not a vector (i.e. not a group),
+This is the default “flat” group.  If the class is not specified
+explicitly and the first element is not a vector (i.e., not a group),
 then this class is used.
 
 This class displays each element on a separate line.
@@ -1648,8 +1700,8 @@ Direct elements have to be groups whose elements have to 
be commands
 or strings.  Each subgroup represents a column.  This class takes
 care of inserting the subgroups' elements.
 
-This is the default ``nested'' group.  If the class is not specified
-explicitly and the first element is a vector (i.e.@: a group), then
+This is the default “nested” group.  If the class is not specified
+explicitly and the first element is a vector (i.e., a group), then
 this class is used.
 
 @item
@@ -1665,12 +1717,11 @@ elements.
 @section Group Methods
 
 @defun transient-setup-children group children
-
 This generic function can be used to setup the children or a group.
 
 The default implementation usually just returns the children
-unchanged, but if the @code{setup-children} slot of @var{group} is non-nil, 
then
-it calls that function with @var{children} as the only argument and
+unchanged, but if the @code{setup-children} slot of @var{GROUP} is 
non-@code{nil}, then
+it calls that function with @var{CHILDREN} as the only argument and
 returns the value.
 
 The children are given as a (potentially empty) list consisting of
@@ -1680,7 +1731,6 @@ children from scratch.
 @end defun
 
 @defun transient--insert-group group
-
 This generic function formats the group and its elements and inserts
 the result into the current buffer, which is a temporary buffer.
 The contents of that buffer are later inserted into the popup buffer.
@@ -1698,7 +1748,6 @@ commands and there is only a single generic function that 
can be
 specialized based on the class of a prefix command.
 
 @defun transient--history-init obj
-
 This generic function is called while setting up the transient and
 is responsible for initializing the @code{history} slot.  This is the
 transient-wide history; many individual infixes also have a history
@@ -1784,8 +1833,7 @@ functions use @code{describe-function}.
 @subsection Suffix Value Methods
 
 @defun transient-init-value obj
-
-This generic function sets the initial value of the object @var{obj}.
+This generic function sets the initial value of the object @var{OBJ}.
 
 This function is called for all suffix commands, but unless a
 concrete method is implemented this falls through to the default
@@ -1797,9 +1845,8 @@ a method.
 @end defun
 
 @defun transient-infix-read obj
-
 This generic function determines the new value of the infix object
-@var{obj}.
+@var{OBJ}.
 
 This function merely determines the value; @code{transient-infix-set} is
 used to actually store the new value in the object.
@@ -1809,40 +1856,36 @@ user using the reader specified by the @code{reader} 
slot (using the
 @code{transient-infix-value} method described below).
 
 For some infix classes the value is changed without reading
-anything in the minibuffer, i.e.@: the mere act of invoking the
+anything in the minibuffer, i.e., the mere act of invoking the
 infix command determines what the new value should be, based
 on the previous value.
 @end defun
 
 @defun transient-prompt obj
-
 This generic function returns the prompt to be used to read infix
-object @var{obj}'s value.
+object @var{OBJ}'s value.
 @end defun
 
 @defun transient-infix-set obj value
-
-This generic function sets the value of infix object @var{obj} to @var{value}.
+This generic function sets the value of infix object @var{OBJ} to @var{VALUE}.
 @end defun
 
 @defun transient-infix-value obj
-
-This generic function returns the value of the suffix object @var{obj}.
+This generic function returns the value of the suffix object @var{OBJ}.
 
 This function is called by @code{transient-args} (which see), meaning this
 function is how the value of a transient is determined so that the
 invoked suffix command can use it.
 
 Currently most values are strings, but that is not set in stone.
-@code{nil} is not a value, it means ``no value''.
+@code{nil} is not a value, it means “no value”.
 
 Usually only infixes have a value, but see the method for
 @code{transient-suffix}.
 @end defun
 
 @defun transient-init-scope obj
-
-This generic function sets the scope of the suffix object @var{obj}.
+This generic function sets the scope of the suffix object @var{OBJ}.
 
 The scope is actually a property of the transient prefix, not of
 individual suffixes.  However it is possible to invoke a suffix
@@ -1859,8 +1902,7 @@ implementation, which is a noop.
 @subsection Suffix Format Methods
 
 @defun transient-format obj
-
-This generic function formats and returns @var{obj} for display.
+This generic function formats and returns @var{OBJ} for display.
 
 When this function is called, then the current buffer is some
 temporary buffer.  If you need the buffer from which the prefix
@@ -1869,27 +1911,23 @@ making @code{transient--source-buffer} current.
 @end defun
 
 @defun transient-format-key obj
-
-This generic function formats @var{obj}'s @code{key} for display and returns 
the
+This generic function formats @var{OBJ}'s @code{key} for display and returns 
the
 result.
 @end defun
 
 @defun transient-format-description obj
-
-This generic function formats @var{obj}'s @code{description} for display and
+This generic function formats @var{OBJ}'s @code{description} for display and
 returns the result.
 @end defun
 
 @defun transient-format-value obj
-
-This generic function formats @var{obj}'s value for display and returns
+This generic function formats @var{OBJ}'s value for display and returns
 the result.
 @end defun
 
 @defun transient-show-help obj
-
 Show help for the prefix, infix or suffix command represented by
-@var{obj}.
+@var{OBJ}.
 
 For prefixes, show the info manual, if that is specified using the
 @code{info-manual} slot.  Otherwise, show the manpage if that is specified
@@ -1906,10 +1944,10 @@ the command's doc string.
 
 @itemize
 @item
-@code{man-page} or @code{info-manual} can be used to specify the documentation 
for
-the prefix and its suffixes.  The command @code{transient-help} uses the
-method @code{transient-show-help} (which see) to lookup and use these
-values.
+@code{show-help}, @code{man-page} or @code{info-manual} can be used to specify 
the
+documentation for the prefix and its suffixes.  The command
+@code{transient-help} uses the method @code{transient-show-help} (which see) to
+lookup and use these values.
 
 @item
 @code{history-key} If multiple prefix commands should share a single value,
@@ -1930,7 +1968,7 @@ multiple sub-lists.
 
 @item
 @code{scope} For some transients it might be necessary to have a sort of
-secondary value, called a ``scope''.  See @code{transient-define-prefix}.
+secondary value, called a “scope”.  See @code{transient-define-prefix}.
 @end itemize
 
 @anchor{Internal Prefix Slots}
@@ -1995,10 +2033,8 @@ It must contain the following %-placeholders:
 @itemize
 @item
 @code{%k} For the key.
-
 @item
 @code{%d} For the description.
-
 @item
 @code{%v} For the infix value.  Non-infix suffixes don't have a value.
 @end itemize
@@ -2006,6 +2042,11 @@ It must contain the following %-placeholders:
 @item
 @code{description} The description, either a string or a function that is
 called with no argument and returns a string.
+
+@item
+@code{show-help} A function used to display help for the suffix.  If
+unspecified, the prefix controls how hlep is displayed for its
+suffixes.
 @end itemize
 
 @anchor{Slots of @code{transient-infix}}
@@ -2016,10 +2057,10 @@ They are defined here anyway to allow sharing certain 
methods.
 
 @itemize
 @item
-@code{argument} The long argument, e.g. @code{--verbose}.
+@code{argument} The long argument, e.g., @code{--verbose}.
 
 @item
-@code{shortarg} The short argument, e.g. @code{-v}.
+@code{shortarg} The short argument, e.g., @code{-v}.
 
 @item
 @code{value} The value.  Should not be accessed directly.
@@ -2036,7 +2077,34 @@ the prefixes.
 
 @item
 @code{multi-value} For options, whether the option can have multiple
-values.  If non-nil, then default to use @code{completing-read-multiple}.
+values.  If this is non-@code{nil}, then the values are read using
+@code{completing-read-multiple} by default and if you specify your own
+reader, then it should read the values using that function or
+similar.
+
+Supported non-@code{nil} values are:
+
+@itemize
+@item
+Use @code{rest} for an option that can have multiple values.  This is
+useful e.g., for an @code{--} argument that indicates that all remaining
+arguments are files (such as @code{git log -- file1 file2}).
+
+In the list returned by @code{transient-args} such an option and its
+values are represented by a single list of the form @code{(ARGUMENT
+    . VALUES)}.
+
+@item
+Use @code{repeat} for an option that can be specified multiple times.
+
+In the list returned by @code{transient-args} each instance of the option
+and its value appears separately in the usual from, for example:
+@code{("--another-argument" "--option=first" "--option=second")}.
+@end itemize
+
+In both cases the option's values have to be specified in the
+default value of a prefix using the same format as returned by
+@code{transient-args}, e.g., @code{("--other" "--o=1" "--o=2" ("--" "f1" 
"f2"))}.
 
 @item
 @code{always-read} For options, whether to read a value on every invocation.
@@ -2053,8 +2121,8 @@ same history because their values are of the same kind.
 
 @item
 @code{reader} The function used to read the value of an infix.  Not used
-for switches.  The function takes three arguments, @var{prompt},
-@var{initial-input} and @var{history}, and must return a string.
+for switches.  The function takes three arguments, @var{PROMPT},
+@var{INITIAL-INPUT} and @var{HISTORY}, and must return a string.
 
 @item
 @code{prompt} The prompt used when reading the value, either a string or a
@@ -2098,25 +2166,18 @@ what happens if you use more than one.
 @itemize
 @item
 @code{if} Enable if predicate returns non-@code{nil}.
-
 @item
 @code{if-not} Enable if predicate returns @code{nil}.
-
 @item
 @code{if-non-nil} Enable if variable's value is non-@code{nil}.
-
 @item
 @code{if-nil} Enable if variable's value is @code{nil}.
-
 @item
 @code{if-mode} Enable if major-mode matches value.
-
 @item
 @code{if-not-mode} Enable if major-mode does not match value.
-
 @item
 @code{if-derived} Enable if major-mode derives from value.
-
 @item
 @code{if-not-derived} Enable if major-mode does not derive from value.
 @end itemize
@@ -2146,16 +2207,13 @@ The following diagrams illustrate some of the 
differences.
 
 @itemize
 @item
-@code{(c)} represents a return to the command loop.
-
+@samp{(c)} represents a return to the command loop.
 @item
-@code{(+)} represents the user's choice to press one key or another.
-
+@samp{(+)} represents the user's choice to press one key or another.
 @item
-@code{@{@var{word}@}} are possible behaviors.
-
+@samp{@{WORD@}} are possible behaviors.
 @item
-@code{@{@var{number}@}} is a footnote.
+@samp{@{NUMBER@}} is a footnote.
 @end itemize
 
 @anchor{Regular Prefix Commands}
@@ -2331,7 +2389,7 @@ and also takes external state into account.
 
 @itemize
 @item
-@code{@{1@}} Transients can be configured to be exited when a suffix command
+@samp{@{1@}} Transients can be configured to be exited when a suffix command
 is invoked.  The default is to do so for all suffixes except for
 those that are common to all transients and which are used to
 perform tasks such as providing help and saving the value of the
@@ -2340,7 +2398,7 @@ specified for individual suffix commands and may even 
depend on
 state.
 
 @item
-@code{@{2@}} Transients can be configured to allow the user to invoke
+@samp{@{2@}} Transients can be configured to allow the user to invoke
 non-suffix commands.  The default is to not allow that and instead
 warn the user.
 @end itemize
@@ -2386,9 +2444,9 @@ Both packages use transient keymaps to make a set of 
commands
 temporarily available and show the available commands in a popup
 buffer.
 
-A Hydra ``body'' is equivalent to a Transient ``prefix'' and a Hydra
-``head'' is equivalent to a Transient ``suffix''.  Hydra has no equivalent
-of a Transient ``infix''.
+A Hydra “body” is equivalent to a Transient “prefix” and a Hydra
+“head” is equivalent to a Transient “suffix”.  Hydra has no equivalent
+of a Transient “infix”.
 
 Both hydras and transients can be used as simple command dispatchers.
 Used like this they are similar to regular prefix commands and prefix
@@ -2406,7 +2464,7 @@ command dispatchers:
 @item
 Invoking a command from a hydra does not necessarily exit the hydra.
 That makes it possible to invoke the same command again, but using a
-shorter key sequence (i.e. the key that was used to enter the hydra
+shorter key sequence (i.e., the key that was used to enter the hydra
 does not have to be pressed again).
 
 Transient supports that too, but for now this feature is not a focus
@@ -2421,7 +2479,6 @@ using the current interface:
    ("n" "next visible heading" outline-next-visible-heading)])
 @end lisp
 
-
 @item
 Transient supports infix arguments; values that are set by infix
 commands and then consumed by the invoked suffix command(s).
@@ -2465,13 +2522,13 @@ currently exist.
 @anchor{Can I control how the popup buffer is displayed?}
 @appendixsec Can I control how the popup buffer is displayed?
 
-Yes, see @code{transient-display-buffer-action} in @ref{Other Options}.
+Yes, see @code{transient-display-buffer-action} in @ref{Configuration}.
 
 @anchor{Why did some of the key bindings change?}
 @appendixsec Why did some of the key bindings change?
 
 You may have noticed that the bindings for some of the common commands
-do @strong{not} have the prefix @code{C-x} and that furthermore some of these 
commands
+do @strong{not} have the prefix @kbd{C-x} and that furthermore some of these 
commands
 are grayed out while others are not.  That unfortunately is a bit
 confusing if the section of common commands is not shown permanently,
 making the following explanation necessary.
@@ -2486,42 +2543,41 @@ bindings.  The bindings that do use a prefix do so to 
avoid wasting
 too many non-prefix bindings, keeping them available for use in
 individual transients.  The bindings that do not use a prefix and that
 are @strong{not} grayed out are very important bindings that are 
@strong{always}
-available, even when invoking the ``common command key prefix'' or @strong{any
+available, even when invoking the “common command key prefix” or @strong{any
 other} transient-specific prefix.  The non-prefix keys that @strong{are} grayed
 out however, are not available when any incomplete prefix key sequence
-is active.  They do not use the ``common command key prefix'' because it
+is active.  They do not use the “common command key prefix” because it
 is likely that users want to invoke them several times in a row and
-e.g. @kbd{M-p M-p M-p} is much more convenient than
-@kbd{C-x M-p C-x M-p C-x M-p}.
+e.g., @kbd{M-p M-p M-p} is much more convenient than @kbd{C-x M-p C-x M-p C-x 
M-p}.
 
-You may also have noticed that the "Set" command is bound to @kbd{C-x s},
+You may also have noticed that the “Set” command is bound to @kbd{C-x s},
 while Magit-Popup used to bind @kbd{C-c C-c} instead.  I have seen several
 users praise the latter binding (sic), so I did not change it
 willy-nilly.  The reason that I changed it is that using different
 prefix keys for different common commands, would have made the
-temporary display of the common commands even more confusing,
-i.e. after pressing @kbd{C-c} all the @kbd{C-x ...} bindings would be grayed 
out.
+temporary display of the common commands even more confusing, i.e.,
+after pressing @kbd{C-c} all the bindings that begin with the @kbd{C-x} prefix
+would be grayed out.
 
 Using a single prefix for common commands key means that all other
 potential prefix keys can be used for transient-specific commands
-@strong{without} the section of common commands also popping up.  @code{C-c} in
+@strong{without} the section of common commands also popping up.  @kbd{C-c} in
 particular is a prefix that I want to (and already do) use for Magit, and
 also using that for a common command would prevent me from doing so.
 
 (Also see the next question.)
 
-@anchor{Why does @code{q} not quit popups anymore?}
-@appendixsec Why does @code{q} not quit popups anymore?
+@anchor{Why does @kbd{q} not quit popups anymore?}
+@appendixsec Why does @kbd{q} not quit popups anymore?
 
 I agree that @kbd{q} is a good binding for commands that quit something.
 This includes quitting whatever transient is currently active, but it
 also includes quitting whatever it is that some specific transient is
-controlling.  The transient @code{magit-blame} for example binds @code{q} to 
the
+controlling.  The transient @code{magit-blame} for example binds @kbd{q} to the
 command that turns @code{magit-blame-mode} off.
 
 So I had to decide if @kbd{q} should quit the active transient (like
-Magit-Popup used to) or whether @kbd{C-g} should do that instead, so
-that @kbd{q}
+Magit-Popup used to) or whether @kbd{C-g} should do that instead, so that 
@kbd{q}
 could be bound in individual transient to whatever commands make sense
 for them.  Because all other letters are already reserved for use by
 individual transients, I have decided to no longer make an exception
@@ -2548,7 +2604,7 @@ necessary changes.  See its doc string for more 
information.
 @printindex vr
 
 @node Concept Index
-@appendix Concept and Feature Index
+@appendix Concept Index
 
 @printindex cp
 
diff --git a/doc/misc/url.texi b/doc/misc/url.texi
index a9d06d7f5b..5644027f95 100644
--- a/doc/misc/url.texi
+++ b/doc/misc/url.texi
@@ -950,7 +950,6 @@ containing the data cached for that URL.
 @node Proxies
 @section Proxies and Gatewaying
 
-@c fixme: check/document url-ns stuff
 @cindex proxy servers
 @cindex proxies
 @cindex environment variables
diff --git a/doc/misc/viper.texi b/doc/misc/viper.texi
index b0deb31d10..0703667ecc 100644
--- a/doc/misc/viper.texi
+++ b/doc/misc/viper.texi
@@ -1842,7 +1842,7 @@ usually most effective:
 (set-face-background viper-replace-overlay-face "yellow")
 @end smallexample
 For a complete list of colors available to you, evaluate the expression
-@code{(x-defined-colors)}.  (Type it in the buffer @file{*scratch*} and then
+@code{(defined-colors)}.  (Type it in the buffer @file{*scratch*} and then
 hit the @kbd{C-j} key.
 
 @item viper-replace-overlay-cursor-color  "Red"
@@ -2571,7 +2571,7 @@ The GNU Emacs Manual}, for more information on tags.
 
 The following two commands are normally bound to a mouse click and are part
 of Viper.  They work only if Emacs runs as an application under X
-Windows (or under some other window system for which a port of GNU Emacs 20
+Windows (or under some other window system for which a port of GNU Emacs
 is available).  Clicking the mouse when Emacs is invoked in an Xterm window
 (using @code{emacs -nw}) will do no good.
 
diff --git a/doc/misc/vtable.texi b/doc/misc/vtable.texi
index 296dc520a1..59cd9d0f56 100644
--- a/doc/misc/vtable.texi
+++ b/doc/misc/vtable.texi
@@ -465,9 +465,9 @@ When point is placed on a vtable, the following keys are 
bound:
 Sort the table by the current column
 (@code{vtable-sort-by-current-column}).  Note that the table is sorted
 according to the data returned by the getter function (@pxref{Making A
-Table}), not by how it's
-displayed in the buffer.  Columns that have only numerical data is
-sorted as numbers, the rest are sorted as strings.
+Table}), not by how it's displayed in the buffer.  Columns that have
+only numerical data are sorted as numbers, the rest are sorted as
+strings.
 
 @findex vtable-narrow-current-column
 @item @{
diff --git a/etc/AUTHORS b/etc/AUTHORS
index f961852cee..f6349df5bc 100644
--- a/etc/AUTHORS
+++ b/etc/AUTHORS
@@ -105,9 +105,9 @@ 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 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
+  programs.texi eval.c keyboard.c lisp.h modes.texi window.el
+  windows.texi cus-start.el font-lock.el frame.c isearch.el
+  and 167 other files
 
 Alan Modra: changed unexelf.c
 
@@ -127,8 +127,7 @@ and changed nsterm.m nsterm.h nsfns.m image.c nsmenu.m 
configure.ac
 Alastair Burt: changed gnus-art.el smiley.el
 
 Albert Krewinkel: co-wrote sieve-manage.el
-and changed sieve.el gnus-msg.el gnus.texi mail/sieve-manage.el
-  message.el sieve.texi
+and changed sieve.el gnus-msg.el gnus.texi message.el sieve.texi
 
 Albert L. Ting: changed gnus-group.el mail-hist.el
 
@@ -181,7 +180,7 @@ 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
+and changed unexelf.c format.el iris4d.h iris5d.h regex-emacs.c unexsgi.c
 
 Alexandre Veyrenc: changed fr-refcard.tex
 
@@ -282,8 +281,8 @@ 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
+  nadvice.el cl-macs.el advice.el comp-test-funcs.el help.el
+  lisp/Makefile.in package.el Makefile.in and 61 other files
 
 André A. Gomes: changed ispell.el
 
@@ -332,9 +331,9 @@ Andreas Schwab: changed configure.ac lisp.h xdisp.c 
process.c alloc.c
 
 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
-  url-http.el xterm.c battery.el comint.el doc/misc/gnus.texi
-  easy-mmode.el gmm-utils.el gnus-art.el gnus-cite.el gnus-draft.el
-  gnus-group.el and 7 other files
+  url-http.el xterm.c battery.el comint.el easy-mmode.el gmm-utils.el
+  gnus-art.el gnus-cite.el gnus-draft.el gnus-group.el gnus-ml.el
+  and 6 other files
 
 Andreas Vögele: changed pgg-def.el
 
@@ -376,9 +375,9 @@ Andrew Hyatt: changed bug-triage CONTRIBUTE org-archive.el 
org.el
   org.texi
 
 Andrew Innes: changed makefile.nt w32fns.c w32term.c w32.c w32proc.c
-  fileio.c w32-fns.el dos-w32.el inc/ms-w32.h w32term.h makefile.def
+  fileio.c ms-w32.h w32-fns.el dos-w32.el w32term.h makefile.def
   unexw32.c w32menu.c w32xfns.c addpm.c cmdproxy.c emacs.c w32-win.el
-  w32inevt.c configure.bat lread.c and 129 other files
+  w32inevt.c configure.bat lread.c and 128 other files
 
 Andrew L. Moore: changed executable.el
 
@@ -442,8 +441,9 @@ Antoine Levitt: changed gnus-group.el gnus-sum.el 
message.texi
 
 Antonin Houska: changed newcomment.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
+Arash Esbati: changed reftex-vars.el efaq-w32.texi reftex-auc.el
+  reftex-ref.el reftex.el gnus.texi nnmaildir.el reftex-cite.el
+  reftex-dcr.el reftex-toc.el
 
 Arik Mitschang: changed smime.el
 
@@ -479,11 +479,11 @@ Arthur Miller: changed help-fns.el ange-ftp.el 
bytecomp.el comp.c comp.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-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 43 other files
+and changed package.el isearch.el 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 43 other files
 
 Artyom Loenko: changed Info.plist.in
 
@@ -543,7 +543,7 @@ 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
+  and 279 other files
 
 Bastian Beischer: changed semantic/complete.el calc-yank.el include.el
   mru-bookmark.el refs.el senator.el
@@ -576,7 +576,7 @@ and changed org-clock.el org.el
 Benjamin Ragheb: changed fortune.el
 
 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
+  w32select.c emacs.c image.el lisp.h mac-win.el macterm.c ms-w32.h
   mule-cmds.el nnrss.el runemacs.c tcl.el w32.c w32.h
 
 Benjamin Rutt: co-wrote gnus-dired.el
@@ -584,7 +584,7 @@ and changed vc.el gnus-msg.el message.el diff-mode.el 
ffap.el nnimap.el
   nnmbox.el simple.el vc-cvs.el
 
 Ben Key: changed w32.c w32fns.c w32menu.c configure.bat INSTALL w32.h
-  w32term.c configure.ac emacs.c inc/ms-w32.h keyboard.c make-docfile.c
+  w32term.c configure.ac emacs.c keyboard.c make-docfile.c ms-w32.h
   nsfont.m nsterm.m sound.c xfaces.c
 
 Ben Menasha: changed nnmh.el
@@ -656,8 +656,8 @@ Bob Nnamtrop: changed viper-cmd.el
 Bob Olson: co-wrote cperl-mode.el
 
 Bob Rogers: changed vc-dir.el vc-svn.el cperl-mode.el diff.el ewoc.el
-  ffap.el files.el maintaining.texi sql.el thingatpt.el vc.el
-  vc1-xtra.texi
+  ffap.el files.el ietf-drums.el maintaining.texi sql.el thingatpt.el
+  vc.el vc1-xtra.texi
 
 Bob Weiner: changed info.el quail.el dframe.el etags.c rmail.el
   rmailsum.el speedbar.el
@@ -709,7 +709,8 @@ 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
+  files.el find-func.el flymake.el gdb-mi.el help.el nadvice.el shell.el
+  shortdoc.el
 
 Brian Marick: co-wrote hideif.el
 
@@ -850,8 +851,8 @@ 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 emacs-regex.c emacsclient.c
-  fileio.c hp9000s800.h indent.c info.el and 17 other files
+  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
 
 Chris Hecker: changed calc-aent.el
 
@@ -973,12 +974,10 @@ 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 Dockerfile.emba button.el configure.ac
-  display.texi ert.el gitlab-ci.yml keyboard.c tex-mode.el text.texi
-  xdisp.c
+  debugging.texi display.texi emacs-lisp/debug.el ert.el eval.c
+  gitlab-ci.yml keyboard.c progmodes/python.el subr-tests.el subr.el
+  tex-mode.el text.texi url-http.el url-vars.el xdisp.c
 
 Codruț Constantin Gușoi: changed files.el
 
@@ -1032,11 +1031,11 @@ Dale Sedivec: changed sgml-mode.el wisent/python.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 checkdoc.el ispell.el message.el seq-tests.el
-  seq.el simple-tests.el simple.el auth-source.el autorevert.el
+and changed simple.el auth.texi checkdoc.el ispell.el message.el
+  seq-tests.el seq.el simple-tests.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
+  json-tests.el json.el message-tests.el package.el rmc.el sending.texi
+  and 3 other files
 
 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
@@ -1114,9 +1113,9 @@ 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
+  compile-tests.el cscope.el diff.el dired.el display.texi editfns.c
+  emacs.texi files-tests.el find-func-tests.el find-func.el frame.c
+  and 18 other files
 
 Daniel McClanahan: changed lisp-mode.el
 
@@ -1273,7 +1272,7 @@ David Hedbor: changed nnmail.el
 
 David Hull: changed etags.c vc-hg.el
 
-David Hunter: changed flymake.el inc/ms-w32.h process.c
+David Hunter: changed flymake.el ms-w32.h process.c
 
 David J. Biesack: changed antlr-mode.el quickurl.el
 
@@ -1477,7 +1476,7 @@ 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
+  and 122 other files
 
 Dmitry Kurochkin: changed isearch.el
 
@@ -1515,8 +1514,8 @@ and changed dired.el cus-edit.el imenu.el info.el 
ls-lisp.el menu-bar.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
+  autotype.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 cperl-mode.el simple.el
 
@@ -1573,8 +1572,8 @@ Eli Zaretskii: wrote [bidirectional display in xdisp.c]
   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 dispextern.h lisp.h
+  files.el fileio.c emacs.c keyboard.c w32term.c text.texi dispnew.c
+  w32proc.c files.texi frames.texi configure.ac lisp.h dispextern.h
   process.c ms-w32.h and 1236 other files
 
 Eliza Velasquez: changed server.el
@@ -1734,6 +1733,8 @@ Etienne Prud’Homme: changed align.el css-mode-tests.el 
css-mode.el
 
 Eugene Exarevsky: changed sql.el
 
+Eugene Ha: changed configure.ac
+
 Evangelos Evangelou: changed progmodes/f90.el
 
 Evan Moses: changed progmodes/python.el
@@ -1763,10 +1764,10 @@ Fabrice Nicol: changed etags.c etags.1
 Fabrice Niessen: wrote leuven-theme.el
 and changed org-agenda.el
 
-Fabrice Popineau: changed w32.c ms-w32.h w32fns.c w32heap.c w32term.c
+Fabrice Popineau: changed ms-w32.h w32.c 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-regex.c emacs-x64.manifest emacs-x86.manifest and 25 other files
+  emacs-x64.manifest emacs-x86.manifest etags.c and 24 other files
 
 Fan Kai: changed esh-arg.el
 
@@ -1784,6 +1785,8 @@ Felicián Németh: changed project.el xref.el
 
 Felipe Ochoa: changed faces.el js.el paren.el
 
+Felix Dietrich: changed tramp-archive.el
+
 Felix E. Klee: co-wrote svg.el
 and changed display.texi
 
@@ -1821,7 +1824,7 @@ Florian Adamsky: changed recentf.el
 
 Florian Beck: changed org.el
 
-Florian Ragwitz: changed gnus-html.el mail/sieve-manage.el
+Florian Ragwitz: changed gnus-html.el sieve-manage.el
 
 Florian V. Savigny: changed sql.el
 
@@ -1949,7 +1952,7 @@ 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
+  and 23 other files
 
 Geoff Gole: changed align.el ibuffer.el whitespace.el
 
@@ -1960,9 +1963,9 @@ Geoff Kuenning: changed gnus-art.el gnus.texi
 Geoff Voelker: wrote ms-w32.h w32-fns.el w32.c w32.h w32heap.c w32heap.h
   w32inevt.c w32proc.c w32term.c
 and changed makefile.nt w32fns.c fileio.c makefile.def callproc.c
-  s/ms-w32.h emacs.bat.in unexw32.c w32term.h dos-w32.el loadup.el
-  w32-win.el emacs.c keyboard.c ntterm.c process.c w32console.c addpm.c
-  cmdproxy.c comint.el files.el and 100 other files
+  emacs.bat.in unexw32.c w32term.h dos-w32.el loadup.el w32-win.el
+  emacs.c keyboard.c ntterm.c process.c w32console.c addpm.c cmdproxy.c
+  comint.el files.el sysdep.c and 97 other files
 
 Georg C. F. Greve: changed pgg-gpg.el
 
@@ -1980,7 +1983,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 607 other files
+  and 609 other files
 
 Gergely Nagy: changed erc.el
 
@@ -2008,7 +2011,7 @@ and changed configure.ac Makefile.in src/Makefile.in 
calendar.el
   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
+  ack.texi subr.el and 1786 other files
 
 Glynn Clements: wrote gamegrid.el snake.el tetris.el
 
@@ -2120,6 +2123,8 @@ Harald Meland: changed gnus-art.el gnus-salt.el 
gnus-score.el
 
 Harri Kiiskinen: changed org-protocol.el ox-publish.el
 
+Hayden Shenk: changed tramp-adb.el
+
 H. Dieter Wilhelm: changed calc-help.el maintaining.texi paragraphs.el
 
 Heiko Muenkel: changed b2m.c
@@ -2218,7 +2223,8 @@ 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
+Ikumi Keita: changed characters.el display.texi files.el japan-util.el
+  kinsoku.el minibuf.c
 
 Ilja Weis: co-wrote gnus-topic.el
 
@@ -2232,7 +2238,7 @@ 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
-  emacs-regex.c emacs-regex.h font-lock.el intervals.h search.c
+  font-lock.el intervals.h regex-emacs.c regex-emacs.h search.c
 
 Ilya Zonov: changed org-mouse.el
 
@@ -2456,7 +2462,7 @@ Jason Rumney: wrote w32-vars.el
 and changed w32fns.c w32term.c w32font.c w32menu.c w32-win.el w32term.h
   w32.c w32uniscribe.c w32-fns.el makefile.nt w32console.c w32bdf.c
   configure.bat keyboard.c w32proc.c w32select.c font.c image.c w32font.h
-  w32gui.h xdisp.c and 153 other files
+  w32gui.h xdisp.c and 152 other files
 
 Jason S. Cornez: changed keyboard.c
 
@@ -2521,7 +2527,7 @@ and changed mh-e.el mh-comp.el mh-utils.el mh-mime.el 
mh-customize.el
 
 Jeff Spencer: changed dired.el
 
-Jeff Walsh: changed xwidget.c
+Jeff Walsh: changed comp.c xwidget.c
 
 Jelle Licht: changed auth-source-pass-tests.el auth-source-pass.el
 
@@ -2573,8 +2579,8 @@ Jesper Harder: wrote yenc.el
 and changed gnus-sum.el gnus-art.el message.el gnus-group.el gnus-msg.el
   gnus.el gnus-util.el rfc2047.el mm-bodies.el mm-util.el mml.el
   mm-decode.el nnrss.el gnus-srvr.el gnus-topic.el nnmail.el
-  gnus-start.el gnus-uu.el spam-stat.el gnus-score.el gnus.texi
-  and 202 other files
+  gnus-start.el gnus-uu.el gnus.texi spam-stat.el gnus-score.el
+  and 200 other files
 
 Jhair Tocancipa Triana: changed gnus-audio.el
 
@@ -2796,7 +2802,7 @@ 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
+  epg.el and 11 other files
 
 Jonas Hoersch: changed org-inlinetask.el org.el
 
@@ -2903,7 +2909,7 @@ 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 1226 other files
+  and 1223 other files
 
 Juan Pechiar: changed ob-octave.el
 
@@ -2926,7 +2932,7 @@ Julien Danjou: wrote erc-desktop-notifications.el 
gnus-gravatar.el
 and co-wrote color.el
 and changed shr.el org-agenda.el gnus-art.el nnimap.el gnus-html.el
   gnus.el message.el gnus-group.el gnus-sum.el gnus-util.el mm-decode.el
-  mm-view.el org.el gnus.texi mail/sieve-manage.el nnir.el mm-uu.el
+  mm-view.el org.el gnus.texi nnir.el sieve-manage.el mm-uu.el
   color-lab.el gnus-demon.el gnus-int.el gnus-msg.el and 96 other files
 
 Julien Gilles: wrote gnus-ml.el
@@ -2942,8 +2948,8 @@ Jure Cuhalev: changed ispell.el
 Jürgen Hartmann: changed window.el
 
 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
+and changed tramp-gvfs.el tramp-sh.el callproc.c comint.el em-unix.el
+  esh-util.el tramp-cache.el tramp.el url-handlers.el wid-edit.el
 
 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
@@ -3048,7 +3054,7 @@ Katsumi Yamaoka: wrote canlock.el
 and changed gnus-art.el gnus-sum.el message.el mm-decode.el gnus.texi
   mm-util.el mm-view.el gnus-group.el gnus-util.el gnus-msg.el mml.el
   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
+  mm-uu.el nnmail.el emacs-mime.texi and 159 other files
 
 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
@@ -3062,7 +3068,7 @@ Kaveh R. Ghazi: changed delta88k.h xterm.c
 Kayvan Sylvan: changed supercite.el
 
 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
+  japan-util.el keyboard.c make-mode.el starttls.el xdisp.c
 
 Kazushi Marukawa: changed filelock.c hexl.c profile.c unexalpha.c
 
@@ -3147,7 +3153,7 @@ and changed edt.texi
 Kevin Gallo: wrote w32-win.el
 and changed makefile.nt dispnew.c addpm.c config.w95 dispextern.h emacs.c
   facemenu.el faces.el fns.c frame.c frame.h keyboard.c makefile.def
-  mouse.el ntterm.c process.c s/ms-w32.h scroll.c startup.el sysdep.c
+  mouse.el ms-w32.h ntterm.c process.c scroll.c startup.el sysdep.c
   term.c and 18 other files
 
 Kevin Greiner: wrote legacy-gnus-agent.el
@@ -3304,10 +3310,10 @@ and co-wrote gnus-kill.el gnus-mh.el gnus-msg.el 
gnus-score.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 simple.el subr.el files.el process.c text.texi
-  display.texi dired.el gnutls.c gnus-ems.el smtpmail.el help-fns.el
+and changed gnus.texi simple.el subr.el files.el process.c display.texi
+  text.texi dired.el gnutls.c gnus-ems.el smtpmail.el help-fns.el
   auth-source.el url-http.el edebug.el image.el gnus-cite.el pop3.el
-  dired-aux.el fns.c image.c and 860 other files
+  dired-aux.el fns.c image.c and 867 other files
 
 Lars Rasmusson: changed ebrowse.c
 
@@ -3379,6 +3385,8 @@ Liang Wang: changed etags.el
 
 Liāu, Kiong-Gē 廖宮毅: changed comp.c mingw-cfg.site
 
+Lin Zhou: changed w32fns.c w32term.h
+
 Lixin Chin: changed bibtex.el
 
 Lloyd Zusman: changed mml.el pgg-gpg.el
@@ -3732,7 +3740,7 @@ 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
+  calc-ext.el and 539 other files
 
 Mattias M: changed asm-mode-tests.el asm-mode.el
 
@@ -3775,7 +3783,7 @@ and co-wrote tramp-cache.el tramp-sh.el tramp.el
 and changed tramp.texi tramp-adb.el trampver.el trampver.texi dbusbind.c
   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
+  tramp-imap.el gitlab-ci.yml lisp.h README xesam.el and 278 other files
 
 Michael Ben-Gershon: changed acorn.h configure.ac riscix1-1.h riscix1-2.h
   unexec.c
@@ -3878,8 +3886,8 @@ Michael Staats: wrote pc-select.el
 Michael Vehrs: changed quail.el woman.el
 
 Michael Welsh Duggan: changed nnimap.el lisp.h sh-script.el w32term.c
-  buffer.c gnus-spec.el gud.el keyboard.c mail/sieve-manage.el nnir.el
-  nnmail.el print.c termhooks.h url-http.el w32-win.el w32fns.c w32menu.c
+  buffer.c gnus-spec.el gud.el keyboard.c nnir.el nnmail.el print.c
+  sieve-manage.el termhooks.h url-http.el w32-win.el w32fns.c w32menu.c
   w32term.h woman.el xdisp.c xterm.c
 
 Michael Weylandt: changed ox-latex.el
@@ -3897,11 +3905,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 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
+and changed regex-emacs.c casefiddle.c regex-emacs-tests.el simple.el
+  casefiddle-tests.el message.el regex-emacs.h 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
 
@@ -3924,8 +3932,8 @@ 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
+  simple.el bindings.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
 
@@ -4168,7 +4176,7 @@ 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 os.texi
+N. Jackson: changed emacs.texi forms.texi gnus.info os.texi
 
 Noah Evans: changed follow.el
 
@@ -4187,7 +4195,7 @@ Noam Postavsky: changed progmodes/python.el lisp-mode.el 
bytecomp.el
   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
+  and 362 other files
 
 Nobuyoshi Nakada: co-wrote ruby-mode.el
 and changed ruby-mode-tests.el
@@ -4307,7 +4315,7 @@ and co-wrote cal-dst.el
 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
+  and 1847 other files
 
 Paul Fisher: changed fns.c
 
@@ -4321,9 +4329,9 @@ and changed message.el gnus-util.el gnus-int.el gnus.el 
gnus-agent.el
 
 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
+  bytecode.c cc-langs.el cl-macs.el configure.ac dabbrev.el desktop.el
+  display.texi eldoc.el elisp-mode.el ert.el ert.texi etags.el
+  fns-tests.el and 21 other files
 
 Paul Rankin: changed outline.el
 
@@ -4508,9 +4516,9 @@ 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 configure.ac json.c
-  process.c eval.c json-tests.el process-tests.el internals.texi alloc.c
+  process.c eval.c internals.texi json-tests.el process-tests.el 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
+  callproc.c seccomp-filter.c gtkutil.c files.el and 184 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
@@ -4565,8 +4573,8 @@ and changed xdisp.c comp.c fns.c pdumper.c alloc.c 
byte-opt.el
   comp-tests.el comp.el composite.c and 28 other files
 
 Po Lu: changed xdisp.c anti.texi 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
+  config.bat esh-cmd.el fileio.c langinfo.h loadup.el mouse.el msdos.c
+  msdos.h nsfns.m nsterm.m process.c sed1v2.inp sed2v2.inp sed3v2.inp
   sedlibmk.inp tooltip.el xterm.c
 
 Pontus Michael: changed simple.el
@@ -4663,7 +4671,7 @@ Reiner Steib: wrote gmm-utils.el
 and changed message.el gnus.texi gnus-art.el gnus-sum.el gnus-group.el
   gnus.el mml.el gnus-faq.texi mm-util.el gnus-score.el message.texi
   gnus-msg.el gnus-start.el gnus-util.el spam-report.el mm-uu.el spam.el
-  mm-decode.el files.el gnus-agent.el nnmail.el and 172 other files
+  mm-decode.el files.el gnus-agent.el nnmail.el and 171 other files
 
 Remek Trzaska: changed gnus-ems.el
 
@@ -4697,6 +4705,8 @@ Richard Dawe: changed config.in src/Makefile.in
 
 Richard G. Bielawski: changed modes.texi paren.el
 
+Richard Hansen: changed easy-mmode.el
+
 Richard Hoskins: changed message.el
 
 Richard Kim: wrote wisent/python.el
@@ -4727,7 +4737,7 @@ and co-wrote cc-align.el cc-cmds.el cc-defs.el 
cc-engine.el cc-langs.el
 and changed files.el keyboard.c simple.el xterm.c xdisp.c rmail.el
   fileio.c process.c sysdep.c buffer.c xfns.c window.c subr.el
   configure.ac startup.el sendmail.el emacs.c Makefile.in editfns.c
-  info.el dired.el and 1338 other files
+  info.el dired.el and 1336 other files
 
 Richard Ryniker: changed sendmail.el
 
@@ -4777,7 +4787,7 @@ Robert Pluim: wrote nsm-tests.el
 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
+  nsterm.m unicode xfns.c auth.texi composite.c and 138 other files
 
 Robert Thorpe: changed cus-start.el indent.el rmail.texi
 
@@ -5033,6 +5043,7 @@ 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
+  memory-report.el
 
 Sergio Durigan Junior: changed eudcb-bbdb.el gdb-mi.el
 
@@ -5114,9 +5125,8 @@ and co-wrote gnus-sieve.el gssapi.el mml1991.el 
nnfolder.el nnimap.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
+  gnus-msg.el gnus.texi pgg-pgp5.el browse-url.el gnus-int.el gnus.el
+  hashcash.el mm-view.el password.el gnus-cache.el and 99 other files
 
 Simon Lang: changed building.texi icomplete.el misterioso-theme.el
   progmodes/grep.el
@@ -5171,7 +5181,7 @@ 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
+  emacs-lisp-intro.texi flyspell.el ibuffer.el and 1344 other files
 
 Stefan Merten: co-wrote rst.el
 
@@ -5188,7 +5198,7 @@ and co-wrote font-lock.el gitmerge.el pcvs.el
 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
+  help-fns.el lread.c and 1612 other files
 
 Stefano Facchini: changed gtkutil.c
 
@@ -5336,10 +5346,9 @@ Svante Carl V. Erichsen: changed cl-indent.el
 Svend Tollak Munkejord: changed deuglify.el
 
 Sven Joachim: changed files.el de-refcard.tex dired-aux.el emacs.1
-  arc-mode.el dired-x.el doc/misc/gnus.texi em-cmpl.el em-hist.el
-  em-ls.el esh-cmd.el esh-ext.el esh-io.el files.texi gnus-sum.el
-  gnus.texi help.el make-dist message.el movemail.c mule.texi
-  and 9 other files
+  gnus.texi arc-mode.el dired-x.el em-cmpl.el em-hist.el em-ls.el
+  esh-cmd.el esh-ext.el esh-io.el files.texi gnus-sum.el help.el
+  make-dist message.el movemail.c mule.texi sed3v2.inp and 8 other files
 
 Sylvain Chouleur: changed gnus-icalendar.el icalendar.el
 
@@ -5366,7 +5375,7 @@ Takahashi Naoto: wrote ethio-util.el language/ethiopic.el 
latin-post.el
 and co-wrote latin-ltx.el quail.el
 and changed ethiopic.el fontset.el mule-conf.el
 
-Takai Kousuke: changed ccl.el image/compface.el
+Takai Kousuke: changed ccl.el compface.el
 
 Takeshi Yamada: changed fns.c
 
@@ -5471,7 +5480,7 @@ 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.texi eudc-vars.el eudc.el
-  ntlm.el url-http.el eudcb-ldap.el eudcb-bbdb.el ntlm-tests.el
+  ntlm.el url-http.el eudcb-bbdb.el eudcb-ldap.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
@@ -5676,8 +5685,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-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
+  editfns.c emacs.c frame.h gnus-group.el netbsd.h nnheader.el nnimap.el
+  perl-mode.el regex-emacs.c regex-emacs.h and 6 other files
 
 Tsuyoshi Akiho: changed gnus-sum.el nnrss.el
 
@@ -5786,6 +5795,8 @@ and changed ps-prin1.ps ps-bdf.el ps-prin0.ps 
blank-mode.el ps-prin3.ps
   easymenu.el loading.texi menu-bar.el misc.texi progmodes/compile.el
   ps-print-def.el ps-vars.el
 
+Visuwesh M: changed dired-aux.el
+
 Vitalie Spinu: changed comint.el eieio-base.el message.el ob-R.el
   ob-core.el ob-tangle.el subr.el
 
@@ -6051,6 +6062,6 @@ Zoran Milojevic: changed avoid.el
 উৎসব রায়: changed quail/indian.el
 
 Local Variables:
-mode: etc-authors
+mode: emacs-authors
 coding: utf-8
 End:
diff --git a/etc/DEBUG b/etc/DEBUG
index 7d2f810d07..f57e6f197b 100644
--- a/etc/DEBUG
+++ b/etc/DEBUG
@@ -661,10 +661,10 @@ Setting a breakpoint in the function 'x_error_quitter' 
and looking at
 the backtrace when Emacs stops inside that function will show what
 code causes the X protocol errors.
 
-Note that the -xrm option may have no effect when you make an Emacs
-process invoked with the -nw option a server and want to trace X
-protocol errors from subsequent invocations of emacsclient in a GUI
-frame.  In that case calling the initial Emacs via
+Note that the -xrm option may have no effect when you start a server
+in an Emacs session invoked with the -nw command-line option, and want
+to trace X protocol errors from GUI frames created by subsequent
+invocations of emacsclient.  In that case starting Emacs via
 
   emacs -nw --eval '(setq x-command-line-resources "emacs.synchronous: true")'
 
@@ -1036,6 +1036,42 @@ recovering the contents of Emacs buffers from a core 
dump file.  You
 might also find those commands useful for displaying the list of
 buffers in human-readable format from within the debugger.
 
+*** Debugging Emacs with LLDB
+
+On systems where GDB is not available, like macOS with M1 chip, you
+can also use LLDB for Emacs debugging.
+
+To start LLDB to debug Emacs, you can simply type "lldb ./emacs RET"
+at the shell prompt in directory of the Emacs executable, usually the
+'src' sub-directory of the Emacs tree).
+
+When you debug Emacs with LLDB, you should start LLDB in the directory
+where the Emacs executable was built.  That directory has an .lldbinit
+file that loads a Python module emacs_lldb.py from the 'etc' directory
+of the Emacs source tree.  The Python module defines "user-defined"
+commands for debugging Emacs.
+
+LLDB by default does not automatically load .lldbinit files in the
+current directory.  The simplest way to fix this is to add the
+following line to your ~/.lldbinit file (creating such a file if it
+doesn't already exist):
+
+  settings set target.load-cwd-lldbinit true
+
+Alternatively, you can type "lldb --local-lldbinit ./emacs RET".
+
+If everything worked, you should see something like "Emacs debugging
+support has been installed" after starting LLDB.  You can see which
+Emacs-specific commands are defined with
+
+  (lldb) help
+
+User-defined commands for Emacs debugging start with an "x".
+
+Please refer to the LLDB reference on the web for more information
+about LLDB.  If you already know GDB, you will also find a mapping
+from GDB commands to corresponding LLDB commands there.
+
 
 This file is part of GNU Emacs.
 
diff --git a/etc/ERC-NEWS b/etc/ERC-NEWS
index bdcd943c37..7f95cdd39a 100644
--- a/etc/ERC-NEWS
+++ b/etc/ERC-NEWS
@@ -12,6 +12,96 @@ extensible IRC (Internet Relay Chat) client distributed with
 GNU Emacs since Emacs version 22.1.
 
 
+* Changes in ERC 5.5
+
+** Smarter buffer naming for withstanding collisions.
+ERC buffers now remain tied to their logical network contexts, even
+while offline.  These associations can survive regional server changes
+and the intercession of proxies.  As has long been practiced in other
+areas of Emacs, "uniquified" buffer renaming prevents collisions
+between buffers of different contexts.  ERC's approach prioritizes
+predictability over economy, favoring fully qualified suffixes without
+elided or omitted components.  Potential avenues for confusion remain
+but will die out with the adoption of emerging protocol extensions.
+
+** Option 'erc-rename-buffers' deprecated.
+The promises made by its old "on" state are now fully realized and
+enabled permanently by default.  Its old behavior when disabled has
+been preserved and will remain available (with warnings) for years to
+come.
+
+** Option 'erc-reuse-buffers' deprecated.
+This ancient option has been a constant source of confusion, as
+exhibited most recently when its "disabled" meaning was partially
+inverted.  Introduced in ERC 5.4 (Emacs 28.1), this regression saw
+existing channel buffers transparently reassociated instead of created
+anew.  The pre-5.4 "disabled" behavior has been restored and will
+remain accessible for the foreseeable future, warts and all (e.g.,
+with its often superfluous "/DIALED-HOST" suffixing always present).
+
+** Tighter auth-source integration with bigger changes on the horizon.
+The days of hit-and-miss auth-source queries are hopefully behind us.
+With the overhaul of the services module temporarily shelved and the
+transition to SASL-based authentication still underway, users may feel
+left in the lurch to endure yet another release cycle of backtick
+hell.  For some, auth-source may provide a workaround in the form of
+nonstandard server passwords.  See the "Connection" node in the manual
+under the subheading "Password".
+
+If you require SASL immediately, please participate in ERC development
+by volunteering to try (and give feedback on) edge features, one of
+which is SASL.  All known external offerings, past and present, are
+valiant efforts whose use is nevertheless discouraged.
+
+** Username argument for entry-point commands.
+Commands 'erc' and 'erc-tls' now accept a ':user' keyword argument,
+which, when present, becomes the first argument passed to the "USER"
+IRC command.  The traditional way of setting this globally, via
+'erc-email-userid', is still honored.
+
+** Additional display options for updated buffers.
+Additional flexibility is now available for controlling the behavior
+of newly created target buffers, especially during reconnection.
+
+** Improved handling of multiline prompt input.
+This means better detection and handling of intervening and trailing
+blanks when 'erc-send-whitespace-lines' is active.  New options have
+also been added for warning when input spans multiple lines.  Although
+off by default, new users are encouraged to enable them.
+
+** Miscellaneous behavioral changes impacting the user experience.
+A bug has been fixed that saw prompts being mangled, doubled, or
+erased in server buffers upon disconnection.  Instead, input prompts
+now collapse into an alternate form designated by the option
+'erc-prompt-hidden'.  Behavior differs for query and channel buffers
+but can be fine-tuned via the repurposed, formerly abandoned option
+'erc-hide-prompt'.
+
+A bug has been fixed affecting users of the Soju bouncer: outgoing
+messages during periods of heavy traffic no longer disappear.
+
+Although rare, server passwords containing white space are now handled
+correctly.
+
+** Miscellaneous behavioral changes in the library API.
+The function 'erc-network' always returns non-nil in server and target
+buffers belonging to a successfully established IRC connection, even
+after that connection has been closed.
+
+In 5.4, support for network symbols as keys was added for
+'erc-autojoin-channels-alist'.  This has been extended to include
+explicit symbols passed to 'erc-tls' and 'erc' as so-called
+network-context identifiers via a new ':id' keyword.  The latter
+carries wider significance beyond autojoin and can be used for
+unequivocally identifying a connection in a human-readable way.
+
+The function 'erc-auto-query', unused internally, and basically
+inscrutable when read, has been deprecated with no public replacement.
+This raises a related issue: if you use ERC as a library and need
+something only offered internally, please lobby to have it exported by
+writing to emacs-erc@gnu.org.
+
+
 * Changes in ERC 5.4.1
 
 ** No user-visible changes since ERC 5.4, but a few tweaks in some ERC
diff --git a/etc/NEWS b/etc/NEWS
index 19ca21f666..1317cd0128 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -39,16 +39,12 @@ C++ compiler to be present on your system.  If Emacs is not 
built with
 the option '--with-be-app', the resulting Emacs will only run in
 text-mode terminals.
 
-+++
-** Cairo drawing support has been enabled for Haiku builds.
 To enable Cairo support, ensure that the Cairo and FreeType
 development files are present on your system, and configure Emacs with
 '--with-be-cairo'.
 
----
-** 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
+double-buffering; it is always enabled.  To disable it, change the
 frame parameter 'inhibit-double-buffering' instead.
 
 ---
@@ -59,7 +55,7 @@ If a constant file name is required, the file can be renamed 
to
 "emacs.pdmp", and Emacs will find it during startup anyway.
 
 ---
-** Emacs now uses of XInput 2 for input events.
+** Emacs now uses XInput 2 for input events.
 If your X server has support and you have the XInput 2 development
 headers installed, Emacs will use the X Input Extension for handling
 input.  If this causes problems, you can configure Emacs with the
@@ -81,11 +77,11 @@ by saying
 
     make -C leim generate-ja-dic JA_DIC_NO_REDUCTION_OPTION=''
 
-after deleting lisp/leim/ja-dic/ja-dic.el.
+after deleting "lisp/leim/ja-dic/ja-dic.el".
 
 +++
 ** Emacs now supports being built with pure GTK.
-To use this option, make sure the GTK 3 (version 3.20 or later) and
+To use this option, make sure the GTK 3 (version 3.22.23 or later) and
 Cairo development files are installed, and configure Emacs with the
 option '--with-pgtk'.  Unlike the default X and GTK build, the
 resulting Emacs binary will work on any underlying window system
@@ -116,6 +112,14 @@ Emacs Sessions" node in the Emacs manual for more details.
 
 * Startup Changes in Emacs 29.1
 
++++
+** '--batch' and '--script' now adjust the garbage collection levels.
+These switches now set 'gc-cons-percentage' to 1.0 (up from the
+default of 0.1).  This means that batch processes will typically use
+more memory than before, but use less time doing garbage collection.
+Batch jobs that are supposed to run for a long time should adjust the
+limit back down again.
+
 +++
 ** Emacs can now be used more easily in an executable script.
 If you start an executable script with
@@ -140,37 +144,77 @@ This is run at the end of the Emacs startup process, and 
is meant to
 be used to reinitialize structures that would normally be done at load
 time.
 
+** Native Compilation
+
 ---
-** New function 'startup-redirect-eln-cache'.
+*** New command 'native-compile-prune-cache'.
+This command deletes older ".eln" cache entries (but not the ones for
+the current Emacs version).
+
+---
+*** New function 'startup-redirect-eln-cache'.
 This function can be called in your init files to change the
 user-specific directory where Emacs stores the "*.eln" files produced
 by native compilation of Lisp packages Emacs loads.  The default
-eln-cache directory is unchanged: it is the 'eln-cache' subdirectory
+eln-cache directory is unchanged: it is the "eln-cache" subdirectory
 of 'user-emacs-directory'.
 
 
 * Incompatible changes in Emacs 29.1
 
 +++
-** 'E' in 'query-replace' now edits the replacement with exact case.
-Previously, this command did the same as 'e'.
+*** Explicitly-set read-only state is preserved when reverting a buffer.
+If you use the 'C-x C-q' command to change the read-only state of the
+buffer and then revert it, Emacs would previously use the file
+permission bits to determine whether the buffer should be read-only
+after reverting the buffer.  Emacs now remembers the decision made in
+'C-x C-q'.
 
 ---
-** '/ a' in *Packages* now limits by package name(s) instead of regexp.
+*** The Gtk selection face is no longer used for the region.
+The combination of a Gtk-controlled background and a foreground color
+controlled by the internal Emacs machinery led to low-contrast faces
+in common default setups.  Emacs now uses the same 'region' face on
+Gtk and non-Gtk setups.
 
-+++
-** Setting the goal columns now also affects '<prior>' and '<next>'.
-Previously, 'C-x C-n' only affected 'next-line' and 'previous-line',
-but it now also affects 'scroll-up-command' and 'scroll-down-command'.
+** Dired
 
 ---
-** The 'd' command in Dired now more consistently skip dot files.
-In previous Emacs versions, commands like `C-u 10 d' would put the "D"
+*** 'w' ('dired-copy-filename-as-kill') has changed behavior.
+If there are several files marked, file names containing space and
+quote characters will be quoted "like this".
+
+---
+*** The 'd' command now more consistently skips dot files.
+In previous Emacs versions, commands like 'C-u 10 d' would put the "D"
 mark on the next ten files, no matter whether they were dot files
 (i.e., "." and "..") or not, while marking the next ten lines with the
 mouse (in 'transient-mark-mode') and then hitting 'd' would skip dot
 files.  These now work equivalently.
 
++++
+** Warning about "eager macro-expansion failure" is changed into an error.
+
+---
+** Previously, the X "reverseVideo" value at startup was heeded for all frames.
+This meant that if you had a "reverseVideo" resource on the initial
+display, and then opened up a new frame on a display without any
+explicit "reverseVideo" setting, it would get heeded there, too.  (This
+included terminal frames.)  In Emacs 29, the "reverseVideo" X resource
+is handled like all the other X resources, and set on a per-frame basis.
+
++++
+** 'E' in 'query-replace' now edits the replacement with exact case.
+Previously, this command did the same as 'e'.
+
+---
+** '/ a' in "*Packages*" buffer now limits by archive name(s) instead of 
regexp.
+
++++
+** Setting the goal columns now also affects '<prior>' and '<next>'.
+Previously, 'C-x C-n' only affected 'next-line' and 'previous-line',
+but it now also affects 'scroll-up-command' and 'scroll-down-command'.
+
 ---
 ** Isearch in "*Help*" and "*info*" now char-folds quote characters by default.
 This means that you can say 'C-s `foo' (GRAVE ACCENT) if the buffer
@@ -288,18 +332,145 @@ variable set to nil, as it will default to nil in a 
future Emacs
 version and will be removed some time after that.
 
 +++
-** Functions which recreate the "*scratch*" buffer now also initialize it.
+** Functions that recreate the "*scratch*" buffer now also initialize it.
 When functions like 'other-buffer' and 'server-execute' recreate
 "*scratch*", they now also insert 'initial-scratch-message' and set
 the major mode according to 'initial-major-mode', like at Emacs
 startup.  Previously, these functions ignored
 'initial-scratch-message' and left "*scratch*" in 'fundamental-mode'.
 
+---
+** The autoarg.el library is now marked obsolete.
+This library provides the 'autoarg-mode' and 'autoarg-kp-mode' minor
+modes to emulate the behavior of the historical editor Twenex Emacs.
+It is believed to no longer be useful.
+
+---
+** The quickurl.el library is now obsolete.
+Use 'abbrev', 'skeleton' or 'tempo' instead.
+
+---
+** The rlogin.el library, and the 'rsh' command are now obsolete.
+Use something like 'M-x shell RET ssh <host> RET' instead.
+
+---
+** The url-about.el library is now obsolete.
+
+---
+** The autoload.el library is now obsolete.
+It is superseded by the loaddefs-gen.el library.
+
+---
+** The netrc.el library is now obsolete.
+Use the 'auth-source-netrc-parse-all' function in auth-source.el
+instead.
+
+---
+** The url-dired.el library is now obsolete.
+
+---
+** The fast-lock.el and lazy-lock.el library have been removed.
+They have been obsolete since Emacs 22.1.
+
+The variable 'font-lock-support-mode' is occasionally useful for
+debugging purposes.  It is now a regular variable (instead of a user
+option) and can be set to nil to disable Just-in-time Lock mode.
+
 
 * Changes in Emacs 29.1
 
 ---
-** Files with the '.eld' extension are now visited in 'lisp-data-mode'.
+** New user option 'electric-quote-replace-consecutive'.
+
+---
+** Emacs is now capable of editing files with very long lines.
+The display of long lines has been optimized, and Emacs should no
+longer choke when a buffer on display contains long lines.  The
+variable 'long-line-threshold' controls whether and when these display
+optimizations are in effect.
+
+A companion variable 'large-hscroll-threshold' controls when another
+set of display optimizations are in effect, which are aimed
+specifically at speeding up display of long lines that are truncated.
+
+If you still experience slowdowns while editing files with long lines,
+this may be due to line truncation, or to one of the enabled minor
+modes, or to the current major mode.  Try turning off line truncation
+with 'C-x x t', or try disabling all known slow minor modes with
+'M-x so-long-minor-mode', or try disabling both known slow minor modes
+and the major mode with 'M-x so-long-mode', or visit the file with
+'M-x find-file-literally' instead of the usual 'C-x C-f'.
+
+Note that the display optimizations in these cases may cause the
+buffer to be occasionally mis-fontified.
+
+The new function 'long-line-optimizations-p' returns non-nil when
+these optimizations are in effect in the current buffer.
+
++++
+** New command to change the font size globally.
+To increase the font size, type 'C-x C-M-+' or 'C-x C-M-='; to
+decrease it, type 'C-x C-M--'; to restore the font size, type 'C-x
+C-M-0'.  The final key in these commands may be repeated without the
+leading 'C-x' and without the modifiers, e.g. 'C-x C-M-+ C-M-+ C-M-+'
+and 'C-x C-M-+ + +' increase the font size by three steps.  When
+'mouse-wheel-mode' is enabled, 'C-M-wheel-up' and 'C-M-wheel-down' also
+increase and decrease the font size globally.  Additionally, the
+user option 'global-text-scale-adjust-resizes-frames' controls whether
+the frames are resized when the font size is changed.
+
++++
+** New function 'file-parent-directory'.
+Get the parent directory of a file.
+
+** New config variable 'syntax-wholeline-max' to reduce the cost of long lines.
+This variable is used by some operations (mostly syntax-propertization
+and font-locking) to treat lines longer than this variable as if they
+were made up of various smaller lines.  This can help reduce the
+slowdowns seen in buffers made of a single long line, but can also
+cause misbehavior in the presence of such long lines (tho most of that
+misbehavior should usually be limited to mis-highlighting).  You can
+recover the previous behavior with:
+
+    (setq syntax-wholeline-max most-positive-fixnum)
+
+---
+** New bindings in 'find-function-setup-keys' for 'find-library'.
+When 'find-function-setup-keys' is enabled, 'C-x L' is now bound to
+'find-library', 'C-x 4 L' is now bound to 'find-library-other-window'
+and 'C-x 5 L' is now bound to 'find-library-other-frame'.
+
++++
+** New key binding after 'M-x' or 'M-X': 'M-X'.
+Emacs allows different completion predicates to be used with 'M-x'
+(i.e., 'execute-extended-command') via the
+'read-extended-command-predicate' user option.  Emacs also has the
+'M-X' (note upper case) command, which only displays commands
+especially relevant to the current buffer.  Emacs now allows toggling
+between these modes while the user is inputting a command by hitting
+'M-X' while in the minibuffer.
+
+---
+** Interactively, 'kill-buffer' will now offer to save the buffer if unsaved.
+
+---
+** New commands 'duplicate-line' and 'duplicate-dwim'.
+'duplicate-line' duplicates the current line the specified number of times.
+'duplicate-dwim' duplicates the region if it is active.  If not, it
+works like 'duplicate-line'.  An active rectangular region is
+duplicated on its right-hand side.
+
+---
+** Files with the ".eld" extension are now visited in 'lisp-data-mode'.
+
++++
+** 'network-lookup-address-info' can now check numeric IP address validity.
+Specifying 'numeric' as the new optional 'hints' argument makes it
+check if the passed address is a valid IPv4/IPv6 address (without DNS
+traffic).
+
+    (network-lookup-address-info "127.1" 'ipv4 'numeric)
+    => ([127 0 0 1 0])
 
 +++
 ** New command 'find-sibling-file'.
@@ -317,6 +488,11 @@ This should be a regexp or a list of regexps; buffers 
whose names
 match those regexps will be ignored by 'switch-to-prev-buffer' and
 'switch-to-next-buffer'.
 
++++
+** New command 'rename-visited-file'.
+This command renames the file visited by the current buffer by moving
+it to a new location, and also makes the buffer visit this new file.
+
 ** Menus
 
 ---
@@ -365,6 +541,19 @@ This inhibits putting empty strings onto the kill ring.
 These options allow adjusting point and scrolling a window when
 dragging items from another program.
 
++++
+** The X Direct Save (XDS) protocol is now supported.
+This means dropping an image or file link from programs such as
+Firefox will no longer create a temporary file in a random directory,
+instead asking you where to save the file first.
+
++++
+** New user option 'record-all-keys'.
+If non-nil, this option will force recording of all input keys,
+including those typed in response to passwords prompt (this was the
+previous behavior).  The default is nil, which inhibits recording of
+passwords.
+
 +++
 ** New function 'command-query'.
 This function makes its argument command prompt the user for
@@ -417,6 +606,12 @@ mixed.
 This inherits from the 'mode-line' face, but is the face actually used
 on the mode lines (along with 'mode-line-inactive').
 
++++
+** New face attribute pseudo-value 'reset'.
+This value stands for the value of the corresponding attribute of the
+'default' face.  It can be used to reset attribute values produced by
+inheriting from other faces.
+
 +++
 ** New function 'buffer-text-pixel-size'.
 This is similar to 'window-text-pixel-size', but can be used when the
@@ -433,13 +628,30 @@ This controls the style of the pre-edit and status areas 
of X input
 methods.
 
 +++
-** On X11, Emacs now tries to synchronize window resize with the window 
manager.
+** New X resources: "highlightForeground" and "highlightBackground".
+Only in the Lucid build, this controls colors used for highlighted
+menu item widgets.
+
++++
+** On X, Emacs now tries to synchronize window resize with the window manager.
 This leads to less flicker and empty areas of a frame being displayed
 when a frame is being resized.  Unfortunately, it does not work on
 some ancient buggy window managers, so if Emacs appears to freeze, but
 is still responsive to input, you can turn it off by setting the X
 resource "synchronizeResize" to "off".
 
++++
+** On X, Emacs can optionally synchronize display with the graphics hardware.
+When this is enabled by setting the X resource "synchronizeResize" to
+"extended", frame content "tearing" is drastically reduced.  This is
+only supported on the Motif, Lucid, and no-toolkit builds, and
+requires an X compositing manager supporting the extended frame
+synchronization protocol (see
+https://fishsoup.net/misc/wm-spec-synchronization.html).
+
+This behavior can be toggled on and off via the frame parameter
+'use-frame-synchronization'.
+
 +++
 ** New frame parameter 'alpha-background' and X resource "alphaBackground".
 This controls the opacity of the text background when running on a
@@ -502,6 +714,12 @@ This is in addition to previously-supported ways of 
discovering 24-bit
 color support: either via the "RGB" or "setf24" capabilities, or if
 the 'COLORTERM' environment variable is set to the value "truecolor".
 
+*** Select active regions with xterm selection support.
+On terminals with xterm setSelection support, the active region may be
+saved to the X primary selection, following the
+'select-active-regions' variable.  This support is enabled when
+'tty-select-active-regions' is non-nil.
+
 ** ERT
 
 +++
@@ -556,6 +774,11 @@ inserted.
 This command will tell you the name of the Emoji at point.  (This
 command also works for non-Emoji characters.)
 
+---
+*** New commands 'emoji-zoom-increase' and 'emoji-zoom-decrease'.
+These are bound to 'C-x 8 e +' and 'C-x 8 e -', respectively.  They
+can be used on any character, but are mainly useful for emoji.
+
 ---
 *** New input method 'emoji'.
 This allows you to enter emoji using short strings, eg ':face_palm:'
@@ -563,12 +786,20 @@ or ':scream:'.
 
 ** Help
 
+---
+*** Variable values displayed by 'C-h v' in "*Help*" are now font-locked.
+
++++
+*** New user option 'help-clean-buttons'.
+If non-nil, link buttons in "*Help*" will have any surrounding quotes
+removed.
+
 ---
 *** 'M-x apropos-variable' output now includes values of variables.
 
 +++
-*** New doc string syntax to indicate that symbols shouldn't be links.
-When displaying doc strings in "*Help*" buffers, strings that are
+*** New docstring syntax to indicate that symbols shouldn't be links.
+When displaying docstrings in "*Help*" buffers, strings that are
 "`like-this'" are made into links (if they point to a bound
 function/variable).  This can lead to false positives when talking
 about values that are symbols that happen to have the same names as
@@ -658,11 +889,8 @@ or is itself too long.
 +++
 *** New user option 'outline-minor-mode-use-buttons'.
 If non-nil, Outline Minor Mode will use buttons to hide/show outlines
-in addition to the ellipsis.  The default is nil.
-
----
-*** New user option 'outline-minor-mode-buttons'.
-This is a list of pairs of open/close strings used to display buttons.
+in addition to the ellipsis.  The default is nil in editing modes, but
+non-nil in 'special-mode' and its derivatives.
 
 +++
 ** Support for the WebP image format.
@@ -673,6 +901,7 @@ specifiers can now use ':type webp'.
 
 ** Windows
 
++++
 *** New user option 'display-buffer-avoid-small-windows'.
 If non-nil, this should be a window height, a number.  Windows smaller
 than this will be avoided by 'display-buffer', if possible.
@@ -745,7 +974,7 @@ are met.  The conditions are given by the argument, which 
can be
 +++
 *** New user option 'rcirc-cycle-completion-flag'.
 Rcirc will use the default 'completion-at-point' mechanism.  The
-conventional IRC behaviour of completing by cycling through the
+conventional IRC behavior of completing by cycling through the
 available options can be restored by enabling this option.
 
 ** Imenu
@@ -758,6 +987,14 @@ available options can be restored by enabling this option.
 Use it if you want Imenu to forget the buffer's index alist and
 recreate it anew next time 'imenu' is invoked.
 
++++
+** Emacs is now capable of abandoning a window's redisplay that takes too long.
+This is controlled by the new variable 'max-redisplay-ticks'.  If that
+variable is set to a non-zero value, display of a window will be
+aborted after that many low-level redisplay operations, thus
+preventing Emacs from becoming wedged when visiting files with very
+long lines.
+
 * Editing Changes in Emacs 29.1
 
 +++
@@ -770,7 +1007,7 @@ option 'cycle-spacing-actions'.
 ** 'zap-to-char' and 'zap-up-to-char' are case-sensitive for upper-case chars.
 These commands now behave as case-sensitive for interactive calls when
 they are invoked with an uppercase character, regardless of the
-`case-fold-search' value.
+'case-fold-search' value.
 
 ---
 ** 'scroll-other-window' and 'scroll-other-window-down' now respect remapping.
@@ -841,6 +1078,12 @@ The user option 'comint-terminfo-terminal' and the 
variable
 'system-uses-terminfo' can now be set as connection-local variables to
 change the terminal used on a remote host.
 
+---
+*** New user option 'comint-delete-old-input'.
+When nil, this prevents comint from deleting the current input when
+inserting previous input using '<mouse-2>'.  The default is t, to
+preserve past behavior.
+
 ** Mwheel
 
 ---
@@ -870,31 +1113,31 @@ now has font-selection and character composition rules, 
a language
 environment, and an input method.  The newly-added scripts and the
 corresponding language environments are:
 
-**** Tai Tham script and the Northern Thai language environment
-**** Brahmi script and language environment
-**** Kaithi script and language environment
-**** Tirhuta script and language environment
-**** Sharada script and language environment
-**** Siddham script and language environment
-**** Syloti Nagri script and language environment
-**** Modi script and language environment
-**** Baybayin script and Tagalog language environment
-**** Hanunoo script and language environment
-**** Buhid script and language environment
-**** Tagbanwa script and language environment
-**** Limbu script and language environment
-**** Balinese script and language environment
-**** Javanese script and language environment
-**** Sundanese script and language environment
-**** Batak script and language environment
-**** Rejang script and language environment
-**** Makasar script and language environment
-**** Lontara script and language environment
-**** Hanifi Rohingya script and language environment
-**** Grantha script and language environment
-**** Kharoshthi script and language environment
-**** Lepcha script and language environment
-**** Meetei Mayek script and language environment
+Tai Tham script and the Northern Thai language environment
+Brahmi script and language environment
+Kaithi script and language environment
+Tirhuta script and language environment
+Sharada script and language environment
+Siddham script and language environment
+Syloti Nagri script and language environment
+Modi script and language environment
+Baybayin script and Tagalog language environment
+Hanunoo script and language environment
+Buhid script and language environment
+Tagbanwa script and language environment
+Limbu script and language environment
+Balinese script and language environment
+Javanese script and language environment
+Sundanese script and language environment
+Batak script and language environment
+Rejang script and language environment
+Makasar script and language environment
+Lontara script and language environment
+Hanifi Rohingya script and language environment
+Grantha script and language environment
+Kharoshthi script and language environment
+Lepcha script and language environment
+Meetei Mayek script and language environment
 
 ---
 *** The "Oriya" language environment was renamed to "Odia".
@@ -908,9 +1151,86 @@ supported.
 Type 'C-u C-h t' to select it in case your language setup does not do
 so automatically.
 
+---
+*** New default phonetic input method for the Tamil language environment.
+The default input method for the Tamil language environment is now
+"tamil-phonetic" which is a customizable phonetic input method.  To
+change the input method's translation rules, customize the user option
+'tamil-translation-rules'.
+
 
 * Changes in Specialized Modes and Packages in Emacs 29.1
 
+** Dired
+
++++
+*** 'dired-guess-shell-command' moved from dired-x to dired.
+This means that 'dired-do-shell-command' will now provide smarter
+defaults without first having to require 'dired-x'.  See the node
+"(emacs) Shell Command Guessing" in the Emacs manual for more details.
+
+---
+*** 'dired-clean-up-buffers-too' moved from dired-x to dired.
+This means that Dired now offers to kill buffers visiting files and
+dirs when they are deleted in Dired.  Before, you had to require
+'dired-x' to enable this behavior.  To disable this behavior,
+customize the user option 'dired-clean-up-buffers-too' to nil.  The
+related user option 'dired-clean-confirm-killing-deleted-buffers'
+(which see) has also been moved to 'dired'.
+
++++
+*** 'dired-do-relsymlink' moved from dired-x to dired.
+The corresponding key 'Y' is now bound by default in Dired.
+
++++
+*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
+The corresponding key '% Y' is now bound by default in Dired.
+
+---
+*** 'M-G' is now bound to 'dired-goto-subdir'.
+Before, that binding was only available if the dired-x package was
+loaded.
+
++++
+*** 'dired-info' and 'dired-man' moved from dired-x to dired.
+The 'dired-info' and 'dired-man' commands have been moved from the
+dired-x package to dired.  They have also been renamed to
+'dired-do-info' and 'dired-do-man'; the old command names are obsolete
+aliases.
+
+The keys 'I' ('dired-do-info') and 'N' ('dired-do-man') are now bound
+in Dired mode by default.  The user options 'dired-bind-man' and
+'dired-bind-info' no longer have any effect and are obsolete.
+
+To get the old behavior back and unbind these keys in Dired mode, add
+the following to your Init file:
+
+    (with-eval-after-load 'dired
+      (keymap-set dired-mode-map "N" nil)
+      (keymap-set dired-mode-map "I" nil))
+
+---
+*** New command 'dired-do-eww'.
+This command visits the file on the current line with EWW.
+
+** Elisp
+
+---
+*** New command 'elisp-eval-buffer' (bound to 'C-c C-e').
+This command evals the forms in the current buffer.
+
+---
+*** New commands 'elisp-byte-compile-file' and 'elisp-byte-compile-buffer'.
+These commands (bound to 'C-c C-f' and 'C-c C-b', respectively)
+byte-compile the visited file and the current buffer, respectively.
+
+** Games
+
+---
+*** New user option 'tetris-allow-repetitions'.
+This controls how randomness is implemented (whether to use pure
+randomness as before or whether to use a bag).
+
 ** Battery
 
 +++
@@ -922,7 +1242,7 @@ This can be used to trigger actions based on the battery 
status.
 +++
 *** New command 'enriched-toggle-markup'.
 This allows you to see the markup in 'enriched-mode' buffers (e.g.,
-the HELLO file).
+the "HELLO" file).
 
 ** Shell Script Mode
 
@@ -934,6 +1254,7 @@ This controls how statements like the following are 
indented:
         bar
 
 ** Cperl Mode
+
 ---
 *** New user option 'cperl-file-style'.
 This option determines the indentation style to be used.  It can also
@@ -946,6 +1267,12 @@ be used as a file-local variable.
 If given a prefix, it will query the user for an argument to use for
 the run/continue command.
 
+---
+*** 'perldb' now recognizes '-E'.
+As of Perl 5.10, 'perl -E 0' behaves like 'perl -e 0' but also activates
+all optional features of the Perl version in use.  'perldb' now uses
+this invocation as its default.
+
 ** Customize
 
 ---
@@ -953,6 +1280,14 @@ the run/continue command.
 This is bound to 'H' and toggles whether to hide or show the widget
 contents.
 
+** Diff mode
+
+---
+*** New user option 'diff-whitespace-style'.
+Sets the value of the buffer-local variable 'whitespace-style' in
+'diff-mode' buffers.  By default, this variable is '(face trailing)',
+which preserves behavior from previous Emacs versions.
+
 ** Ispell
 
 ---
@@ -982,6 +1317,11 @@ list-packages'.
 *** New command 'package-update-all'.
 This command allows updating all packages without any queries.
 
++++
+*** New commands 'package-recompile' and 'package-recompile-all'.
+These commands can be useful if the ".elc" files are out of date
+(invalid byte code and macros).
+
 +++
 *** New DWIM action on 'x' in "*Packages*" buffer.
 If no packages are marked, 'x' will install the package under point if
@@ -998,7 +1338,7 @@ inadvertently delete the "*scratch*" buffer.
 ** Debugging
 
 ---
-*** 'q' in a *Backtrace* buffer no longer clears the buffer.
+*** 'q' in a "*Backtrace*" buffer no longer clears the buffer.
 Instead it just buries the buffer and switches the mode from
 'debugger-mode' to 'backtrace-mode', since commands like 'e' are no
 longer available after exiting the recursive edit.
@@ -1008,7 +1348,25 @@ longer available after exiting the recursive edit.
 This user option controls whether the 'e' (in a "*Backtrace*"
 buffer or while edebugging) and 'C-x C-e' (while edebugging) commands
 lead to a (further) backtrace.  By default, this variable is nil,
-which is a change in behaviour from previous Emacs versions.
+which is a change in behavior from previous Emacs versions.
+
++++
+*** 'e' in edebug can now take a prefix arg to pretty-print the results.
+When invoked with a prefix argument, as in 'C-u e', this command will
+pop up a new buffer and show the full pretty-printed value there.
+
++++
+*** 'C-x C-e' now interprets a non-zero prefix arg to pretty-print the results.
+When invoked with a non-zero prefix argument, as in 'C-u C-x C-e',
+this command will pop up a new buffer and show the full pretty-printed
+value there.
+
++++
+*** You can now generate a backtrace from Lisp errors in redisplay.
+To do this, set the new variable 'backtrace-on-redisplay-error' to a
+non-nil value.  The backtrace will be written to a special buffer
+named "*Redisplay-trace*".  This buffer will not be automatically
+displayed in a window.
 
 ** Compile
 
@@ -1037,12 +1395,16 @@ files that have few newlines.
 +++
 ** New minor mode 'word-wrap-whitespace-mode' for extending 'word-wrap'.
 This mode switches 'word-wrap' on, and breaks on all the whitespace
-characters instead of just SPC and TAB.
+characters instead of just 'SPC' and 'TAB'.
 
 ---
 ** New mode, 'emacs-news-mode', for editing the NEWS file.
 This mode adds some highlighting, fixes the 'M-q' command, and has
-commands for doing maintenance.
+commands for doing maintenance of the Emacs NEWS files.  In addition,
+this mode turns on 'outline-minor-mode', and thus displays
+customizable icons (see 'icon-preference') on heading lines.  To
+disable these icons, customize 'outline-minor-mode-use-buttons' to a
+nil value.
 
 ---
 ** Kmacro
@@ -1098,9 +1460,9 @@ the completions if they are already visible.  The default 
value 't'
 always hides the completion buffer after some completion is made.
 
 *** New commands to complete the minibuffer history.
-'minibuffer-complete-history' ('C-x up') is like 'minibuffer-complete'
+'minibuffer-complete-history' ('C-x <up>') is like 'minibuffer-complete'
 but completes on the history items instead of the default completion
-table.  'minibuffer-complete-defaults' ('C-x down') completes
+table.  'minibuffer-complete-defaults' ('C-x <down>') completes
 on the list of default items.
 
 +++
@@ -1132,6 +1494,11 @@ This means that typing 'C-u RET' on a completion 
candidate in the
 "*Completions*" buffer inserts the completion to the minibuffer,
 but doesn't exit the minibuffer.
 
++++
+*** You can now define abbrevs for the fundamental minibuffer modes.
+'minibuffer-mode-abbrev-table' and
+'minibuffer-inactive-mode-abbrev-table' are now defined.
+
 ** Isearch and Replace
 
 +++
@@ -1141,6 +1508,11 @@ outside the echo area, Emacs will, by default, end the 
Isearch and
 yank the text at mouse cursor.  But if 'mouse-yank-at-point' is
 non-nil, the text will now be added to the Isearch instead.
 
++++
+*** Changes for values 'no' and 'no-ding' of 'isearch-wrap-pause'.
+Now with these values the search will wrap around not only on repeating
+with 'C-s C-s', but also after typing a character.
+
 +++
 *** New user option 'char-fold-override'.
 Non-nil means that the default definitions of equivalent characters
@@ -1153,11 +1525,24 @@ command accepts the Unicode name of an Emoji (for 
example, "smiling
 face" or "heart with arrow"), like 'C-x 8 e e', with minibuffer
 completion, and adds the Emoji into the search string.
 
+** Glyphless characters
+
 +++
-** New minor mode 'glyphless-display-mode'.
+*** New minor mode 'glyphless-display-mode'.
 This allows an easy way to toggle seeing all glyphless characters in
 the current buffer.
 
+*** The extra slot of 'glyphless-char-display' can now have cons values.
+The extra slot of the 'glyphless-char-display' char-table can now have
+values that are cons cells, specifying separate values for text-mode
+and GUI terminals.
+
+*** "Replacement character" feature for undisplayable characters on TTYs.
+The 'acronym' method of displaying glyphless characters on text-mode
+frames treats single-character acronyms specially: they are displayed
+without the surrounding [..] "box", thus in effect treating such
+"acronyms" as replacement characters.
+
 ** Registers
 
 +++
@@ -1223,7 +1608,7 @@ header before sending a message.
 ** Texinfo Mode
 
 ---
-*** 'texinfo-mode' now has a specialised 'narrow-to-defun' definition.
+*** 'texinfo-mode' now has a specialized 'narrow-to-defun' definition.
 It narrows to the current node.
 
 ** EUDC
@@ -1268,6 +1653,12 @@ EUDC can now contribute email addresses to 
'completion-at-point' by
 adding the new function 'eudc-capf-complete' to
 'completion-at-point-functions' in 'message-mode'.
 
++++
+*** Additional attributes of query and results in eudcb-macos-contacts.el.
+The EUDC back-end for the macOS Contacts app now provides a wider set
+of attributes to use for queries, and delivers more attributes in
+query results.
+
 ** EWW/SHR
 
 +++
@@ -1295,6 +1686,14 @@ doesn't work on other systems.  Also see etc/PROBLEMS.
 These are used to alter an URL before using it.  By default it removes
 the common "utm_" trackers from URLs.
 
+** Find-Dired
+
+---
+*** New command 'find-dired-with-command'.
+This enables users to run 'find-dired' with an arbitrary command,
+enabling running commands previously unsupported and also enabling new
+commands to be built on top.
+
 ** Gnus
 
 +++
@@ -1307,10 +1706,16 @@ Message, referred to as 'gnus-summary-tool-bar-retro',
 well as the icons used), and the "Gnome" tool bars are now the only
 pre-defined toolbars.
 
+---
+*** 'gnus-summary-up-thread' and 'gnus-summary-down-thread' bindings removed.
+The 'gnus-summary-down-thread' binding to "M-C-d" was shadowed by
+'gnus-summary-read-document', and these commands are also available on
+"T-u" and "T-d" respectively.
+
 ---
 *** 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:
+following in your ".gnus" file:
 
     (set-face-attribute 'gnus-header nil :inherit 'unspecified)
 
@@ -1378,11 +1783,6 @@ The new ':doc-spec-function' element can be used to 
compute the
 ':doc-spec' element when the user asks for info on that particular
 mode (instead of at load time).
 
-** Subr-x
-
-+++
-*** New macro 'with-memoization' provides a very primitive form of memoization.
-
 ** Ansi-color
 
 ---
@@ -1476,6 +1876,21 @@ 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.
 
++++
+*** New commands: 'image-flip-horizontally' and 'image-flip-vertically'.
+These commands horizontally and vertically flip the image under point.
+
++++
+*** New command 'image-transform-set-percent'.
+It allows setting the image size to a percentage of its original size,
+and is bound to "s p" in Image mode.
+
+** Images
+
++++
+*** Users can now add special image conversion functions.
+This is done via 'image-converter-add-handler'.
+
 ** Image-Dired
 
 +++
@@ -1579,6 +1994,11 @@ the thumbnail file.
 
 ** Dired
 
+---
+*** New user option 'dired-omit-lines'.
+This is used by 'dired-omit-mode', and now allows you to hide based on
+other things than just the file names.
+
 +++
 *** New user option 'dired-mouse-drag-files'.
 If non-nil, dragging file names with the mouse in a Dired buffer will
@@ -1603,7 +2023,31 @@ the buffer will take you to that directory.
 *** Search and replace in Dired/Wdired supports more regexps.
 For example, the regexp ".*" will match only characters that are part
 of the file name.  Also "^.*$" can be used to match at the beginning
-of the file name and at the end of the file name.
+of the file name and at the end of the file name.  This is used only
+when searching on file names.  In Wdired this can be used when the new
+user option 'wdired-search-replace-filenames' is non-nil (which is the
+default).
+
+** Bookmarks
+
+---
+*** 'list-bookmarks' now includes a type column.
+Types are registered via a 'bookmark-handler-type' symbol property on
+the jumping function.
+
++++
+*** 'bookmark-sort-flag' can now be set to 'last-modified'.
+This will display bookmark list from most recently set to least
+recently set.
+
+---
+*** When editing a bookmark annotation, 'C-c C-k' will now cancel.
+It is bound to the new command 'bookmark-edit-annotation-cancel'.
+
+---
+*** New option 'bookmark-fringe-mark'.
+This option controls the bitmap used to indicate bookmarks in the
+fringe (or 'nil' to disable showing this marker).
 
 ** Exif
 
@@ -1641,7 +2085,7 @@ This command displays a buffer containing the page load 
history of
 the current WebKit widget, and allows you to navigate it.
 
 ---
-*** On X11, the WebKit inspector is now available inside xwidgets.
+*** On X, the WebKit inspector is now available inside xwidgets.
 To access the inspector, right click on the widget and select "Inspect
 Element".
 
@@ -1674,6 +2118,12 @@ related 'auth-sources' entry were wrong.
 
 ** Browse URL
 
+---
+*** New user option 'browse-url-default-scheme'.
+This user option decides which URL scheme that 'browse-url' and
+related functions will use by default.  For example, you could
+customize this to "https" to always prefer HTTPS URLs.
+
 ---
 *** Support for the Netscape web browser has been removed.
 This support has been obsolete since Emacs 25.1.  The final version of
@@ -1684,6 +2134,11 @@ the Netscape web browser was released in February, 2008.
 This support has been obsolete since Emacs 25.1.  The final version of
 the Galeon web browser was released in September, 2008.
 
+---
+*** Support for the Mozilla web browser is now obsolete.
+Note that this historical web browser is different from Mozilla
+Firefox; it is its predecessor.
+
 ** Ruby Mode
 
 ---
@@ -1738,12 +2193,25 @@ values passed as a single token, such as '-oVALUE' or
 'eshell-eval-using-options' macro.  See "Defining new built-in
 commands" in the "(eshell) Built-ins" node of the Eshell manual.
 
+---
+*** Eshell globs ending with '/' now match only directories.
+Additionally, globs ending with '**/' or '***/' no longer raise an
+error, and now expand to all directories recursively (following
+symlinks in the latter case).
+
++++
+*** Lisp forms in Eshell now treat a 'nil' result as a failed exit status.
+When executing a command that looks like '(lisp form)', Eshell will
+set the exit status (available in the '$?' variable) to 2.  This
+allows commands like that to be used as conditionals.  To change this
+behavior, customize the new 'eshell-lisp-form-nil-is-failure' option.
+
 ** Shell
 
 ---
 *** New user option 'shell-kill-buffer-on-exit'.
-Enabling this will automatically kill a *shell* buffer as soon as the
-shell session terminates.
+Enabling this will automatically kill a "*shell*" buffer as soon as
+the shell session terminates.
 
 ** Calc
 
@@ -1753,11 +2221,28 @@ Set it to nil to exclude line numbering from kills and 
copies.
 
 ** Miscellaneous
 
+---
+*** New user option 'webjump-use-internal-browser'.
+When non-nil, WebJump will use an internal browser to open web pages,
+instead of the default external browser.
+
 +++
 *** New user option 'font-lock-ignore'.
 This option provides a mechanism to selectively disable font-lock
 keyword-driven fontifications.
 
+---
+*** New user option 'auto-save-visited-predicate'.
+This user option is a predicate function which is called by
+'auto-save-visited-mode' to decide whether or not to save a buffer.
+You can use it to automatically save only specific buffers, for
+example buffers using a particular mode or in some directory.
+
+---
+*** New user option 'remote-file-name-inhibit-auto-save-visited'.
+If this user option is non-nil, 'auto-save-visited-mode' will not
+auto-save remote buffers.  The default is nil.
+
 +++
 *** New package vtable.el for formatting tabular data.
 This package allows formatting data using variable-pitch fonts.
@@ -1765,16 +2250,6 @@ The resulting tables can display text in variable pitch 
fonts, text
 using fonts of different sizes, and images.  See the "(vtable) Top"
 manual for more details.
 
----
-*** 'list-bookmarks' now includes a type column.
-Types are registered via a 'bookmark-handler-type' symbol property on
-the jumping function.
-
-+++
-*** 'bookmark-sort-flag' can now be set to 'last-modified'.
-This will display bookmark list from most recently set to least
-recently set.
-
 ---
 *** New minor mode 'elide-head-mode'.
 Enabling this minor mode turns on hiding header material, like
@@ -1787,19 +2262,47 @@ If non-nil, files untracked by a VCS are considered to 
be part of
 the project by a VC project based on that VCS.
 
 ---
-** The autoarg.el library is now marked obsolete.
-This library provides the 'autoarg-mode' and 'autoarg-kp-mode' minor
-modes to emulate the behavior of the historical editor Twenex Emacs.
-It is believed to no longer be useful.
+*** 'recentf-mode' now uses abbreviated file names by default.
+This means that e.g. "/home/foo/bar" is now displayed as "~/bar".
+Customize the user option 'recentf-filename-handlers' to nil to get
+back the old behavior.
+
+---
+*** New command 'recentf-open'.
+This command prompts for a recently opened file in the minibuffer, and
+visits it.
+
+---
+*** 'ffap-machine-at-point' no longer pings hosts by default.
+It will now simply look at a hostname to determine if it is valid,
+instead of also trying to ping it.  Customize the user option
+'ffap-machine-p-known' to 'ping' to get the old behavior back.
+
+---
+*** The 'run-dig' command is now obsolete; use 'dig' instead.
+
+---
+*** Some `bib-mode' commands and variables have been renamed.
+To respect Emacs naming conventions, the variable 'unread-bib-file'
+has been renamed to 'bib-unread-file'.  The following commands have
+also been renamed:
+    'addbib'           to  'bib-add'
+    'return-key-bib'   to  'bib-return-key'
+    'mark-bib'         to  'bib-mark'
+    'unread-bib'       to  'bib-unread'
 
 ---
-** proced.el shows system processes of remote hosts.
+*** proced.el shows system processes of remote hosts.
 When 'default-directory' is remote, and 'proced' is invoked with a
 negative argument like 'C-u - proced', the system processes of that
 remote host are shown.  Alternatively, the user option
 'proced-show-remote-processes' can be set to non-nil.
 'proced-signal-function' has been marked obsolete.
 
+---
+*** 'outlineify-sticky' command is renamed to 'allout-outlinify-sticky'.
+The old name is still available as an obsolete function alias.
+
 
 * New Modes and Packages in Emacs 29.1
 
@@ -1808,6 +2311,7 @@ remote host are shown.  Alternatively, the user option
 Allows the creation of "functions with slots" or "function objects"
 via the macros 'oclosure-define' and 'oclosure-lambda'.
 
++++
 *** New generic function 'oclosure-interactive-form'.
 Used by 'interactive-form' when called on an OClosure.
 This allows specific OClosure types to compute their interactive specs
@@ -1823,23 +2327,46 @@ This mode is used to edit files geared towards testing 
actions in
 Emacs buffers, like indentation and the like.  The new ert function
 'ert-test-erts-file' is used to parse these files.
 
+---
+** New mode 'js-json-mode'.
+This is a lightweight variant of 'js-mode' that is used by default
+when visiting JSON files.
+
 
 * Incompatible Lisp Changes in Emacs 29.1
 
+---
+** 'find-image' now uses 'create-image'.
+This means that images found through 'find-image' also have
+auto-scaling applied.  (This only makes a difference on HiDPI
+displays.)
+
 +++
-** loaddefs.el generation has been reimplemented.
-The various loaddefs.el files in the Emacs tree (which contain
+** Changes to "raw" in-memory xbm images are specified.
+Some years back Emacs gained the ability to scale images, and you
+could then specify ':width' and ':height' when using 'create-image' on all
+image types -- except xbm images, because this format already used the
+':width' and ':height' arguments to specify the width/height of the "raw"
+in-memory format.  This meant that if you used these specifications
+on, for instance, xbm files, Emacs would refuse to display them.  This
+has been changed, and ':width'/':height' now works as with all other image
+formats, and the way to specify the width/height of the "raw"
+in-memory format is now by using ':data-width' and ':data-height'.
+
++++
+** "loaddefs.el" generation has been reimplemented.
+The various "loaddefs.el" files in the Emacs tree (which contain
 information about autoloads, built-in packages and package prefixes)
-used to be generated by functions in autoloads.el.  These are now
-generated by loaddefs-gen.el instead.  This leads to functionally
+used to be generated by functions in "autoloads.el".  These are now
+generated by "loaddefs-gen.el" instead.  This leads to functionally
 equivalent loaddef files, but they do not use exactly the same syntax,
 so using 'M-x update-file-autoloads' no longer works.  (This didn't
 work well in most files in the past, either, but it will now signal an
 error in any file.)
 
 In addition, files are scanned in a slightly different way.
-Previously ;;;### specs inside a top-level form (i.e., something like
-(when ... ;;;### ...) would be ignored.  They are now parsed as
+Previously ';;;###' specs inside a top-level form (i.e., something
+like '(when ... ;;;### ...)' would be ignored.  They are now parsed as
 normal.
 
 +++
@@ -1880,6 +2407,12 @@ they will still be escaped, so the '.foo' symbol is 
still printed as
 and remapping parent of basic faces does not work reliably.
 Instead of remapping 'mode-line', you have to remap 'mode-line-active'.
 
++++
+** 'make-process' has been extended to support ptys when ':stderr' is set.
+Previously, setting ':stderr' to a non-nil value would force the
+process's connection to use pipes.  Now, Emacs will use a pty for
+stdin and stdout if requested no matter the value of ':stderr'.
+
 ---
 ** User option 'mail-source-ignore-errors' is now obsolete.
 The whole mechanism for prompting users to continue in case of
@@ -1964,14 +2497,85 @@ 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'.
 
+---
+** 'compilation-last-buffer' is (finally) declared obsolete.
+It's been obsolete since Emacs-22.1, actually.
+
+---
+** Calling 'lsh' now elicits a byte-compiler warning.
+'lsh' behaves in somewhat surprising and platform-dependent ways for
+negative arguments, and is generally slower than 'ash', which should be
+used instead.  This warning can be suppressed by surrounding calls to
+'lsh' with the construct '(with-suppressed-warnings ((suspicious lsh)) ...)',
+but switching to `ash` is generally much preferable.
+
+---
+** Some functions and variables obsolete since Emacs 24 have been removed:
+'Info-edit-map', 'allout-abbreviate-flattened-numbering',
+'allout-mode-deactivate-hook', 'ansi-color-unfontify-region',
+'auth-source-forget-user-or-password', 'auth-source-hide-passwords',
+'auth-source-user-or-password', 'bibtex-complete',
+'bibtex-entry-field-alist', 'buffer-substring-filters',
+'byte-compile-disable-print-circle', 'cfengine-mode-abbrevs',
+'chart-map', 'comint-dynamic-complete',
+'comint-dynamic-complete-as-filename',
+'comint-dynamic-simple-complete', 'command-history-map',
+'compilation-parse-errors-function', 'completion-annotate-function',
+'condition-case-no-debug', 'count-lines-region', 'data-debug-map',
+'deferred-action-list', 'deferred-action-function',
+'dired-x-submit-report', 'eieio-defgeneric', 'eieio-defmethod',
+'emacs-lock-from-exiting', 'erc-complete-word',
+'eshell-cmpl-suffix-list', 'eshell-for', 'font-lock-maximum-size',
+'font-lock-reference-face', 'gnus-carpal',
+'gnus-debug-exclude-variables', 'gnus-debug-files',
+'gnus-local-domain', 'gnus-outgoing-message-group',
+'gnus-secondary-servers', 'gnus-registry-user-format-function-M',
+'image-extension-data', 'image-library-alist',
+'inhibit-first-line-modes-regexps',
+'inhibit-first-line-modes-suffixes', 'intdos',
+'mail-complete-function', 'mail-completion-at-point-function',
+'mail-mailer-swallows-blank-line', 'mail-sent-via', 'make-register',
+'makefile-complete', 'menu-bar-kill-ring-save',
+'meta-complete-symbol', 'meta-mode-map',
+'minibuffer-completing-symbol',
+'minibuffer-local-filename-must-match-map', 'mode25', 'mode4350',
+'msb-after-load-hooks', 'nnimap-split-rule', 'nntp-authinfo-file',
+'ns-alternatives-map', 'ns-store-cut-buffer-internal',
+'package-menu-view-commentary', 'pascal-last-completions',
+'pascal-show-completions', 'pascal-toggle-completions',
+'prolog-char-quote-workaround', 'read-filename-at-point',
+'reftex-index-map', 'reftex-index-phrases-map',
+'reftex-select-bib-map', 'reftex-select-label-map', 'reftex-toc-map',
+'register-name-alist', 'register-value',
+'report-emacs-bug-pretest-address',
+'rmail-default-dont-reply-to-names', 'rmail-dont-reply-to',
+'rmail-dont-reply-to-names', 'rst-block-face', 'rst-comment-face',
+'rst-definition-face', 'rst-directive-face', 'rst-emphasis1-face',
+'rst-emphasis2-face', 'rst-external-face', 'rst-literal-face',
+'rst-reference-face', 'semantic-grammar-map',
+'semantic-grammar-syntax-table', 'set-register-value',
+'speedbar-key-map', 'speedbar-syntax-table',
+'starttls-any-program-available', 'strokes-report-bug',
+'toggle-emacs-lock', 'tooltip-use-echo-area', 'turn-on-cwarn-mode',
+'turn-on-iimage-mode', 'vc-toggle-read-only', 'view-return-to-alist',
+'view-return-to-alist-update', 'w32-default-color-map' (function),
+'which-func-mode' (function), 'x-cut-buffer-or-selection-value'.
+
 ---
 ** Some functions and variables obsolete since Emacs 23 have been removed:
 'find-emacs-lisp-shadows', 'newsticker-cache-filename',
+'process-filter-multibyte-p', 'redisplay-end-trigger-functions',
+'set-process-filter-multibyte', 'set-window-redisplay-end-trigger',
 'unify-8859-on-decoding-mode', 'unify-8859-on-encoding-mode',
-'vc-arch-command'.
+'vc-arch-command', 'window-redisplay-end-trigger', 'x-selection'.
+
+---
+** Some functions and variables obsolete since Emacs 21 or 22 have been 
removed:
+'c-toggle-auto-state', 'find-file-not-found-hooks',
+'ls-lisp-dired-ignore-case', 'query-replace-regexp-eval'.
 
 +++
-** New generic function 'function-doumentation'.
+** New generic function 'function-documentation'.
 Can dynamically generate a raw docstring depending on the type of
 a function.
 Used mainly for docstrings of OClosures.
@@ -1994,11 +2598,100 @@ functions.
 ---
 ** '?\' at the end of a line now signals an error.
 Previously it produced a nonsense value, -1, that was never intended.
+
+---
+** Some libraries obsolete since Emacs 24.1 and 24.3 have been removed:
+abbrevlist.el, assoc.el, complete.el, cust-print.el,
+erc-hecomplete.el, mailpost.el, mouse-sel.el, old-emacs-lock.el,
+patcomp.el, pc-mode.el, pc-select.el, s-region.el, and sregex.el.
+
++++
+** Many seldom-used generalized variables have been made obsolete.
+Emacs has a number of rather obscure generalized variables defined,
+that, for instance, allowed you to say things like:
+
+   (setf (point-min) 4)
+
+These never caught on and have been made obsolete.  The form above,
+for instance, is the same as saying
+
+   (narrow-to-region 4 (point-max))
+
+The following generalized variables have been made obsolete:
+'buffer-file-name', 'buffer-local-value', 'buffer-modified-p',
+'buffer-name', 'buffer-string', 'buffer-substring', 'current-buffer',
+'current-column', 'current-global-map', 'current-input-mode',
+'current-local-map', 'current-window-configuration',
+'default-file-modes', 'documentation-property', 'frame-height',
+'frame-width', 'frame-visible-p', 'global-key-binding',
+'local-key-binding', 'mark', 'mark-marker', 'marker-position',
+'mouse-position', 'point', 'point-marker', 'point-max', 'point-min',
+'read-mouse-position', 'screen-height', 'screen-width',
+'selected-frame', 'selected-screen', 'selected-window',
+'standard-case-table', 'syntax-table', 'visited-file-modtime',
+'window-height', 'window-width', and 'x-get-secondary-selection'.
+
 
 * Lisp Changes in Emacs 29.1
 
 +++
-** 'read-regexp' now allows the user to indicate whether to use case folding.
+** New function 'make-obsolete-generalized-variable'.
+This can be used to mark setters used by 'setf' as obsolete, and the
+byte-compiler will then warn about using them.
+
++++
+** New functions 'pos-eol' and 'pos-bol'.
+These are like 'line-end-position' and 'line-beginning-position'
+(respectively), but ignore fields (and are more efficient).
+
++++
+** New function 'compiled-function-p'.
+This returns non-nil if its argument is either a built-in, or a
+byte-compiled, or a natively-compiled function object, or a function
+loaded from a dynamic module.
+
+---
+** 'deactivate-mark' can have new value 'dont-save'.
+This value means that Emacs should deactivate the mark as usual, but
+without setting the primary selection, if 'select-active-regions' is
+enabled.
+
++++
+** New 'declare' form 'interactive-args'.
+This can be used to specify what forms to put into 'command-history'
+when executing commands interactively.
+
++++
+** The FORM arg of 'time-convert' is mandatory.
+'time-convert' can still be called without it, as before, but the
+compiler now emits a warning about this deprecated usage.
+
++++
+** Emacs now supports user-customizable and themable icons.
+These can be used for buttons in buffers and the like.  See the
+"(elisp) Icons" and "(emacs) Icons" nodes in the manuals for details.
+
++++
+** New arguments MESSAGE and TIMEOUT of 'set-transient-map'.
+MESSAGE specifies a message to display after activating the transient
+map, including a special formatting spec to list available keys.
+TIMEOUT is the idle time after which to deactivate the transient map.
+The default timeout value can be defined by the new variable
+'set-transient-map-timeout'.
+
++++
+** New function 'seq-split'.
+This returns a list of sub-sequences of the specified sequence.
+
++++
+** 'plist-get', 'plist-put' and 'plist-member' are no longer limited to 'eq'.
+These function now take an optional comparison predicate argument.
+
++++
+** 'read-multiple-choice' can now use long-form answers.
+
++++
+** 'M-c' in 'read-regexp' now toggles case folding.
 
 +++
 ** 'completing-read' now allows a function as its REQUIRE-MATCH argument.
@@ -2022,15 +2715,28 @@ If DATA is a string, then its text properties are 
searched for values
 for each specific data type while the selection is being converted.
 
 ---
-** New eldoc function: 'elisp-eldoc-var-docstring-with-value'.
+** New eldoc function 'elisp-eldoc-var-docstring-with-value'.
 This function includes the current value of the variable in eldoc display
 and can be used as a more detailed alternative to 'elisp-eldoc-var-docstring'.
 
++++
 ** 'save-some-buffers' can now be extended to save other things.
 Traditionally, 'save-some-buffers' saved buffers, and also saved
 abbrevs.  This has been generalized via the
-'save-some-buffers-functions', and packages can now register things to
-be saved.
+'save-some-buffers-functions' variable, and packages can now register
+things to be saved.
+
++++
+** New function 'string-equal-ignore-case'.
+This compares strings ignoring case differences.
+
+** 'symbol-file' can now report natively-compiled ".eln" files.
+If Emacs was built with native-compilation enabled, Lisp programs can
+now call 'symbol-file' with the new optional 3rd argument non-nil to
+request the name of the ".eln" file which defined a given symbol.
+
++++
+** New macro 'with-memoization' provides a very primitive form of memoization.
 
 ** Themes
 
@@ -2058,6 +2764,20 @@ This is meant to be used in modes that have a header 
line that should
 be kept aligned with the buffer contents when the user switches
 'display-line-numbers-mode' on or off.
 
++++
+** New minor mode 'lost-selection-mode'.
+This minor mode makes Emacs deactivate the mark in all buffers when
+the primary selection is obtained by another program.
+
+---
+** On X, Emacs will try to preserve selection ownership when a frame is 
deleted.
+This means that if you make Emacs the owner of a selection, such as by
+selecting some text into the clipboard or primary selection, and then
+delete the current frame, you will still be able to insert the
+contents of that selection into other programs as long as another
+frame is open on the same display.  This behavior can be disabled by
+setting the user option 'x-auto-preserve-selections' to nil.
+
 +++
 ** New predicate 'char-uppercase-p'.
 This returns non-nil if its argument its an uppercase character.
@@ -2065,18 +2785,18 @@ This returns non-nil if its argument its an uppercase 
character.
 ** Byte compilation
 
 ---
-*** Byte compilation will now warn about some quoting mistakes in doc strings.
-When writing code snippets that contains the ' character (APOSTROPHE),
+*** Byte compilation will now warn about some quoting mistakes in docstrings.
+When writing code snippets that contains the "'" character (APOSTROPHE),
 that quote character has to be escaped to avoid Emacs displaying it as
-’ (LEFT SINGLE QUOTATION MARK), which would make code examples like
+"’" (LEFT SINGLE QUOTATION MARK), which would make code examples like
 
     (setq foo '(1 2 3))
 
 invalid.  Emacs will now warn during byte compilation if it seems
 something like that, and also warn about when using RIGHT/LEFT SINGLE
 QUOTATION MARK directly.  In both these cases, if these characters
-should really be present in the doc string, they should be quoted with
-\=.
+should really be present in the docstring, they should be quoted with
+"\=".
 
 ---
 *** Byte compilation will now warn about some malformed 'defcustom' types.
@@ -2089,12 +2809,12 @@ value.  The byte compiler will now issue a warning if 
it encounters
 these forms.
 
 +++
-*** 'restore-buffer-modified-p' can now alter buffer auto-save state.
+** 'restore-buffer-modified-p' can now alter buffer auto-save state.
 With a FLAG value of 'autosaved', it will mark the buffer as having
 been auto-saved since the time of last modification.
 
 ---
-*** New minor mode 'isearch-fold-quotes-mode'.
+** New minor mode 'isearch-fold-quotes-mode'.
 This sets up 'search-default-mode' so that quote characters are
 char-folded into each other.  It is used, by default, in "*Help*" and
 "*info*" buffers.
@@ -2178,9 +2898,10 @@ list in reported motion events if there is no frame 
underneath the
 mouse pointer.
 
 +++
-** New functions 'x-begin-drag', 'dnd-begin-text-drag' and 
'dnd-begin-file-drag'.
-These functions allow dragging contents (such as files and text) from
-Emacs to other programs.
+** New functions for dragging items from Emacs to other programs.
+The new functions 'x-begin-drag', 'dnd-begin-file-drag',
+'dnd-begin-drag-files', and 'dnd-direct-save' allow dragging contents
+(such as files and text) from Emacs to other programs.
 
 ---
 ** New function 'ietf-drums-parse-date-string'.
@@ -2247,7 +2968,7 @@ This is like 'get-text-property', but works on the 
'display' text
 property.
 
 +++
-** New function 'add-text-display-property'.
+** New function 'add-display-text-property'.
 This is like 'put-text-property', but works on the 'display' text
 property.
 
@@ -2278,6 +2999,12 @@ them towards or away from each other.
 This hook is run before 'x-popup-menu' is about to display a
 deck-of-cards menu on screen.
 
+---
+** New hook 'post-select-region-hook'.
+This hook is run immediately after 'select-active-regions' causes the
+region to be set as the primary selection.
+
++++
 ** New function 'buffer-match-p'.
 Check if a buffer satisfies some condition.  Some examples for
 conditions can be regular expressions that match a buffer name, a
@@ -2285,6 +3012,7 @@ cons-cell like '(major-mode . shell-mode)' that matches 
any buffer
 where 'major-mode' is 'shell-mode' or a combined with a condition like
 '(and "\\`\\*.+\\*\\'" (major-mode . special-mode))'.
 
++++
 ** New function 'match-buffers'.
 Use 'buffer-match-p' to gather a list of buffers that match a
 condition.
@@ -2322,6 +3050,12 @@ option.
 
 ** Keymaps and key definitions
 
++++
+*** 'where-is-internal' can now filter events marked as non key events.
+If a command maps to a key binding like '[some-event]', and 'some-event'
+has a symbol plist containing a non-nil 'non-key-event' property, then
+that binding is ignored by 'where-is-internal'.
+
 +++
 *** New functions for defining and manipulating keystrokes.
 These all take the syntax defined by 'key-valid-p'.  None of the older
@@ -2716,6 +3450,10 @@ when used as part of a property list specification for 
the
 ** 'defalias' records a more precise history of definitions.
 This is recorded in the 'function-history' symbol property.
 
+---
+** New hook 'save-place-after-find-file-hook'.
+This is called at the end of 'save-place-find-file-hook'.
+
 ---
 ** 'indian-tml-base-table' no longer translates digits.
 Use 'indian-tml-base-digits-table' if you want digits translation.
@@ -2730,12 +3468,21 @@ translation.
 This is useful when quoting shell arguments for a remote shell
 invocation.  Such shells are POSIX conformant by default.
 
++++
+** 'make-process' can set connection type independently for input and output.
+When calling 'make-process', communication via pty can be enabled
+selectively for just input or output by passing a cons cell for
+':connection-type', e.g. '(pipe . pty)'.  When examining a process
+later, you can determine whether a particular stream for a process
+uses a pty by passing one of 'stdin', 'stdout', or 'stderr' as the
+second argument to 'process-tty-name'.
+
 +++
 ** 'signal-process' now consults the list 'signal-process-functions'.
 This is to determine which function has to be called in order to
 deliver the signal.  This allows Tramp to send the signal to remote
 asynchronous processes.  The hitherto existing implementation has been
-moved to 'signal-default-interrupt-process'.
+moved to 'internal-default-signal-process'.
 
 +++
 ** 'list-system-processes' now returns remote process IDs.
@@ -2754,6 +3501,11 @@ to preserve the old behavior, apply
     (let ((default-directory temporary-file-directory))
       (process-attributes pid))
 
++++
+** New functions 'take' and 'ntake'.
+'(take N LIST)' returns the first N elements of LIST; 'ntake' does
+the same but works by modifying LIST destructively.
+
 
 
 * Changes in Emacs 29.1 on Non-Free Operating Systems
diff --git a/etc/NEWS.1-17 b/etc/NEWS.1-17
index ee6fa82b29..9d7bacc9ec 100644
--- a/etc/NEWS.1-17
+++ b/etc/NEWS.1-17
@@ -41,10 +41,10 @@ that Emacs has not been run on before.
 
 See etc/MACHINES.
 
-** Portable `alloca' provided.
+** Portable 'alloca' provided.
 
 Emacs can now run on machines that do not and cannot support the library
-subroutine `alloca' in the canonical fashion, using an `alloca' emulation
+subroutine 'alloca' in the canonical fashion, using an 'alloca' emulation
 written in C.
 
 ** On-line manual.
@@ -74,39 +74,39 @@ highest previously used.
 Thus, the active, current file does not have a version number.
 Only the backups have them.
 
-This feature is controlled by the variable `version-control'.  If it
-is `nil', as normally, then numbered backups are made only for files
+This feature is controlled by the variable 'version-control'.  If it
+is 'nil', as normally, then numbered backups are made only for files
 that already have numbered backups.  Backup names with just `~' are
 used for files that have no numbered backups.
 
-If `version-control' is `never', then the backup file's name is
+If 'version-control' is 'never', then the backup file's name is
 made with just `~' in any case.
 
-If `version-control' is not `nil' or `never', numbered backups are
+If 'version-control' is not 'nil' or 'never', numbered backups are
 made unconditionally.
 
 To prevent unlimited consumption of disk space, Emacs can delete
 old backup versions automatically.  Generally Emacs keeps the first
 few backups and the latest few backups, deleting any in between.
 This happens every time a new backup is made.  The two variables that
-control the deletion are `kept-old-versions' and `kept-new-versions'.
+control the deletion are 'kept-old-versions' and 'kept-new-versions'.
 Their values are, respectively, the number of oldest backups to keep
 and the number of newest ones to keep, each time a new backup is made.
-The value of `kept-new-versions' includes the backup just created.
+The value of 'kept-new-versions' includes the backup just created.
 By default, both values are 2.
 
-If `trim-versions-without-asking' is non-`nil', the excess middle versions
-are deleted without a murmur.  If it is `nil', the default, then you
+If 'trim-versions-without-asking' is non-'nil', the excess middle versions
+are deleted without a murmur.  If it is 'nil', the default, then you
 are asked whether the excess middle versions should really be deleted.
 
 Dired has a new command `.' which marks for deletion all but the latest
-and oldest few of every numeric series of backups.  `kept-old-versions'
-controls the number of oldest versions to keep, and `dired-kept-versions'
+and oldest few of every numeric series of backups.  'kept-old-versions'
+controls the number of oldest versions to keep, and 'dired-kept-versions'
 controls the number of latest versions to keep.  A numeric argument to
 the `.' command, if positive, specifies the number of latest versions
-to keep, overriding `dired-kept-versions'.  A negative argument specifies
+to keep, overriding 'dired-kept-versions'.  A negative argument specifies
 the number of oldest versions to keep, using minus the argument to override
-`kept-old-versions'.
+'kept-old-versions'.
 
 ** Immediate conflict detection.
 
@@ -182,17 +182,17 @@ is now C-c C-o, and C-x C-v (show output) is now C-c C-r.
 
 The old M-= (copy previous input) command is now C-c C-y.
 
-** Shell mode recognizes aliases for `pushd', `popd' and `cd'.
+** Shell mode recognizes aliases for 'pushd', 'popd' and 'cd'.
 
-Shell mode now uses the variable `shell-pushd-regexp' as a
+Shell mode now uses the variable 'shell-pushd-regexp' as a
 regular expression to recognize any command name that is
-equivalent to a `pushd' command.  By default it is set up
-to recognize just `pushd' itself.  If you use aliases for
-`pushd', change the regexp to recognize them as well.
+equivalent to a 'pushd' command.  By default it is set up
+to recognize just 'pushd' itself.  If you use aliases for
+'pushd', change the regexp to recognize them as well.
 
-There are also `shell-popd-regexp' to recognize commands
-with the effect of a `popd', and `shell-cd-regexp' to recognize
-commands with the effect of a `cd'.
+There are also 'shell-popd-regexp' to recognize commands
+with the effect of a 'popd', and 'shell-cd-regexp' to recognize
+commands with the effect of a 'cd'.
 
 ** "Exit" command in certain modes now C-c C-c.
 
@@ -203,7 +203,7 @@ modes, the command to exit used to be just C-c.
 ** Outline mode changes.
 
 Lines that are not heading lines are now called "body" lines.
-The command `hide-text' is renamed to `hide-body'.
+The command 'hide-text' is renamed to 'hide-body'.
 The key M-H is renamed to C-c C-h.
 The key M-S is renamed to C-c C-s.
 The key M-s is renamed to C-c C-i.
@@ -229,7 +229,7 @@ o now outputs to an Rmail file, and C-o to a Unix mail file.
 The F command (rmail-find) is renamed to M-s (rmail-search).
 Various new commands and features exist; see the Emacs manual.
 
-** Local bindings described first in describe-bindings.
+** Local bindings described first in 'describe-bindings'.
 
 ** [...], {...} now balance in Fundamental mode.
 
@@ -238,9 +238,9 @@ Various new commands and features exist; see the Emacs 
manual.
 There are two new major modes for editing nroff input and TeX input.
 See the Emacs manual for full information.
 
-** New C indentation style variable `c-brace-imaginary-offset'.
+** New C indentation style variable 'c-brace-imaginary-offset'.
 
-The value of `c-brace-imaginary-offset', normally zero, controls the
+The value of 'c-brace-imaginary-offset', normally zero, controls the
 indentation of a statement inside a brace-group where the open-brace
 is not the first thing on a line.  The value says where the open-brace
 is imagined to be, relative to the first nonblank character on the line.
@@ -251,47 +251,47 @@ Dired now normally keeps the cursor at the beginning of 
the file name,
 not at the beginning of the line.  The most used motion commands are
 redefined in Dired to position the cursor this way.
 
-`n' and `p' are now equivalent in dired to `C-n' and `C-p'.
+'n' and 'p' are now equivalent in dired to 'C-n' and 'C-p'.
 
 If any files to be deleted cannot be deleted, their names are
 printed in an error message.
 
-If the `v' command is invoked on a file which is a directory,
+If the 'v' command is invoked on a file which is a directory,
 dired is run on that directory.
 
-** `visit-tag-table' renamed `visit-tags-table'.
+** 'visit-tag-table' renamed 'visit-tags-table'.
 
-This is so apropos of `tags' finds everything you need to
+This is so apropos of 'tags' finds everything you need to
 know about in connection with Tags.
 
-** `mh-e' library uses C-c as prefix.
+** 'mh-e' library uses C-c as prefix.
 
-All the special commands of `mh-rmail' now are placed on a
+All the special commands of 'mh-rmail' now are placed on a
 C-c prefix rather than on the C-x prefix.  This is for
 consistency with other special modes with their own commands.
 
-** M-$ or `spell-word' checks word before point.
+** M-$ or 'spell-word' checks word before point.
 
 It used to check the word after point.
 
 ** Quitting during autoloading no longer causes trouble.
 
 Now, when a file is autoloaded, all function redefinitions
-and `provide' calls are recorded and are undone if you quit
+and 'provide' calls are recorded and are undone if you quit
 before the file is finished loading.
 
 As a result, it no longer happens that some of the entry points
 which are normally autoloading have been defined already, but the
 entire file is not really present to support them.
 
-** `else' can now be indented correctly in C mode.
+** 'else' can now be indented correctly in C mode.
 
-TAB in C mode now knows which `if' statement an `else' matches
-up with, and can indent the `else' correctly under the `if',
-even if the `if' contained such things as another `if' statement,
-or a `while' or `for' statement, with no braces around it.
+TAB in C mode now knows which 'if' statement an 'else' matches
+up with, and can indent the 'else' correctly under the 'if',
+even if the 'if' contained such things as another 'if' statement,
+or a 'while' or 'for' statement, with no braces around it.
 
-** `batch-byte-compile'
+** 'batch-byte-compile'
 
 Runs byte-compile-file on the files specified on the command line.
 All the rest of the command line arguments are taken as files to
@@ -300,10 +300,10 @@ Must be used only with -batch, and kills emacs on 
completion.
 Each file will be processed even if an error occurred previously.
 For example, invoke `emacs -batch -f batch-byte-compile *.el'.
 
-** `-batch' changes.
+** '-batch' changes.
 
-`-batch' now implies `-q': no init file is loaded by Emacs when
-`-batch' is used.  Also, no `term/TERMTYPE.el' file is loaded.  Auto
+'-batch' now implies '-q': no init file is loaded by Emacs when
+'-batch' is used.  Also, no `term/TERMTYPE.el' file is loaded.  Auto
 saving is not done except in buffers in which it is explicitly
 requested.  Also, many echo-area printouts describing what is going on
 are inhibited in batch mode, so that the only output you get is the
@@ -311,7 +311,7 @@ output you program specifically.
 
 One echo-area message that is not suppressed is the one that says
 that a file is being loaded.  That is because you can prevent this
-message by passing `t' as the third argument to `load'.
+message by passing 't' as the third argument to 'load'.
 
 ** Display of search string in incremental search.
 
@@ -324,12 +324,12 @@ is actually going on.
 ** View commands.
 
 The commands C-x ], C-x [, C-x /, C-x j and C-x o are now
-available inside `view-buffer' and `view-file', with their
+available inside 'view-buffer' and 'view-file', with their
 normal meanings.
 
 ** Full-width windows preferred.
 
-The ``other-window'' commands prefer other full width windows,
+The 'other-window' commands prefer other full width windows,
 and will split only full width windows.
 
 ** M-x rename-file can copy if necessary.
@@ -367,7 +367,7 @@ distance rather than a single column if used with no 
argument.
 
 ** Auto Save Files Deleted.
 
-The default value of `delete-auto-save-files' is now `t', so that
+The default value of 'delete-auto-save-files' is now 't', so that
 when you save a file for real, its auto save file is deleted.
 
 ** Rnews changes.
@@ -392,18 +392,18 @@ to specify files in which copies of the message should be 
put.
 The message is written into those files in Unix mail file format.
 The message as sent does not contain any Fcc fields in its header.
 You can use any number of Fcc fields, but only one file name in each one.
-The variable `mail-archive-file-name', if non-`nil', can be a string
+The variable 'mail-archive-file-name', if non-'nil', can be a string
 which is a file name; an Fcc to that file will be inserted in every
 message when you begin to compose it.
 
 A new command C-c q now exists in Mail mode.  It fills the
 paragraphs of an old message that had been inserted with C-c y.
 
-When the *mail* buffer is put in Mail mode, text-mode-hook
-is now run in addition to mail-mode-hook.  text-mode-hook
+When the *mail* buffer is put in Mail mode, 'text-mode-hook'
+is now run in addition to 'mail-mode-hook'.  text-mode-hook
 is run first.
 
-The new variable `mail-header-separator' now specifies the string
+The new variable 'mail-header-separator' now specifies the string
 to use on the line that goes between the headers and the message text.
 By default it is still "--text follows this line--".
 
@@ -434,38 +434,38 @@ with
 
    (defun foo-1 (x y z) ...
 
-** Functions `region-to-string' and `region-around-match' removed.
+** Functions 'region-to-string' and 'region-around-match' removed.
 
 These functions were made for compatibility with Gosling Emacs, but it
 turns out to be undesirable to use them in GNU Emacs because they use
 the mark.  They have been eliminated from Emacs proper, but are
 present in mlsupport.el for the sake of converted mocklisp programs.
 
-If you were using `region-to-string', you should instead use
-`buffer-substring'; then you can pass the bounds as arguments and
+If you were using 'region-to-string', you should instead use
+'buffer-substring'; then you can pass the bounds as arguments and
 can avoid setting the mark.
 
-If you were using `region-around-match', you can use instead
-the two functions `match-beginning' and `match-end'.  These give
+If you were using 'region-around-match', you can use instead
+the two functions 'match-beginning' and 'match-end'.  These give
 you one bound at a time, as a numeric value, without changing
 point or the mark.
 
-** Function `function-type' removed.
+** Function 'function-type' removed.
 
 This just appeared not to be very useful.  It can easily be written in
-Lisp if you happen to want it.  Just use `symbol-function' to get the
+Lisp if you happen to want it.  Just use 'symbol-function' to get the
 function definition of a symbol, and look at its data type or its car
 if it is a list.
 
-** Variable `buffer-number' removed.
+** Variable 'buffer-number' removed.
 
-You can still use the function `buffer-number' to find out
+You can still use the function 'buffer-number' to find out
 a buffer's unique number (assigned in order of creation).
 
-** Variable `executing-macro' renamed `executing-kbd-macro'.
+** Variable 'executing-macro' renamed 'executing-kbd-macro'.
 
 This variable is the currently executing keyboard macro, as
-a string, or `nil' when no keyboard macro is being executed.
+a string, or 'nil' when no keyboard macro is being executed.
 
 ** Loading term/$TERM.
 
@@ -478,15 +478,15 @@ term-$TERM; thus, for example, term-vt100.el, but now 
they live
 in a special subdirectory named term, and have names like
 term/vt100.el.
 
-** `command-history' format changed.
+** 'command-history' format changed.
 
 The elements of this list are now Lisp expressions which can
 be evaluated directly to repeat a command.
 
 ** Unused editing commands removed.
 
-The functions `forward-to-word', `backward-to-word',
-`upcase-char', `mark-beginning-of-buffer' and `mark-end-of-buffer'
+The functions 'forward-to-word', 'backward-to-word',
+'upcase-char', 'mark-beginning-of-buffer' and 'mark-end-of-buffer'
 have been removed.  Their definitions can be found in file
 lisp/unused.el if you need them.
 
@@ -496,53 +496,53 @@ lisp/unused.el if you need them.
 ** You can now continue after errors and quits.
 
 When the debugger is entered because of a C-g, due to
-a non-`nil' value of `debug-on-quit', the `c' command in the debugger
+a non-'nil' value of 'debug-on-quit', the 'c' command in the debugger
 resumes execution of the code that was running when the quit happened.
-Use the `q' command to go ahead and quit.
+Use the 'q' command to go ahead and quit.
 
 The same applies to some kinds of errors, but not all.  Errors
-signaled with the Lisp function `signal' can be continued; the `c'
-command causes `signal' to return.  The `r' command causes `signal' to
-return the value you specify.  The `c' command is equivalent to `r'
-with the value `nil'.
+signaled with the Lisp function 'signal' can be continued; the 'c'
+command causes 'signal' to return.  The 'r' command causes 'signal' to
+return the value you specify.  The 'c' command is equivalent to 'r'
+with the value 'nil'.
 
-For a `wrong-type-argument' error, the value returned with the `r'
+For a 'wrong-type-argument' error, the value returned with the 'r'
 command is used in place of the invalid argument.  If this new value
 is not valid, another error occurs.
 
-Errors signaled with the function `error' cannot be continued.
+Errors signaled with the function 'error' cannot be continued.
 If you try to continue, the error just happens again.
 
-** `dot' renamed `point'.
+** 'dot' renamed 'point'.
 
-The word `dot' has been replaced with `point' in all
+The word 'dot' has been replaced with 'point' in all
 function and variable names, including:
 
-  point, point-min, point-max,
-  point-marker, point-min-marker, point-max-marker,
-  window-point, set-window-point,
-  point-to-register, register-to-point,
-  exchange-point-and-mark.
+  'point', 'point-min', 'point-max',
+  'point-marker', 'point-min-marker', 'point-max-marker',
+  'window-point', 'set-window-point',
+  'point-to-register', 'register-to-point',
+  'exchange-point-and-mark'.
 
 The old names are still supported, for now.
 
-** `string-match' records position of end of match.
+** 'string-match' records position of end of match.
 
-After a successful call to `string-match', `(match-end 0)' will
+After a successful call to 'string-match', `(match-end 0)' will
 return the index in the string of the first character after the match.
-Also, `match-begin' and `match-end' with nonzero arguments can be
+Also, 'match-begin' and 'match-end' with nonzero arguments can be
 used to find the indices of beginnings and ends of substrings matched
 by subpatterns surrounded by parentheses.
 
-** New function `insert-before-markers'.
+** New function 'insert-before-markers'.
 
-This function is just like `insert' except in the handling of any
+This function is just like 'insert' except in the handling of any
 relocatable markers that are located at the point of insertion.
-With `insert', such markers end up pointing before the inserted text.
-With `insert-before-markers', they end up pointing after the inserted
+With 'insert', such markers end up pointing before the inserted text.
+With 'insert-before-markers', they end up pointing after the inserted
 text.
 
-** New function `copy-alist'.
+** New function 'copy-alist'.
 
 This function takes one argument, a list, and makes a disjoint copy
 of the alist structure.  The list itself is copied, and each element
@@ -550,32 +550,32 @@ that is a cons cell is copied, but the cars and cdrs of 
elements
 remain shared with the original argument.
 
 This is what it takes to get two alists disjoint enough that changes
-in one do not change the result of `assq' on the other.
+in one do not change the result of 'assq' on the other.
 
-** New function `copy-keymap'.
+** New function 'copy-keymap'.
 
 This function takes a keymap as argument and returns a new keymap
 containing initially the same bindings.  Rebindings in either one of
 them will not alter the bindings in the other.
 
-** New function `copy-syntax-table'.
+** New function 'copy-syntax-table'.
 
 This function takes a syntax table as argument and returns a new
 syntax table containing initially the same syntax settings.  Changes
 in either one of them will not alter the other.
 
-** Randomizing the random numbers.
+** Randomizing the 'random' numbers.
 
 `(random t)' causes the random number generator's seed to be set
 based on the current time and Emacs's process id.
 
-** Third argument to `modify-syntax-entry'.
+** Third argument to 'modify-syntax-entry'.
 
-The optional third argument to `modify-syntax-entry', if specified
+The optional third argument to 'modify-syntax-entry', if specified
 should be a syntax table.  The modification is made in that syntax table
 rather than in the current syntax table.
 
-** New function `run-hooks'.
+** New function 'run-hooks'.
 
 This function takes any number of symbols as arguments.
 It processes the symbols in order.  For each symbol which
@@ -584,29 +584,29 @@ called as a function, with no arguments.
 
 This is useful in major mode commands.
 
-** Second arg to `switch-to-buffer'.
+** Second arg to 'switch-to-buffer'.
 
-If this function is given a non-`nil' second argument, then the
+If this function is given a non-'nil' second argument, then the
 selection being done is not recorded on the selection history.
 The buffer's position in the history remains unchanged.  This
 feature is used by the view commands, so that the selection history
 after exiting from viewing is the same as it was before.
 
-** Second arg to `display-buffer' and `pop-to-buffer'.
+** Second arg to 'display-buffer' and 'pop-to-buffer'.
 
 These two functions both accept an optional second argument which
-defaults to `nil'.  If the argument is not `nil', it means that
+defaults to 'nil'.  If the argument is not 'nil', it means that
 another window (not the selected one) must be found or created to
 display the specified buffer in, even if it is already shown in
 the selected window.
 
-This feature is used by `switch-to-buffer-other-window'.
+This feature is used by 'switch-to-buffer-other-window'.
 
-** New variable `completion-ignore-case'.
+** New variable 'completion-ignore-case'.
 
-If this variable is non-`nil', completion allows strings
+If this variable is non-'nil', completion allows strings
 in different cases to be considered matching.  The global value
-is `nil'
+is 'nil'
 
 This variable exists for the sake of commands that are completing
 an argument in which case is not significant.  It is possible
@@ -617,13 +617,13 @@ where case makes a difference.
 ** Major modes related to Text mode call text-mode-hook, then their own hooks.
 
 For example, turning on Outline mode first calls the value of
-`text-mode-hook' as a function, if it exists and is non-`nil',
-and then does likewise for the variable `outline-mode-hook'.
+'text-mode-hook' as a function, if it exists and is non-'nil',
+and then does likewise for the variable 'outline-mode-hook'.
 
 ** Defining new command line switches.
 
 You can define a new command line switch in your .emacs file
-by putting elements on the value of `command-switch-alist'.
+by putting elements on the value of 'command-switch-alist'.
 Each element of this list should look like
       (SWITCHSTRING . FUNCTION)
 where SWITCHSTRING is a string containing the switch to be
@@ -633,35 +633,35 @@ receives the command line argument, a string, as its 
argument.
 
 To implement a switch that uses up one or more following arguments,
 use the fact that the remaining command line arguments are kept
-as a list in the variable `command-line-args'.  FUNCTION can
+as a list in the variable 'command-line-args'.  FUNCTION can
 examine this variable, and do
     (setq command-line-args (cdr command-line-args)
 to "use up" an argument.
 
-** New variable `load-in-progress'.
+** New variable 'load-in-progress'.
 
-This variable is non-`nil' when a file of Lisp code is being read
-and executed by `load'.
+This variable is non-'nil' when a file of Lisp code is being read
+and executed by 'load'.
 
-** New variable `print-length'.
+** New variable 'print-length'.
 
-The value of this variable is normally `nil'.  It may instead be
-a number; in that case, when a list is printed by `prin1' or
-`princ' only that many initial elements are printed; the rest are
+The value of this variable is normally 'nil'.  It may instead be
+a number; in that case, when a list is printed by 'prin1' or
+'princ' only that many initial elements are printed; the rest are
 replaced by `...'.
 
-** New variable `find-file-not-found-hook'.
+** New variable 'find-file-not-found-hook'.
 
-If `find-file' or any of its variants is used on a nonexistent file,
-the value of `find-file-not-found-hook' is called (if it is not `nil')
+If 'find-file' or any of its variants is used on a nonexistent file,
+the value of 'find-file-not-found-hook' is called (if it is not 'nil')
 with no arguments, after creating an empty buffer.  The file's name
-can be found as the value of `buffer-file-name'.
+can be found as the value of 'buffer-file-name'.
 
 ** Processes without buffers.
 
-In the function `start-process', you can now specify `nil' as
-the process's buffer.  You can also set a process's buffer to `nil'
-using `set-process-buffer'.
+In the function 'start-process', you can now specify 'nil' as
+the process's buffer.  You can also set a process's buffer to 'nil'
+using 'set-process-buffer'.
 
 The reason you might want to do this is to prevent the process
 from being killed because any particular buffer is killed.
@@ -672,18 +672,18 @@ When a process has no buffer, its output is lost unless 
it has a
 filter, and no indication of its being stopped or killed is given
 unless it has a sentinel.
 
-** New function `user-variable-p'.  `v' arg prompting changed.
+** New function 'user-variable-p'.  'v' arg prompting changed.
 
-This function takes a symbol as argument and returns `t' if
+This function takes a symbol as argument and returns 't' if
 the symbol is defined as a user option variable.  This means
-that it has a `variable-documentation' property whose value is
+that it has a 'variable-documentation' property whose value is
 a string starting with `*'.
 
-Code `v' in an interactive arg reading string now accepts
+Code 'v' in an interactive arg reading string now accepts
 user variables only, and completion is limited to the space of
 user variables.
 
-The function `read-variable' also now accepts and completes
+The function 'read-variable' also now accepts and completes
 over user variables only.
 
 ** CBREAK mode input is the default in Unix 4.3 bsd.
@@ -691,33 +691,33 @@ over user variables only.
 In Berkeley 4.3 Unix, there are sufficient features for Emacs to
 work fully correctly using CBREAK mode and not using SIGIO.
 Therefore, this mode is the default when running under 4.3.
-This mode corresponds to `nil' as the first argument to
-`set-input-mode'.  You can still select either mode by calling
+This mode corresponds to 'nil' as the first argument to
+'set-input-mode'.  You can still select either mode by calling
 that function.
 
 ** Information on memory usage.
 
-The new variable `data-bytes-used' contains the number
+The new variable 'data-bytes-used' contains the number
 of bytes of impure space allocated in Emacs.
-`data-bytes-free' contains the number of additional bytes
+'data-bytes-free' contains the number of additional bytes
 Emacs could allocate.  Note that space formerly allocated
-and freed again still counts as `used', since it is still
+and freed again still counts as 'used', since it is still
 in Emacs's address space.
 
-** No limit on size of output from `format'.
+** No limit on size of output from 'format'.
 
-The string output from `format' used to be truncated to
+The string output from 'format' used to be truncated to
 100 characters in length.  Now it can have any length.
 
-** New errors `void-variable' and `void-function' replace `void-symbol'.
+** New errors 'void-variable' and 'void-function' replace 'void-symbol'.
 
 This change makes it possible to have error messages that
 clearly distinguish undefined variables from undefined functions.
-It also allows `condition-case' to handle one case without the other.
+It also allows 'condition-case' to handle one case without the other.
 
-** `replace-match' handling of `\'.
+** 'replace-match' handling of `\'.
 
-In `replace-match', when the replacement is not literal,
+In 'replace-match', when the replacement is not literal,
 `\' in the replacement string is always treated as an
 escape marker.  The only two special `\' constructs
 are `\&' and `\DIGIT', so `\' followed by anything other than
@@ -728,21 +728,21 @@ This level of escaping is comparable with what goes on in
 a regular expression.  It is over and above the level of `\'
 escaping that goes on when strings are read in Lisp syntax.
 
-** New error `invalid-regexp'.
+** New error 'invalid-regexp'.
 
 A regexp search signals this type of error if the argument does
 not meet the rules for regexp syntax.
 
-** `kill-emacs' with argument.
+** 'kill-emacs' with argument.
 
 If the argument is a number, it is returned as the exit status code
 of the Emacs process.  If the argument is a string, its contents
 are stuffed as pending terminal input, to be read by another program
 after Emacs is dead.
 
-** New fifth argument to `subst-char-in-region'.
+** New fifth argument to 'subst-char-in-region'.
 
-This argument is optional and defaults to `nil'.  If it is not `nil',
+This argument is optional and defaults to 'nil'.  If it is not 'nil',
 then the substitutions made by this function are not recorded
 in the Undo mechanism.
 
@@ -757,25 +757,25 @@ another while in the debugger.
 Exiting from the debugger kills the `*Backtrace*' buffer, so you will
 not try to give commands in it when no longer really in the debugger.
 
-** New function `switch-to-buffer-other-window'.
+** New function 'switch-to-buffer-other-window'.
 
 This is the new primitive to select a specified buffer (the
 argument) in another window.  It is not quite the same as
-`pop-to-buffer', because it is guaranteed to create another
+'pop-to-buffer', because it is guaranteed to create another
 window (assuming there is room on the screen) so that it can
 leave the current window's old buffer displayed as well.
 
 All functions to select a buffer in another window should
 do so by calling this new function.
 
-** New variable `minibuffer-help-form'.
+** New variable 'minibuffer-help-form'.
 
-At entry to the minibuffer, the variable `help-form' is bound
-to the value of `minibuffer-help-form'.
+At entry to the minibuffer, the variable 'help-form' is bound
+to the value of 'minibuffer-help-form'.
 
-`help-form' is expected at all times to contain either `nil'
+'help-form' is expected at all times to contain either 'nil'
 or an expression to be executed when C-h is typed (overriding
-the definition of C-h as a command).  `minibuffer-help-form'
+the definition of C-h as a command).  'minibuffer-help-form'
 can be used to provide a different default way of handling
 C-h while in the minibuffer.
 
@@ -791,7 +791,7 @@ be quoted with a second `\', to include it in the doc 
string.)
 This construct is normally used on a line by itself, with no blank
 lines before or after.
 
-For example, the documentation string for the function `c-mode' contains
+For example, the documentation string for the function 'c-mode' contains
     ...
     Paragraphs are separated by blank lines only.
     Delete converts tabs to spaces as it moves back.
@@ -803,13 +803,13 @@ For example, the documentation string for the function 
`c-mode' contains
 
 Punctuation characters behave like whitespace in word and
 list parsing, but can be distinguished in regexps and in the
-function `char-syntax'.  Punctuation syntax is represented by
-a period in `modify-syntax-entry'.
+function 'char-syntax'.  Punctuation syntax is represented by
+a period in 'modify-syntax-entry'.
 
-** `auto-mode-alist' no longer needs entries for backup-file names,
+** 'auto-mode-alist' no longer needs entries for backup-file names,
 
 Backup suffixes of all kinds are now stripped from a file's name
-before searching `auto-mode-alist'.
+before searching 'auto-mode-alist'.
 
 
 
@@ -846,14 +846,14 @@ arguments and then confirm, or abort with C-g.
 
 ** Incremental search does less redisplay on slow terminals.
 
-If the terminal baud rate is <= the value of `isearch-slow-speed',
+If the terminal baud rate is <= the value of 'isearch-slow-speed',
 incremental searching outside the text on the screen creates
 a single-line window and uses that to display the line on which
 a match has been found.  Exiting or quitting the search restores
 the previous window configuration and redisplays the window you
 were searching in.
 
-The initial value of `isearch-slow-speed' is 1200.
+The initial value of 'isearch-slow-speed' is 1200.
 
 This feature is courtesy of crl@purdue.
 
@@ -871,17 +871,17 @@ if you know enough to switch windows while in the 
minibuffer,
 you can probably understand recursive minibuffers.
 
 This may be overridden by binding the variable
-`enable-recursive-minibuffers' to t.
+'enable-recursive-minibuffers' to t.
 
 ** New major mode Emacs-Lisp mode, for editing Lisp code to run in Emacs.
 
-The mode in which emacs lisp files is edited is now called emacs-lisp-mode
-and is distinct from lisp-mode.  The latter is intended for use with
-lisps external to emacs.
+The mode in which emacs lisp files is edited is now called 'emacs-lisp-mode'
+and is distinct from 'lisp-mode'.  The latter is intended for use with
+lisps external to Emacs.
 
 The hook which is funcalled (if non-nil) on entry to elisp-mode is now
-called emacs-lisp-mode-hook.  A consequence of this changes is that
-.emacs init files which set the value of lisp-mode-hook may need to be
+called 'emacs-lisp-mode-hook'.  A consequence of this changes is that
+.emacs init files which set the value of 'lisp-mode-hook' may need to be
 changed to use the new names.
 
 ** Correct matching of parentheses is checked on insertion.
@@ -898,18 +898,18 @@ This feature was originally written by shane@mit-ajax.
 ** M-x command-history-mode
 ** M-x electric-command-history
 
-`list-command-history' displays forms from the command history subject
+'list-command-history' displays forms from the command history subject
 to user controlled filtering and limit on number of forms.  It leaves
-the buffer in `command-history-mode'.  M-x command-history-mode
+the buffer in 'command-history-mode'.  M-x command-history-mode
 recomputes the command history each time it is invoked via
-`list-command-history'.  It is like Emacs-Lisp mode except that characters
+'list-command-history'.  It is like Emacs-Lisp mode except that characters
 don't insert themselves and provision is made for re-evaluating an
-expression from the list.  `electric-command-history' pops up a type
+expression from the list.  'electric-command-history' pops up a type
 out window with the command history displayed.  If the very next
 character is Space, the window goes away and the previous window
 configuration is restored.  Otherwise you can move around in the
 history and select an expression for evaluation *inside* the buffer
-which invoked `electric-command-history'.  The original window
+which invoked 'electric-command-history'.  The original window
 configuration is restored on exit unless the command selected changes
 it.
 
@@ -924,7 +924,7 @@ Special commands for hacking tabs and tab stops are 
provided.  Special
 commands for killing rectangles and overlaying them are provided.  See
 the documentation of function  edit-picture  for more details.
 
-Calls value of `edit-picture-hook' on entry if non-nil.
+Calls value of 'edit-picture-hook' on entry if non-nil.
 
 ** Stupid C-s/C-q `flow control' supported.
 
@@ -977,15 +977,15 @@ lisp-mode-hook, in that order, if non-nil.
 Meanwhile, in lisp-mode, the command C-M-x is defined to
 send the current defun as input to the `*lisp*' subprocess.
 
-** Mode line says `Narrow' when buffer is clipped.
+** Mode line says 'Narrow' when buffer is clipped.
 
-If a buffer has a clipping restriction (made by `narrow-to-region')
-then its mode line contains the word `Narrow' after the major and
+If a buffer has a clipping restriction (made by 'narrow-to-region')
+then its mode line contains the word 'Narrow' after the major and
 minor modes.
 
-** Mode line says `Abbrev' when abbrev mode is on.
+** Mode line says 'Abbrev' when abbrev mode is on.
 
-** add-change-log-entry takes prefix argument
+** 'add-change-log-entry' takes prefix argument
 
 Giving a prefix argument makes it prompt for login name, full name,
 and site name, with defaults.  Otherwise the defaults are used
@@ -994,27 +994,27 @@ with no confirmation.
 ** M-x view-buffer and M-x view-file
 
 view-buffer selects the named buffer, view-file finds the named file; the
-resulting buffer is placed into view-mode (a recursive edit).  The normal
+resulting buffer is placed into 'view-mode' (a recursive edit).  The normal
 emacs commands are not available.  Instead a set of special commands is
 provided which facilitate moving around in the buffer, searching and
 scrolling by screenfuls.  Exiting view-mode returns to the buffer in which
 the view-file or view-buffer command was given.
 Type ? or h when viewing for a complete list of view commands.
-Each calls value of `view-hook' if non-nil on entry.
+Each calls value of 'view-hook' if non-nil on entry.
 
 written by shane@mit-ajax.
 
 ** New key commands in dired.
 
-`v' views (like more) the file on the current line.
+'v' views (like more) the file on the current line.
 `#' marks auto-save files for deletion.
 `~' marks backup files for deletion.
-`r' renames a file and updates the directory listing if the
+'r' renames a file and updates the directory listing if the
 file is renamed to same directory.
-`c' copies a file and updates the directory listing if the file is
+'c' copies a file and updates the directory listing if the file is
 copied to the same directory.
 
-** New function `electric-buffer-list'.
+** New function 'electric-buffer-list'.
 
 This pops up a buffer describing the set of emacs buffers.
 Immediately typing space makes the buffer list go away and returns
@@ -1026,18 +1026,18 @@ cursor's line.  There are a number of other commands 
which are the same
 as those of buffer-menu-mode.
 
 This is a useful thing to bind to c-x c-b in your `.emacs' file if the
-rather non-standard `electric' behavior of the buffer list suits your taste.
+rather non-standard 'electric' behavior of the buffer list suits your taste.
 Type C-h after invoking electric-buffer-list for more information.
 
-Calls value of `electric-buffer-menu-mode-hook' if non-nil on entry.
-Calls value of `after-electric-buffer-menu' on exit (select) if non-nil.
+Calls value of 'electric-buffer-menu-mode-hook' if non-nil on entry.
+Calls value of 'after-electric-buffer-menu' on exit (select) if non-nil.
 
 ** Changes in version 16 for mail reading and sending
 
 *** sendmail prefix character is C-c (and not C-z).  New command C-c w.
 
 For instance C-c C-c (or C-c C-s) sends mail now rather than C-z C-z.
-C-c w inserts your `signature' (contents of ~/.signature) at the end
+C-c w inserts your 'signature' (contents of ~/.signature) at the end
 of mail.
 
 *** New feature in C-c y command in sending mail.
@@ -1063,26 +1063,26 @@ C-c and C-] are the only ways "back into Rmail", but you
 can switch to other buffers and edit them as usual.
 C-r in Rmail changes only the handling of the Rmail buffer.
 
-*** Rmail command `t' toggles header display.
+*** Rmail command 't' toggles header display.
 
 Normally Rmail reformats messages to hide most header fields.
-`t' switches to display of all the header fields of the
+'t' switches to display of all the header fields of the
 current message, as long as it remains current.
-Another `t' switches back to the usual display.
+Another 't' switches back to the usual display.
 
 *** Rmail command '>' goes to the last message.
 
-*** Rmail commands `a' and `k' set message attributes.
-`a' adds an attribute and `k' removes one.  You specify
+*** Rmail commands 'a' and 'k' set message attributes.
+'a' adds an attribute and 'k' removes one.  You specify
 the attribute by name.  You can specify either a built-in
 flag such as "deleted" or "filed", or a user-defined keyword
 (anything not recognized as built-in).
 
-*** Rmail commands `l' and `L' summarize by attributes.
+*** Rmail commands 'l' and 'L' summarize by attributes.
 
 These commands create a summary with one line per message,
-like `h', but they list only some of the messages.  You
-specify which attribute (for `l') or attributes (for `L')
+like 'h', but they list only some of the messages.  You
+specify which attribute (for 'l') or attributes (for 'L')
 the messages should have.
 
 *** Rmail can parse mmdf mail files.
@@ -1092,11 +1092,11 @@ the messages should have.
 mh-e is a front end for GNU emacs and the MH mail system.  It
 provides a friendly and convenient interface to the MH commands.
 
-To read mail, invoke mh-rmail.  This will inc new mail and display the
+To read mail, invoke 'mh-rmail'.  This will inc new mail and display the
 scan listing on the screen.  To see a summary of the mh-e commands,
 type ?.  Help is available through the usual facilities.
 
-To send mail, invoke mh-smail.
+To send mail, invoke 'mh-smail'.
 
 mh-e requires a copy of MH.5 that has been compiled with the MHE
 compiler switch.
@@ -1105,39 +1105,39 @@ From larus@berkeley.
 
 ** New hooks and parameters in version 16
 
-*** New variable `blink-matching-paren-distance'.
+*** New variable 'blink-matching-paren-distance'.
 
 This is the maximum number of characters to search for
 an open-paren to match an inserted close-paren.
 The matching open-paren is shown and checked if it is found
 within this distance.
 
-`nil' means search all the way to the beginning of the buffer.
+'nil' means search all the way to the beginning of the buffer.
 In this case, a warning message is printed if no matching
 open-paren is found.
 
 This feature was originally written by shane@mit-ajax.
 
-*** New variable `find-file-run-dired'
+*** New variable 'find-file-run-dired'
 
 If nil, find-file will report an error if an attempt to visit a
 directory is detected; otherwise, it runs dired on that directory.
 The default is t.
 
-*** Variable `dired-listing-switches' holds switches given to `ls' by dired.
+*** Variable 'dired-listing-switches' holds switches given to 'ls' by dired.
 
-The value should be a string containing `-' followed by letters.
-The letter `l' had better be included and letter 'F' had better be excluded!
+The value should be a string containing '-' followed by letters.
+The letter 'l' had better be included and letter 'F' had better be excluded!
 The default is "-al".
 
 This feature was originally written by shane@mit-ajax.
 
-*** New variable `display-time-day-and-date'.
+*** New variable 'display-time-day-and-date'.
 
-If this variable is set non-`nil', the function M-x display-time
+If this variable is set non-'nil', the function M-x display-time
 displays the day and date, as well as the time.
 
-*** New parameter `c-continued-statement-indent'.
+*** New parameter 'c-continued-statement-indent'.
 
 This controls the extra indentation given to a line
 that continues a C statement started on the previous line.
@@ -1147,19 +1147,20 @@ By default it is 2, which is why you would see
          bar ();
 
 
-*** Changed meaning of `c-indent-level'.
+*** Changed meaning of 'c-indent-level'.
 
-The value of `c-brace-offset' used to be
-subtracted from the value of `c-indent-level' whenever
+The value of 'c-brace-offset' used to be
+subtracted from the value of 'c-indent-level' whenever
 that value was used.  Now it is not.
 
-As a result, `c-indent-level' is now the offset of
+As a result, 'c-indent-level' is now the offset of
 statements within a block, relative to the line containing
 the open-brace that starts the block.
 
-*** turn-on-auto-fill is useful value for text-mode-hook.
+*** 'turn-on-auto-fill' is useful value for 'text-mode-hook'.
+
+    (setq text-mode-hook 'turn-on-auto-fill)
 
-(setq text-mode-hook 'turn-on-auto-fill)
 is all you have to do to make sure Auto Fill mode is turned
 on whenever you enter Text mode.
 
@@ -1187,8 +1188,8 @@ the following text, up to the next `]', is taken as a 
function name.
 Instead of printing that function name, the command that runs it is printed.
 (M-x is used to construct a command if no shorter one exists.)
 
-For example, instead of putting `C-n' in a documentation string
-to refer to the C-n command, put in `\[next-line]'.  (In practice
+For example, instead of putting 'C-n' in a documentation string
+to refer to the 'next-line' command, put in `\[next-line]'.  (In practice
 you will need to quote the backslash with another backslash,
 due to the syntax for strings in Lisp and C.)
 
@@ -1197,34 +1198,34 @@ precede them with `\='.  To include the characters 
`\=', precede
 them with `\='.  For example, "\\=\\= is the way to quote \\=\\["
 will come out as `\= is the way to quote \['.
 
-The new function `substitute-command-keys' takes a string possibly
+The new function 'substitute-command-keys' takes a string possibly
 containing \[...] constructs and replaces those constructs with
 the key sequences they currently stand for.
 
-*** Primitives `find-line-comment' and `find-line-comment-body' flushed.
+*** Primitives 'find-line-comment' and 'find-line-comment-body' flushed.
 
-Search for the value of `comment-start-skip' if you want to find
+Search for the value of 'comment-start-skip' if you want to find
 whether and where a line has a comment.
 
-*** New function `auto-save-file-name-p'
+*** New function 'auto-save-file-name-p'
 
-Should return non-`nil' if given a string which is the name of an
+Should return non-'nil' if given a string which is the name of an
 auto-save file (sans directory name).  If you redefine
-`make-auto-save-file-name', you should redefine this accordingly.  By
-default, this function returns `t' for filenames beginning with
+'make-auto-save-file-name', you should redefine this accordingly.  By
+default, this function returns 't' for filenames beginning with
 character `#'.
 
-*** The value of `exec-directory' now ends in a slash.
+*** The value of 'exec-directory' now ends in a slash.
 
 This is to be compatible with most directory names in GNU Emacs.
 
 *** Dribble files and termscript files.
 
-(open-dribble-file FILE) opens a dribble file named FILE.  When a
+'open-dribble-file' opens a dribble file.  When a
 dribble file is open, every character Emacs reads from the terminal is
 written to the dribble file.
 
-(open-termscript FILE) opens a termscript file named FILE.  When a
+'open-termscript' opens a termscript file.  When a
 termscript file is open, all characters sent to the terminal by Emacs
 are also written in the termscript file.
 
@@ -1240,15 +1241,15 @@ a synonym for C-x u (undo).
 
 *** Undefined function errors versus undefined variable errors.
 
-Void-symbol errors now say "boundp" if the symbol's value was void
-or "fboundp" if the function definition was void.
+Void-symbol errors now say 'boundp' if the symbol's value was void
+or 'fboundp' if the function definition was void.
 
-*** New function `bury-buffer'.
+*** New function 'bury-buffer'.
 
-The new function `bury-buffer' takes one argument, a buffer object,
+The new function 'bury-buffer' takes one argument, a buffer object,
 and puts that buffer at the end of the internal list of buffers.
 So it is the le