emacs-diffs
[Top][All Lists]
Advanced

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

feature/native-comp 8055633 1/2: Merge remote-tracking branch 'savannah/


From: Andrea Corallo
Subject: feature/native-comp 8055633 1/2: Merge remote-tracking branch 'savannah/master' into HEAD
Date: Sun, 6 Sep 2020 02:22:54 -0400 (EDT)

branch: feature/native-comp
commit 805563346613af1f13ecd1bf96ffd8efe4816b47
Merge: 67c5369 669b46e
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>

    Merge remote-tracking branch 'savannah/master' into HEAD
---
 .gitlab-ci.yml                                     |   43 +-
 admin/admin.el                                     |   15 +-
 admin/notes/bug-triage                             |   10 +-
 admin/notes/bugtracker                             |   13 +-
 admin/release-process                              |   20 +-
 configure.ac                                       |   19 +-
 doc/lispintro/emacs-lisp-intro.texi                |    2 +-
 doc/lispref/customize.texi                         |   15 +
 doc/lispref/files.texi                             |   16 +-
 doc/lispref/minibuf.texi                           |    3 +
 doc/lispref/modes.texi                             |   23 +-
 doc/lispref/text.texi                              |    5 +
 doc/misc/auth.texi                                 |    5 +
 doc/misc/dbus.texi                                 |   52 +-
 doc/misc/eudc.texi                                 |   14 +-
 doc/misc/gnus.texi                                 |  268 +-
 doc/misc/message.texi                              |    7 +-
 doc/misc/smtpmail.texi                             |   10 +-
 etc/NEWS                                           |   87 +-
 lib/gnulib.mk.in                                   |    6 +
 lib/string.in.h                                    |   24 +
 lib/verify.h                                       |   45 +-
 lisp/calendar/icalendar.el                         |   56 +-
 lisp/comint.el                                     |    6 +-
 lisp/cus-edit.el                                   |    2 +-
 lisp/cus-theme.el                                  |   17 +-
 lisp/custom.el                                     |   21 +-
 lisp/dired-aux.el                                  |   16 +-
 lisp/dired-x.el                                    |    1 +
 lisp/dired.el                                      |   30 +-
 lisp/dom.el                                        |   44 +
 lisp/emacs-lisp/eldoc.el                           |   21 +-
 lisp/emacs-lisp/warnings.el                        |   30 +-
 lisp/eshell/esh-mode.el                            |   76 +-
 lisp/files.el                                      |    2 +-
 lisp/gnus/gnus-agent.el                            |    2 +-
 lisp/gnus/gnus-cache.el                            |    2 +-
 lisp/gnus/gnus-cloud.el                            |   10 +-
 lisp/gnus/gnus-group.el                            |   57 +-
 lisp/gnus/gnus-msg.el                              |  120 +-
 lisp/gnus/gnus-registry.el                         |   13 +-
 lisp/gnus/gnus-srvr.el                             |    5 +-
 lisp/gnus/gnus-start.el                            |    2 +-
 lisp/gnus/gnus-sum.el                              |  295 +-
 lisp/gnus/gnus.el                                  |   18 +-
 lisp/gnus/nndiary.el                               |    2 +-
 lisp/gnus/nnfolder.el                              |    2 +-
 lisp/gnus/nnheader.el                              |  344 ++-
 lisp/gnus/nnimap.el                                |   15 +-
 lisp/gnus/nnir.el                                  |  857 ++----
 lisp/gnus/nnmaildir.el                             |    2 +-
 lisp/gnus/nnml.el                                  |    2 +-
 lisp/gnus/nnselect.el                              |  864 ++++++
 lisp/gnus/nnspool.el                               |    2 +-
 lisp/help-fns.el                                   |    4 +-
 lisp/icomplete.el                                  |    2 +-
 lisp/indent.el                                     |   11 +-
 lisp/international/mule-cmds.el                    |    9 +
 lisp/language/cyrillic.el                          |    7 -
 lisp/ldefs-boot.el                                 | 3086 +++++++++++---------
 lisp/mail/mspools.el                               |  108 +-
 lisp/mail/qp.el                                    |    4 +-
 lisp/minibuffer.el                                 |    8 +-
 lisp/mwheel.el                                     |   58 +-
 lisp/net/dbus.el                                   |  214 +-
 lisp/net/eudcb-macos-contacts.el                   |    3 +-
 lisp/net/eww.el                                    |   30 +-
 lisp/net/shr.el                                    |    4 +-
 lisp/net/tramp-cmds.el                             |   19 +-
 lisp/net/tramp.el                                  |    2 +
 lisp/pcmpl-linux.el                                |   12 +-
 lisp/pcmpl-unix.el                                 |   16 +-
 lisp/play/gamegrid.el                              |    7 +-
 lisp/play/life.el                                  |   88 +-
 lisp/play/pong.el                                  |   20 +-
 lisp/play/snake.el                                 |    4 +-
 lisp/play/tetris.el                                |    2 +-
 lisp/progmodes/cc-mode.el                          |    6 +-
 lisp/progmodes/compile.el                          |   15 +-
 lisp/progmodes/cperl-mode.el                       |   20 +-
 lisp/progmodes/elisp-mode.el                       |    2 +-
 lisp/progmodes/flymake.el                          |    2 +-
 lisp/progmodes/project.el                          |    6 +-
 lisp/svg.el                                        |    2 +-
 lisp/textmodes/flyspell.el                         |    2 +-
 lisp/textmodes/sgml-mode.el                        |    3 +-
 lisp/time.el                                       |   29 +-
 lisp/vc/vc-dir.el                                  |    6 +-
 lisp/vc/vc-dispatcher.el                           |    3 -
 lisp/vc/vc.el                                      |    4 -
 lisp/wdired.el                                     |   12 +-
 lisp/wid-edit.el                                   |    9 +
 m4/include_next.m4                                 |   18 +-
 m4/stdint.m4                                       |   18 +-
 m4/string_h.m4                                     |   89 +-
 m4/time_rz.m4                                      |   14 +-
 src/alloc.c                                        |  247 +-
 src/dbusbind.c                                     |   18 +-
 src/eval.c                                         |    5 +-
 src/fileio.c                                       |   86 +-
 src/fringe.c                                       |    6 +-
 src/image.c                                        |    6 +-
 src/keyboard.c                                     |    8 +-
 src/lisp.h                                         |   18 +-
 src/xdisp.c                                        |    2 +-
 test/lib-src/emacsclient-tests.el                  |    2 +-
 test/lisp/calendar/icalendar-tests.el              |  130 +-
 test/lisp/custom-tests.el                          |    8 +-
 test/lisp/emacs-lisp/hierarchy-tests.el            |    4 +-
 test/lisp/emacs-lisp/rx-tests.el                   |   13 +-
 .../lisp/emacs-lisp/unsafep-tests.el               |   76 +-
 test/lisp/eshell/eshell-tests.el                   |    4 +-
 test/lisp/gnus/gnus-util-tests.el                  |    2 +-
 .../rmailmm.el => lisp/mail/rmailmm-tests.el}      |   60 +-
 test/lisp/mwheel-tests.el                          |   26 +-
 test/lisp/net/tramp-tests.el                       |   18 +-
 test/lisp/pcmpl-linux-resources/fs/ext4/.keep      |    0
 test/lisp/pcmpl-linux-resources/mtab               |   11 +
 test/lisp/pcmpl-linux-tests.el                     |   51 +
 test/lisp/play/life-tests.el                       |   80 +
 .../cperl-mode-resources/cperl-indent-exp.pl       |   52 +
 test/lisp/progmodes/cperl-mode-tests.el            |  129 +-
 test/lisp/progmodes/js-tests.el                    |    2 +-
 test/lisp/textmodes/bibtex-tests.el                |    2 +-
 test/src/editfns-tests.el                          |    6 +-
 test/src/fileio-tests.el                           |   34 -
 test/src/fns-tests.el                              |    6 +-
 127 files changed, 5181 insertions(+), 3547 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 099b947..6627f5f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -41,6 +41,33 @@ stages:
 # test-all:
 #   # This tests also file monitor libraries inotify and inotifywatch.
 #   stage: test
+#   only:
+#     changes:
+#       - "Makefile.in"
+#       - .gitlab-ci.yml
+#       - aclocal.m4
+#       - autogen.sh
+#       - configure.ac
+#       - lib/*.{h,c}
+#       - lisp/*.el
+#       - lisp/**/*.el
+#       - src/*.{h,c}
+#       - test/lisp/*.el
+#       - test/lisp/**/*.el
+#       - test/src/*.el
+#   except:
+#     changes:
+#       # gfilemonitor, kqueue
+#       - src/gfilenotify.c
+#       - src/kqueue.c
+#       # MS Windows
+#       - lisp/w32*.el
+#       - lisp/term/w32*.el
+#       - src/w32*.{h,c}
+#       # GNUstep
+#       - lisp/term/ns-win.el
+#       - src/ns*.{h,m}
+#       - src/macfont.{h,m}
 #   script:
 #     - DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y 
-qq -o=Dpkg::Use-Pty=0 inotify-tools
 #     - ./autogen.sh autoconf
@@ -108,18 +135,10 @@ test-gnustep:
     changes:
       - .gitlab-ci.yml
       - configure.ac
-      - src/nsfns.m
-      - src/nsfont.m
-      - src/nsgui.h
-      - src/nsimage.m
-      - src/nsmenu.m
-      - src/nsselect.m
-      - src/nsterm.h
-      - src/nsterm.m
-      - src/nsxwidget.h
-      - src/nsxwidget.m
-      - src/macfont.h
-      - src/macfont.m
+      - src/ns*.{h,m}
+      - src/macfont.{h,m}
+      - lisp/term/ns-win.el
+      - nextstep/**/*
   script:
     - DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y 
-qq -o=Dpkg::Use-Pty=0 gnustep-devel
     - ./autogen.sh autoconf
diff --git a/admin/admin.el b/admin/admin.el
index 728aab8..22d2967 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -928,13 +928,15 @@ changes (in a non-trivial way).  This function does not 
check for that."
 (defun reminder-for-release-blocking-bugs (version)
   "Submit a reminder message for release-blocking bugs of Emacs VERSION."
   (interactive
-    (list (completing-read
-          "Emacs release: "
-          (mapcar #'identity debbugs-gnu-emacs-blocking-reports)
-          nil t debbugs-gnu-emacs-current-release)))
+   (list (progn
+           (require 'debbugs-gnu)
+           (completing-read
+           "Emacs release: "
+           (mapcar #'identity debbugs-gnu-emacs-blocking-reports)
+           nil t debbugs-gnu-emacs-current-release))))
 
-  (require 'reporter)
   (require 'debbugs-gnu)
+  (require 'reporter)
 
   (when-let ((id (alist-get version debbugs-gnu-emacs-blocking-reports
                             nil nil #'string-equal))
@@ -949,7 +951,8 @@ changes (in a non-trivial way).  This function does not 
check for that."
      (lambda () ; posthook
        (goto-char (point-min))
        (mail-position-on-field "subject")
-       (insert (format "Release-blocking bugs for Emacs %s" version))
+       (insert (format "Reminder: release-blocking bugs for Emacs %s (%s)"
+                       version (format-time-string "%F" nil "UTC0")))
        (mail-text)
        (delete-region (point) (point-max))
        (insert "
diff --git a/admin/notes/bug-triage b/admin/notes/bug-triage
index 87fb471..3d9a275 100644
--- a/admin/notes/bug-triage
+++ b/admin/notes/bug-triage
@@ -11,7 +11,11 @@ interface via org-mode.
 The goal of this triage is to prune down the list of old bugs, closing
 the ones that are not reproducible on the current release.
 
-  1. To start, enter debbugs mode (either debbugs-gnu, debbugs-org, or via the
+  0. To start, check the most relevant bugs blocking a release by
+     calling debbugs-gnu-emacs-release-blocking-reports.  If you want
+     to check this for another Emacs version but the next-to-be-released-one,
+     use the "C-u" prefix.
+  1. After that, enter debbugs mode (either debbugs-gnu, debbugs-org, or via 
the
      web browser), and accept the default list option of bugs that have 
severity
      serious, important, or normal.
   2. For each bug, we want to primarily make sure it is still
@@ -20,7 +24,7 @@ the ones that are not reproducible on the current release.
      suggested checklist to follow for handling these bugs, along with
      example replies.  Closing, tagging, etc., are done
      with debbugs control messages, which in debbugs-gnu is initiated
-     with a "C".
+     with a "C" or "E".
      [ ] Read the mail thread for the bug.  Find out if anyone has
          been able to reproduce this on the current release.  If
          someone has been able to, then your work is finished for this
@@ -87,7 +91,7 @@ necessary information for others to act on.
 For each new bug, ask the following questions:
 
   1. Is the bug report written in a way to be easy to reproduce (starts from
-     emacs -Q, etc.)?  If not, ask the reporter to try and reproduce it on an
+     "emacs -Q", etc.)?  If not, ask the reporter to try and reproduce it on an
      emacs without customization.
   2. Is the bug report written against the latest emacs?  If not, try to
      reproduce on the latest version, and if it can't be reproduced, ask the
diff --git a/admin/notes/bugtracker b/admin/notes/bugtracker
index ac54f8d..9eb65e1 100644
--- a/admin/notes/bugtracker
+++ b/admin/notes/bugtracker
@@ -33,7 +33,7 @@ By mailing commands to control@debbugs.gnu.org.  Place 
commands at the
 start of the message body, one per line.
 
 severity 123 serious|important|normal|minor|wishlist
-tags 123 moreinfo|unreproducible|wontfix|patch
+tags 123 moreinfo|unreproducible|wontfix|patch|notabug
 
 * More detailed information
 
@@ -185,7 +185,7 @@ Basically, reply only to the numbered bug address (and any 
individual
 people's addresses). Do not send mail direct to bug-gnu-emacs or
 emacs-pretest-bug unless you are reporting a new bug.
 
-** To close bug #123 (for example), send mail
+** To close bug#123 (for example), send mail
 
 To: 123-done@debbugs.gnu.org
 
@@ -260,7 +260,7 @@ reopen 123
 
 *** Bugs can be tagged in various ways (eg wontfix, patch, etc).
 The available tags are:
-patch wontfix moreinfo unreproducible fixed notabug security confirmed
+patch wontfix moreinfo unreproducible fixed notabug help security confirmed 
easy
 See https://debbugs.gnu.org/Developer#tags
 The list of tags can be prefixed with +, - or =, meaning to add (the
 default), remove, or reset the tags. E.g.:
@@ -290,10 +290,9 @@ limited, predefined set of normal tags are available (see 
above).
 
 2) A usertag is associated with a specific user.  This is normally
 an email address (with an "@" sign and least 4 characters after the "@"),
-but on debbugs.gnu.org, the definition is less strict - anything with
-5 or more alphanumeric characters will work.  For personal tags,
+but on debbugs.gnu.org, it can also be a package name.  For personal tags,
 using an email address is still recommended.  Please only use the
-"emacs" user, or other short users, for "official" tags.
+"emacs" user for "official" tags.
 
 You set usertags in the same way as tags, by talking to the control server.
 One difference is that you can also specify the associated user.
@@ -307,7 +306,7 @@ a) In a control message:
 user emacs      # or email@example.com
 usertags 1234 any-tag-you-like
 
-This will add a usertag "any-tag-you-like" to bug 1234.  The tag will
+This will add a usertag "any-tag-you-like" to bug#1234.  The tag will
 be associated with the user "emacs".  If you omit the first line,
 the tag will be associated with your email address.
 
diff --git a/admin/release-process b/admin/release-process
index b8587e6..73879b1 100644
--- a/admin/release-process
+++ b/admin/release-process
@@ -41,17 +41,17 @@ released in the next release cycle.  From time to time, the 
master
 branches merges bugfix commits from the "emacs-NN" branch.
 See admin/gitmerge.el.
 
-* RELEASE-CRITICAL BUGS
+* RELEASE-BLOCKING BUGS
 
 Emacs uses the "blocking" feature of Debbugs for bugs that need to be
 addressed in the next release.
 
-Currently, bug#39200 is the tracking bug for release of 27.1 and
+Currently, bug#43018 is the tracking bug for release of 27.2 and
 bug#39202 is the tracking bug for release 28.1.  Say bug#123 needs
-to be fixed for Emacs 27.1.  Send a message to control@debbugs.gnu.org
+to be fixed for Emacs 27.2.  Send a message to control@debbugs.gnu.org
 that says:
 
-   block 39200 by 123
+  block 43018 by 123
 
 Change "block" to "unblock" to remove a bug from the list.  Closed
 bugs are not listed as blockers, so you do not need to explicitly
@@ -59,9 +59,17 @@ unblock one that has been closed.  You may need to force an 
update of
 the tracking bug with ctrl-f5/shift-reload to see the latest version.
 
 If you use the debbugs package from GNU ELPA, you can apply the
-following form to see all bugs which block a given release:
+following command to see all bugs which block a given release:
 
-  (debbugs-gnu-emacs-release-blocking-reports "27.1")
+  (debbugs-gnu-emacs-release-blocking-reports "27.2")
+
+The following command from admin/admin.el sends a reminder message
+about release-blocking bugs to the <emacs-devel@gnu.org> mailing list:
+
+  (reminder-for-release-blocking-bugs "27.2")
+
+It is recommended to send this reminder message once a month.  Once the
+pretest has started, a reminder message once a week is appropriate.
 
 * TO BE DONE SHORTLY BEFORE RELEASE
 
diff --git a/configure.ac b/configure.ac
index 31484db..d6584d9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1901,8 +1901,7 @@ tmp_CPPFLAGS="$CPPFLAGS"
 tmp_CFLAGS="$CFLAGS"
 CPPFLAGS="$CPPFLAGS -x objective-c"
 CFLAGS="$CFLAGS -x objective-c"
-# Recent versions of GCC don't use C99 to compile Obj-C.
-GNU_OBJC_CFLAGS="-std=c99"
+GNU_OBJC_CFLAGS=""
 LIBS_GNUSTEP=
 if test "${with_ns}" != no; then
   # macfont.o requires macuvs.h which is absent after 'make extraclean',
@@ -1918,7 +1917,7 @@ if test "${with_ns}" != no; then
   elif flags=$( (gnustep-config --objc-flags) 2>/dev/null); then
      NS_IMPL_GNUSTEP=yes
      NS_GNUSTEP_CONFIG=yes
-     GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS $flags"
+     GNU_OBJC_CFLAGS="$flags"
      LIBS_GNUSTEP=$(gnustep-config --gui-libs) || exit
   elif test -f $GNUSTEP_CONFIG_FILE; then
      NS_IMPL_GNUSTEP=yes
@@ -2068,6 +2067,20 @@ if test "${HAVE_NS}" = yes; then
     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_LANG_PROGRAM([], [[for (int i = 0;;);]])],
+       emacs_cv_objc_c99=yes,
+       emacs_cv_objc_c99=no)
+     AC_LANG_POP([Objective C])])
+
+   if test x$emacs_cv_objc_c99 = xno ; then
+     GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -std=c99"
+   fi
 fi
 
 HAVE_W32=no
diff --git a/doc/lispintro/emacs-lisp-intro.texi 
b/doc/lispintro/emacs-lisp-intro.texi
index f6dd77a..9aefe1d 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -3997,7 +3997,7 @@ looks like this:
 @smallexample
 @group
 (if (equal characteristic "fierce")
-    (message "It is a tiger!")))
+    (message "It is a tiger!"))
 @end group
 @end smallexample
 
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index 2a72276..c35444f 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -358,6 +358,10 @@ This is meaningful only for certain types, currently 
including
 @code{hook}, @code{plist} and @code{alist}.  See the definition of the
 individual types for a description of how to use @code{:options}.
 
+Re-evaluating a @code{defcustom} form with a different @code{:options}
+value does not clear the values added by previous evaluations, or
+added by calls to @code{custom-add-frequent-value} (see below).
+
 @item :set @var{setfunction}
 @kindex set@r{, @code{defcustom} keyword}
 Specify @var{setfunction} as the way to change the value of this
@@ -485,6 +489,10 @@ list of reasonable values.
 
 The precise effect of adding a value depends on the customization type
 of @var{symbol}.
+
+Since evaluating a @code{defcustom} form does not clear values added
+previously, Lisp programs can use this function to add values for user
+options not yet defined.
 @end defun
 
 Internally, @code{defcustom} uses the symbol property
@@ -1189,6 +1197,13 @@ current value is valid for the widget.  Otherwise, it 
should return
 the widget containing the invalid data, and set that widget's
 @code{:error} property to a string explaining the error.
 
+@item :type-error @var{string}
+@kindex type-error@r{, customization keyword}
+@var{string} should be a string that describes why a value doesn't
+match the type, as determined by the @code{:match} function.  When the
+@code{:match} function returns @code{nil}, the widget's @code{:error}
+property will be set to @var{string}.
+
 @ignore
 @item :indent @var{columns}
 Indent this item by @var{columns} columns.  The indentation is used for
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index 090c54f..92cbc2a 100644
--- a/doc/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -2438,26 +2438,14 @@ This is for the sake of filesystems that have the 
concept of a
 superroot above the root directory @file{/}.  On other filesystems,
 @file{/../} is interpreted exactly the same as @file{/}.
 
-If a filename must be that of a directory, its expansion must be too.
-For example, if a filename ends in @samp{/} or @samp{/.} or @samp{/..}
-then its expansion ends in @samp{/} so that it cannot be
-misinterpreted as the name of a symbolic link:
-
-@example
-@group
-(expand-file-name "/a///b//.")
-     @result{} "/a/b/"
-@end group
-@end example
-
 Expanding @file{.} or the empty string returns the default directory:
 
 @example
 @group
 (expand-file-name "." "/usr/spool/")
-     @result{} "/usr/spool/"
+     @result{} "/usr/spool"
 (expand-file-name "" "/usr/spool/")
-     @result{} "/usr/spool/"
+     @result{} "/usr/spool"
 @end group
 @end example
 
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 8b4240c..cca06c7 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -437,6 +437,9 @@ passed to @code{format} (@pxref{Formatting Strings}).
 
 @code{minibuffer-default-prompt-format} can be @samp{""}, in which
 case no default values are displayed.
+
+If @var{default} is @code{nil}, there is no default value, and
+therefore no ``default value'' string is included in the result value.
 @end defun
 
 @node Object from Minibuffer
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index 33a07c9..fa5f18e 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -2039,7 +2039,7 @@ be useful for Shell mode (in reality, Shell mode does not 
set
    "%n"
    ")%]--"
 @group
-   '(which-func-mode ("" which-func-format "--"))
+   '(which-function-mode ("" which-func-format "--"))
    '(line-number-mode "L%l--")
    '(column-number-mode "C%c--")
    '(-3 "%p")))
@@ -2047,8 +2047,8 @@ be useful for Shell mode (in reality, Shell mode does not 
set
 @end example
 
 @noindent
-(The variables @code{line-number-mode}, @code{column-number-mode}
-and @code{which-func-mode} enable particular minor modes; as usual,
+(The variables @code{line-number-mode}, @code{column-number-mode} and
+@code{which-function-mode} enable particular minor modes; as usual,
 these variable names are also the minor mode command names.)
 
 @node Mode Line Variables
@@ -2190,7 +2190,7 @@ enabled separately in each buffer.
 
 @defvar global-mode-string
 This variable holds a mode line construct that, by default, appears in
-the mode line just after the @code{which-func-mode} minor mode if set,
+the mode line just after the @code{which-function-mode} minor mode if set,
 else after @code{mode-line-modes}.  The command @code{display-time} sets
 @code{global-mode-string} to refer to the variable
 @code{display-time-string}, which holds a string containing the time and
@@ -2219,7 +2219,7 @@ specifies addition of text properties.
  "   "
 @group
  mode-line-modes
- (which-func-mode ("" which-func-format "--"))
+ (which-function-mode ("" which-func-format "--"))
  (global-mode-string ("--" global-mode-string))
  "-%-")
 @end group
@@ -2327,6 +2327,10 @@ read-only buffer.  @xref{Buffer Modification}.
 @item %&
 @samp{*} if the buffer is modified, and @samp{-} otherwise.
 
+@item %@@
+@samp{@@} if the buffer's @code{default-directory} (@pxref{File Name
+Expansion}) is on a remote machine, and @samp{-} otherwise.
+
 @item %[
 An indication of the depth of recursive editing levels (not counting
 minibuffer levels): one @samp{[} for each editing level.
@@ -2344,16 +2348,13 @@ The character @samp{%}---this is how to include a 
literal @samp{%} in a
 string in which @code{%}-constructs are allowed.
 @end table
 
-The following two @code{%}-constructs are still supported, but they are
-obsolete, since you can get the same results with the variables
-@code{mode-name} and @code{global-mode-string}.
+The following @code{%}-construct is still supported, but it is
+obsolete, since you can get the same result using the variable
+@code{mode-name}.
 
 @table @code
 @item %m
 The value of @code{mode-name}.
-
-@item %M
-The value of @code{global-mode-string}.
 @end table
 
 @node Properties in Mode
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 0c3813f..3a4cf6b 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -5154,6 +5154,11 @@ Utility functions:
 @item dom-pp @var{dom} &optional @var{remove-empty}
 Pretty-print @var{dom} at point.  If @var{remove-empty}, don't print
 textual nodes that just contain white-space.
+
+@item dom-print @var{dom} &optional @var{pretty} @var{xml}
+Print @var{dom} at point.  If @var{xml} is non-@code{nil}, print as
+@acronym{XML}; otherwise, print as @acronym{HTML}.  If @var{pretty} is
+non-@code{nil}, indent the @acronym{HTML}/@acronym{XML} logically.
 @end table
 
 
diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi
index 61dc62e..f8fcb64 100644
--- a/doc/misc/auth.texi
+++ b/doc/misc/auth.texi
@@ -227,6 +227,11 @@ machine YOURMACHINE login YOU password SMTPPASSWORD port 
433
 machine YOURMACHINE login YOU password GENERALPASSWORD
 @end example
 
+If you wish to specify a particular SMTP authentication method to use
+with a machine, you can use the @code{smtp-auth} keyword.
+@xref{Authentication,, Authentication, smtpmail, Emacs SMTP Library},
+for available methods.
+
 For url-auth authentication (HTTP/HTTPS), you need to put this in your
 netrc file:
 
diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi
index 167d2bd..c16b7aa 100644
--- a/doc/misc/dbus.texi
+++ b/doc/misc/dbus.texi
@@ -1462,7 +1462,15 @@ cons cell, @var{handler} can return this object 
directly, instead of
 returning a list containing the object.
 
 If @var{handler} returns a reply message with an empty argument list,
-@var{handler} must return the symbol @code{:ignore}.
+@var{handler} must return the symbol @code{:ignore} in order
+to distinguish it from @code{nil} (the boolean false).
+
+If @var{handler} detects an error, it shall return the list
+@code{(:error @var{ERROR-NAME} @var{ERROR-MESSAGE)}}.
+@var{ERROR-NAME} is a namespaced string which characterizes the error
+type, and @var{ERROR-MESSAGE} is a free text string.  Alternatively,
+any Emacs signal @code{dbus-error} in @var{handler} raises a D-Bus
+error message with the error name @samp{org.freedesktop.DBus.Error.Failed}.
 
 When @var{dont-register-service} is non-@code{nil}, the known name
 @var{service} is not registered.  This means that other D-Bus clients
@@ -1512,17 +1520,20 @@ could use the command line tool @code{dbus-send} in a 
shell:
       boolean true
 @end example
 
-You can indicate an error by raising the Emacs signal
-@code{dbus-error}.  The handler above could be changed like this:
+You can indicate an error by returning an @code{:error} list reply, or
+by raising the Emacs signal @code{dbus-error}.  The handler above
+could be changed like this:
 
 @lisp
 (defun my-dbus-method-handler (&rest args)
-  (unless (and (= (length args) 1) (stringp (car args)))
-    (signal 'dbus-error (list (format "Wrong argument list: %S" args))))
-  (condition-case err
-      (find-file (car args))
-    (error (signal 'dbus-error (cdr err))))
-  t)
+  (if (not (and (= (length args) 1) (stringp (car args))))
+      (list :error
+            "org.freedesktop.TextEditor.Error.InvalidArgs"
+            (format "Wrong argument list: %S" args))
+    (condition-case err
+        (find-file (car args))
+      (error (signal 'dbus-error (cdr err))))
+    t))
 @end lisp
 
 The test then runs
@@ -1534,9 +1545,20 @@ The test then runs
     "org.freedesktop.TextEditor.OpenFile" \
     string:"/etc/hosts" string:"/etc/passwd"
 
-@print{} Error org.freedesktop.DBus.Error.Failed:
+@print{} Error org.freedesktop.TextEditor.Error.InvalidArgs:
    Wrong argument list: ("/etc/hosts" "/etc/passwd")
 @end example
+
+@example
+# dbus-send --session --print-reply \
+    --dest="org.freedesktop.TextEditor" \
+    "/org/freedesktop/TextEditor" \
+    "org.freedesktop.TextEditor.OpenFile" \
+    string:"/etc/crypttab"
+
+@print{} Error org.freedesktop.DBus.Error.Failed:
+   D-Bus error: "File is not readable", "/etc/crypttab"
+@end example
 @end defun
 
 @defun dbus-register-property bus service path interface property access value 
&optional emits-signal dont-register-service
@@ -1556,14 +1578,16 @@ discussion of @var{dont-register-service} below).
 @var{property} is the name of the property of @var{interface}.
 
 @var{access} indicates, whether the property can be changed by other
-services via D-Bus.  It must be either the symbol @code{:read} or
-@code{:readwrite}.  @var{value} is the initial value of the property,
-it can be of any valid type (@xref{dbus-call-method}, for details).
+services via D-Bus.  It must be either the symbol @code{:read},
+@code{:write} or @code{:readwrite}.  @var{value} is the initial value
+of the property, it can be of any valid type (@xref{dbus-call-method},
+for details).
 
 If @var{property} already exists on @var{path}, it will be
 overwritten.  For properties with access type @code{:read} this is the
 only way to change their values.  Properties with access type
-@code{:readwrite} can be changed by @code{dbus-set-property}.
+@code{:write} or @code{:readwrite} can be changed by
+@code{dbus-set-property}.
 
 The interface @samp{org.freedesktop.DBus.Properties} is added to
 @var{path}, including a default handler for the @samp{Get},
diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi
index 4ead603..69a8512 100644
--- a/doc/misc/eudc.texi
+++ b/doc/misc/eudc.texi
@@ -166,15 +166,11 @@ your own local BBDB (@pxref{Creating BBDB Records})
 @node macOS Contacts
 @section macOS Contacts
 
-macOS Contacts is the rolodex-like application that ships with the
-macOS operating system@footnote{Apple have changed the names of their
-operating system and some applications over time.  macOS used to be
-called Mac OS X in the past, and the Contacts application was
-previously called Address Book.}.
-
-EUDC considers macOS Contacts as a directory server back end just like
-LDAP, though the macOS Contacts application always resides locally on
-your machine.
+This EUDC back end considers macOS Contacts as a directory server just
+like LDAP, though the macOS Contacts application always runs locally
+on your machine.  The Contacts application was previously called
+Address Book; the EUDC macOS Contacts back end also works on those
+older versions.
 
 
 @node Installation
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 0bdc2fa..de5e8f3 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -641,7 +641,7 @@ Select Methods
 * Getting Mail::                Reading your personal mail with Gnus.
 * Browsing the Web::            Getting messages from a plethora of Web 
sources.
 * Other Sources::               Reading directories, files.
-* Combined Groups::             Combining groups into one group.
+* Virtual Groups::              Combining articles from multiple sources.
 * Email Based Diary::           Using mails to manage diary events in Gnus.
 * Gnus Unplugged::              Reading news and mail offline.
 
@@ -716,9 +716,10 @@ Document Groups
 
 * Document Server Internals::   How to add your own document types.
 
-Combined Groups
+Virtual Groups
 
-* Virtual Groups::              Combining articles from many groups.
+* Selection Groups::            Articles selected from many places.
+* Combined Groups::             Combining multiple  groups.
 
 Email Based Diary
 
@@ -4967,6 +4968,15 @@ The address (from the @code{From} header).  This works 
the same way as
 the @code{a} spec.
 @item L
 Number of lines in the article.
+@item Z
+Retrieval Score Value (RSV) of the article; nil if not in an nnselect
+group.
+@item G
+Originating group name of the article; nil if not in an nnselect
+group.
+@item g
+Short form of the originating group name of the article; nil if not in
+an nnselect group.
 @item c
 Number of characters in the article.  This specifier is not supported
 in some methods (like nnfolder).
@@ -10407,12 +10417,20 @@ article (@code{gnus-summary-refer-references}).
 @findex gnus-summary-refer-thread
 @kindex A T @r{(Summary)}
 Display the full thread where the current article appears
-(@code{gnus-summary-refer-thread}).  This command has to fetch all the
-headers in the current group to work, so it usually takes a while.  If
-you do it often, you may consider setting @code{gnus-fetch-old-headers}
-to @code{invisible} (@pxref{Filling In Threads}).  This won't have any
-visible effects normally, but it'll make this command work a whole lot
-faster.  Of course, it'll make group entry somewhat slow.
+(@code{gnus-summary-refer-thread}). By default this command looks for
+articles only in the current group. Some backends (currently only
+'nnimap) know how to find articles in the thread directly. In other
+cases each header in the current group must be fetched and examined,
+so it usually takes a while.  If you do it often, you may consider
+setting @code{gnus-fetch-old-headers} to @code{invisible}
+(@pxref{Filling In Threads}).  This won't have any visible effects
+normally, but it'll make this command work a whole lot faster.  Of
+course, it'll make group entry somewhat slow.
+
+@vindex gnus-refer-thread-use-search
+If @code{gnus-refer-thread-use-search} is non-nil then those backends
+that know how to find threads directly will search not just in the
+current group but all groups on the same server.
 
 @vindex gnus-refer-thread-limit
 The @code{gnus-refer-thread-limit} variable says how many old (i.e.,
@@ -10421,6 +10439,15 @@ fetch when doing this command.  The default is 200.  
If @code{t}, all
 the available headers will be fetched.  This variable can be overridden
 by giving the @kbd{A T} command a numerical prefix.
 
+@vindex gnus-refer-thread-limit-to-thread
+In most cases @code{gnus-refer-thread} adds any articles it finds to
+the current summary buffer. (When @code{gnus-refer-thread-use-search}
+is true and the initial referral starts from a summary buffer for a
+non-virtual group this may not be possible. In this case a new summary
+buffer is created holding a virtual group with the result of the thread
+search). If @code{gnus-refer-thread-limit-to-thread} is non-nil then
+the summary buffer will be limited to articles in the thread.
+
 @item M-^ (Summary)
 @findex gnus-summary-refer-article
 @kindex M-^ @r{(Summary)}
@@ -13262,7 +13289,7 @@ The different methods all have their peculiarities, of 
course.
 * Getting Mail::                Reading your personal mail with Gnus.
 * Browsing the Web::            Getting messages from a plethora of Web 
sources.
 * Other Sources::               Reading directories, files.
-* Combined Groups::             Combining groups into one group.
+* Virtual Groups::              Combining articles and groups together.
 * Email Based Diary::           Using mails to manage diary events in Gnus.
 * Gnus Unplugged::              Reading news and mail offline.
 @end menu
@@ -17834,19 +17861,133 @@ methods, but want to only use secondary ones:
 @end lisp
 
 
-@node Combined Groups
-@section Combined Groups
+@node Virtual Groups
+@section Virtual Groups
 
-Gnus allows combining a mixture of all the other group types into bigger
-groups.
+Gnus allows combining articles from many sources, and combinations of
+whole groups together into virtual groups.
 
 @menu
-* Virtual Groups::              Combining articles from many groups.
+* Selection Groups::            Combining articles from many groups.
+* Combined Groups::             Combining  multiple  groups.
 @end menu
 
 
-@node Virtual Groups
-@subsection Virtual Groups
+@node Selection Groups
+@subsection Select Groups
+@cindex nnselect
+@cindex select groups
+@cindex selecting articles
+
+
+Gnus provides the @dfn{nnselect} method for creating virtual groups
+composed of collections of messages, even when these messages come
+from groups that span multiple servers and backends. For the most part
+these virtual groups behave like any other group: messages may be
+threaded, marked, moved, deleted, copied, etc.; groups may be
+ephemeral or persistent; groups may be created via
+@code{gnus-group-make-group} or browsed as foreign via
+@code{gnus-group-browse-foreign-server}.
+
+The key to using an nnselect group is specifying the messages to
+include. Each nnselect group has a group parameter
+@code{nnselect-specs} which is an alist with two elements: a function
+@code{nnselect-function}; and arguments @code{nnselect-args} to be
+passed to the function, if any.
+
+The function @code{nnselect-function} must return a vector. Each
+element of this vector is in turn a 3-element vector corresponding to
+one message. The 3 elements are: the fully-qualified group name; the
+message number; and a "score" that can be used for additional
+sorting. The values for the score are arbitrary, and are not used
+directly by the nnselect method---they may, for example, all be set to
+100.
+
+Here is an example:
+
+@lisp
+ (nnselect-specs
+  (nnselect-function . identity)
+  (nnselect-args .
+        [["nnimap+work:mail" 595 100]
+         ["nnimap+home:sent" 223 100]
+          ["nntp+news.gmane.org:gmane.emacs.gnus.general" 23666 100]]))
+@end lisp
+
+The function is the identity and the argument is just the list of
+messages to include in the virtual group.
+
+Or we may wish to create a group from the results of a search query:
+
+@lisp
+ (nnselect-specs
+  (nnselect-function . nnir-run-query)
+  (nnselect-args
+   (nnir-query-spec
+    (query . "FLAGGED")
+    (criteria . ""))
+   (nnir-group-spec
+    ("nnimap:home")
+    ("nnimap:work"))))
+@end lisp
+
+This creates a group including all flagged messages from all groups on
+two imap servers, "home" and "work".
+
+And one last example. Here is a function that runs a search query to
+find all message that have been received recently from certain groups:
+
+@lisp
+(defun my-recent-email (args)
+  (let ((query-spec
+         (list
+          (cons 'query
+                (format-time-string "SENTSINCE %d-%b-%Y"
+                                    (time-subtract (current-time)
+                                                   (days-to-time (car args)))))
+          (cons 'criteria "")))
+        (group-spec  (cadr args)))
+    (nnir-run-query   (cons 'nnir-specs
+                            (list (cons 'nnir-query-spec query-spec)
+                                  (cons 'nnir-group-spec group-spec))))))
+@end lisp
+
+Then an nnselect-specs
+
+@lisp
+ (nnselect-specs
+  (nnselect-function . my-recent-email)
+  (nnselect-args . (7 (("nnimap:home") ("nnimap:work")))))
+@end lisp
+
+will provide a group composed of all messages on the home and work
+servers received in the last 7 days.
+
+Refreshing the selection of an nnselect group by running the
+@code{nnselect-function} may take a long time to
+complete. Consequently nnselect groups are not refreshed by default
+when @code{gnus-group-get-new-news} is invoked. In those cases where
+running the function is not too time-consuming, a non-nil group
+parameter of @code{nnselect-rescan} will allow automatic refreshing. A
+refresh can always be invoked manually through
+@code{gnus-group-get-new-news-this-group}.
+
+The nnir interface (@pxref{nnir}) includes engines for searching a
+variety of backends. While the details of each search engine vary, the
+result of an nnir search is always a vector of the sort used by the
+nnselect method, and the results of nnir queries are usually viewed
+using an nnselect group. Indeed the standard search function
+@code{gnus-group-read-ephemeral-search-group} just creates an
+ephemeral nnselect group with the appropriate nnir query as the
+@code{nnselect-specs}.  nnir originally included both the search
+engines and the glue to connect search results to gnus. Over time this
+glue evolved into the nnselect method. The two had
+a mostly amicable parting so that nnselect could pursue its dream of
+becoming a fully functioning backend, but occasional conflicts may
+still linger.
+
+@node Combined Groups
+@subsection Combined Groups
 @cindex nnvirtual
 @cindex virtual groups
 @cindex merging groups
@@ -21238,14 +21379,26 @@ four days, Gnus will decay the scores four times, for 
instance.
 @chapter Searching
 @cindex searching
 
-FIXME: Add a brief overview of Gnus search capabilities.  A brief
-comparison of nnir, nnmairix, contrib/gnus-namazu would be nice
-as well.
-
-This chapter describes tools for searching groups and servers for
-articles matching a query and then retrieving those articles.  Gnus
-provides a simpler mechanism for searching through articles in a summary buffer
-to find those matching a pattern. @xref{Searching for Articles}.
+FIXME: A brief comparison of nnir, nnmairix, contrib/gnus-namazu would
+be nice.
+
+Gnus has various ways of finding articles that match certain criteria
+(from a particular author, on a certain subject, etc). The simplest
+method is to enter a group and then either "limit" the summary buffer
+to the desired articles using the limiting commands (@xref{Limiting}),
+or searching through messages in the summary buffer (@xref{Searching
+for Articles}).
+
+Limiting commands and summary buffer searching work on subsets of the
+articles already fetched from the servers, and these commands won’t
+query the server for additional articles.  While simple, these methods
+are therefore inadequate if the desired articles span multiple groups,
+or if the group is so large that fetching all articles is
+impractical. Many backends (such as imap, notmuch, namazu, etc.)
+provide their own facilities to search for articles directly on the
+server and gnus can take advantage of these methods.  This chapter
+describes tools for searching groups and servers for articles matching
+a query.
 
 @menu
 * nnir::                     Searching with various engines.
@@ -21275,7 +21428,7 @@ through mail and news repositories.  Different backends 
(like
 interface.
 
 The @code{nnimap} search engine should work with no configuration.
-Other engines require a local index that needs to be created and
+Other engines may require a local index that needs to be created and
 maintained outside of Gnus.
 
 
@@ -21283,23 +21436,19 @@ maintained outside of Gnus.
 @subsection Basic Usage
 
 In the group buffer typing @kbd{G G} will search the group on the
-current line by calling @code{gnus-group-make-nnir-group}.  This prompts
-for a query string, creates an ephemeral @code{nnir} group containing
+current line by calling @code{gnus-group-make-search-group}.  This prompts
+for a query string, creates an ephemeral @code{nnselect} group containing
 the articles that match this query, and takes you to a summary buffer
 showing these articles.  Articles may then be read, moved and deleted
 using the usual commands.
 
-The @code{nnir} group made in this way is an @code{ephemeral} group,
-and some changes are not permanent: aside from reading, moving, and
-deleting, you can't act on the original article.  But there is an
-alternative: you can @emph{warp} (i.e., jump) to the original group
-for the article on the current line with @kbd{A W}, aka
-@code{gnus-warp-to-article}.  Even better, the function
-@code{gnus-summary-refer-thread}, bound by default in summary buffers
-to @kbd{A T}, will first warp to the original group before it works
-its magic and includes all the articles in the thread.  From here you
-can read, move and delete articles, but also copy them, alter article
-marks, whatever.  Go nuts.
+The @code{nnselect} group made in this way is an @code{ephemeral}
+group, and will disappear upon exit from the group.  However changes
+made in the group are permanently reflected in the real groups from
+which the articles are drawn.  It is occasionally convenient to view
+articles found through searching in their original group. You can
+@emph{warp} (i.e., jump) to the original group for the article on the
+current line with @kbd{A W}, aka @code{gnus-warp-to-article}.
 
 You say you want to search more than just the group on the current line?
 No problem: just process-mark the groups you want to search.  You want
@@ -21307,14 +21456,14 @@ even more?  Calling for an nnir search with the 
cursor on a topic heading
 will search all the groups under that heading.
 
 Still not enough?  OK, in the server buffer
-@code{gnus-group-make-nnir-group} (now bound to @kbd{G}) will search all
-groups from the server on the current line.  Too much?  Want to ignore
-certain groups when searching, like spam groups?  Just customize
-@code{nnir-ignored-newsgroups}.
+@code{gnus-group-make-search-group} (now bound to @kbd{G}) will search
+all groups from the server on the current line.  Too much?  Want to
+ignore certain groups when searching, like spam groups?  Just
+customize @code{nnir-ignored-newsgroups}.
 
 One more thing: individual search engines may have special search
 features.  You can access these special features by giving a prefix-arg
-to @code{gnus-group-make-nnir-group}.  If you are searching multiple
+to @code{gnus-group-make-search-group}.  If you are searching multiple
 groups with different search engines you will be prompted for the
 special search features for each engine separately.
 
@@ -21371,8 +21520,7 @@ variable is set to use the @code{imap} engine for all 
servers using the
 your servers with an @code{nnimap} backend you could change this to
 
 @lisp
-'((nnimap . namazu)
-  (nntp . gmane))
+'((nnimap . namazu))
 @end lisp
 
 @node The imap Engine
@@ -21575,7 +21723,7 @@ This engine is obsolete.
 
 @item nnir-method-default-engines
 Alist of pairs of server backends and search engines.  The default
-associations are
+association is
 @example
 (nnimap . imap)
 @end example
@@ -21584,32 +21732,6 @@ associations are
 A regexp to match newsgroups in the active file that should be skipped
 when searching all groups on a server.
 
-@item nnir-summary-line-format
-The format specification to be used for lines in an nnir summary buffer.
-All the items from @code{gnus-summary-line-format} are available, along with
-three items unique to nnir summary buffers:
-
-@example
-%Z    Search retrieval score value (integer)
-%G    Article original full group name (string)
-%g    Article original short group name (string)
-@end example
-
-If @code{nil} (the default) this will use @code{gnus-summary-line-format}.
-
-@item nnir-retrieve-headers-override-function
-If non-@code{nil}, a function that retrieves article headers rather than using
-the gnus built-in function.  This function takes an article list and
-group as arguments and populates the @code{nntp-server-buffer} with the
-retrieved headers.  It should then return either 'nov or 'headers
-indicating the retrieved header format.  Failure to retrieve headers
-should return @code{nil}.
-
-If this variable is @code{nil}, or if the provided function returns
-@code{nil} for a search result, @code{gnus-retrieve-headers} will be
-called instead."
-
-
 @end table
 
 
diff --git a/doc/misc/message.texi b/doc/misc/message.texi
index 55b166e..b192822 100644
--- a/doc/misc/message.texi
+++ b/doc/misc/message.texi
@@ -2296,8 +2296,11 @@ String to mark the end of some inserted text.
 String to be inserted at the end of the message buffer.  If @code{t}
 (which is the default), the @code{message-signature-file} file will be
 inserted instead.  If a function, the result from the function will be
-used instead.  If a form, the result from the form will be used instead.
-If this variable is @code{nil}, no signature will be inserted at all.
+used instead.  If a form, the result from the form will be used
+instead.  If this variable is @code{nil}, no signature will be
+inserted at all, but you can still insert your
+@code{message-signature-file} by hand when desired, using the
+@kbd{C-c C-w} (@code{message-insert-signature}) command.
 
 @item message-signature-file
 @vindex message-signature-file
diff --git a/doc/misc/smtpmail.texi b/doc/misc/smtpmail.texi
index f29a5a8..f4367b3 100644
--- a/doc/misc/smtpmail.texi
+++ b/doc/misc/smtpmail.texi
@@ -267,10 +267,12 @@ file, @pxref{Top,,auth-source, auth, Emacs auth-source 
Library}.
 The process by which the SMTP library authenticates you to the server
 is known as ``Simple Authentication and Security Layer'' (SASL).
 There are various SASL mechanisms, and this library supports three of
-them: CRAM-MD5, PLAIN, and LOGIN@.  It tries each of them, in that order,
-until one succeeds.  The first uses a form of encryption to obscure
-your password, while the other two do not.
-
+them: CRAM-MD5, PLAIN, and LOGIN, where the first uses a form of
+encryption to obscure your password, while the other two do not.  It
+tries each of them, in that order, until one succeeds.  You can
+override this by assigning a specific authentication mechanism to a
+server by including a key @code{smtp-auth} with the value of your
+preferred mechanism in the appropriate @file{~/.authinfo} entry.
 
 @node Encryption
 @chapter Encryption
diff --git a/etc/NEWS b/etc/NEWS
index ad63955..749b28a 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -43,7 +43,7 @@ still a valid backend.
 
 ---
 ** Building without double buffering support.
-configure --with-xdbe=no can now be used to disable double buffering
+'configure --with-xdbe=no' can now be used to disable double buffering
 at build time.
 
 ---
@@ -99,14 +99,14 @@ box if the point is on an image larger than 'SIZE' pixels 
in any
 dimension.
 
 +++
-** New custom option 'word-wrap-by-category'.
+** New user option 'word-wrap-by-category'.
 When word-wrap is enabled, and this option is non-nil, that allows
 Emacs to break lines after more characters than just whitespace
 characters.  In particular, this significantly improves word-wrapping
 for CJK text mixed with Latin text.
 
 ---
-*** Improved language transliteration in Malayalam input methods.
+** Improved language transliteration in Malayalam input methods.
 Added a new Mozhi scheme.  The inapplicable ITRANS scheme is now
 deprecated.  Errors in the Inscript method were corrected.
 
@@ -167,6 +167,19 @@ same for a button.
 
 * Changes in Specialized Modes and Packages in Emacs 28.1
 
+---
+** Specific warnings can now be disabled from the warning buffer.
+When a warning is displayed to the user, the resulting buffer now has
+buttons which allow making permanent changes to the treatment of that
+warning.  Automatic showing of the warning can be disabled (although
+it is still logged to the *Messages* buffer), or the warning can be
+disabled entirely.
+
+** mspool.el
+
+---
+*** Autoload the main entry point 'mspool-show'.
+
 ** Windows
 
 *** The key prefix 'C-x 4 1' displays next command buffer in the same window.
@@ -296,7 +309,7 @@ invoke 'C-u C-x v s' ('vc-create-tag').
 *** 'vc-hg' now uses 'hg summary' to populate extra 'vc-dir' headers.
 
 ---
-*** New variable 'vc-git-revision-complete-only-branches'.
+*** New user option 'vc-git-revision-complete-only-branches'.
 If non-nil, only branches and remotes are considered when doing
 completion over Git branch names.  The default is nil, which causes
 tags to be considered as well.
@@ -304,7 +317,24 @@ tags to be considered as well.
 ** Gnus
 
 +++
-*** New option 'gnus-dbus-close-on-sleep'
+*** New backend 'nnselect'.
+The newly added 'nnselect' backend allows creating groups from an
+arbitrary list of articles that may come from multiple groups and
+servers.  These groups generally behave like any other group: they may
+be ephemeral or persistent, and allow article marking, moving,
+deletion, etc.  'nnselect' groups may be created like any other group,
+but there is also a convenience function for the common case of
+obtaining the list of articles as a result of a search:
+'gnus-group-make-search-group' ('G g') that will prompt for an 'nnir'
+search query and create a dedicated group for that search.  As part of
+this addition, the user option 'nnir-summary-line-format' has been
+removed; it's functionality is now available directly in the
+'gnus-summary-line-format' '%G' and '%g' specs.  The user option
+'gnus-refer-thread-use-nnir' has been renamed to
+'gnus-refer-thread-use-search'.
+
++++
+*** New user option 'gnus-dbus-close-on-sleep'.
 On systems with D-Bus support, it is now possible to register a signal
 to close all Gnus servers before the system sleeps.
 
@@ -379,6 +409,13 @@ In Message mode buffers, the 'C-c C-p' 
('message-insert-screenshot')
 command has been added.  It depends on using an external program to
 take the actual screenshot, and defaults to "ImageMagick import".
 
+** Smtpmail
+
++++
+*** Allow direct selection of smtp authentication mechanism.
+A server entry retrieved by auth-source can request a desired smtp
+authentication mechanism by setting a value for the key 'smtp-auth'.
+
 ** Help
 
 +++
@@ -899,17 +936,16 @@ based on the current window size.  In previous versions 
of Emacs, this
 was always done (and that could lead to odd displays when resizing the
 window after starting).  This variable defaults to nil.
 
-
 ** Miscellaneous
 
 +++
-*** The user can now customize how \"default\" values are prompted for.
+*** The user can now customize how "default" values are prompted for.
 The new utility function 'format-prompt' has been added which uses the
-new 'minibuffer-default-prompt-format' variable to format \"default\"
+new 'minibuffer-default-prompt-format' user option to format "default"
 prompts.  This means that prompts that look like "Enter a number
 (default 10)" can be customized to look like, for instance, "Enter a
 number [10]", or not have the default displayed at all, like "Enter a
-number".  (This requires that all callers are altered to user
+number".  (This requires that all callers are altered to use
 'format-prompt', though.)
 
 ---
@@ -917,7 +953,7 @@ number".  (This requires that all callers are altered to 
user
 This face is used for error messages from diff.
 
 +++
-*** New global mode 'global-goto-address-mode'
+*** New global mode 'global-goto-address-mode'.
 This will enable 'goto-address-mode' in all buffers.
 
 ---
@@ -968,7 +1004,6 @@ never be narrower than 19 characters.
 When the bookmark.el library is loaded, a customize choice is added
 to 'tab-bar-new-tab-choice' for new tabs to show the bookmark list.
 
-
 ** xwidget-webkit mode
 
 *** New xwidget functions.
@@ -1026,6 +1061,14 @@ The following user options have been renamed:
 
 The old names are now obsolete.
 
+** D-Bus
+
++++
+*** Registered properties can have the new access type ':write'.
+
++++
+*** In case of problems, handlers can emit proper D-Bus error messages now.
+
 
 * New Modes and Packages in Emacs 28.1
 
@@ -1115,12 +1158,12 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el.
 'allout-init', 'bookmark-jump-noselect',
 'bookmark-read-annotation-text-func', 'buffer-menu-mode-hook',
 'c-forward-into-nomenclature', 'char-coding-system-table',
-'char-valid-p', 'charset-bytes', 'charset-id', 'charset-list'
-(function), 'choose-completion-delete-max-match', 'complete-in-turn',
+'char-valid-p', 'charset-bytes', 'charset-id', 'charset-list',
+'choose-completion-delete-max-match', 'complete-in-turn',
 'completion-base-size', 'completion-common-substring',
 'crm-minibuffer-complete', 'crm-minibuffer-complete-and-exit',
 'crm-minibuffer-completion-help', 'custom-mode', 'custom-mode-hook',
-'detect-coding-with-priority', 'dirtrack-debug' (function),
+'detect-coding-with-priority', 'dirtrack-debug',
 'dirtrack-debug-toggle', 'dynamic-completion-table',
 'easy-menu-precalculate-equivalent-keybindings',
 'epa-display-verify-result', 'epg-passphrase-callback-function',
@@ -1140,10 +1183,9 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el.
 'nonascii-translation-table', 'password-read-and-add',
 'pre-abbrev-expand-hook', 'princ-list', 'print-help-return-message',
 'process-filter-multibyte-p', 'read-file-name-predicate',
-'remember-buffer' (function), 'rmail-highlight-face',
-'rmail-message-filter', 'set-coding-priority',
-'set-process-filter-multibyte', 'shadows-compare-text-p',
-'shell-dirtrack-toggle', 't-mouse-mode',
+'remember-buffer', 'rmail-highlight-face', 'rmail-message-filter',
+'set-coding-priority', 'set-process-filter-multibyte',
+'shadows-compare-text-p', 'shell-dirtrack-toggle', 't-mouse-mode',
 'term-dynamic-simple-complete', 'tooltip-hook', 'tpu-have-ispell',
 'url-generate-unique-filename', 'url-temporary-directory',
 'vc-arch-command', 'vc-default-working-revision' (variable),
@@ -1174,12 +1216,6 @@ This function can be used by modes to add elements to the
 'choice' customization type of a variable.
 
 +++
-** 'expand-file-name' no longer omits a trailing slash if the omission
-changes the filename's meaning.  E.g., (expand-file-name "/a/b/.") now
-returns "/a/b/" not "/a/b", which might be misinterpreted as the name
-of a symbolic link rather than of the directory it points to.
-
-+++
 ** New function 'file-modes-number-to-symbolic' to convert a numeric
 file mode specification into symbolic form.
 
@@ -1215,6 +1251,9 @@ equivalent period in seconds.
 +++
 ** The new function 'dom-remove-attribute' has been added.
 
++++
+** The new function 'dom-print' has been added.
+
 ---
 ** 'make-network-process', 'make-serial-process' ':coding' behavior change.
 Previously, passing ':coding nil' to either of these functions would
diff --git a/lib/gnulib.mk.in b/lib/gnulib.mk.in
index f564d50..9953198 100644
--- a/lib/gnulib.mk.in
+++ b/lib/gnulib.mk.in
@@ -442,6 +442,7 @@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
 GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
 GNULIB_STRDUP = @GNULIB_STRDUP@
 GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERRORNAME_NP = @GNULIB_STRERRORNAME_NP@
 GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
 GNULIB_STRFTIME = @GNULIB_STRFTIME@
 GNULIB_STRNCAT = @GNULIB_STRNCAT@
@@ -662,6 +663,7 @@ HAVE_STPCPY = @HAVE_STPCPY@
 HAVE_STPNCPY = @HAVE_STPNCPY@
 HAVE_STRCASESTR = @HAVE_STRCASESTR@
 HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
 HAVE_STRPBRK = @HAVE_STRPBRK@
 HAVE_STRPTIME = @HAVE_STRPTIME@
 HAVE_STRSEP = @HAVE_STRSEP@
@@ -965,6 +967,7 @@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
 REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
 REPLACE_STRDUP = @REPLACE_STRDUP@
 REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
 REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
 REPLACE_STRFTIME = @REPLACE_STRFTIME@
 REPLACE_STRNCAT = @REPLACE_STRNCAT@
@@ -2859,6 +2862,7 @@ string.h: string.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
              -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
              -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+             -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GNULIB_STRERRORNAME_NP)/g' \
              -e 's/@''GNULIB_SIGABBREV_NP''@/$(GNULIB_SIGABBREV_NP)/g' \
              -e 's/@''GNULIB_SIGDESCR_NP''@/$(GNULIB_SIGDESCR_NP)/g' \
              -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
@@ -2883,6 +2887,7 @@ string.h: string.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
              -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
              -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+             -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \
              -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \
              -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \
              -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
@@ -2900,6 +2905,7 @@ string.h: string.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
              -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
              -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+             -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' 
\
              -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
              -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
diff --git a/lib/string.in.h b/lib/string.in.h
index 776133c..9724add 100644
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -1045,6 +1045,30 @@ _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - 
"
 # endif
 #endif
 
+/* Return the name of the system error code ERRNUM.  */
+#if @GNULIB_STRERRORNAME_NP@
+# if @REPLACE_STRERRORNAME_NP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerrorname_np
+#   define strerrorname_np rpl_strerrorname_np
+#  endif
+_GL_FUNCDECL_RPL (strerrorname_np, const char *, (int errnum));
+_GL_CXXALIAS_RPL (strerrorname_np, const char *, (int errnum));
+# else
+#  if !@HAVE_STRERRORNAME_NP@
+_GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum));
+#  endif
+_GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum));
+# endif
+_GL_CXXALIASWARN (strerrorname_np);
+#elif defined GNULIB_POSIXCHECK
+# undef strerrorname_np
+# if HAVE_RAW_DECL_STRERRORNAME_NP
+_GL_WARN_ON_USE (strerrorname_np, "strerrorname_np is unportable - "
+                 "use gnulib module strerrorname_np for portability");
+# endif
+#endif
+
 /* Return an abbreviation string for the signal number SIG.  */
 #if @GNULIB_SIGABBREV_NP@
 # if ! @HAVE_SIGABBREV_NP@
diff --git a/lib/verify.h b/lib/verify.h
index ca2a154..fa1ed71 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -246,13 +246,6 @@ template <int w>
 
 /* @assert.h omit start@  */
 
-#if defined __has_builtin
-/* <https://clang.llvm.org/docs/LanguageExtensions.html#builtin-functions> */
-# define _GL_HAS_BUILTIN_ASSUME __has_builtin (__builtin_assume)
-#else
-# define _GL_HAS_BUILTIN_ASSUME 0
-#endif
-
 #if 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__))
 # define _GL_HAS_BUILTIN_TRAP 1
 #elif defined __has_builtin
@@ -312,36 +305,14 @@ template <int w>
 
    Although assuming R can help a compiler generate better code or
    diagnostics, performance can suffer if R uses hard-to-optimize
-   features such as function calls not inlined by the compiler.  */
-
-/* Use __builtin_assume in preference to __builtin_unreachable, because
-   in clang versions 8.0.x and older, the definition based on
-   __builtin_assume has an effect on optimizations, whereas the definition
-   based on __builtin_unreachable does not.  (GCC so far has only
-   __builtin_unreachable.)  */
-#if _GL_HAS_BUILTIN_ASSUME
-/* Use __builtin_constant_p to help clang's data-flow analysis for the case
-   assume (0).
-   Use a temporary variable, to avoid a clang warning
-   "the argument to '__builtin_assume' has side effects that will be discarded"
-   if R contains invocations of functions not marked as 'const'.
-   The type of the temporary variable can't be __typeof__ (R), because that
-   does not work on bit field expressions.  Use '_Bool' or 'bool' as type
-   instead.  */
-# if defined __cplusplus
-#  define assume(R) \
-     (__builtin_constant_p (R) && !(R) \
-      ? (void) __builtin_unreachable () \
-      : (void) ({ bool _gl_verify_temp = (R); \
-                  __builtin_assume (_gl_verify_temp); }))
-# else
-#  define assume(R) \
-     (__builtin_constant_p (R) && !(R) \
-      ? (void) __builtin_unreachable () \
-      : (void) ({ _Bool _gl_verify_temp = (R); \
-                  __builtin_assume (_gl_verify_temp); }))
-# endif
-#elif _GL_HAS_BUILTIN_UNREACHABLE
+   features such as function calls not inlined by the compiler.
+
+   Avoid Clang's __builtin_assume, as it breaks GNU Emacs master
+   as of 2020-08-23T21:09:49Z!eggert@cs.ucla.edu; see
+   <https://bugs.gnu.org/43152#71>.  It's not known whether this breakage
+   is a Clang bug or an Emacs bug; play it safe for now.  */
+
+#if _GL_HAS_BUILTIN_UNREACHABLE
 # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ())
 #elif 1200 <= _MSC_VER
 # define assume(R) __assume (R)
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index d76c110..dab2774 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -515,9 +515,10 @@ The strings are suitable for assembling into a TZ 
variable."
   (let* ((offsetto (car (cddr (assq 'TZOFFSETTO alist))))
         (offsetfrom (car (cddr (assq 'TZOFFSETFROM alist))))
         (rrule-value (car (cddr (assq 'RRULE alist))))
+         (rdate-p (and (assq 'RDATE alist) t))
         (dtstart (car (cddr (assq 'DTSTART alist))))
-        (no-dst (equal offsetto offsetfrom)))
-    ;; FIXME: for now we only handle RRULE and not RDATE here.
+        (no-dst (or rdate-p (equal offsetto offsetfrom))))
+    ;; FIXME: the presence of an RDATE is assumed to denote the first day of 
the year
     (when (and offsetto dtstart (or rrule-value no-dst))
       (let* ((rrule (icalendar--split-value rrule-value))
             (freq (cadr (assq 'FREQ rrule)))
@@ -561,12 +562,13 @@ The strings are suitable for assembling into a TZ 
variable."
 
 (defun icalendar--parse-vtimezone (alist)
   "Turn a VTIMEZONE ALIST into a cons (ID . TZ-STRING).
+Consider only the most recent date specification.
 Return nil if timezone cannot be parsed."
   (let* ((tz-id (icalendar--convert-string-for-import
                  (icalendar--get-event-property alist 'TZID)))
-        (daylight (cadr (cdar (icalendar--get-children alist 'DAYLIGHT))))
+        (daylight (cadr (cdar (icalendar--get-most-recent-observance alist 
'DAYLIGHT))))
         (day (and daylight (icalendar--convert-tz-offset daylight t)))
-        (standard (cadr (cdar (icalendar--get-children alist 'STANDARD))))
+        (standard (cadr (cdar (icalendar--get-most-recent-observance alist 
'STANDARD))))
         (std (and standard (icalendar--convert-tz-offset standard nil))))
     (if (and tz-id std)
        (cons tz-id
@@ -575,6 +577,28 @@ Return nil if timezone cannot be parsed."
                          "," (cdr day) "," (cdr std))
                (car std))))))
 
+(defun icalendar--get-most-recent-observance (alist sub-comp)
+  "Return the latest observance for SUB-COMP DAYLIGHT or STANDARD.
+ALIST is a VTIMEZONE potentially containing historical records."
+;FIXME?: "most recent" should be relative to a given date
+  (let ((components (icalendar--get-children alist sub-comp)))
+    (list
+     (car
+      (sort components
+            #'(lambda (a b)
+                (let* ((get-recent (lambda (n)
+                                     (car
+                                      (sort
+                                       (delq nil
+                                             (mapcar (lambda (p)
+                                                       (and (memq (car p) 
'(DTSTART RDATE))
+                                                            (car (cddr p))))
+                                                     n))
+                                       'string-greaterp))))
+                       (a-recent (funcall get-recent (car (cddr a))))
+                       (b-recent (funcall get-recent (car (cddr b)))))
+                  (string-greaterp a-recent b-recent))))))))
+
 (defun icalendar--convert-all-timezones (icalendar)
   "Convert all timezones in the ICALENDAR into an alist.
 Each element of the alist is a cons (ID . TZ-STRING),
@@ -594,15 +618,18 @@ ZONE-MAP is a timezone alist as returned by 
`icalendar--convert-all-timezones'."
        (cdr (assoc id zone-map)))))
 
 (defun icalendar--decode-isodatetime (isodatetimestring &optional day-shift
-                                                        zone)
+                                                        source-zone
+                                                        result-zone)
   "Return ISODATETIMESTRING in format like `decode-time'.
 Converts from ISO-8601 to Emacs representation.  If
 ISODATETIMESTRING specifies UTC time (trailing letter Z) the
 decoded time is given in the local time zone!  If optional
 parameter DAY-SHIFT is non-nil the result is shifted by DAY-SHIFT
 days.
-ZONE, if provided, is the timezone, in any format understood by `encode-time'.
-
+SOURCE-ZONE, if provided, is the timezone for decoding the time,
+in any format understood by `encode-time'.
+RESULT-ZONE, if provided, is the timezone for encoding the result
+in any format understood by `decode-time'.
 FIXME: multiple comma-separated values should be allowed!"
   (icalendar--dmsg isodatetimestring)
   (if isodatetimestring
@@ -624,7 +651,10 @@ FIXME: multiple comma-separated values should be allowed!"
         (when (and (> (length isodatetimestring) 15)
                    ;; UTC specifier present
                    (char-equal ?Z (aref isodatetimestring 15)))
-          (setq zone t))
+          (setq source-zone t
+                ;; decode to local time unless result-zone is explicitly given,
+                ;; i.e. do not decode to UTC, i.e. do not (setq result-zone t)
+                ))
         ;; shift if necessary
         (if day-shift
             (let ((mdy (calendar-gregorian-from-absolute
@@ -637,9 +667,9 @@ FIXME: multiple comma-separated values should be allowed!"
         ;; create the decoded date-time
         ;; FIXME!?!
        (let ((decoded-time (list second minute hour day month year
-                                 nil -1 zone)))
+                                 nil -1 source-zone)))
          (condition-case nil
-             (decode-time (encode-time decoded-time))
+             (decode-time (encode-time decoded-time) result-zone)
            (error
             (message "Cannot decode \"%s\"" isodatetimestring)
             ;; Hope for the best....
@@ -685,9 +715,9 @@ FIXME: multiple comma-separated values should be allowed!"
               (setq days (1- days))))
            ((match-beginning 4)         ;days and time
             (if (match-beginning 5)
-                (setq days (* 7 (read (substring isodurationstring
-                                                 (match-beginning 6)
-                                                 (match-end 6))))))
+                (setq days (read (substring isodurationstring
+                                            (match-beginning 6)
+                                            (match-end 6)))))
             (if (match-beginning 7)
                 (setq hours (read (substring isodurationstring
                                              (match-beginning 8)
diff --git a/lisp/comint.el b/lisp/comint.el
index be0e32b..b4ea232 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -2423,11 +2423,13 @@ Security bug: your string can still be temporarily 
recovered with
 (defun comint-watch-for-password-prompt (string)
   "Prompt in the minibuffer for password and send without echoing.
 Looks for a match to `comint-password-prompt-regexp' in order
-to detect the need to (prompt and) send a password.
+to detect the need to (prompt and) send a password.  Ignores any
+carriage returns (\\r) in STRING.
 
 This function could be in the list `comint-output-filter-functions'."
   (when (let ((case-fold-search t))
-         (string-match comint-password-prompt-regexp string))
+         (string-match comint-password-prompt-regexp
+                        (replace-regexp-in-string "\r" "" string)))
     (when (string-match "^[ \n\r\t\v\f\b\a]+" string)
       (setq string (replace-match "" t t string)))
     (let ((comint--prompt-recursion-depth (1+ comint--prompt-recursion-depth)))
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 23ceb3a..7153ba4 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -2685,7 +2685,7 @@ try matching its doc string against 
`custom-guess-doc-alist'."
                    :sample-face (if obsolete
                                     'custom-variable-obsolete
                                   'custom-variable-tag)
-                   tag)
+                   :tag tag)
                   buttons)
             (push (widget-create-child-and-convert
                    widget type
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index b0decfe..dc463e0 100644
--- a/lisp/cus-theme.el
+++ b/lisp/cus-theme.el
@@ -419,14 +419,13 @@ It includes all variables in list VARS."
                            (widget-value child)
                          ;; Child is null if the widget is closed (hidden).
                          (car (widget-get widget :shown-value)))))
-           (when (boundp symbol)
-             (unless (bolp)
-               (princ "\n"))
-             (princ " '(")
-             (prin1 symbol)
-             (princ " ")
-             (prin1 (custom-quote value))
-             (princ ")")))))
+           (unless (bolp)
+             (princ "\n"))
+           (princ " '(")
+           (prin1 symbol)
+           (princ " ")
+           (prin1 (custom-quote value))
+           (princ ")"))))
       (if (bolp)
          (princ " "))
       (princ ")")
@@ -454,7 +453,7 @@ It includes all faces in list FACES."
                   ;; Child is null if the widget is closed (hidden).
                   ((widget-get widget :shown-value))
                   (t (custom-face-get-current-spec symbol)))))
-           (when (and (facep symbol) value)
+           (when value
              (princ (if (bolp) " '(" "\n '("))
              (prin1 symbol)
              (princ " ")
diff --git a/lisp/custom.el b/lisp/custom.el
index 7581457..cc445fe 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -907,7 +907,15 @@ See `custom-known-themes' for a list of known themes."
                     (boundp symbol))
            (let ((sv  (get symbol 'standard-value))
                  (val (symbol-value symbol)))
-             (unless (and sv (equal (eval (car sv)) val))
+             (unless (or
+                       ;; We only do this trick if the current value
+                       ;; is different from the standard value.
+                       (and sv (equal (eval (car sv)) val))
+                       ;; And we don't do it if we would end up recording
+                       ;; the same value for the user theme.  This way we avoid
+                       ;; having ((user VALUE) (changed VALUE)).  That would be
+                       ;; useless, because we don't disable the user theme.
+                       (and (eq theme 'user) (equal (custom-quote val) value)))
                (setq old `((changed ,(custom-quote val))))))))
        (put symbol prop (cons (list theme value) old)))
       (put theme 'theme-settings
@@ -1368,13 +1376,14 @@ function runs.  To disable other themes, use 
`disable-theme'."
                       obarray (lambda (sym) (get sym 'theme-settings)) t))))
   (unless (custom-theme-p theme)
     (error "Undefined Custom theme %s" theme))
-  (let ((settings (get theme 'theme-settings)))
+  (let ((settings (get theme 'theme-settings)) ; '(prop symbol theme value)
+        ;; We are enabling the theme, so don't inhibit enabling it.  
(Bug#34027)
+        (custom--inhibit-theme-enable nil))
     ;; Loop through theme settings, recalculating vars/faces.
     (dolist (s settings)
       (let* ((prop (car s))
-            (symbol (cadr s))
-            (spec-list (get symbol prop)))
-       (put symbol prop (cons (cddr s) (assq-delete-all theme spec-list)))
+            (symbol (cadr s)))
+        (custom-push-theme prop symbol theme 'set (nth 3 s))
        (cond
         ((eq prop 'theme-face)
          (custom-theme-recalc-face symbol))
@@ -1443,7 +1452,7 @@ See `custom-enabled-themes' for a list of enabled themes."
        (let* ((prop   (car s))
               (symbol (cadr s))
               (val (assq-delete-all theme (get symbol prop))))
-         (put symbol prop val)
+          (custom-push-theme prop symbol theme 'reset)
          (cond
           ((eq prop 'theme-value)
            (custom-theme-recalc-variable symbol))
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index ab13b3e..82f4455 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1549,17 +1549,13 @@ files matching `dired-omit-regexp'."
 
 ;;;###autoload
 (defun dired-remove-file (file)
+  "Remove entry FILE on each dired buffer.
+Note this doesn't delete FILE in the file system.
+See `dired-delete-file' in case you wish that."
   (dired-fun-in-all-buffers
    (file-name-directory file) (file-name-nondirectory file)
    #'dired-remove-entry file))
 
-(defun dired-remove-entry (file)
-  (save-excursion
-    (and (dired-goto-file file)
-        (let (buffer-read-only)
-          (delete-region (progn (beginning-of-line) (point))
-                         (line-beginning-position 2))))))
-
 ;;;###autoload
 (defun dired-relist-file (file)
   "Create or update the line for FILE in all Dired buffers it would belong in."
@@ -1676,6 +1672,9 @@ rename them using `vc-rename-file'."
 
 ;;;###autoload
 (defun dired-rename-file (file newname ok-if-already-exists)
+  "Rename FILE to NEWNAME.
+Signal a `file-already-exists' error if a file NEWNAME already exists
+unless OK-IF-ALREADY-EXISTS is non-nil."
   (dired-handle-overwrite newname)
   (dired-maybe-create-dirs (file-name-directory newname))
   (if (and dired-vc-rename-file
@@ -1690,7 +1689,8 @@ rename them using `vc-rename-file'."
         (set-visited-file-name newname nil t)))
   (dired-remove-file file)
   ;; See if it's an inserted subdir, and rename that, too.
-  (dired-rename-subdir file newname))
+  (when (file-directory-p file)
+    (dired-rename-subdir file newname)))
 
 (defun dired-rename-subdir (from-dir to-dir)
   (setq from-dir (file-name-as-directory from-dir)
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index 873d586..05c5a70 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -137,6 +137,7 @@ folding to be used on case-insensitive filesystems only."
       (file-name-case-insensitive-p dir)
     dired-omit-case-fold))
 
+;;;###autoload
 (define-minor-mode dired-omit-mode
   "Toggle omission of uninteresting files in Dired (Dired-Omit mode).
 
diff --git a/lisp/dired.el b/lisp/dired.el
index d122869..e4bc4de 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -2908,12 +2908,12 @@ You can then feed the file name(s) to other commands 
with \\[yank]."
 ;; Keeping Dired buffers in sync with the filesystem and with each other
 
 (defun dired-buffers-for-dir (dir &optional file)
-;; Return a list of buffers for DIR (top level or in-situ subdir).
-;; If FILE is non-nil, include only those whose wildcard pattern (if any)
-;; matches FILE.
-;; The list is in reverse order of buffer creation, most recent last.
-;; As a side effect, killed dired buffers for DIR are removed from
-;; dired-buffers.
+  "Return a list of buffers for DIR (top level or in-situ subdir).
+If FILE is non-nil, include only those whose wildcard pattern (if any)
+matches FILE.
+The list is in reverse order of buffer creation, most recent last.
+As a side effect, killed dired buffers for DIR are removed from
+dired-buffers."
   (setq dir (file-name-as-directory dir))
   (let (result buf)
     (dolist (elt dired-buffers)
@@ -3462,18 +3462,28 @@ Return list of buffers where FUN succeeded (i.e., 
returned non-nil)."
   (let (success-list)
     (dolist (buf (dired-buffers-for-dir (expand-file-name directory) file))
       (with-current-buffer buf
-       (if (apply fun args)
-           (push buf success-list))))
+       (when (apply fun args)
+         (push (buffer-name buf) success-list))))
     ;; FIXME: AFAICT, this return value is not used by any of the callers!
     success-list))
 
 ;; Delete the entry for FILE from
-(defun dired-delete-entry (file)
+(defun dired-remove-entry (file)
+  "Remove entry FILE in the current dired buffer.
+Note this doesn't delete FILE in the file system.
+See `dired-delete-file' in case you wish that."
   (save-excursion
     (and (dired-goto-file file)
         (let ((inhibit-read-only t))
           (delete-region (progn (beginning-of-line) (point))
-                         (save-excursion (forward-line 1) (point))))))
+                         (line-beginning-position 2))))))
+
+(defun dired-delete-entry (file)
+  "Remove entry FILE in the current dired buffer.
+Like `dired-remove-entry' followed by `dired-clean-up-after-deletion'.
+Note this doesn't delete FILE in the file system.
+See `dired-delete-file' in case you wish that."
+  (dired-remove-entry file)
   (dired-clean-up-after-deletion file))
 
 (defvar dired-clean-up-buffers-too)
diff --git a/lisp/dom.el b/lisp/dom.el
index 7ff9e07..bf4a56a 100644
--- a/lisp/dom.el
+++ b/lisp/dom.el
@@ -269,6 +269,50 @@ white-space."
              (insert ")")
            (insert "\n" (make-string (1+ column) ? ))))))))
 
+(defun dom-print (dom &optional pretty xml)
+  "Print DOM at point as HTML/XML.
+If PRETTY, indent the HTML/XML logically.
+If XML, generate XML instead of HTML."
+  (let ((column (current-column)))
+    (insert (format "<%s" (dom-tag dom)))
+    (let ((attr (dom-attributes dom)))
+      (dolist (elem attr)
+       ;; In HTML, these are boolean attributes that should not have
+       ;; an = value.
+       (if (and (memq (car elem)
+                      '(async autofocus autoplay checked
+                              contenteditable controls default
+                              defer disabled formNoValidate frameborder
+                              hidden ismap itemscope loop
+                              multiple muted nomodule novalidate open
+                              readonly required reversed
+                              scoped selected typemustmatch))
+                (cdr elem)
+                (not xml))
+           (insert (format " %s" (car elem)))
+         (insert (format " %s=%S" (car elem) (cdr elem))))))
+    (let* ((children (dom-children dom))
+          (non-text nil))
+      (if (null children)
+         (insert " />")
+       (insert ">")
+        (dolist (child children)
+         (if (stringp child)
+             (insert child)
+           (setq non-text t)
+           (when pretty
+              (insert "\n" (make-string (+ column 2) ? )))
+           (dom-print child pretty xml)))
+       ;; If we inserted non-text child nodes, or a text node that
+       ;; ends with a newline, then we indent the end tag.
+        (when (and pretty
+                  (or (bolp)
+                      non-text))
+         (unless (bolp)
+            (insert "\n"))
+         (insert (make-string column ? )))
+        (insert (format "</%s>" (dom-tag dom)))))))
+
 (provide 'dom)
 
 ;;; dom.el ends here
diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index 4825b5c..772c907 100644
--- a/lisp/emacs-lisp/eldoc.el
+++ b/lisp/emacs-lisp/eldoc.el
@@ -5,7 +5,7 @@
 ;; Author: Noah Friedman <friedman@splode.com>
 ;; Keywords: extensions
 ;; Created: 1995-10-06
-;; Version: 1.8.0
+;; Version: 1.10.0
 ;; Package-Requires: ((emacs "26.3"))
 
 ;; This is a GNU ELPA :core package.  Avoid functionality that is not
@@ -573,7 +573,8 @@ Meant as a value for `eldoc-documentation-strategy'."
                       (let* ((callback (eldoc--make-callback :enthusiast))
                              (str (funcall f callback)))
                         (if (stringp str) (funcall callback str))
-                        nil))))
+                        nil)))
+  t)
 
 ;; JT@2020-07-10: ElDoc is pre-loaded, so in Emacs < 28 we can't
 ;; make the "old" `eldoc-documentation-function' point to the new
@@ -739,14 +740,14 @@ should endeavour to display the docstrings eventually 
produced."
                  (when (and string (cl-loop for (p) in docs-registered
                                             never (< p pos)))
                    (setq docs-registered '())
-                   (register-doc pos string plist)
-                   (when (and (timerp eldoc--enthusiasm-curbing-timer)
-                              (memq eldoc--enthusiasm-curbing-timer
-                                    timer-list))
-                     (cancel-timer eldoc--enthusiasm-curbing-timer))
-                   (setq eldoc--enthusiasm-curbing-timer
-                         (run-at-time (unless (zerop pos) 0.3)
-                                      nil #'display-doc)))
+                   (register-doc pos string plist))
+                 (when (and (timerp eldoc--enthusiasm-curbing-timer)
+                            (memq eldoc--enthusiasm-curbing-timer
+                                  timer-list))
+                   (cancel-timer eldoc--enthusiasm-curbing-timer))
+                 (setq eldoc--enthusiasm-curbing-timer
+                       (run-at-time (unless (zerop pos) 0.3)
+                                    nil #'display-doc))
                  t))
               (:patient
                (cl-incf want)
diff --git a/lisp/emacs-lisp/warnings.el b/lisp/emacs-lisp/warnings.el
index b1fd6ed..3a568cb 100644
--- a/lisp/emacs-lisp/warnings.el
+++ b/lisp/emacs-lisp/warnings.el
@@ -200,6 +200,21 @@ SUPPRESS-LIST is the list of kinds of warnings to 
suppress."
     ;; we return t.
     some-match))
 
+(define-button-type 'warning-suppress-warning
+  'action #'warning-suppress-action
+  'help-echo "mouse-2, RET: Don't display this warning automatically")
+(defun warning-suppress-action (button)
+  (customize-save-variable 'warning-suppress-types
+                           (cons (list (button-get button 'warning-type))
+                                 warning-suppress-types)))
+(define-button-type 'warning-suppress-log-warning
+  'action #'warning-suppress-log-action
+  'help-echo "mouse-2, RET: Don't log this warning")
+(defun warning-suppress-log-action (button)
+  (customize-save-variable 'warning-suppress-log-types
+                           (cons (list (button-get button 'warning-type))
+                                 warning-suppress-types)))
+
 ;;;###autoload
 (defun display-warning (type message &optional level buffer-name)
   "Display a warning message, MESSAGE.
@@ -227,7 +242,12 @@ See the `warnings' custom group for user customization 
features.
 
 See also `warning-series', `warning-prefix-function',
 `warning-fill-prefix', and `warning-fill-column' for additional
-programming features."
+programming features.
+
+This will also display buttons allowing the user to permanently
+disable automatic display of the warning or disable the warning
+entirely by setting `warning-suppress-types' or
+`warning-suppress-log-types' on their behalf."
   (if (not (or after-init-time noninteractive (daemonp)))
       ;; Ensure warnings that happen early in the startup sequence
       ;; are visible when startup completes (bug#20792).
@@ -272,6 +292,14 @@ programming features."
              (insert (format (nth 1 level-info)
                              (format warning-type-format typename))
                      message)
+              (insert " ")
+              (insert-button "Disable showing"
+                             'type 'warning-suppress-warning
+                             'warning-type type)
+              (insert " ")
+              (insert-button "Disable logging"
+                             'type 'warning-suppress-log-warning
+                             'warning-type type)
               (funcall newline)
              (when (and warning-fill-prefix (not (string-match "\n" message)))
                (let ((fill-prefix warning-fill-prefix)
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index 8799007..ecdfd28 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -72,51 +72,43 @@
 
 (defcustom eshell-mode-unload-hook nil
   "A hook that gets run when `eshell-mode' is unloaded."
-  :type 'hook
-  :group 'eshell-mode)
+  :type 'hook)
 
 (defcustom eshell-mode-hook nil
   "A hook that gets run when `eshell-mode' is entered."
-  :type 'hook
-  :group 'eshell-mode)
+  :type 'hook)
 
 (defcustom eshell-first-time-mode-hook nil
   "A hook that gets run the first time `eshell-mode' is entered.
 That is to say, the first time during an Emacs session."
-  :type 'hook
-  :group 'eshell-mode)
+  :type 'hook)
 
 (defcustom eshell-exit-hook nil
   "A hook that is run whenever `eshell' is exited.
 This hook is only run if exiting actually kills the buffer."
   :version "24.1"                       ; removed eshell-query-kill-processes
-  :type 'hook
-  :group 'eshell-mode)
+  :type 'hook)
 
 (defcustom eshell-kill-on-exit t
   "If non-nil, kill the Eshell buffer on the `exit' command.
 Otherwise, the buffer will simply be buried."
-  :type 'boolean
-  :group 'eshell-mode)
+  :type 'boolean)
 
 (defcustom eshell-input-filter-functions nil
   "Functions to call before input is processed.
 The input is contained in the region from `eshell-last-input-start' to
 `eshell-last-input-end'."
-  :type 'hook
-  :group 'eshell-mode)
+  :type 'hook)
 
 (defcustom eshell-send-direct-to-subprocesses nil
   "If t, send any input immediately to a subprocess."
-  :type 'boolean
-  :group 'eshell-mode)
+  :type 'boolean)
 
 (defcustom eshell-expand-input-functions nil
   "Functions to call before input is parsed.
 Each function is passed two arguments, which bounds the region of the
 current input text."
-  :type 'hook
-  :group 'eshell-mode)
+  :type 'hook)
 
 (defcustom eshell-scroll-to-bottom-on-input nil
   "Controls whether input to interpreter causes window to scroll.
@@ -126,8 +118,7 @@ buffer.  If `this', scroll only the selected window.
 See `eshell-preinput-scroll-to-bottom'."
   :type '(radio (const :tag "Do not scroll Eshell windows" nil)
                (const :tag "Scroll all windows showing the buffer" all)
-               (const :tag "Scroll only the selected window" this))
-  :group 'eshell-mode)
+                (const :tag "Scroll only the selected window" this)))
 
 (defcustom eshell-scroll-to-bottom-on-output nil
   "Controls whether interpreter output causes window to scroll.
@@ -140,8 +131,7 @@ See variable `eshell-scroll-show-maximum-output' and 
function
   :type '(radio (const :tag "Do not scroll Eshell windows" nil)
                (const :tag "Scroll all windows showing the buffer" all)
                (const :tag "Scroll only the selected window" this)
-               (const :tag "Scroll all windows other than selected" others))
-  :group 'eshell-mode)
+                (const :tag "Scroll all windows other than selected" others)))
 
 (defcustom eshell-scroll-show-maximum-output t
   "Controls how interpreter output causes window to scroll.
@@ -149,16 +139,14 @@ If non-nil, then show the maximum output when the window 
is scrolled.
 
 See variable `eshell-scroll-to-bottom-on-output' and function
 `eshell-postoutput-scroll-to-bottom'."
-  :type 'boolean
-  :group 'eshell-mode)
+  :type 'boolean)
 
 (defcustom eshell-buffer-maximum-lines 1024
   "The maximum size in lines for eshell buffers.
 Eshell buffers are truncated from the top to be no greater than this
 number, if the function `eshell-truncate-buffer' is on
 `eshell-output-filter-functions'."
-  :type 'integer
-  :group 'eshell-mode)
+  :type 'integer)
 
 (defcustom eshell-output-filter-functions
   '(eshell-postoutput-scroll-to-bottom
@@ -168,36 +156,31 @@ number, if the function `eshell-truncate-buffer' is on
   "Functions to call before output is displayed.
 These functions are only called for output that is displayed
 interactively, and not for output which is redirected."
-  :type 'hook
-  :group 'eshell-mode)
+  :type 'hook)
 
 (defcustom eshell-preoutput-filter-functions nil
   "Functions to call before output is inserted into the buffer.
 These functions get one argument, a string containing the text to be
 inserted.  They return the string as it should be inserted."
-  :type 'hook
-  :group 'eshell-mode)
+  :type 'hook)
 
 (defcustom eshell-password-prompt-regexp
   (format "\\(%s\\)[^::៖]*[::៖]\\s *\\'" (regexp-opt 
password-word-equivalents))
   "Regexp matching prompts for passwords in the inferior process.
 This is used by `eshell-watch-for-password-prompt'."
   :type 'regexp
-  :version "27.1"
-  :group 'eshell-mode)
+  :version "27.1")
 
 (defcustom eshell-skip-prompt-function nil
   "A function called from beginning of line to skip the prompt."
-  :type '(choice (const nil) function)
-  :group 'eshell-mode)
+  :type '(choice (const nil) function))
 
 (define-obsolete-variable-alias 'eshell-status-in-modeline
   'eshell-status-in-mode-line "24.3")
 
 (defcustom eshell-status-in-mode-line t
   "If non-nil, let the user know a command is running in the mode line."
-  :type 'boolean
-  :group 'eshell-mode)
+  :type 'boolean)
 
 (defcustom eshell-directory-name
   (locate-user-emacs-file "eshell/" ".eshell/")
@@ -329,6 +312,8 @@ and the hook `eshell-exit-hook'."
       (if mode-line-elt
          (setcar mode-line-elt 'eshell-command-running-string))))
 
+  (set (make-local-variable 'bookmark-make-record-function)
+       'eshell-bookmark-make-record)
   (setq local-abbrev-table eshell-mode-abbrev-table)
 
   (set (make-local-variable 'list-buffers-directory)
@@ -1015,5 +1000,28 @@ This function could be in the list 
`eshell-output-filter-functions'."
 (custom-add-option 'eshell-output-filter-functions
                   'eshell-handle-ansi-color)
 
+;;; Bookmark support:
+
+(declare-function bookmark-make-record-default
+                  "bookmark" (&optional no-file no-context posn))
+(declare-function bookmark-prop-get "bookmark" (bookmark prop))
+
+(defun eshell-bookmark-name ()
+  (format "eshell-%s"
+          (file-name-nondirectory
+           (directory-file-name
+            (file-name-directory default-directory)))))
+
+(defun eshell-bookmark-make-record ()
+  "Create a bookmark for the current Eshell buffer."
+  `(,(eshell-bookmark-name)
+    (location . ,default-directory)
+    (handler . eshell-bookmark-jump)))
+
+(defun eshell-bookmark-jump (bookmark)
+  "Default bookmark handler for Eshell buffers."
+  (let ((default-directory (bookmark-prop-get bookmark 'location)))
+    (eshell)))
+
 (provide 'esh-mode)
 ;;; esh-mode.el ends here
diff --git a/lisp/files.el b/lisp/files.el
index ab93104..bc590d3 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -5577,7 +5577,7 @@ change the additional actions you can take on files."
                                     (concat "\\<"
                                             (regexp-quote
                                              (file-name-nondirectory
-                                              buffer-file-name))
+                                              (buffer-file-name buffer)))
                                             "<[^>]*>\\'")
                                     (buffer-name buffer)))
                                   ;; The buffer name is similar to the
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index 88873f4..03e447e 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -3934,7 +3934,7 @@ If REREAD is not nil, downloaded articles are marked as 
unread."
                   (mm-with-unibyte-buffer
                     (nnheader-insert-file-contents file)
                     (nnheader-remove-body)
-                    (setq header (nnheader-parse-naked-head)))
+                    (setq header (nnheader-parse-head t)))
                   (setf (mail-header-number header) (car downloaded))
                   (if nov-arts
                       (let ((key (concat "^" (int-to-string (car nov-arts))
diff --git a/lisp/gnus/gnus-cache.el b/lisp/gnus/gnus-cache.el
index 02a8ea7..7ca3bf1 100644
--- a/lisp/gnus/gnus-cache.el
+++ b/lisp/gnus/gnus-cache.el
@@ -186,7 +186,7 @@ it's not cached."
                (gnus-cache-update-file-total-fetched-for group file))
              (setq lines-chars (nnheader-get-lines-and-char))
              (nnheader-remove-body)
-             (setq headers (nnheader-parse-naked-head))
+             (setq headers (nnheader-parse-head t))
              (setf (mail-header-number headers) number)
              (setf (mail-header-lines headers) (car lines-chars))
              (setf (mail-header-chars headers) (cadr lines-chars))
diff --git a/lisp/gnus/gnus-cloud.el b/lisp/gnus/gnus-cloud.el
index 673a4d2..e40b2eb 100644
--- a/lisp/gnus/gnus-cloud.el
+++ b/lisp/gnus/gnus-cloud.el
@@ -391,6 +391,8 @@ When FULL is t, upload everything, not just a difference 
from the last full."
             (gnus-group-refresh-group group))
         (gnus-error 2 "Failed to upload Gnus Cloud data to %s" group)))))
 
+(defvar gnus-alter-header-function)
+
 (defun gnus-cloud-add-timestamps (elems)
   (dolist (elem elems)
     (let* ((file-name (plist-get elem :file-name))
@@ -409,9 +411,11 @@ When FULL is t, upload everything, not just a difference 
from the last full."
     (when (gnus-retrieve-headers (gnus-uncompress-range active) group)
       (with-current-buffer nntp-server-buffer
         (goto-char (point-min))
-        (while (and (not (eobp))
-                    (setq head (nnheader-parse-head)))
-          (push head headers))))
+       (while (setq head (nnheader-parse-head))
+          (when gnus-alter-header-function
+            (funcall gnus-alter-header-function head))
+          (push head headers))
+       ))
     (sort (nreverse headers)
           (lambda (h1 h2)
             (> (gnus-cloud-chunk-sequence (mail-header-subject h1))
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index d613bc8..ad6e0e3 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -49,8 +49,6 @@
 (autoload 'gnus-agent-total-fetched-for "gnus-agent")
 (autoload 'gnus-cache-total-fetched-for "gnus-cache")
 
-(autoload 'gnus-group-make-nnir-group "nnir")
-
 (autoload 'gnus-cloud-upload-all-data "gnus-cloud")
 (autoload 'gnus-cloud-download-all-data "gnus-cloud")
 
@@ -663,7 +661,8 @@ simple manner."
   "D" gnus-group-enter-directory
   "f" gnus-group-make-doc-group
   "w" gnus-group-make-web-group
-  "G" gnus-group-make-nnir-group
+  "G" gnus-group-read-ephemeral-search-group
+  "g" gnus-group-make-search-group
   "M" gnus-group-read-ephemeral-group
   "r" gnus-group-rename-group
   "R" gnus-group-make-rss-group
@@ -909,7 +908,8 @@ simple manner."
        ["Add the help group" gnus-group-make-help-group t]
        ["Make a doc group..." gnus-group-make-doc-group t]
        ["Make a web group..." gnus-group-make-web-group t]
-       ["Make a search group..." gnus-group-make-nnir-group t]
+       ["Read a search group..." gnus-group-read-ephemeral-search-group t]
+       ["Make a search group..." gnus-group-make-search-group t]
        ["Make a virtual group..." gnus-group-make-empty-virtual t]
        ["Add a group to a virtual..." gnus-group-add-to-virtual t]
        ["Make an ephemeral group..." gnus-group-read-ephemeral-group t]
@@ -2411,7 +2411,8 @@ the bug number, and browsing the URL must return mbox 
output."
   (require 'bug-reference)
   (let ((def (cond ((thing-at-point-looking-at bug-reference-bug-regexp 500)
                     (match-string 2))
-                   ((number-at-point)))))
+                   ((and (number-at-point)
+                         (abs (number-at-point)))))))
     ;; Pass DEF as the value of COLLECTION instead of DEF because:
     ;; a) null input should not cause DEF to be returned and
     ;; b) TAB and M-n still work this way.
@@ -3165,6 +3166,52 @@ mail messages or news articles in files that have 
numeric names."
      (gnus-group-real-name group)
      (list 'nndir (gnus-group-real-name group) (list 'nndir-directory dir)))))
 
+
+(autoload 'nnir-make-specs "nnir")
+(autoload 'gnus-group-topic-name "gnus-topic")
+
+;; Temporary to make group creation easier
+(defun gnus-group-make-search-group (nnir-extra-parms &optional specs)
+  (interactive "P")
+  (let ((name (gnus-read-group "Group name: ")))
+    (with-current-buffer gnus-group-buffer
+      (gnus-group-make-group
+       name
+       (list 'nnselect "nnselect")
+       nil
+       (list
+       (cons 'nnselect-specs
+             (list
+              (cons 'nnselect-function 'nnir-run-query)
+              (cons 'nnselect-args
+                    (nnir-make-specs nnir-extra-parms specs)))))))))
+
+(defun gnus-group-read-ephemeral-search-group (nnir-extra-parms        
&optional specs)
+  "Create an nnselect group based on a search.  Prompt for a
+search query and determine the groups to search as follows: if
+called from the *Server* buffer search all groups belonging to
+the server on the current line; if called from the *Group* buffer
+search any marked groups, or the group on the current line, or
+all the groups under the current topic. Calling with a prefix-arg
+prompts for additional search-engine specific constraints. A
+non-nil `specs' arg must be an alist with `nnir-query-spec' and
+`nnir-group-spec' keys, and skips all prompting."
+  (interactive "P")
+  (gnus-group-read-ephemeral-group
+   (concat "nnselect-" (message-unique-id))
+   (list 'nnselect "nnselect")
+   nil
+   (cons (current-buffer) gnus-current-window-configuration)
+                                       ;     nil
+   nil nil
+   (list
+    (cons 'nnselect-specs
+         (list
+          (cons 'nnselect-function 'nnir-run-query)
+          (cons 'nnselect-args
+                (nnir-make-specs nnir-extra-parms specs))))
+    (cons 'nnselect-artlist nil))))
+
 (defun gnus-group-add-to-virtual (n vgroup)
   "Add the current group to a virtual group."
   (interactive
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index e770abc..7bc7fb5 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -393,10 +393,9 @@ only affect the Gcc copy, but not the original message."
      (gnus-inews-make-draft-meta-information
       ,gnus-newsgroup-name ',articles)))
 
-(autoload 'nnir-article-number "nnir" nil nil 'macro)
-(autoload 'nnir-article-group "nnir" nil nil 'macro)
-(autoload 'gnus-nnir-group-p "nnir")
-
+(autoload 'nnselect-article-number "nnselect" nil nil 'macro)
+(autoload 'nnselect-article-group "nnselect" nil nil 'macro)
+(autoload 'gnus-nnselect-group-p "nnselect")
 
 (defvar gnus-article-reply nil)
 (defmacro gnus-setup-message (config &rest forms)
@@ -404,22 +403,24 @@ only affect the Gcc copy, but not the original message."
        (winconf-name (make-symbol "gnus-setup-message-winconf-name"))
        (buffer (make-symbol "gnus-setup-message-buffer"))
        (article (make-symbol "gnus-setup-message-article"))
+       (oarticle (make-symbol "gnus-setup-message-oarticle"))
        (yanked (make-symbol "gnus-setup-yanked-articles"))
        (group (make-symbol "gnus-setup-message-group")))
     `(let ((,winconf (current-window-configuration))
           (,winconf-name gnus-current-window-configuration)
           (,buffer (buffer-name (current-buffer)))
-          (,article (if (and (gnus-nnir-group-p gnus-newsgroup-name)
-                             gnus-article-reply)
-                        (nnir-article-number (or (car-safe gnus-article-reply)
-                                                 gnus-article-reply))
-                      gnus-article-reply))
+          (,article   (when gnus-article-reply
+                        (or (nnselect-article-number
+                             (or (car-safe gnus-article-reply)
+                                 gnus-article-reply))
+                            gnus-article-reply)))
+          (,oarticle gnus-article-reply)
           (,yanked gnus-article-yanked-articles)
-          (,group (if (and (gnus-nnir-group-p gnus-newsgroup-name)
-                           gnus-article-reply)
-                      (nnir-article-group (or (car-safe gnus-article-reply)
-                                              gnus-article-reply))
-                    gnus-newsgroup-name))
+          (,group (when gnus-article-reply
+                    (or (nnselect-article-group
+                         (or (car-safe gnus-article-reply)
+                             gnus-article-reply))
+                        gnus-newsgroup-name)))
           (message-header-setup-hook
            (copy-sequence message-header-setup-hook))
           (mbl mml-buffer-list)
@@ -460,24 +461,23 @@ only affect the Gcc copy, but not the original message."
        (unwind-protect
           (progn
             ,@forms)
-        (gnus-inews-add-send-actions ,winconf ,buffer ,article ,config
+        (gnus-inews-add-send-actions ,winconf ,buffer ,oarticle ,config
                                      ,yanked ,winconf-name)
         (setq gnus-message-buffer (current-buffer))
         (set (make-local-variable 'gnus-message-group-art)
              (cons ,group ,article))
-        (set (make-local-variable 'gnus-newsgroup-name) ,group)
-        ;; Enable highlighting of different citation levels
-        (when gnus-message-highlight-citation
-          (gnus-message-citation-mode 1))
-        (gnus-run-hooks 'gnus-message-setup-hook)
-        (if (eq major-mode 'message-mode)
-            (let ((mbl1 mml-buffer-list))
-              (setq mml-buffer-list mbl)  ;; Global value
-              (set (make-local-variable 'mml-buffer-list) mbl1);; Local value
-              (add-hook 'change-major-mode-hook 'mml-destroy-buffers nil t)
-              (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))
-          (mml-destroy-buffers)
-          (setq mml-buffer-list mbl)))
+         ;; Enable highlighting of different citation levels
+         (when gnus-message-highlight-citation
+           (gnus-message-citation-mode 1))
+         (gnus-run-hooks 'gnus-message-setup-hook)
+         (if (eq major-mode 'message-mode)
+             (let ((mbl1 mml-buffer-list))
+               (setq mml-buffer-list mbl)  ;; Global value
+               (set (make-local-variable 'mml-buffer-list) mbl1);; Local value
+               (add-hook 'change-major-mode-hook 'mml-destroy-buffers nil t)
+               (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))
+           (mml-destroy-buffers)
+           (setq mml-buffer-list mbl)))
        (message-hide-headers)
        (gnus-add-buffer)
        (gnus-configure-windows ,config t)
@@ -521,12 +521,10 @@ instead."
          mail-buf)
       (unwind-protect
          (progn
-           (setq gnus-newsgroup-name "")
+           (let ((gnus-newsgroup-name ""))
            (gnus-setup-message 'message
              (message-mail to subject other-headers continue
-                           nil yank-action send-actions return-action)))
-       (with-current-buffer buf
-         (setq gnus-newsgroup-name group-name)))
+                           nil yank-action send-actions return-action)))))
       (when switch-action
        (setq mail-buf (current-buffer))
        (switch-to-buffer buf)
@@ -617,18 +615,15 @@ If ARG is 1, prompt for a group name to find the posting 
style."
        (buffer (current-buffer)))
     (unwind-protect
        (progn
-         (setq gnus-newsgroup-name
-               (if arg
-                   (if (= 1 (prefix-numeric-value arg))
-                       (gnus-group-completing-read
-                        "Use posting style of group"
-                        nil (gnus-read-active-file-p))
-                     (gnus-group-group-name))
-                 ""))
-         ;; #### see comment in gnus-setup-message -- drv
-         (gnus-setup-message 'message (message-mail)))
-      (with-current-buffer buffer
-       (setq gnus-newsgroup-name group)))))
+         (let ((gnus-newsgroup-name
+                (if arg
+                    (if (= 1 (prefix-numeric-value arg))
+                        (gnus-group-completing-read
+                         "Use posting style of group"
+                         nil (gnus-read-active-file-p))
+                      (gnus-group-group-name))
+                  "")))
+           (gnus-setup-message 'message (message-mail)))))))
 
 (defun gnus-group-news (&optional arg)
   "Start composing a news.
@@ -647,19 +642,16 @@ network.  The corresponding back end must have a 
`request-post' method."
        (buffer (current-buffer)))
     (unwind-protect
        (progn
-         (setq gnus-newsgroup-name
+         (let ((gnus-newsgroup-name
                (if arg
                    (if (= 1 (prefix-numeric-value arg))
                        (gnus-group-completing-read "Use group"
                                                    nil
                                                    (gnus-read-active-file-p))
                      (gnus-group-group-name))
-                 ""))
-         ;; #### see comment in gnus-setup-message -- drv
+                 "")))
          (gnus-setup-message 'message
-           (message-news (gnus-group-real-name gnus-newsgroup-name))))
-      (with-current-buffer buffer
-       (setq gnus-newsgroup-name group)))))
+           (message-news (gnus-group-real-name gnus-newsgroup-name))))))))
 
 (defun gnus-group-post-news (&optional arg)
   "Start composing a message (a news by default).
@@ -694,18 +686,15 @@ posting style."
        (buffer (current-buffer)))
     (unwind-protect
        (progn
-         (setq gnus-newsgroup-name
+         (let ((gnus-newsgroup-name
                (if arg
                    (if (= 1 (prefix-numeric-value arg))
                        (gnus-group-completing-read "Use group"
                                                    nil
                                                    (gnus-read-active-file-p))
                      "")
-                 gnus-newsgroup-name))
-         ;; #### see comment in gnus-setup-message -- drv
-         (gnus-setup-message 'message (message-mail)))
-      (with-current-buffer buffer
-       (setq gnus-newsgroup-name group)))))
+                 gnus-newsgroup-name)))
+         (gnus-setup-message 'message (message-mail)))))))
 
 (defun gnus-summary-news-other-window (&optional arg)
   "Start composing a news in another window.
@@ -724,24 +713,21 @@ network.  The corresponding back end must have a 
`request-post' method."
        (buffer (current-buffer)))
     (unwind-protect
        (progn
-         (setq gnus-newsgroup-name
+         (let ((gnus-newsgroup-name
                (if arg
                    (if (= 1 (prefix-numeric-value arg))
                        (gnus-group-completing-read "Use group"
                                                    nil
                                                    (gnus-read-active-file-p))
                      "")
-                 gnus-newsgroup-name))
-         ;; #### see comment in gnus-setup-message -- drv
+                 gnus-newsgroup-name)))
          (gnus-setup-message 'message
            (progn
              (message-news (gnus-group-real-name gnus-newsgroup-name))
              (set (make-local-variable 'gnus-discouraged-post-methods)
                   (remove
                    (car (gnus-find-method-for-group gnus-newsgroup-name))
-                   gnus-discouraged-post-methods)))))
-      (with-current-buffer buffer
-       (setq gnus-newsgroup-name group)))))
+                   gnus-discouraged-post-methods)))))))))
 
 (defun gnus-summary-post-news (&optional arg)
   "Start composing a message.  Post to the current group by default.
@@ -823,7 +809,7 @@ active, the entire article will be yanked."
             (with-current-buffer gnus-article-copy
               (save-restriction
                 (nnheader-narrow-to-headers)
-                (nnheader-parse-naked-head)))))
+                (nnheader-parse-head t)))))
        (message-yank-original)
        (message-exchange-point-and-mark)
        (setq beg (or beg (mark t))))
@@ -1993,10 +1979,10 @@ process-mark several articles, they will all be 
attached."
     (gnus-summary-iterate n
       (gnus-summary-select-article)
       (with-current-buffer destination
-       ;; Attach at the end of the buffer.
-       (save-excursion
-        (goto-char (point-max))
-        (message-forward-make-body-mime gnus-original-article-buffer))))
+       ;; Attach at the end of the buffer.
+       (save-excursion
+         (goto-char (point-max))
+         (message-forward-make-body-mime gnus-original-article-buffer))))
     (gnus-configure-windows 'message t)))
 
 (provide 'gnus-msg)
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index 1ac1d05..65bcd0e 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -427,6 +427,8 @@ This is not required after changing 
`gnus-registry-cache-file'."
     (gnus-message 4 "Removed %d ignored entries from the Gnus registry"
                   (- old-size (registry-size db)))))
 
+(declare-function gnus-nnselect-group-p "nnselect" (group))
+(declare-function nnselect-article-group "nnselect" (article))
 ;; article move/copy/spool/delete actions
 (defun gnus-registry-action (action data-header from &optional to method)
   (let* ((id (mail-header-id data-header))
@@ -437,7 +439,10 @@ This is not required after changing 
`gnus-registry-cache-file'."
                       (or (cdr-safe (assq 'To extra)) "")))
          (sender (nth 0 (gnus-registry-extract-addresses
                          (mail-header-from data-header))))
-         (from (gnus-group-guess-full-name-from-command-method from))
+         (from (gnus-group-guess-full-name-from-command-method
+                (if (gnus-nnselect-group-p from)
+                    (nnselect-article-group (mail-header-number data-header))
+                  from)))
          (to (if to (gnus-group-guess-full-name-from-command-method to) nil)))
     (gnus-message 7 "Gnus registry: article %s %s from %s to %s"
                   id (if method "respooling" "going") from to)
@@ -788,7 +793,7 @@ Consults `gnus-registry-unfollowed-groups' and
 Consults `gnus-registry-ignored-groups' and
 `nnmail-split-fancy-with-parent-ignore-groups'."
   (and group
-       (or (gnus-grep-in-list
+       (or (gnus-virtual-group-p group) (gnus-grep-in-list
             group
             (delq nil (mapcar (lambda (g)
                                 (cond
@@ -1218,7 +1223,7 @@ is `ask', ask the user; or if `gnus-registry-install' is 
non-nil, enable it."
       (gnus-registry-initialize)))
   gnus-registry-enabled)
 
-;; largely based on nnir-warp-to-article
+;; largely based on nnselect-warp-to-article
 (defun gnus-try-warping-via-registry ()
   "Try to warp via the registry.
 This will be done via the current article's source group based on
@@ -1242,7 +1247,7 @@ data stored in the registry."
                       (gnus-ephemeral-group-p group) ;; any ephemeral group
                       (memq (car (gnus-find-method-for-group group))
                            ;; Specific methods; this list may need to expand.
-                            '(nnir)))
+                            '(nnselect)))
 
             ;; remember that we've seen this group already
             (push group seen-groups)
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el
index 095e054..8cb80b2 100644
--- a/lisp/gnus/gnus-srvr.el
+++ b/lisp/gnus/gnus-srvr.el
@@ -34,7 +34,8 @@
 (require 'gnus-range)
 (require 'gnus-cloud)
 
-(autoload 'gnus-group-make-nnir-group "nnir")
+(autoload 'gnus-group-read-ephemeral-search-group "nnselect")
+;;(autoload 'gnus-group-make-permanent-search-group "nnselect")
 
 (defcustom gnus-server-exit-hook nil
   "Hook run when exiting the server buffer."
@@ -176,7 +177,7 @@ If nil, a faster, but more primitive, buffer is used 
instead."
 
     "g" gnus-server-regenerate-server
 
-    "G" gnus-group-make-nnir-group
+    "G" gnus-group-read-ephemeral-search-group
 
     "z" gnus-server-compact-server
 
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index fe600f1..e4f05de 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -1802,7 +1802,7 @@ backend check whether the group actually exists."
      ;; by one.
      (t
       (dolist (info infos)
-       (gnus-activate-group (gnus-info-group info) nil nil method t))))))
+       (gnus-activate-group (gnus-info-group info) t nil method t))))))
 
 (defun gnus-make-hashtable-from-newsrc-alist ()
   "Create a hash table from `gnus-newsrc-alist'.
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index c53f81f..8f37fc8 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -85,8 +85,8 @@
 (autoload 'gnus-article-outlook-unwrap-lines "deuglify" nil t)
 (autoload 'gnus-article-outlook-repair-attribution "deuglify" nil t)
 (autoload 'gnus-article-outlook-rearrange-citation "deuglify" nil t)
-(autoload 'nnir-article-rsv "nnir" nil nil 'macro)
-(autoload 'nnir-article-group "nnir" nil nil 'macro)
+(autoload 'nnselect-article-rsv "nnselect" nil nil)
+(autoload 'nnselect-article-group "nnselect" nil nil)
 
 (defcustom gnus-kill-summary-on-exit t
   "If non-nil, kill the summary buffer when you exit from it.
@@ -144,9 +144,9 @@ If t, fetch all the available old headers."
   :type '(choice number
                 (sexp :menu-tag "other" t)))
 
-(defcustom gnus-refer-thread-use-nnir nil
-  "Use nnir to search an entire server when referring threads.
-A nil value will only search for thread-related articles in the
+(defcustom gnus-refer-thread-use-search nil
+  "Search an entire server when referring threads. A
+nil value will only search for thread-related articles in the
 current group."
   :version "24.1"
   :group 'gnus-thread
@@ -884,6 +884,7 @@ controls how articles are sorted."
                           (function-item gnus-article-sort-by-subject)
                           (function-item gnus-article-sort-by-date)
                           (function-item gnus-article-sort-by-score)
+                          (function-item gnus-article-sort-by-rsv)
                           (function-item gnus-article-sort-by-random)
                           (function :tag "other"))
                   (boolean :tag "Reverse order"))))
@@ -927,6 +928,7 @@ subthreads, customize `gnus-subthread-sort-functions'."
                    (function-item gnus-thread-sort-by-subject)
                    (function-item gnus-thread-sort-by-date)
                    (function-item gnus-thread-sort-by-score)
+                   (function-item gnus-thread-sort-by-rsv)
                    (function-item gnus-thread-sort-by-most-recent-number)
                    (function-item gnus-thread-sort-by-most-recent-date)
                    (function-item gnus-thread-sort-by-random)
@@ -1433,16 +1435,13 @@ the normal Gnus MIME machinery."
     (?c (or (mail-header-chars gnus-tmp-header) 0) ?d)
     (?k (gnus-summary-line-message-size gnus-tmp-header) ?s)
     (?L gnus-tmp-lines ?s)
-    (?Z (or (nnir-article-rsv (mail-header-number gnus-tmp-header))
-           0)
-        ?d)
-    (?G (or (nnir-article-group (mail-header-number gnus-tmp-header))
-           "")
-        ?s)
+    (?Z (or (nnselect-article-rsv (mail-header-number gnus-tmp-header))
+           0) ?d)
+    (?G (or (nnselect-article-group (mail-header-number gnus-tmp-header))
+           "") ?s)
     (?g (or (gnus-group-short-name
-            (nnir-article-group (mail-header-number gnus-tmp-header)))
-           "")
-        ?s)
+            (nnselect-article-group (mail-header-number gnus-tmp-header)))
+           "") ?s)
     (?O gnus-tmp-downloaded ?c)
     (?I gnus-tmp-indentation ?s)
     (?T (if (= gnus-tmp-level 0) "" (make-string (frame-width) ? )) ?s)
@@ -1619,6 +1618,8 @@ This list will always be a subset of 
gnus-newsgroup-undownloaded.")
 
 (defvar gnus-newsgroup-sparse nil)
 
+(defvar gnus-newsgroup-selection nil)
+
 (defvar gnus-current-article nil)
 (defvar gnus-article-current nil)
 (defvar gnus-current-headers nil)
@@ -1653,6 +1654,8 @@ This list will always be a subset of 
gnus-newsgroup-undownloaded.")
     gnus-newsgroup-undownloaded
     gnus-newsgroup-unsendable
 
+    gnus-newsgroup-selection
+
     gnus-newsgroup-begin gnus-newsgroup-end
     gnus-newsgroup-last-rmail gnus-newsgroup-last-mail
     gnus-newsgroup-last-folder gnus-newsgroup-last-file
@@ -4532,48 +4535,14 @@ Returns HEADER if it was entered in the DEPENDENCIES.  
Returns nil otherwise."
 ;; This function has to be called with point after the article number
 ;; on the beginning of the line.
 (defsubst gnus-nov-parse-line (number dependencies &optional force-new)
-  (let ((eol (point-at-eol))
-       header references in-reply-to)
-
+  (let (header)
     ;; overview: [num subject from date id refs chars lines misc]
     (unwind-protect
-       (let (x)
-         (narrow-to-region (point) eol)
-         (unless (eobp)
-           (forward-char))
-
-         (setq header
-               (make-full-mail-header
-                number                 ; number
-                (condition-case ()     ; subject
-                    (gnus-remove-odd-characters
-                     (funcall gnus-decode-encoded-word-function
-                              (setq x (nnheader-nov-field))))
-                  (error x))
-                (condition-case ()     ; from
-                    (gnus-remove-odd-characters
-                     (funcall gnus-decode-encoded-address-function
-                              (setq x (nnheader-nov-field))))
-                  (error x))
-                (nnheader-nov-field)   ; date
-                (nnheader-nov-read-message-id number)  ; id
-                (setq references (nnheader-nov-field)) ; refs
-                (nnheader-nov-read-integer) ; chars
-                (nnheader-nov-read-integer) ; lines
-                (unless (eobp)
-                  (if (looking-at "Xref: ")
-                      (goto-char (match-end 0)))
-                  (nnheader-nov-field)) ; Xref
-                (nnheader-nov-parse-extra)))) ; extra
-
+       (narrow-to-region (point) (point-at-eol))
+      (unless (eobp)
+       (forward-char))
+      (setq header (nnheader-parse-nov number))
       (widen))
-
-    (when (and (string= references "")
-              (setq in-reply-to (mail-header-extra header))
-              (setq in-reply-to (cdr (assq 'In-Reply-To in-reply-to))))
-      (setf (mail-header-references header)
-            (gnus-extract-message-id-from-in-reply-to in-reply-to)))
-
     (when gnus-alter-header-function
       (funcall gnus-alter-header-function header))
     (gnus-dependencies-add-header header dependencies force-new)))
@@ -5104,6 +5073,17 @@ using some other form will lead to serious barfage."
   (gnus-article-sort-by-date
    (gnus-thread-header h1) (gnus-thread-header h2)))
 
+(defsubst gnus-article-sort-by-rsv (h1 h2)
+  "Sort articles by rsv."
+  (when gnus-newsgroup-selection
+    (< (nnselect-article-rsv (mail-header-number h1))
+       (nnselect-article-rsv (mail-header-number h2)))))
+
+(defun gnus-thread-sort-by-rsv (h1 h2)
+  "Sort threads by root article rsv."
+  (gnus-article-sort-by-rsv
+   (gnus-thread-header h1) (gnus-thread-header h2)))
+
 (defsubst gnus-article-sort-by-score (h1 h2)
   "Sort articles by root article score.
 Unscored articles will be counted as having a score of zero."
@@ -5634,22 +5614,32 @@ or a straight list of headers."
   "Fetch headers of ARTICLES."
   (gnus-message 7 "Fetching headers for %s..." gnus-newsgroup-name)
   (prog1
-      (if (eq 'nov
-             (setq gnus-headers-retrieved-by
-                   (gnus-retrieve-headers
-                    articles gnus-newsgroup-name
-                    (or limit
-                        ;; We might want to fetch old headers, but
-                        ;; not if there is only 1 article.
-                        (and (or (and
-                                  (not (eq gnus-fetch-old-headers 'some))
-                                  (not (numberp gnus-fetch-old-headers)))
-                                 (> (length articles) 1))
-                             gnus-fetch-old-headers)))))
-         (gnus-get-newsgroup-headers-xover
-          articles force-new dependencies gnus-newsgroup-name t)
-       (gnus-get-newsgroup-headers dependencies force-new))
-    (gnus-message 7 "Fetching headers for %s...done" gnus-newsgroup-name)))
+      (pcase (setq gnus-headers-retrieved-by
+                  (gnus-retrieve-headers
+                   articles gnus-newsgroup-name
+                   (or limit
+                       ;; We might want to fetch old headers, but
+                       ;; not if there is only 1 article.
+                       (and (or (and
+                                 (not (eq gnus-fetch-old-headers 'some))
+                                 (not (numberp gnus-fetch-old-headers)))
+                                (> (length articles) 1))
+                            gnus-fetch-old-headers))))
+    ('nov
+     (gnus-get-newsgroup-headers-xover
+      articles force-new dependencies gnus-newsgroup-name t))
+    ('headers
+     (gnus-get-newsgroup-headers dependencies force-new))
+    ((pred listp)
+     (let ((dependencies
+           (or dependencies
+               (with-current-buffer gnus-summary-buffer
+                 gnus-newsgroup-dependencies))))
+     (delq nil (mapcar   #'(lambda (header)
+                            (gnus-dependencies-add-header
+                             header dependencies force-new))
+                        gnus-headers-retrieved-by)))))
+  (gnus-message 7 "Fetching headers for %s...done" gnus-newsgroup-name)))
 
 (defun gnus-select-newsgroup (group &optional read-all select-articles)
   "Select newsgroup GROUP.
@@ -6405,12 +6395,11 @@ The resulting hash table is returned, or nil if no 
Xrefs were found."
          (gnus-group-update-group group t))))))
 
 (defun gnus-get-newsgroup-headers (&optional dependencies force-new)
-  (let ((cur nntp-server-buffer)
-       (dependencies
+  (let ((dependencies
         (or dependencies
             (with-current-buffer gnus-summary-buffer
               gnus-newsgroup-dependencies)))
-       headers id end ref number
+       headers
        (mail-parse-charset gnus-newsgroup-charset)
        (mail-parse-ignored-charsets
         (save-current-buffer (condition-case nil
@@ -6418,146 +6407,15 @@ The resulting hash table is returned, or nil if no 
Xrefs were found."
                                 (error))
                               gnus-newsgroup-ignored-charsets)))
     (with-current-buffer nntp-server-buffer
-      ;; Translate all TAB characters into SPACE characters.
-      (subst-char-in-region (point-min) (point-max) ?\t ?  t)
-      (subst-char-in-region (point-min) (point-max) ?\r ?  t)
-      (ietf-drums-unfold-fws)
       (gnus-run-hooks 'gnus-parse-headers-hook)
-      (let ((case-fold-search t)
-           in-reply-to header p lines chars)
+      (let ((nnmail-extra-headers gnus-extra-headers)
+           header)
        (goto-char (point-min))
-       ;; Search to the beginning of the next header.  Error messages
-       ;; do not begin with 2 or 3.
-       (while (re-search-forward "^[23][0-9]+ " nil t)
-         (setq id nil
-               ref nil)
-         ;; This implementation of this function, with nine
-         ;; search-forwards instead of the one re-search-forward and
-         ;; a case (which basically was the old function) is actually
-         ;; about twice as fast, even though it looks messier.  You
-         ;; can't have everything, I guess.  Speed and elegance
-         ;; doesn't always go hand in hand.
-         (setq
-          header
-          (make-full-mail-header
-           ;; Number.
-           (prog1
-               (setq number (read cur))
-             (end-of-line)
-             (setq p (point))
-             (narrow-to-region (point)
-                               (or (and (search-forward "\n.\n" nil t)
-                                        (- (point) 2))
-                                   (point))))
-           ;; Subject.
-           (progn
-             (goto-char p)
-             (if (search-forward "\nsubject:" nil t)
-                 (funcall gnus-decode-encoded-word-function
-                          (nnheader-header-value))
-               "(none)"))
-           ;; From.
-           (progn
-             (goto-char p)
-             (if (search-forward "\nfrom:" nil t)
-                 (funcall gnus-decode-encoded-address-function
-                          (nnheader-header-value))
-               "(nobody)"))
-           ;; Date.
-           (progn
-             (goto-char p)
-             (if (search-forward "\ndate:" nil t)
-                 (nnheader-header-value) ""))
-           ;; Message-ID.
-           (progn
-             (goto-char p)
-             (setq id (if (re-search-forward
-                           "^message-id: *\\(<[^\n\t> ]+>\\)" nil t)
-                          ;; We do it this way to make sure the Message-ID
-                          ;; is (somewhat) syntactically valid.
-                          (buffer-substring (match-beginning 1)
-                                            (match-end 1))
-                        ;; If there was no message-id, we just fake one
-                        ;; to make subsequent routines simpler.
-                        (nnheader-generate-fake-message-id number))))
-           ;; References.
-           (progn
-             (goto-char p)
-             (if (search-forward "\nreferences:" nil t)
-                 (progn
-                   (setq end (point))
-                   (prog1
-                       (nnheader-header-value)
-                     (setq ref
-                           (buffer-substring
-                            (progn
-                              (end-of-line)
-                              (search-backward ">" end t)
-                              (1+ (point)))
-                            (progn
-                              (search-backward "<" end t)
-                              (point))))))
-               ;; Get the references from the in-reply-to header if there
-               ;; were no references and the in-reply-to header looks
-               ;; promising.
-               (if (and (search-forward "\nin-reply-to:" nil t)
-                        (setq in-reply-to (nnheader-header-value))
-                        (string-match "<[^>]+>" in-reply-to))
-                   (let (ref2)
-                     (setq ref (substring in-reply-to (match-beginning 0)
-                                          (match-end 0)))
-                     (while (string-match "<[^>]+>" in-reply-to (match-end 0))
-                       (setq ref2 (substring in-reply-to (match-beginning 0)
-                                             (match-end 0)))
-                       (when (> (length ref2) (length ref))
-                         (setq ref ref2)))
-                     ref)
-                 (setq ref nil))))
-           ;; Chars.
-           (progn
-             (goto-char p)
-             (if (search-forward "\nchars: " nil t)
-                 (if (numberp (setq chars (ignore-errors (read cur))))
-                     chars -1)
-               -1))
-           ;; Lines.
-           (progn
-             (goto-char p)
-             (if (search-forward "\nlines: " nil t)
-                 (if (numberp (setq lines (ignore-errors (read cur))))
-                     lines -1)
-               -1))
-           ;; Xref.
-           (progn
-             (goto-char p)
-             (and (search-forward "\nxref:" nil t)
-                  (nnheader-header-value)))
-           ;; Extra.
-           (when gnus-extra-headers
-             (let ((extra gnus-extra-headers)
-                   out)
-               (while extra
-                 (goto-char p)
-                 (when (search-forward
-                        (concat "\n" (symbol-name (car extra)) ":") nil t)
-                   (push (cons (car extra) (nnheader-header-value))
-                         out))
-                 (pop extra))
-               out))))
-         (when (equal id ref)
-           (setq ref nil))
-
-         (when gnus-alter-header-function
-           (funcall gnus-alter-header-function header)
-           (setq id (mail-header-id header)
-                 ref (gnus-parent-id (mail-header-references header))))
-
+       (while (setq header (nnheader-parse-head))
          (when (setq header
                      (gnus-dependencies-add-header
                       header dependencies force-new))
-           (push header headers))
-         (goto-char (point-max))
-         (widen))
+           (push header headers)))
        (nreverse headers)))))
 
 ;; Goes through the xover lines and returns a list of vectors
@@ -8702,7 +8560,8 @@ SCORE."
 When called interactively, ID is the Message-ID of the current
 article.  If thread-only is non-nil limit the summary buffer to
 these articles."
-  (interactive (list (mail-header-id (gnus-summary-article-header))))
+  (interactive (list (mail-header-id (gnus-summary-article-header))
+                    current-prefix-arg))
   (let ((articles (gnus-articles-in-thread
                   (gnus-id-to-thread (gnus-root-id id))))
        ;;we REALLY want the whole thread---this prevents cut-threads
@@ -9125,13 +8984,13 @@ Return the number of articles fetched."
     result))
 
 (defun gnus-summary-refer-thread (&optional limit)
-  "Fetch all articles in the current thread.  For backends
-that know how to search for threads (currently only 'nnimap)
-a non-numeric prefix arg will use nnir to search the entire
+  "Fetch all articles in the current thread. For backends that
+know how to search for threads (currently only 'nnimap) a
+non-numeric prefix arg will search the entire
 server; without a prefix arg only the current group is
-searched.  If the variable `gnus-refer-thread-use-nnir' is
-non-nil the prefix arg has the reverse meaning.  If no
-backend-specific `request-thread' function is available fetch
+searched. If the variable `gnus-refer-thread-use-search' is
+non-nil the prefix arg has the reverse meaning. If no
+backend-specific 'request-thread function is available fetch
 LIMIT (the numerical prefix) old headers.  If LIMIT is
 non-numeric or nil fetch the number specified by the
 `gnus-refer-thread-limit' variable."
@@ -9141,9 +9000,9 @@ non-numeric or nil fetch the number specified by the
         (gnus-inhibit-demon t)
         (gnus-summary-ignore-duplicates t)
         (gnus-read-all-available-headers t)
-        (gnus-refer-thread-use-nnir
+        (gnus-refer-thread-use-search
          (if (and (not (null limit)) (listp limit))
-             (not gnus-refer-thread-use-nnir) gnus-refer-thread-use-nnir))
+             (not gnus-refer-thread-use-search) gnus-refer-thread-use-search))
         (new-headers
          (if (gnus-check-backend-function
               'request-thread gnus-newsgroup-name)
@@ -9284,9 +9143,9 @@ non-numeric or nil fetch the number specified by the
       (dolist (method gnus-refer-article-method)
        (push (if (eq 'current method)
                  gnus-current-select-method
-               (if (eq 'nnir (car method))
+               (if (eq 'nnselect (car method))
                    (list
-                    'nnir
+                    'nnselect
                     (or (cadr method)
                         (gnus-method-to-server gnus-current-select-method)))
                  method))
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index ebf2d72..b7c0ff6 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -853,12 +853,6 @@ be used directly.")
           (cons (car list) (list :type type :data data)))
        list)))
 
-(let ((command (format "%s" this-command)))
-  (when (string-match "gnus" command)
-    (if (eq 'gnus-other-frame this-command)
-       (gnus-get-buffer-create gnus-group-buffer)
-      (gnus-splash))))
-
 ;;; Do the rest.
 
 (require 'gnus-util)
@@ -1613,7 +1607,7 @@ total number of articles in the group.")
  :variable-default (mapcar
                     (lambda (g) (list g t))
                     '("delayed$" "drafts$" "queue$" "INBOX$"
-                      "^nnmairix:" "^nnir:" "archive"))
+                      "^nnmairix:" "^nnselect:" "archive"))
  :variable-document
  "Groups in which the registry should be turned off."
  :variable-group gnus-registry
@@ -2711,6 +2705,11 @@ with some simple extensions.
 %k          Pretty-printed version of the above (string)
             For example, \"1.2k\" or \"0.4M\".
 %L          Number of lines in the article (integer)
+%Z          RSV of the article; nil if not in an nnselect group (integer)
+%G          Originating group name for the article; nil if not
+            in an nnselect group (string)
+%g          Short from  of the originating group name for the article;
+            nil if not in an nnselect group (string)
 %I          Indentation based on thread level (a string of
             spaces)
 %B          A complex trn-style thread tree (string)
@@ -3159,7 +3158,10 @@ that that variable is buffer-local to the summary 
buffers."
 
 (defun gnus-kill-ephemeral-group (group)
   "Remove ephemeral GROUP from relevant structures."
-  (remhash group gnus-newsrc-hashtb))
+  (remhash group gnus-newsrc-hashtb)
+    (setq gnus-newsrc-alist
+       (delq (assoc group gnus-newsrc-alist)
+              gnus-newsrc-alist)))
 
 (defun gnus-simplify-mode-line ()
   "Make mode lines a bit simpler."
diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el
index 945ef03..7894285 100644
--- a/lisp/gnus/nndiary.el
+++ b/lisp/gnus/nndiary.el
@@ -992,7 +992,7 @@ all.  This may very well take some time.")
        (narrow-to-region
         (goto-char (point-min))
         (if (search-forward "\n\n" nil t) (1- (point)) (point-max))))
-      (let ((headers (nnheader-parse-naked-head)))
+      (let ((headers (nnheader-parse-head t)))
        (setf (mail-header-chars  headers) chars)
        (setf (mail-header-number headers) number)
        headers))))
diff --git a/lisp/gnus/nnfolder.el b/lisp/gnus/nnfolder.el
index c27af17..6ff9905 100644
--- a/lisp/gnus/nnfolder.el
+++ b/lisp/gnus/nnfolder.el
@@ -1160,7 +1160,7 @@ This command does not work if you use short group names."
        (if (search-forward "\n\n" e t) (setq e (1- (point)))))
       (with-temp-buffer
        (insert-buffer-substring buf b e)
-       (let ((headers (nnheader-parse-naked-head)))
+       (let ((headers (nnheader-parse-head t)))
          (setf (mail-header-chars  headers) chars)
          (setf (mail-header-number headers) number)
          headers)))))
diff --git a/lisp/gnus/nnheader.el b/lisp/gnus/nnheader.el
index fee7a16..1a50697 100644
--- a/lisp/gnus/nnheader.el
+++ b/lisp/gnus/nnheader.el
@@ -28,6 +28,10 @@
 
 (eval-when-compile (require 'cl-lib))
 
+(defvar gnus-decode-encoded-word-function)
+(defvar gnus-decode-encoded-address-function)
+(defvar gnus-alter-header-function)
+
 (defvar nnmail-extra-headers)
 (defvar gnus-newsgroup-name)
 (defvar jka-compr-compression-info-list)
@@ -39,6 +43,7 @@
 (require 'mail-utils)
 (require 'mm-util)
 (require 'gnus-util)
+(autoload 'gnus-remove-odd-characters "gnus-sum")
 (autoload 'gnus-range-add "gnus-range")
 (autoload 'gnus-remove-from-range "gnus-range")
 ;; FIXME none of these are used explicitly in this file.
@@ -188,124 +193,167 @@ on your system, you could say something like:
 
 (autoload 'ietf-drums-unfold-fws "ietf-drums")
 
-(defun nnheader-parse-naked-head (&optional number)
-  ;; This function unfolds continuation lines in this buffer
-  ;; destructively.  When this side effect is unwanted, use
-  ;; `nnheader-parse-head' instead of this function.
-  (let ((case-fold-search t)
-       (buffer-read-only nil)
+
+(defsubst nnheader-head-make-header (number)
+  "Using data of type 'head in the current buffer
+  return a full mail header with article NUMBER."
+  (let ((p (point-min))
        (cur (current-buffer))
-       (p (point-min))
-       in-reply-to lines ref)
-    (nnheader-remove-cr-followed-by-lf)
-    (ietf-drums-unfold-fws)
-    (subst-char-in-region (point-min) (point-max) ?\t ? )
-    (goto-char p)
-    (insert "\n")
-    (prog1
-       ;; This implementation of this function, with nine
-       ;; search-forwards instead of the one re-search-forward and a
-       ;; case (which basically was the old function) is actually
-       ;; about twice as fast, even though it looks messier.  You
-       ;; can't have everything, I guess.  Speed and elegance don't
-       ;; always go hand in hand.
-       (make-full-mail-header
-        ;; Number.
-        (or number 0)
-        ;; Subject.
-        (progn
-          (goto-char p)
-          (if (search-forward "\nsubject:" nil t)
-              (nnheader-header-value) "(none)"))
-        ;; From.
-        (progn
-          (goto-char p)
-          (if (search-forward "\nfrom:" nil t)
-              (nnheader-header-value) "(nobody)"))
-        ;; Date.
-        (progn
-          (goto-char p)
-          (if (search-forward "\ndate:" nil t)
-              (nnheader-header-value) ""))
-        ;; Message-ID.
-        (progn
-          (goto-char p)
-          (if (search-forward "\nmessage-id:" nil t)
-              (buffer-substring
-               (1- (or (search-forward "<" (point-at-eol) t)
-                       (point)))
-               (or (search-forward ">" (point-at-eol) t) (point)))
-            ;; If there was no message-id, we just fake one to make
-            ;; subsequent routines simpler.
-            (nnheader-generate-fake-message-id number)))
-        ;; References.
-        (progn
+       in-reply-to chars lines end ref)
+    ;; This implementation of this function, with nine
+    ;; search-forwards instead of the one re-search-forward and a
+    ;; case (which basically was the old function) is actually
+    ;; about twice as fast, even though it looks messier.  You
+    ;; can't have everything, I guess.  Speed and elegance don't
+    ;; always go hand in hand.
+    (make-full-mail-header
+     ;; Number.
+     number
+     ;; Subject.
+     (progn
+       (goto-char p)
+       (if (search-forward "\nsubject:" nil t)
+          (funcall gnus-decode-encoded-word-function
+                   (nnheader-header-value))
+        "(none)"))
+     ;; From.
+     (progn
+       (goto-char p)
+       (if (search-forward "\nfrom:" nil t)
+          (funcall gnus-decode-encoded-address-function
+                   (nnheader-header-value))
+        "(nobody)"))
+     ;; Date.
+     (progn
+       (goto-char p)
+       (if (search-forward "\ndate:" nil t)
+          (nnheader-header-value) ""))
+     ;; Message-ID.
+     (progn
+       (goto-char p)
+       (if (re-search-forward
+           "^message-id: *\\(<[^\n\t> ]+>\\)" nil t)
+          ;; We do it this way to make sure the Message-ID
+          ;; is (somewhat) syntactically valid.
+          (buffer-substring (match-beginning 1)
+                            (match-end 1))
+        ;; If there was no message-id, we just fake one to make
+        ;; subsequent routines simpler.
+        (nnheader-generate-fake-message-id number)))
+     ;; References.
+     (progn
+       (goto-char p)
+       (if (search-forward "\nreferences:" nil t)
+          (progn
+            (setq end (point))
+            (prog1
+                (nnheader-header-value)
+              (setq ref
+                    (buffer-substring
+                     (progn
+                       (end-of-line)
+                       (search-backward ">" end t)
+                       (1+ (point)))
+                     (progn
+                       (search-backward "<" end t)
+                       (point))))))
+        ;; Get the references from the in-reply-to header if there
+        ;; were no references and the in-reply-to header looks
+        ;; promising.
+        (if (and (search-forward "\nin-reply-to:" nil t)
+                 (setq in-reply-to (nnheader-header-value))
+                 (string-match "<[^>]+>" in-reply-to))
+            (let (ref2)
+              (setq ref (substring in-reply-to (match-beginning 0)
+                                   (match-end 0)))
+              (while (string-match "<[^>]+>" in-reply-to (match-end 0))
+                (setq ref2 (substring in-reply-to (match-beginning 0)
+                                      (match-end 0)))
+                (when (> (length ref2) (length ref))
+                  (setq ref ref2)))
+              ref)
+          nil)))
+     ;; Chars.
+     (progn
+       (goto-char p)
+       (if (search-forward "\nchars: " nil t)
+          (if (numberp (setq chars (ignore-errors (read cur))))
+              chars -1)
+        -1))
+     ;; Lines.
+     (progn
+       (goto-char p)
+       (if (search-forward "\nlines: " nil t)
+          (if (numberp (setq lines (ignore-errors (read cur))))
+              lines -1)
+        -1))
+     ;; Xref.
+     (progn
+       (goto-char p)
+       (and (search-forward "\nxref:" nil t)
+           (nnheader-header-value)))
+     ;; Extra.
+     (when nnmail-extra-headers
+       (let ((extra nnmail-extra-headers)
+            out)
+        (while extra
           (goto-char p)
-          (if (search-forward "\nreferences:" nil t)
-              (nnheader-header-value)
-            ;; Get the references from the in-reply-to header if
-            ;; there were no references and the in-reply-to header
-            ;; looks promising.
-            (if (and (search-forward "\nin-reply-to:" nil t)
-                     (setq in-reply-to (nnheader-header-value))
-                     (string-match "<[^\n>]+>" in-reply-to))
-                (let (ref2)
-                  (setq ref (substring in-reply-to (match-beginning 0)
-                                       (match-end 0)))
-                  (while (string-match "<[^\n>]+>"
-                                       in-reply-to (match-end 0))
-                    (setq ref2 (substring in-reply-to (match-beginning 0)
-                                          (match-end 0)))
-                    (when (> (length ref2) (length ref))
-                      (setq ref ref2)))
-                  ref)
-              nil)))
-        ;; Chars.
-        0
-        ;; Lines.
-        (progn
-          (goto-char p)
-          (if (search-forward "\nlines: " nil t)
-              (if (numberp (setq lines (read cur)))
-                  lines 0)
-            0))
-        ;; Xref.
-        (progn
-          (goto-char p)
-          (and (search-forward "\nxref:" nil t)
-               (nnheader-header-value)))
-        ;; Extra.
-        (when nnmail-extra-headers
-          (let ((extra nnmail-extra-headers)
-                out)
-            (while extra
-              (goto-char p)
-              (when (search-forward
-                     (concat "\n" (symbol-name (car extra)) ":") nil t)
-                (push (cons (car extra) (nnheader-header-value))
-                      out))
-              (pop extra))
-            out)))
-      (goto-char p)
-      (delete-char 1))))
-
-(defun nnheader-parse-head (&optional naked)
-  (let ((cur (current-buffer)) num beg end)
-    (when (if naked
-             (setq num 0
-                   beg (point-min)
-                   end (point-max))
-           ;; Search to the beginning of the next header.  Error
-           ;; messages do not begin with 2 or 3.
-           (when (re-search-forward "^[23][0-9]+ " nil t)
-             (setq num (read cur)
-                   beg (point)
-                   end (if (search-forward "\n.\n" nil t)
-                           (goto-char  (- (point) 2))
-                         (point)))))
-      (with-temp-buffer
-       (insert-buffer-substring cur beg end)
-       (nnheader-parse-naked-head num)))))
+          (when (search-forward
+                 (concat "\n" (symbol-name (car extra)) ":") nil t)
+            (push (cons (car extra) (nnheader-header-value))
+                  out))
+          (pop extra))
+        out)))))
+
+(defun nnheader-parse-head (&optional naked temp)
+  "Parse data of type 'header in the current buffer and return a
+  mail header, modifying the buffer contents in the process. The
+  buffer is assumed to begin each header with an \"Article
+  retrieved\" line with an article number; If NAKED is non-nil
+  this line is assumed absent, and the buffer should contain a
+  single header's worth of data. If TEMP is non-nil the data is
+  first copied to a temporary buffer leaving the original buffer
+  untouched."
+  (let ((cur (current-buffer))
+       (num 0)
+       (beg (point-min))
+       (end (point-max))
+       buf)
+    (when (or naked
+             ;; Search to the beginning of the next header.  Error
+             ;; messages do not begin with 2 or 3.
+             (when (re-search-forward "^[23][0-9]+ " nil t)
+               (setq num (read cur)
+                     beg (point)
+                     end (if (search-forward "\n.\n" nil t)
+                             (goto-char  (- (point) 2))
+                           (point)))))
+      ;; When TEMP copy the data to a temporary buffer
+      (if temp
+         (progn
+           (set-buffer (setq buf (generate-new-buffer " *nnheader-temp*")))
+           (insert-buffer-substring cur beg end))
+       ;; Otherwise just narrow to the data
+       (narrow-to-region beg end))
+      (let ((case-fold-search t)
+           (buffer-read-only nil)
+           header)
+       (nnheader-remove-cr-followed-by-lf)
+       (ietf-drums-unfold-fws)
+       (subst-char-in-region (point-min) (point-max) ?\t ?  t)
+       (subst-char-in-region (point-min) (point-max) ?\r ?  t)
+       (goto-char (point-min))
+       (insert "\n")
+       (setq header (nnheader-head-make-header num))
+       (goto-char (point-min))
+       (delete-char 1)
+       (if temp
+           (kill-buffer buf)
+         (goto-char (point-max))
+         (widen))
+       (when gnus-alter-header-function
+         (funcall gnus-alter-header-function header))
+       header))))
 
 (defmacro nnheader-nov-skip-field ()
   '(search-forward "\t" eol 'move))
@@ -347,24 +395,43 @@ on your system, you could say something like:
            'id)
        (nnheader-generate-fake-message-id ,number))))
 
-(defun nnheader-parse-nov ()
+(defalias 'nnheader-nov-make-header 'nnheader-parse-nov)
+(autoload 'gnus-extract-message-id-from-in-reply-to "gnus-sum")
+
+(defun nnheader-parse-nov (&optional number)
   (let ((eol (point-at-eol))
-       (number (nnheader-nov-read-integer)))
-    (vector
-     number                            ; number
-     (nnheader-nov-field)              ; subject
-     (nnheader-nov-field)              ; from
-     (nnheader-nov-field)              ; date
-     (nnheader-nov-read-message-id number) ; id
-     (nnheader-nov-field)              ; refs
-     (nnheader-nov-read-integer)       ; chars
-     (nnheader-nov-read-integer)       ; lines
-     (if (eq (char-after) ?\n)
-        nil
-       (if (looking-at "Xref: ")
-          (goto-char (match-end 0)))
-       (nnheader-nov-field))           ; Xref
-     (nnheader-nov-parse-extra))))     ; extra
+       references in-reply-to x header)
+      (setq header
+           (make-full-mail-header
+            (or number (nnheader-nov-read-integer))      ; number
+            (condition-case () ; subject
+                (gnus-remove-odd-characters
+                 (funcall gnus-decode-encoded-word-function
+                          (setq x (nnheader-nov-field))))
+              (error x))
+            (condition-case () ; from
+                (gnus-remove-odd-characters
+                 (funcall gnus-decode-encoded-address-function
+                          (setq x (nnheader-nov-field))))
+              (error x))
+            (nnheader-nov-field)       ; date
+            (nnheader-nov-read-message-id number)      ; id
+            (setq references (nnheader-nov-field))     ; refs
+            (nnheader-nov-read-integer) ; chars
+            (nnheader-nov-read-integer) ; lines
+            (unless (eobp)
+              (if (looking-at "Xref: ")
+                  (goto-char (match-end 0)))
+              (nnheader-nov-field)) ; Xref
+            (nnheader-nov-parse-extra))) ; extra
+
+      (when (and (string= references "")
+                (setq in-reply-to (mail-header-extra header))
+                (setq in-reply-to (cdr (assq 'In-Reply-To in-reply-to))))
+       (setf (mail-header-references header)
+              (gnus-extract-message-id-from-in-reply-to in-reply-to)))
+      header))
+
 
 (defun nnheader-insert-nov (header)
   (princ (mail-header-number header) (current-buffer))
@@ -399,17 +466,6 @@ on your system, you could say something like:
       (delete-char 1))
     (forward-line 1)))
 
-(defun nnheader-parse-overview-file (file)
-  "Parse FILE and return a list of headers."
-  (mm-with-unibyte-buffer
-    (nnheader-insert-file-contents file)
-    (goto-char (point-min))
-    (let (headers)
-      (while (not (eobp))
-       (push (nnheader-parse-nov) headers)
-       (forward-line 1))
-      (nreverse headers))))
-
 (defun nnheader-write-overview-file (file headers)
   "Write HEADERS to FILE."
   (with-temp-file file
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index be8ad9a..d797e89 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -986,7 +986,10 @@ textual parts.")
                 (when (and (car result) (not can-move))
                   (nnimap-delete-article article))
                 (cons internal-move-group
-                      (or (nnimap-find-uid-response "COPYUID" (caddr result))
+                      (or (nnimap-find-uid-response
+                          "COPYUID"
+                          ;; Server gives different responses for MOVE and 
COPY.
+                          (if can-move (caddr result) (cadr result)))
                           (nnimap-find-article-by-message-id
                            internal-move-group server message-id
                            nnimap-request-articles-find-limit)))))
@@ -1683,7 +1686,7 @@ If LIMIT, first try to limit the search to the N last 
articles."
         (gnus-add-to-range
          (gnus-add-to-range
           (gnus-range-add (gnus-info-read info)
-                         vanished)
+                         vanished)
          (cdr (assq '%Flagged flags)))
         (cdr (assq '%Seen flags))))
   (let ((marks (gnus-info-marks info)))
@@ -1848,15 +1851,15 @@ If LIMIT, first try to limit the search to the N last 
articles."
   (setq nnimap-status-string "Read-only server")
   nil)
 
-(defvar gnus-refer-thread-use-nnir) ;; gnus-sum.el
+(defvar gnus-refer-thread-use-search) ;; gnus-sum.el
 (declare-function gnus-fetch-headers "gnus-sum"
                  (articles &optional limit force-new dependencies))
 
-(autoload 'nnir-search-thread "nnir")
+(autoload 'nnselect-search-thread "nnselect")
 
 (deffoo nnimap-request-thread (header &optional group server)
-  (if gnus-refer-thread-use-nnir
-      (nnir-search-thread header)
+  (if gnus-refer-thread-use-search
+      (nnselect-search-thread header)
     (when (nnimap-change-group group server)
       (let* ((cmd (nnimap-make-thread-query header))
              (result (with-current-buffer (nnimap-buffer)
diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el
index 722969c..2ec39cf 100644
--- a/lisp/gnus/nnir.el
+++ b/lisp/gnus/nnir.el
@@ -10,6 +10,7 @@
 ;; IMAP search improved by Daniel Pittman  <daniel@rimspace.net>.
 ;; nnmaildir support for Swish++ and Namazu backends by:
 ;;   Justus Piater <Justus <at> Piater.name>
+;; Mostly rewritten by Andrew Cohen <cohen@bu.edu> from 2010
 ;; Keywords: news mail searching ir
 
 ;; This file is part of GNU Emacs.
@@ -29,20 +30,11 @@
 
 ;;; Commentary:
 
-;; What does it do?  Well, it allows you to search your mail using
-;; some search engine (imap, namazu, swish-e and others -- see
-;; later) by typing `G G' in the Group buffer.  You will then get a
-;; buffer which shows all articles matching the query, sorted by
-;; Retrieval Status Value (score).
-
-;; When looking at the retrieval result (in the Summary buffer) you
-;; can type `A W' (aka M-x gnus-warp-to-article RET) on an article.  You
-;; will be warped into the group this article came from. Typing `A T'
-;; (aka M-x gnus-summary-refer-thread RET) will warp to the group and
-;; also show the thread this article is part of.
+;; What does it do?  Well, it searches your mail using some search
+;; engine (imap, namazu, swish-e, gmane and others -- see later).
 
 ;; The Lisp setup may involve setting a few variables and setting up the
-;; search engine. You can define the variables in the server definition
+;; search engine.  You can define the variables in the server definition
 ;; like this :
 ;;   (setq gnus-secondary-select-methods '(
 ;;       (nnimap "" (nnimap-address "localhost")
@@ -53,6 +45,45 @@
 ;; an alist, type `C-h v nnir-engines RET' for more information; this
 ;; includes examples for setting `nnir-search-engine', too.)
 
+;; The entry to searching is the single function `nnir-run-query',
+;; which dispatches the search to the proper search function.  The
+;; argument of `nnir-run-query' is an alist with two keys:
+;; 'nnir-query-spec and 'nnir-group-spec.  The value for
+;; 'nnir-query-spec is an alist.  The only required key/value pair is
+;; (query . "query") specifying the search string to pass to the query
+;; engine.  Individual engines may have other elements.  The value of
+;; 'nnir-group-spec is a list with the specification of the
+;; groups/servers to search.  The format of the 'nnir-group-spec is
+;; (("server1" ("group11" "group12")) ("server2" ("group21"
+;; "group22"))). If any of the group lists is absent then all groups
+;; on that server are searched.
+
+;; The output of `nnir-run-query' is a vector, each element of which
+;; should in turn be a three-element vector with the form: [fully
+;; prefixed group-name of the article; the article number; the
+;; Retrieval Status Value (RSV)] as returned from the search engine.
+;; An RSV is the score assigned to the document by the search engine.
+;; For Boolean search engines, the RSV is always 1000 (or 1 or 100, or
+;; whatever you like).
+
+;; A vector of this form is used by the nnselect backend to create
+;; virtual groups.  So nnir-run-query is a suitable function to use in
+;; nnselect groups.
+
+;; The default sorting order of articles in an nnselect summary buffer
+;; is based on the order of the articles in the above mentioned
+;; vector, so that's where you can do the sorting you'd like.  Maybe
+;; it would be nice to have a way of displaying the search result
+;; sorted differently?
+
+;; So what do you need to do when you want to add another search
+;; engine?  You write a function that executes the query.  Temporary
+;; data from the search engine can be put in `nnir-tmp-buffer'.  This
+;; function should return the list of articles as a vector, as
+;; described above.  Then, you need to register this backend in
+;; `nnir-engines'.  Then, users can choose the backend by setting
+;; `nnir-search-engine' as a server variable.
+
 ;; If you use one of the local indices (namazu, find-grep, swish) you
 ;; must also set up a search engine backend.
 
@@ -75,13 +106,13 @@
 ;; ,----
 ;; | package conf;  # Don't remove this line!
 ;; |
-;; | # Paths which will not be indexed. Don't use `^' or `$' anchors.
+;; | # Paths which will not be indexed.  Don't use `^' or `$' anchors.
 ;; | $EXCLUDE_PATH = "spam|sent";
 ;; |
-;; | # Header fields which should be searchable. case-insensitive
+;; | # Header fields which should be searchable.  case-insensitive
 ;; | $REMAIN_HEADER = "from|date|message-id|subject";
 ;; |
-;; | # Searchable fields. case-insensitive
+;; | # Searchable fields.  case-insensitive
 ;; | $SEARCH_FIELD = "from|date|message-id|subject";
 ;; |
 ;; | # The max length of a word.
@@ -121,72 +152,17 @@
 ;; |          (nnml-active-file "~/News/cache/active"))
 ;; `----
 
-;; Developer information:
-
-;; I have tried to make the code expandable.  Basically, it is divided
-;; into two layers.  The upper layer is somewhat like the `nnvirtual'
-;; backend: given a specification of what articles to show from
-;; another backend, it creates a group containing exactly those
-;; articles.  The lower layer issues a query to a search engine and
-;; produces such a specification of what articles to show from the
-;; other backend.
-
-;; The interface between the two layers consists of the single
-;; function `nnir-run-query', which dispatches the search to the
-;; proper search function.  The argument of `nnir-run-query' is an
-;; alist with two keys: 'nnir-query-spec and 'nnir-group-spec. The
-;; value for 'nnir-query-spec is an alist. The only required key/value
-;; pair is (query . "query") specifying the search string to pass to
-;; the query engine. Individual engines may have other elements. The
-;; value of 'nnir-group-spec is a list with the specification of the
-;; groups/servers to search.  The format of the 'nnir-group-spec is
-;; (("server1" ("group11" "group12")) ("server2" ("group21"
-;; "group22"))). If any of the group lists is absent then all groups
-;; on that server are searched.
-
-;; The output of `nnir-run-query' is supposed to be a vector, each
-;; element of which should in turn be a three-element vector.  The
-;; first element should be full group name of the article, the second
-;; element should be the article number, and the third element should
-;; be the Retrieval Status Value (RSV) as returned from the search
-;; engine.  An RSV is the score assigned to the document by the search
-;; engine.  For Boolean search engines, the RSV is always 1000 (or 1
-;; or 100, or whatever you like).
-
-;; The sorting order of the articles in the summary buffer created by
-;; nnir is based on the order of the articles in the above mentioned
-;; vector, so that's where you can do the sorting you'd like.  Maybe
-;; it would be nice to have a way of displaying the search result
-;; sorted differently?
-
-;; So what do you need to do when you want to add another search
-;; engine?  You write a function that executes the query.  Temporary
-;; data from the search engine can be put in `nnir-tmp-buffer'.  This
-;; function should return the list of articles as a vector, as
-;; described above.  Then, you need to register this backend in
-;; `nnir-engines'.  Then, users can choose the backend by setting
-;; `nnir-search-engine' as a server variable.
 
 ;;; Code:
 
 ;;; Setup:
 
-(require 'nnoo)
-(require 'gnus-group)
-(require 'message)
-(require 'gnus-util)
 (eval-when-compile (require 'cl-lib))
+(require 'gnus)
 
 ;;; Internal Variables:
 
-(defvar nnir-memo-query nil
-  "Internal: stores current query.")
-
-(defvar nnir-memo-server nil
-  "Internal: stores current server.")
-
-(defvar nnir-artlist nil
-  "Internal: stores search result.")
+(defvar gnus-inhibit-demon)
 
 (defvar nnir-search-history ()
   "Internal: the history for querying search options in nnir.")
@@ -203,30 +179,19 @@
     ("to" . "TO")
     ("from" . "FROM")
     ("body" . "BODY")
-    ("imap" . ""))
+    ("imap" . "")
+    ("gmail" . "X-GM-RAW"))
   "Mapping from user readable keys to IMAP search items for use in nnir.")
 
 (defvar nnir-imap-search-other "HEADER %S"
-  "The IMAP search item to use for anything other than
-`nnir-imap-search-arguments'.  By default this is the name of an
-email header field.")
+  "The IMAP search item for anything other than `nnir-imap-search-arguments'.
+By default this is the name of an email header field.")
 
 (defvar nnir-imap-search-argument-history ()
   "The history for querying search options in nnir.")
 
 ;;; Helper macros
 
-;; Data type article list.
-
-(defmacro nnir-artlist-length (artlist)
-  "Return number of articles in artlist."
-  `(length ,artlist))
-
-(defmacro nnir-artlist-article (artlist n)
-  "Return from ARTLIST the Nth artitem (counting starting at 1)."
-  `(when (> ,n 0)
-     (elt ,artlist (1- ,n))))
-
 (defmacro nnir-artitem-group (artitem)
   "Return the group from the ARTITEM."
   `(elt ,artitem 0))
@@ -239,52 +204,6 @@ email header field.")
   "Return the Retrieval Status Value (RSV, score) from the ARTITEM."
   `(elt ,artitem 2))
 
-(defmacro nnir-article-group (article)
-  "Return the group for ARTICLE."
-  `(nnir-artitem-group (nnir-artlist-article nnir-artlist ,article)))
-
-(defmacro nnir-article-number (article)
-  "Return the number for ARTICLE."
-  `(nnir-artitem-number (nnir-artlist-article nnir-artlist ,article)))
-
-(defmacro nnir-article-rsv (article)
-  "Return the rsv for ARTICLE."
-  `(nnir-artitem-rsv (nnir-artlist-article nnir-artlist ,article)))
-
-(defsubst nnir-article-ids (article)
-  "Return the pair `(nnir id . real id)' of ARTICLE."
-  (cons article (nnir-article-number article)))
-
-(defmacro nnir-categorize (sequence keyfunc &optional valuefunc)
-  "Sort a SEQUENCE into categories and returns a list of the form
-`((key1 (element11 element12)) (key2 (element21 element22))'.
-The category key for a member of the sequence is obtained
-as `(KEYFUNC member)' and the corresponding element is just
-`member'.  If VALUEFUNC is non-nil, the element of the list
-is `(VALUEFUNC member)'."
-  `(unless (null ,sequence)
-     (let (value)
-       (mapc
-       (lambda (member)
-         (let ((y (,keyfunc member))
-               (x ,(if valuefunc
-                       `(,valuefunc member)
-                     'member)))
-           (if (assoc y value)
-               (push x (cadr (assoc y value)))
-             (push (list y (list x)) value))))
-       ,sequence)
-       value)))
-
-;;; Finish setup:
-
-(require 'gnus-sum)
-
-(nnoo-declare nnir)
-(nnoo-define-basics nnir)
-
-(gnus-declare-backend "nnir" 'mail 'virtual)
-
 
 ;;; User Customizable Variables:
 
@@ -293,43 +212,17 @@ is `(VALUEFUNC member)'."
   :group 'gnus)
 
 (defcustom nnir-ignored-newsgroups ""
-  "A regexp to match newsgroups in the active file that should
-be skipped when searching."
+  "Newsgroups to skip when searching.
+Any newsgroup in the active file matching this regexp will be
+skipped when searching."
   :version "24.1"
   :type '(regexp)
   :group 'nnir)
 
-(defcustom nnir-summary-line-format nil
-  "The format specification of the lines in an nnir summary buffer.
-
-All the items from `gnus-summary-line-format' are available, along
-with three items unique to nnir summary buffers:
-
-%Z    Search retrieval score value (integer)
-%G    Article original full group name (string)
-%g    Article original short group name (string)
-
-If nil this will use `gnus-summary-line-format'."
-  :version "24.1"
-  :type '(choice (const :tag "gnus-summary-line-format" nil) string)
-  :group 'nnir)
-
-(defcustom nnir-retrieve-headers-override-function nil
-  "If non-nil, a function that accepts an article list and group
-and populates the `nntp-server-buffer' with the retrieved
-headers.  Must return either `nov' or `headers' indicating the
-retrieved header format.
-
-If this variable is nil, or if the provided function returns nil for
-a search result, `gnus-retrieve-headers' will be called instead."
-  :version "24.1"
-  :type '(choice (const :tag "gnus-retrieve-headers" nil) function)
-  :group 'nnir)
-
 (defcustom nnir-imap-default-search-key "whole message"
-  "The default IMAP search key for an nnir search.  Must be one of
-the keys in `nnir-imap-search-arguments'.  To use raw imap queries
-by default set this to \"imap\"."
+  "The default IMAP search key for an nnir search.
+Must be one of the keys in `nnir-imap-search-arguments'.  To use
+raw imap queries by default set this to \"imap\"."
   :version "24.1"
   :type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
                           nnir-imap-search-arguments))
@@ -357,9 +250,9 @@ Instead, use this:
   :group 'nnir)
 
 (defcustom nnir-swish++-remove-prefix (concat (getenv "HOME") "/Mail/")
-  "The prefix to remove from each file name returned by swish++
-in order to get a group name (albeit with / instead of .).  This is a
-regular expression.
+  "The prefix to remove from swish++ file names to get group names.
+Resulting names have '/' in place of '.'.  This is a regular
+expression.
 
 This variable is very similar to `nnir-namazu-remove-prefix', except
 that it is for swish++, not Namazu."
@@ -408,9 +301,9 @@ This could be a server parameter."
   :group 'nnir)
 
 (defcustom nnir-swish-e-remove-prefix (concat (getenv "HOME") "/Mail/")
-  "The prefix to remove from each file name returned by swish-e
-in order to get a group name (albeit with / instead of .).  This is a
-regular expression.
+  "The prefix to remove from swish-e file names to get group names.
+Resulting names have '/' in place of '.'.  This is a regular
+expression.
 
 This variable is very similar to `nnir-namazu-remove-prefix', except
 that it is for swish-e, not Namazu.
@@ -441,8 +334,8 @@ Instead, use this:
   :group 'nnir)
 
 (defcustom nnir-hyrex-remove-prefix (concat (getenv "HOME") "/Mail/")
-  "The prefix to remove from each file name returned by HyREX
-in order to get a group name (albeit with / instead of .).
+  "The prefix to remove from HyREX file names to get group names.
+Restulting names have '/' in place  of '.'.
 
 For example, suppose that HyREX returns file names such as
 \"/home/john/Mail/mail/misc/42\".  For this example, use the following
@@ -478,8 +371,8 @@ Instead, use this:
   :group 'nnir)
 
 (defcustom nnir-namazu-remove-prefix (concat (getenv "HOME") "/Mail/")
-  "The prefix to remove from each file name returned by Namazu
-in order to get a group name (albeit with / instead of .).
+  "The prefix to remove from Namazu file names to get group names.
+Resulting names have '/' in place of '.'.
 
 For example, suppose that Namazu returns file names such as
 \"/home/john/Mail/mail/misc/42\".  For this example, use the following
@@ -509,9 +402,9 @@ Instead, use this:
 
 (defcustom nnir-notmuch-remove-prefix
   (regexp-quote (or (getenv "MAILDIR") (expand-file-name "~/Mail")))
-  "The prefix to remove from each file name returned by notmuch
-in order to get a group name (albeit with / instead of .).  This is a
-regular expression.
+  "The prefix to remove from notmuch file names to get group names.
+Resulting names have '/' in place of '.'.  This is a regular
+expression.
 
 This variable is very similar to `nnir-namazu-remove-prefix', except
 that it is for notmuch, not Namazu."
@@ -590,347 +483,12 @@ Add an entry here when adding a new search engine.")
                        ,@(mapcar (lambda (elem) (list 'const (car elem)))
                                  nnir-engines)))))
 
-;; Gnus glue.
-
-(declare-function gnus-group-topic-name "gnus-topic" ())
-(declare-function gnus-topic-find-groups "gnus-topic"
-                 (topic &optional level all lowest recursive))
-
-(defun gnus-group-make-nnir-group (nnir-extra-parms &optional specs)
-  "Create an nnir group.
-Prompt for a search query and determine the groups to search as
-follows: if called from the *Server* buffer search all groups
-belonging to the server on the current line; if called from the
-*Group* buffer search any marked groups, or the group on the current
-line, or all the groups under the current topic.  Calling with a
-prefix-arg prompts for additional search-engine specific constraints.
-A non-nil `specs' arg must be an alist with `nnir-query-spec' and
-`nnir-group-spec' keys, and skips all prompting."
-  (interactive "P")
-  (let* ((group-spec
-         (or (cdr (assq 'nnir-group-spec specs))
-           (if (gnus-server-server-name)
-               (list (list (gnus-server-server-name)))
-             (nnir-categorize
-              (or gnus-group-marked
-                  (if (gnus-group-group-name)
-                      (list (gnus-group-group-name))
-                    (mapcar (lambda (entry)
-                              (gnus-info-group (cadr entry)))
-                            (gnus-topic-find-groups (gnus-group-topic-name)
-                                                    nil t nil t))))
-              gnus-group-server))))
-        (query-spec
-         (or (cdr (assq 'nnir-query-spec specs))
-           (apply
-            'append
-            (list (cons 'query
-                        (read-string "Query: " nil 'nnir-search-history)))
-            (when nnir-extra-parms
-              (mapcar
-               (lambda (x)
-                 (nnir-read-parms (nnir-server-to-search-engine (car x))))
-               group-spec))))))
-    (gnus-group-read-ephemeral-group
-     (concat "nnir-" (message-unique-id))
-     (list 'nnir "nnir")
-     nil
-;     (cons (current-buffer) gnus-current-window-configuration)
-     nil
-     nil nil
-     (list
-      (cons 'nnir-specs (list (cons 'nnir-query-spec query-spec)
-                             (cons 'nnir-group-spec group-spec)))
-      (cons 'nnir-artlist nil)))))
-
-(defun gnus-summary-make-nnir-group (nnir-extra-parms)
-  "Search a group from the summary buffer."
-  (interactive "P")
-  (gnus-warp-to-article)
-  (let ((spec
-        (list
-         (cons 'nnir-group-spec
-               (list (list
-                      (gnus-group-server gnus-newsgroup-name)
-                      (list gnus-newsgroup-name)))))))
-    (gnus-group-make-nnir-group nnir-extra-parms spec)))
-
-
-;; Gnus backend interface functions.
-
-(deffoo nnir-open-server (server &optional definitions)
-  ;; Just set the server variables appropriately.
-  (let ((backend (car (gnus-server-to-method server))))
-    (if backend
-       (nnoo-change-server backend server definitions)
-      (add-hook 'gnus-summary-generate-hook 'nnir-mode)
-      (nnoo-change-server 'nnir server definitions))))
-
-(deffoo nnir-request-group (group &optional server dont-check _info)
-  (nnir-possibly-change-group group server)
-  (let ((pgroup (gnus-group-guess-full-name-from-command-method group))
-       length)
-    ;; Check for cached search result or run the query and cache the
-    ;; result.
-    (unless (and nnir-artlist dont-check)
-      (gnus-group-set-parameter
-       pgroup 'nnir-artlist
-       (setq nnir-artlist
-            (nnir-run-query
-             (gnus-group-get-parameter pgroup 'nnir-specs t))))
-      (nnir-request-update-info pgroup (gnus-get-info pgroup)))
-    (with-current-buffer nntp-server-buffer
-      (if (zerop (setq length (nnir-artlist-length nnir-artlist)))
-          (progn
-            (nnir-close-group group)
-            (nnheader-report 'nnir "Search produced empty results."))
-        (nnheader-insert "211 %d %d %d %s\n"
-                         length    ; total #
-                         1         ; first #
-                         length    ; last #
-                         group)))) ; group name
-  nnir-artlist)
-
-(defvar gnus-inhibit-demon)
-
-(deffoo nnir-retrieve-headers (articles &optional _group _server _fetch-old)
-  (with-current-buffer nntp-server-buffer
-    (let ((gnus-inhibit-demon t)
-         (articles-by-group (nnir-categorize
-                             articles nnir-article-group nnir-article-ids))
-         headers)
-      (while (not (null articles-by-group))
-       (let* ((group-articles (pop articles-by-group))
-              (artgroup (car group-articles))
-              (articleids (cadr group-articles))
-              (artlist (sort (mapcar 'cdr articleids) '<))
-              (server (gnus-group-server artgroup))
-              (gnus-override-method (gnus-server-to-method server))
-              parsefunc)
-         ;; (nnir-possibly-change-group nil server)
-         (erase-buffer)
-         (pcase (setq gnus-headers-retrieved-by
-                       (or
-                        (and
-                         nnir-retrieve-headers-override-function
-                         (funcall nnir-retrieve-headers-override-function
-                                  artlist artgroup))
-                        (gnus-retrieve-headers artlist artgroup nil)))
-           ('nov
-            (setq parsefunc 'nnheader-parse-nov))
-           ('headers
-            (setq parsefunc 'nnheader-parse-head))
-           (_ (error "Unknown header type %s while requesting articles \
-                    of group %s" gnus-headers-retrieved-by artgroup)))
-         (goto-char (point-min))
-         (while (not (eobp))
-           (let* ((novitem (funcall parsefunc))
-                  (artno (and novitem
-                              (mail-header-number novitem)))
-                  (art (car (rassq artno articleids))))
-             (when art
-               (setf (mail-header-number novitem) art)
-               (push novitem headers))
-             (forward-line 1)))))
-      (setq headers
-           (sort headers
-                 (lambda (x y)
-                   (< (mail-header-number x) (mail-header-number y)))))
-      (erase-buffer)
-      (mapc 'nnheader-insert-nov headers)
-      'nov)))
-
-(defvar gnus-article-decode-hook)
-
-(deffoo nnir-request-article (article &optional group server to-buffer)
-  (nnir-possibly-change-group group server)
-  (if (and (stringp article)
-          (not (eq 'nnimap (car (gnus-server-to-method server)))))
-      (nnheader-report
-       'nnir
-       "nnir-request-article only groks message ids for nnimap servers: %s"
-       server)
-    (save-excursion
-      (let ((article article)
-            query)
-        (when (stringp article)
-          (setq gnus-override-method (gnus-server-to-method server))
-          (setq query
-                (list
-                 (cons 'query (format "HEADER Message-ID %s" article))
-                 (cons 'criteria "")
-                 (cons 'shortcut t)))
-          (unless (and nnir-artlist (equal query nnir-memo-query)
-                       (equal server nnir-memo-server))
-            (setq nnir-artlist (nnir-run-imap query server)
-                 nnir-memo-query query
-                 nnir-memo-server server))
-          (setq article 1))
-        (unless (zerop (nnir-artlist-length nnir-artlist))
-          (let ((artfullgroup (nnir-article-group article))
-                (artno (nnir-article-number article)))
-            (message "Requesting article %d from group %s"
-                     artno artfullgroup)
-            (if to-buffer
-                (with-current-buffer to-buffer
-                  (let ((gnus-article-decode-hook nil))
-                    (gnus-request-article-this-buffer artno artfullgroup)))
-              (gnus-request-article artno artfullgroup))
-            (cons artfullgroup artno)))))))
-
-(deffoo nnir-request-move-article (article group server accept-form
-                                          &optional last _internal-move-group)
-  (nnir-possibly-change-group group server)
-  (let* ((artfullgroup (nnir-article-group article))
-        (artno (nnir-article-number article))
-        (to-newsgroup (nth 1 accept-form))
-        (to-method (gnus-find-method-for-group to-newsgroup))
-        (from-method (gnus-find-method-for-group artfullgroup))
-        (move-is-internal (gnus-server-equal from-method to-method)))
-    (unless (gnus-check-backend-function
-            'request-move-article artfullgroup)
-      (error "The group %s does not support article moving" artfullgroup))
-    (gnus-request-move-article
-     artno
-     artfullgroup
-     (nth 1 from-method)
-     accept-form
-     last
-     (and move-is-internal
-         to-newsgroup          ; Not respooling
-         (gnus-group-real-name to-newsgroup)))))
-
-(deffoo nnir-request-expire-articles (articles group &optional server force)
-  (nnir-possibly-change-group group server)
-  (if force
-    (let ((articles-by-group (nnir-categorize
-                             articles nnir-article-group nnir-article-ids))
-         not-deleted)
-      (while (not (null articles-by-group))
-       (let* ((group-articles (pop articles-by-group))
-              (artgroup (car group-articles))
-              (articleids (cadr group-articles))
-              (artlist (sort (mapcar 'cdr articleids) '<)))
-         (unless (gnus-check-backend-function 'request-expire-articles
-                                              artgroup)
-           (error "The group %s does not support article deletion" artgroup))
-         (unless (gnus-check-server (gnus-find-method-for-group artgroup))
-           (error "Couldn't open server for group %s" artgroup))
-         (push (gnus-request-expire-articles
-                artlist artgroup force)
-               not-deleted)))
-      (sort (delq nil not-deleted) '<))
-    articles))
-
-(deffoo nnir-warp-to-article ()
-  (nnir-possibly-change-group gnus-newsgroup-name)
-  (let* ((cur (if (> (gnus-summary-article-number) 0)
-                 (gnus-summary-article-number)
-               (error "Can't warp to a pseudo-article")))
-        (backend-article-group (nnir-article-group cur))
-         (backend-article-number (nnir-article-number cur))
-;       (quit-config (gnus-ephemeral-group-p gnus-newsgroup-name))
-        )
-
-    ;; what should we do here? we could leave all the buffers around
-    ;; and assume that we have to exit from them one by one. or we can
-    ;; try to clean up directly
-
-    ;;first exit from the nnir summary buffer.
-;    (gnus-summary-exit)
-    ;; and if the nnir summary buffer in turn came from another
-    ;; summary buffer we have to clean that summary up too.
- ;   (when (not (eq (cdr quit-config) 'group))
-;      (gnus-summary-exit))
-    (gnus-summary-read-group-1 backend-article-group t t  nil
-                               nil (list backend-article-number))))
-
-(deffoo nnir-request-update-mark (_group article mark)
-  (let ((artgroup (nnir-article-group article))
-       (artnumber (nnir-article-number article)))
-    (or (and artgroup
-            artnumber
-            (gnus-request-update-mark artgroup artnumber mark))
-       mark)))
-
-(deffoo nnir-request-set-mark (group actions &optional server)
-  (nnir-possibly-change-group group server)
-  (let (mlist)
-    (dolist (action actions)
-      (cl-destructuring-bind (range action marks) action
-        (let ((articles-by-group (nnir-categorize
-                                  (gnus-uncompress-range range)
-                                  nnir-article-group nnir-article-number)))
-          (dolist (artgroup articles-by-group)
-            (push (list
-                  (car artgroup)
-                  (list (gnus-compress-sequence
-                         (sort (cadr artgroup) '<))
-                         action marks))
-                  mlist)))))
-    (dolist (request (nnir-categorize  mlist car cadr))
-      (gnus-request-set-mark (car request) (cadr request)))))
-
-
-(deffoo nnir-request-update-info (group info &optional server)
-  (nnir-possibly-change-group group server)
-  ;; clear out all existing marks.
-  (setf (gnus-info-marks info) nil)
-  (setf (gnus-info-read info) nil)
-  (let ((group (gnus-group-guess-full-name-from-command-method group))
-       (articles-by-group
-        (nnir-categorize
-         (gnus-uncompress-range (cons 1 (nnir-artlist-length nnir-artlist)))
-         nnir-article-group nnir-article-ids)))
-    (gnus-set-active group
-                    (cons 1 (nnir-artlist-length nnir-artlist)))
-    (while (not (null articles-by-group))
-      (let* ((group-articles (pop articles-by-group))
-            (articleids (reverse (cadr group-articles)))
-            (group-info (gnus-get-info (car group-articles)))
-            (marks (gnus-info-marks group-info))
-            (read (gnus-info-read group-info)))
-       (setf (gnus-info-read info)
-             (gnus-add-to-range
-              (gnus-info-read info)
-              (delq nil
-                    (mapcar
-                     #'(lambda (art)
-                         (when (gnus-member-of-range (cdr art) read)
-                           (car art)))
-                     articleids))))
-       (dolist (mark marks)
-         (cl-destructuring-bind (type . range) mark
-           (gnus-add-marked-articles
-            group type
-            (delq nil
-                    (mapcar
-                     #'(lambda (art)
-                       (when (gnus-member-of-range (cdr art) range) (car art)))
-                     articleids)))))))))
-
-
-(deffoo nnir-close-group (group &optional server)
-  (nnir-possibly-change-group group server)
-  (let ((pgroup (gnus-group-guess-full-name-from-command-method group)))
-    (when (and nnir-artlist (not (gnus-ephemeral-group-p pgroup)))
-      (gnus-group-set-parameter  pgroup 'nnir-artlist nnir-artlist))
-    (setq nnir-artlist nil)
-    (when (gnus-ephemeral-group-p pgroup)
-      (gnus-kill-ephemeral-group pgroup)
-      (setq gnus-ephemeral-servers
-           (delq (assq 'nnir gnus-ephemeral-servers)
-                 gnus-ephemeral-servers)))))
-;; (gnus-opened-servers-remove
-;;  (car (assoc  '(nnir "nnir-ephemeral" (nnir-address "nnir"))
-;;             gnus-opened-servers))))
-
-
-
 
 (defmacro nnir-add-result (dirnam artno score prefix server artlist)
-  "Ask `nnir-compose-result' to construct a result vector,
-and if it is non-nil, add it to ARTLIST."
+  "Construct a result vector and add it to ARTLIST.
+DIRNAM, ARTNO, SCORE, PREFIX and SERVER are passed to
+`nnir-compose-result' to make the vector.  Only add the result if
+non-nil."
   `(let ((result (nnir-compose-result ,dirnam ,artno ,score ,prefix ,server)))
      (when (not (null result))
        (push result ,artlist))))
@@ -940,9 +498,9 @@ and if it is non-nil, add it to ARTLIST."
 ;; Helper function currently used by the Swish++ and Namazu backends;
 ;; perhaps useful for other backends as well
 (defun nnir-compose-result (dirnam article score prefix server)
-  "Extract the group from DIRNAM, and create a result vector
-ready to be added to the list of search results."
-
+  "Construct a result vector.
+The DIRNAM, ARTICLE, SCORE, PREFIX, and SERVER are used to
+construct the vector entries."
   ;; remove nnir-*-remove-prefix from beginning of dirnam filename
   (when (string-match (concat "^" prefix) dirnam)
     (setq dirnam (replace-match "" t t dirnam)))
@@ -977,13 +535,14 @@ ready to be added to the list of search results."
 
 ;; imap interface
 (defun nnir-run-imap (query srv &optional groups)
-  "Run a search against an IMAP back-end server.
-This uses a custom query language parser; see `nnir-imap-make-query'
-for details on the language and supported extensions."
+  "Run the QUERY search against an IMAP back-end server SRV.
+Search GROUPS, or all active groups on SRV if GROUPS is nil.
+This uses a custom query language parser; see
+`nnir-imap-make-query' for details on the language and supported
+extensions."
   (save-excursion
     (let ((qstring (cdr (assq 'query query)))
           (server (cadr (gnus-server-to-method srv)))
-;;          (defs (nth 2 (gnus-server-to-method srv)))
           (criteria (or (cdr (assq 'criteria query))
                         (cdr (assoc nnir-imap-default-search-key
                                     nnir-imap-search-arguments))))
@@ -995,38 +554,37 @@ for details on the language and supported extensions."
        (catch 'found
          (mapcar
           #'(lambda (group)
-            (let (artlist)
-              (condition-case ()
-                  (when (nnimap-change-group
-                         (gnus-group-short-name group) server)
-                    (with-current-buffer (nnimap-buffer)
-                      (message "Searching %s..." group)
-                      (let ((arts 0)
-                            (result (nnimap-command "UID SEARCH %s"
-                                                    (if (string= criteria "")
-                                                        qstring
-                                                      (nnir-imap-make-query
-                                                       criteria qstring)))))
-                        (mapc
-                         (lambda (artnum)
-                           (let ((artn (string-to-number artnum)))
-                             (when (> artn 0)
-                               (push (vector group artn 100)
-                                     artlist)
-                               (when (assq 'shortcut query)
-                                 (throw 'found (list artlist)))
-                               (setq arts (1+ arts)))))
-                         (and (car result)
-                             (cdr (assoc "SEARCH" (cdr result)))))
-                        (message "Searching %s... %d matches" group arts)))
-                    (message "Searching %s...done" group))
-                (quit nil))
-              (nreverse artlist)))
+             (let (artlist)
+               (condition-case ()
+                   (when (nnimap-change-group
+                          (gnus-group-short-name group) server)
+                     (with-current-buffer (nnimap-buffer)
+                       (message "Searching %s..." group)
+                       (let ((arts 0)
+                             (result (nnimap-command "UID SEARCH %s"
+                                                     (if (string= criteria "")
+                                                         qstring
+                                                       (nnir-imap-make-query
+                                                        criteria qstring)))))
+                         (mapc
+                          (lambda (artnum)
+                            (let ((artn (string-to-number artnum)))
+                              (when (> artn 0)
+                                (push (vector group artn 100)
+                                      artlist)
+                                (when (assq 'shortcut query)
+                                  (throw 'found (list artlist)))
+                                (setq arts (1+ arts)))))
+                          (and (car result)
+                               (cdr (assoc "SEARCH" (cdr result)))))
+                         (message "Searching %s... %d matches" group arts)))
+                     (message "Searching %s...done" group))
+                 (quit nil))
+               (nreverse artlist)))
           groups))))))
 
 (defun nnir-imap-make-query (criteria qstring)
-  "Parse the query string and criteria into an appropriate IMAP search
-expression, returning the string query to make.
+  "Make an IMAP search expression from QSTRING and CRITERIA.
 
 This implements a little language designed to return the expected
 results to an arbitrary query string to the end user.
@@ -1063,7 +621,7 @@ In the future the following will be added to the language:
 
 
 (defun nnir-imap-query-to-imap (criteria query)
-  "Turn an s-expression format QUERY into IMAP."
+  "Turn an s-expression format QUERY with CRITERIA into IMAP."
   (mapconcat
    ;; Turn the expressions into IMAP text
    (lambda (item)
@@ -1099,8 +657,9 @@ In the future the following will be added to the language:
 
 
 (defun nnir-imap-parse-query (string)
-  "Turn STRING into an s-expression based query based on the IMAP
-query language as defined in `nnir-imap-make-query'.
+  "Turn STRING into an s-expression query.
+STRING is based on the IMAP query language as defined in
+`nnir-imap-make-query'.
 
 This involves turning individual tokens into higher level terms
 that the search language can then understand and use."
@@ -1116,7 +675,7 @@ that the search language can then understand and use."
 
 
 (defun nnir-imap-next-expr (&optional count)
-  "Return the next expression from the current buffer."
+  "Return the next (COUNT) expression from the current buffer."
   (let ((term (nnir-imap-next-term count))
        (next (nnir-imap-peek-symbol)))
     ;; Are we looking at an 'or' expression?
@@ -1129,7 +688,7 @@ that the search language can then understand and use."
 
 
 (defun nnir-imap-next-term (&optional count)
-  "Return the next term from the current buffer."
+  "Return the next (COUNT) term from the current buffer."
   (let ((term (nnir-imap-next-symbol count)))
     ;; What sort of term is this?
     (cond
@@ -1147,9 +706,10 @@ that the search language can then understand and use."
     (nnir-imap-next-symbol)))
 
 (defun nnir-imap-next-symbol (&optional count)
-  "Return the next symbol from the current buffer, or nil if we are
-at the end of the buffer.  If supplied COUNT skips some symbols before
-returning the one at the supplied position."
+  "Return the next (COUNT) symbol from the current buffer.
+Return nil if we are at the end of the buffer.  If supplied COUNT
+skips some symbols before returning the one at the supplied
+position."
   (when (and (numberp count) (> count 1))
     (nnir-imap-next-symbol (1- count)))
   (let ((case-fold-search t))
@@ -1180,7 +740,7 @@ returning the one at the supplied position."
            (buffer-substring start end)))))))
 
 (defun nnir-imap-delimited-string (delimiter)
-  "Return a delimited string from the current buffer."
+  "Return a string delimited by DELIMITER from the current buffer."
   (let ((start (point)) end)
     (forward-char 1)                   ; skip the first delimiter.
     (while (not end)
@@ -1207,7 +767,7 @@ returning the one at the supplied position."
 ;; - file size
 ;; - group
 (defun nnir-run-swish++ (query server &optional _group)
-  "Run QUERY against swish++.
+  "Run QUERY on SERVER against swish++.
 Returns a vector of (group name, file name) pairs (also vectors,
 actually).
 
@@ -1297,7 +857,7 @@ Windows NT 4.0."
 
 ;; Swish-E interface.
 (defun nnir-run-swish-e (query server &optional _group)
-  "Run given QUERY against swish-e.
+  "Run given QUERY on SERVER against swish-e.
 Returns a vector of (group name, file name) pairs (also vectors,
 actually).
 
@@ -1392,6 +952,7 @@ Tested with swish-e-2.0.1 on Windows NT 4.0."
 
 ;; HyREX interface
 (defun nnir-run-hyrex (query server &optional group)
+  "Run given QUERY with GROUP on SERVER against hyrex."
   (save-excursion
     (let ((artlist nil)
           (groupspec (cdr (assq 'hyrex-group query)))
@@ -1463,7 +1024,7 @@ Tested with swish-e-2.0.1 on Windows NT 4.0."
 
 ;; Namazu interface
 (defun nnir-run-namazu (query server &optional _group)
-  "Run given QUERY against Namazu.
+  "Run QUERY on SERVER  against Namazu.
 Returns a vector of (group name, file name) pairs (also vectors,
 actually).
 
@@ -1533,7 +1094,7 @@ Tested with Namazu 2.0.6 on a GNU/Linux system."
                                   (nnir-artitem-rsv y)))))))))
 
 (defun nnir-run-notmuch (query server &optional groups)
-  "Run QUERY against notmuch.
+  "Run QUERY with  GROUPS from SERVER  against notmuch.
 Returns a vector of (group name, file name) pairs (also vectors,
 actually).  If GROUPS is a list of group names, use them to
 construct path: search terms (see the variable
@@ -1617,7 +1178,7 @@ construct path: search terms (see the variable
       artlist)))
 
 (defun nnir-run-find-grep (query server &optional grouplist)
-  "Run find and grep to obtain matching articles."
+  "Run find and grep to QUERY GROUPLIST on SERVER for matching articles."
   (let* ((method (gnus-server-to-method server))
         (sym (intern
               (concat (symbol-name (car method)) "-directory")))
@@ -1703,14 +1264,10 @@ construct path: search terms (see the variable
 
 ;;; Util Code:
 
-(defun gnus-nnir-group-p (group)
-  "Say whether GROUP is nnir or not."
-  (if (gnus-group-prefixed-p group)
-      (eq 'nnir (car (gnus-find-method-for-group group)))
-    (and group (string-match "^nnir" group))))
 
 (defun nnir-read-parms (nnir-search-engine)
-  "Read additional search parameters according to `nnir-engines'."
+  "Read additional search parameters for NNIR-SEARCH-ENGINE.
+Parameters are according to `nnir-engines'."
   (let ((parmspec (nth 2 (assoc nnir-search-engine nnir-engines))))
     (mapcar #'nnir-read-parm parmspec)))
 
@@ -1727,7 +1284,7 @@ PARMSPEC is a cons cell, the car is a symbol, the cdr is 
a prompt."
       (cons sym (read-string prompt)))))
 
 (defun nnir-run-query (specs)
-  "Invoke appropriate search engine function (see `nnir-engines')."
+  "Invoke search engine appropriate for SPECS (see `nnir-engines')."
   (apply #'vconcat
         (mapcar
          (lambda (x)
@@ -1736,10 +1293,11 @@ PARMSPEC is a cons cell, the car is a symbol, the cdr 
is a prompt."
                   (search-func (cadr (assoc search-engine nnir-engines))))
              (and search-func
                   (funcall search-func (cdr (assq 'nnir-query-spec specs))
-                           server (cadr x)))))
+                           server (cdr x)))))
          (cdr (assq 'nnir-group-spec specs)))))
 
 (defun nnir-server-to-search-engine (server)
+  "Find search engine for SERVER."
   (or (nnir-read-server-parm 'nnir-search-engine server t)
       (cdr (assoc (car (gnus-server-to-method server))
                  nnir-method-default-engines))))
@@ -1754,48 +1312,10 @@ environment unless NOT-GLOBAL is non-nil."
           ((and (not not-global) (boundp key)) (symbol-value key))
           (t nil))))
 
-(defun nnir-possibly-change-group (group &optional server)
-  (or (not server) (nnir-server-opened server) (nnir-open-server server))
-  (when (gnus-nnir-group-p group)
-    (setq nnir-artlist (gnus-group-get-parameter
-                       (gnus-group-prefixed-name
-                        (gnus-group-short-name group) '(nnir "nnir"))
-                       'nnir-artlist t))))
-
-(defun nnir-server-opened (&optional server)
-  (let ((backend (car (gnus-server-to-method server))))
-    (nnoo-current-server-p (or backend 'nnir) server)))
-
-(autoload 'nnimap-make-thread-query "nnimap")
-(declare-function gnus-registry-get-id-key "gnus-registry" (id key))
-
-(defun nnir-search-thread (header)
-  "Make an nnir group based on the thread containing the article HEADER.
-The current server will be searched.  If the registry is installed,
-the server that the registry reports the current article came from
-is also searched."
-  (let* ((query
-         (list (cons 'query (nnimap-make-thread-query header))
-               (cons 'criteria "")))
-        (server
-         (list (list (gnus-method-to-server
-          (gnus-find-method-for-group gnus-newsgroup-name)))))
-        (registry-group (and
-                         (bound-and-true-p gnus-registry-enabled)
-                         (car (gnus-registry-get-id-key
-                               (mail-header-id header) 'group))))
-        (registry-server
-         (and registry-group
-              (gnus-method-to-server
-               (gnus-find-method-for-group registry-group)))))
-    (when registry-server
-      (cl-pushnew (list registry-server) server :test #'equal))
-    (gnus-group-make-nnir-group nil (list
-                                    (cons 'nnir-query-spec query)
-                                    (cons 'nnir-group-spec server)))
-    (gnus-summary-goto-subject (gnus-id-to-article (mail-header-id header)))))
+(autoload 'gnus-request-list "gnus-int")
 
 (defun nnir-get-active (srv)
+  "Return the active list for SRV."
   (let ((method (gnus-server-to-method srv))
        groups)
     (gnus-request-list method)
@@ -1835,82 +1355,37 @@ is also searched."
            (forward-line)))))
     groups))
 
-;; Behind gnus-registry-enabled test.
-(declare-function gnus-registry-action "gnus-registry"
-                  (action data-header from &optional to method))
-
-(defun nnir-registry-action (action data-header _from &optional to method)
-  "Call `gnus-registry-action' with the original article group."
-  (gnus-registry-action
-   action
-   data-header
-   (nnir-article-group (mail-header-number data-header))
-   to
-   method))
-
-(defun nnir-mode ()
-  (when (eq (car (gnus-find-method-for-group gnus-newsgroup-name)) 'nnir)
-    (when (and nnir-summary-line-format
-               (not (string= nnir-summary-line-format
-                             gnus-summary-line-format)))
-      (setq gnus-summary-line-format nnir-summary-line-format)
-      (gnus-update-format-specifications nil 'summary))
-    (when (bound-and-true-p gnus-registry-enabled)
-      (remove-hook 'gnus-summary-article-delete-hook 'gnus-registry-action t)
-      (remove-hook 'gnus-summary-article-move-hook 'gnus-registry-action t)
-      (remove-hook 'gnus-summary-article-expire-hook 'gnus-registry-action t)
-      (add-hook 'gnus-summary-article-delete-hook 'nnir-registry-action t t)
-      (add-hook 'gnus-summary-article-move-hook 'nnir-registry-action t t)
-      (add-hook 'gnus-summary-article-expire-hook 'nnir-registry-action t t))))
-
-
-(defun gnus-summary-create-nnir-group ()
-  (interactive)
-  (or (nnir-server-opened "") (nnir-open-server "nnir"))
-  (let ((name (gnus-read-group "Group name: "))
-       (method '(nnir ""))
-       (pgroup
-        (gnus-group-guess-full-name-from-command-method gnus-newsgroup-name)))
-    (with-current-buffer gnus-group-buffer
-      (gnus-group-make-group
-       name method nil
-       (gnus-group-find-parameter pgroup)))))
-
-
-(deffoo nnir-request-create-group (group &optional _server args)
-  (message "Creating nnir group %s" group)
-  (let* ((group (gnus-group-prefixed-name  group '(nnir "nnir")))
-         (specs (assq 'nnir-specs args))
-         (query-spec
-          (or (cdr (assq 'nnir-query-spec specs))
-              (list (cons 'query
-                          (read-string "Query: " nil 'nnir-search-history)))))
-         (group-spec
-          (or (cdr (assq 'nnir-group-spec specs))
-              (list (list (read-string "Server: " nil nil)))))
-         (nnir-specs (list (cons 'nnir-query-spec query-spec)
-                           (cons 'nnir-group-spec group-spec))))
-    (gnus-group-set-parameter group 'nnir-specs nnir-specs)
-    (gnus-group-set-parameter
-     group 'nnir-artlist
-     (or (cdr (assq 'nnir-artlist args))
-         (nnir-run-query nnir-specs)))
-    (nnir-request-update-info group (gnus-get-info group)))
-  t)
-
-(deffoo nnir-request-delete-group (_group &optional _force _server)
-  t)
-
-(deffoo nnir-request-list (&optional _server)
-  t)
-
-(deffoo nnir-request-scan (_group _method)
-  t)
-
-(deffoo nnir-request-close ()
-  t)
-
-(nnoo-define-skeleton nnir)
+(autoload 'nnselect-categorize "nnselect" nil nil)
+(autoload 'gnus-group-topic-name "gnus-topic" nil nil)
+(defvar gnus-group-marked)
+(defvar gnus-topic-alist)
+
+(defun nnir-make-specs (nnir-extra-parms &optional specs)
+  "Make the query-spec and group-spec for a search with NNIR-EXTRA-PARMS.
+Query for the specs, or use SPECS."
+  (let* ((group-spec
+         (or (cdr (assq 'nnir-group-spec specs))
+             (if (gnus-server-server-name)
+                 (list (list (gnus-server-server-name)))
+               (nnselect-categorize
+                (or gnus-group-marked
+                    (if (gnus-group-group-name)
+                        (list (gnus-group-group-name))
+                      (cdr (assoc (gnus-group-topic-name) gnus-topic-alist))))
+                'nnselect-group-server))))
+        (query-spec
+         (or (cdr (assq 'nnir-query-spec specs))
+             (apply
+              'append
+              (list (cons 'query
+                          (read-string "Query: " nil 'nnir-search-history)))
+              (when nnir-extra-parms
+                (mapcar
+                 (lambda (x)
+                   (nnir-read-parms (nnir-server-to-search-engine (car x))))
+                 group-spec))))))
+    (list (cons 'nnir-query-spec query-spec)
+         (cons 'nnir-group-spec group-spec))))
 
 ;; The end.
 (provide 'nnir)
diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el
index 9c7b125..81a148d 100644
--- a/lisp/gnus/nnmaildir.el
+++ b/lisp/gnus/nnmaildir.el
@@ -492,7 +492,7 @@ This variable is set by `nnmaildir-request-article'.")
            (setq nov-mid 0))
          (goto-char (point-min))
          (delete-char 1)
-         (setq nov (nnheader-parse-naked-head)
+         (setq nov (nnheader-parse-head t)
                field (or (mail-header-lines nov) 0)))
        (unless (or (zerop field) (nnmaildir--param pgname 'distrust-Lines:))
          (setq nov-mid field))
diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el
index baf5d54..ad608b6 100644
--- a/lisp/gnus/nnml.el
+++ b/lisp/gnus/nnml.el
@@ -766,7 +766,7 @@ article number.  This function is called narrowed to an 
article."
         (if (re-search-forward "\n\r?\n" nil t)
             (1- (point))
           (point-max))))
-      (let ((headers (nnheader-parse-naked-head)))
+      (let ((headers (nnheader-parse-head t)))
        (setf (mail-header-chars  headers) chars)
        (setf (mail-header-number headers) number)
        headers))))
diff --git a/lisp/gnus/nnselect.el b/lisp/gnus/nnselect.el
new file mode 100644
index 0000000..460bc63
--- /dev/null
+++ b/lisp/gnus/nnselect.el
@@ -0,0 +1,864 @@
+;;; nnselect.el --- a virtual group backend   -*- lexical-binding:t -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Andrew Cohen <cohen@andy.bu.edu>
+;; Keywords: news mail
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This is a "virtual" backend that allows an aribtrary list of
+;; articles to be treated as a gnus group.  An nnselect group uses an
+;; nnselect-spec group parameter to specify this list of
+;; articles.  nnselect-spec is an alist with two keys:
+;; nnselect-function, whose value should be a function that returns
+;; the list of articles, and nnselect-args.  The function will be
+;; applied to the arguments to generate the list of articles.  The
+;; return value should be a vector, each element of which should in
+;; turn be a vector of three elements: a real prefixed group name, an
+;; article number in that group, and an integer score.  The score is
+;; not used by nnselect but may be used by other code to help in
+;; sorting.  Most functions will just chose a fixed number, such as
+;; 100, for this score.
+
+;; For example the search function `nnir-run-query' applied to
+;; arguments specifying a search query (see "nnir.el") can be used to
+;; return a list of articles from a search.  Or the function can be the
+;; identity and the args a vector of articles.
+
+
+;;; Code:
+
+;;; Setup:
+
+(require 'gnus-art)
+(require 'nnir)
+
+(eval-when-compile (require 'cl-lib))
+
+;; Set up the backend
+
+(nnoo-declare nnselect)
+
+(nnoo-define-basics nnselect)
+
+(gnus-declare-backend "nnselect" 'post-mail 'virtual)
+
+;;; Internal Variables:
+
+(defvar gnus-inhibit-demon)
+(defvar gnus-message-group-art)
+
+;; For future use
+(defvoo nnselect-directory gnus-directory
+  "Directory for the nnselect backend.")
+
+(defvoo nnselect-active-file
+    (expand-file-name "nnselect-active" nnselect-directory)
+  "nnselect active file.")
+
+(defvoo nnselect-groups-file
+    (expand-file-name "nnselect-newsgroups" nnselect-directory)
+  "nnselect groups description file.")
+
+;;; Helper routines.
+(defun nnselect-compress-artlist (artlist)
+  "Compress ARTLIST."
+  (let (selection)
+    (pcase-dolist (`(,artgroup . ,arts)
+                   (nnselect-categorize artlist 'nnselect-artitem-group))
+      (let (list)
+        (pcase-dolist (`(,rsv . ,articles)
+                       (nnselect-categorize
+                        arts 'nnselect-artitem-rsv 'nnselect-artitem-number))
+          (push (cons rsv (gnus-compress-sequence (sort articles '<)))
+                list))
+        (push (cons artgroup list) selection)))
+    selection))
+
+(defun nnselect-uncompress-artlist (artlist)
+  "Uncompress ARTLIST."
+  (if (vectorp artlist)
+      artlist
+    (let (selection)
+      (pcase-dolist (`(,artgroup (,artrsv . ,artseq)) artlist)
+       (setq selection
+             (vconcat
+              (cl-map 'vector
+                   #'(lambda (art)
+                       (vector artgroup art artrsv))
+                   (gnus-uncompress-sequence artseq)) selection)))
+      selection)))
+
+(defun nnselect-group-server (group)
+  "Return the server for GROUP."
+  (gnus-group-server group))
+
+;; Data type article list.
+
+(define-inline nnselect-artlist-length (artlist)
+    (inline-quote (length ,artlist)))
+
+(define-inline nnselect-artlist-article (artlist n)
+  "Return from ARTLIST the Nth artitem (counting starting at 1)."
+  (inline-quote (when (> ,n 0)
+                 (elt ,artlist (1- ,n)))))
+
+(define-inline nnselect-artitem-group (artitem)
+  "Return the group from the ARTITEM."
+  (inline-quote (elt ,artitem 0)))
+
+(define-inline nnselect-artitem-number (artitem)
+  "Return the number from the ARTITEM."
+  (inline-quote (elt ,artitem 1)))
+
+(define-inline nnselect-artitem-rsv (artitem)
+  "Return the Retrieval Status Value (RSV, score) from the ARTITEM."
+  (inline-quote (elt ,artitem 2)))
+
+(define-inline nnselect-article-group (article)
+  "Return the group for ARTICLE."
+  (inline-quote
+   (nnselect-artitem-group  (nnselect-artlist-article
+                            gnus-newsgroup-selection ,article))))
+
+(define-inline nnselect-article-number (article)
+  "Return the number for ARTICLE."
+  (inline-quote (nnselect-artitem-number
+                (nnselect-artlist-article
+                 gnus-newsgroup-selection ,article))))
+
+(define-inline nnselect-article-rsv (article)
+  "Return the rsv for ARTICLE."
+  (inline-quote (nnselect-artitem-rsv
+                (nnselect-artlist-article
+                 gnus-newsgroup-selection ,article))))
+
+(define-inline nnselect-article-id (article)
+  "Return the pair `(nnselect id . real id)' of ARTICLE."
+  (inline-quote (cons ,article (nnselect-article-number ,article))))
+
+(define-inline nnselect-categorize (sequence keyfunc &optional valuefunc)
+  "Sorts a sequence into categories.
+Returns a list of the form
+`((key1 (element11 element12)) (key2 (element21 element22))'.
+The category key for a member of the sequence is obtained
+as `(keyfunc member)' and the corresponding element is just
+`member' (or `(valuefunc member)' if `valuefunc' is non-nil)."
+  (inline-letevals (sequence keyfunc valuefunc)
+    (inline-quote  (let ((valuefunc (or ,valuefunc 'identity))
+                        result)
+                    (unless (null ,sequence)
+                     (mapc
+                      (lambda (member)
+                        (let* ((key (funcall ,keyfunc member))
+                               (value  (funcall valuefunc member))
+                               (kr (assoc key result)))
+                          (if kr
+                              (push value (cdr kr))
+                            (push (list key value) result))))
+                      (reverse ,sequence))
+                     result)))))
+
+
+;; Unclear whether a macro or an inline function is best.
+;; (defmacro nnselect-categorize (sequence keyfunc &optional valuefunc)
+;;   "Sorts a sequence into categories and returns a list of the form
+;; `((key1 (element11 element12)) (key2 (element21 element22))'.
+;; The category key for a member of the sequence is obtained
+;; as `(keyfunc member)' and the corresponding element is just
+;; `member' (or `(valuefunc member)' if `valuefunc' is non-nil)."
+;;   (let ((key (make-symbol "key"))
+;;     (value (make-symbol "value"))
+;;     (result (make-symbol "result"))
+;;     (valuefunc (or valuefunc 'identity)))
+;;     `(unless (null ,sequence)
+;;        (let (,result)
+;;      (mapc
+;;       (lambda (member)
+;;         (let* ((,key (,keyfunc member))
+;;                (,value  (,valuefunc member))
+;;                (kr (assoc ,key ,result)))
+;;           (if kr
+;;               (push ,value (cdr kr))
+;;             (push (list ,key ,value) ,result))))
+;;       (reverse ,sequence))
+;;      ,result))))
+
+(define-inline ids-by-group (articles)
+  (inline-quote
+   (nnselect-categorize ,articles 'nnselect-article-group
+                       'nnselect-article-id)))
+
+(define-inline numbers-by-group (articles)
+  (inline-quote
+   (nnselect-categorize
+    ,articles 'nnselect-article-group 'nnselect-article-number)))
+
+
+(defmacro nnselect-add-prefix (group)
+  "Ensures that the GROUP has an nnselect prefix."
+  `(gnus-group-prefixed-name
+   (gnus-group-short-name ,group) '(nnselect "nnselect")))
+
+(defmacro nnselect-get-artlist (group)
+  "Retrieve the list of articles for GROUP."
+  `(when (gnus-nnselect-group-p ,group)
+     (nnselect-uncompress-artlist
+      (gnus-group-get-parameter ,group 'nnselect-artlist t))))
+
+(defmacro nnselect-add-novitem (novitem)
+  "Add NOVITEM to the list of headers."
+  `(let* ((novitem ,novitem)
+         (artno (and novitem
+                     (mail-header-number novitem)))
+         (art (car-safe (rassq artno artids))))
+     (when art
+       (setf (mail-header-number novitem) art)
+       (push novitem headers))))
+
+;;; User Customizable Variables:
+
+(defgroup nnselect nil
+  "Virtual groups in Gnus with arbitrary selection methods."
+  :group 'gnus)
+
+(defcustom nnselect-retrieve-headers-override-function nil
+  "A function that retrieves article headers for ARTICLES from GROUP.
+The retrieved headers should populate the `nntp-server-buffer'.
+Returns either the retrieved header format 'nov or 'headers.
+
+If this variable is nil, or if the provided function returns nil,
+  `gnus-retrieve-headers' will be called instead."
+  :version "24.1" :type '(function) :group 'nnselect)
+
+
+;; Gnus backend interface functions.
+
+(deffoo nnselect-open-server (server &optional definitions)
+  ;; Just set the server variables appropriately.
+  (let ((backend (or (car (gnus-server-to-method server)) 'nnselect)))
+    (nnoo-change-server backend server definitions)))
+
+;; (deffoo nnselect-server-opened (&optional server)
+;;   "Is SERVER the current virtual server?"
+;;   (if (string-empty-p server)
+;;       t
+;;     (let ((backend (car (gnus-server-to-method server))))
+;;     (nnoo-current-server-p (or backend 'nnselect) server))))
+
+(deffoo nnselect-server-opened (&optional _server)
+  t)
+
+
+(deffoo nnselect-request-group (group &optional _server _dont-check info)
+  (let* ((group (nnselect-add-prefix group))
+        (nnselect-artlist (nnselect-get-artlist group))
+        length)
+    ;; Check for cached select result or run the selection and cache
+    ;; the result.
+    (unless nnselect-artlist
+      (gnus-group-set-parameter
+       group 'nnselect-artlist
+       (nnselect-compress-artlist (setq nnselect-artlist
+            (nnselect-run
+             (gnus-group-get-parameter group 'nnselect-specs t)))))
+      (nnselect-request-update-info
+       group (or info (gnus-get-info group))))
+    (if (zerop (setq length (nnselect-artlist-length nnselect-artlist)))
+       (progn
+         (nnheader-report 'nnselect "Selection produced empty results.")
+         (nnheader-insert ""))
+      (with-current-buffer nntp-server-buffer
+       (nnheader-insert "211 %d %d %d %s\n"
+                         length    ; total #
+                         1         ; first #
+                         length    ; last #
+                         group))) ; group name
+  nnselect-artlist))
+
+
+(deffoo nnselect-retrieve-headers (articles group &optional _server fetch-old)
+  (let ((group (nnselect-add-prefix group)))
+    (with-current-buffer (gnus-summary-buffer-name group)
+      (setq gnus-newsgroup-selection (or gnus-newsgroup-selection
+                                        (nnselect-get-artlist group)))
+      (let ((gnus-inhibit-demon t)
+           (gartids (ids-by-group articles))
+           headers)
+       (with-current-buffer nntp-server-buffer
+         (pcase-dolist (`(,artgroup . ,artids) gartids)
+           (let ((artlist (sort (mapcar 'cdr artids) '<))
+                 (gnus-override-method (gnus-find-method-for-group artgroup))
+                 (fetch-old
+                  (or
+                   (car-safe
+                    (gnus-group-find-parameter artgroup
+                                               'gnus-fetch-old-headers t))
+                   fetch-old)))
+             (erase-buffer)
+             (pcase (setq gnus-headers-retrieved-by
+                          (or
+                           (and
+                            nnselect-retrieve-headers-override-function
+                            (funcall
+                             nnselect-retrieve-headers-override-function
+                             artlist artgroup))
+                           (gnus-retrieve-headers
+                            artlist artgroup fetch-old)))
+               ('nov
+                (goto-char (point-min))
+                (while (not (eobp))
+                  (nnselect-add-novitem
+                   (nnheader-parse-nov))
+                  (forward-line 1)))
+               ('headers
+                (goto-char (point-min))
+                (while (not (eobp))
+                  (nnselect-add-novitem
+                   (nnheader-parse-head))
+                  (forward-line 1)))
+               ((pred listp)
+                (dolist (novitem gnus-headers-retrieved-by)
+                  (nnselect-add-novitem novitem)))
+               (_ (error "Unknown header type %s while requesting articles \
+                    of group %s" gnus-headers-retrieved-by artgroup)))))
+         (setq headers
+               (sort
+                headers
+                (lambda (x y)
+                  (< (mail-header-number x) (mail-header-number y))))))))))
+
+
+(deffoo nnselect-request-article (article &optional _group server to-buffer)
+  (let* ((gnus-override-method nil)
+        servers group-art artlist)
+    (if (numberp article)
+       (with-current-buffer gnus-summary-buffer
+         (unless (zerop (nnselect-artlist-length
+                         gnus-newsgroup-selection))
+           (setq group-art (cons (nnselect-article-group article)
+                                 (nnselect-article-number article)))))
+      ;; message-id: either coming from a referral or a pseudo-article
+      ;; find the servers for a pseudo-article
+      (if (eq 'nnselect (car (gnus-server-to-method server)))
+         (with-current-buffer gnus-summary-buffer
+           (let ((thread  (gnus-id-to-thread article)))
+             (when thread
+               (mapc
+                #'(lambda (x)
+                    (when (and x (> x 0))
+                      (cl-pushnew
+                       (list
+                        (gnus-method-to-server
+                         (gnus-find-method-for-group
+                          (nnselect-article-group x)))) servers :test 'equal)))
+                (gnus-articles-in-thread thread)))))
+       (setq servers (list (list server))))
+      (setq artlist
+           (nnir-run-query
+            (list
+             (cons 'nnir-query-spec
+                   (list (cons 'query  (format "HEADER Message-ID %s" article))
+                   (cons 'criteria "")  (cons 'shortcut t)))
+             (cons 'nnir-group-spec servers))))
+      (unless (zerop (nnselect-artlist-length artlist))
+       (setq
+        group-art
+        (cons
+         (nnselect-artitem-group (nnselect-artlist-article  artlist 1))
+         (nnselect-artitem-number (nnselect-artlist-article  artlist 1))))))
+    (when (numberp (cdr group-art))
+      (message "Requesting article %d from group %s"
+              (cdr group-art) (car group-art))
+      (if to-buffer
+         (with-current-buffer to-buffer
+           (let ((gnus-article-decode-hook nil))
+             (gnus-request-article-this-buffer
+              (cdr group-art) (car group-art))))
+       (gnus-request-article (cdr group-art) (car group-art)))
+      group-art)))
+
+
+(deffoo nnselect-request-move-article
+    (article _group _server accept-form &optional last _internal-move-group)
+  (let* ((artgroup (nnselect-article-group article))
+        (artnumber (nnselect-article-number article))
+        (to-newsgroup (nth 1 accept-form))
+        (to-method (gnus-find-method-for-group to-newsgroup))
+        (from-method (gnus-find-method-for-group artgroup))
+        (move-is-internal (gnus-server-equal from-method to-method)))
+    (unless (gnus-check-backend-function
+            'request-move-article artgroup)
+      (error "The group %s does not support article moving" artgroup))
+    (gnus-request-move-article
+     artnumber
+     artgroup
+     (nth 1 from-method)
+     accept-form
+     last
+     (and move-is-internal
+         to-newsgroup          ; Not respooling
+         (gnus-group-real-name to-newsgroup)))))
+
+
+(deffoo nnselect-request-expire-articles
+    (articles _group &optional _server force)
+  (if force
+      (let (not-expired)
+       (pcase-dolist (`(,artgroup . ,artids) (ids-by-group articles))
+         (let ((artlist (sort (mapcar 'cdr artids) '<)))
+           (unless (gnus-check-backend-function 'request-expire-articles
+                                                artgroup)
+             (error "Group %s does not support article expiration" artgroup))
+           (unless (gnus-check-server (gnus-find-method-for-group artgroup))
+             (error "Couldn't open server for group %s" artgroup))
+           (push (mapcar #'(lambda (art)
+                             (car (rassq art artids)))
+                         (let ((nnimap-expunge 'immediately))
+                           (gnus-request-expire-articles
+                            artlist artgroup force)))
+                 not-expired)))
+       (sort (delq nil not-expired) '<))
+    articles))
+
+
+(deffoo nnselect-warp-to-article ()
+  (let* ((cur (if (> (gnus-summary-article-number) 0)
+                 (gnus-summary-article-number)
+               (error "Can't warp to a pseudo-article")))
+        (artgroup (nnselect-article-group cur))
+         (artnumber (nnselect-article-number cur))
+        (_quit-config (gnus-ephemeral-group-p gnus-newsgroup-name)))
+
+    ;; what should we do here? we could leave all the buffers around
+    ;; and assume that we have to exit from them one by one. or we can
+    ;; try to clean up directly
+
+    ;;first exit from the nnselect summary buffer.
+    ;;(gnus-summary-exit)
+    ;; and if the nnselect summary buffer in turn came from another
+    ;; summary buffer we have to clean that summary up too.
+    ;;(when (not (eq (cdr quit-config) 'group))
+    ;;  (gnus-summary-exit))
+    (gnus-summary-read-group-1 artgroup t t  nil
+                               nil (list artnumber))))
+
+
+;; we pass this through to the real group in case it wants to adjust
+;; the mark. We also use this to mark an article expirable iff it is
+;; expirable in the real group.
+(deffoo nnselect-request-update-mark (_group article mark)
+  (let* ((artgroup (nnselect-article-group article))
+        (artnumber (nnselect-article-number article))
+        (gmark (gnus-request-update-mark artgroup artnumber mark)))
+    (when (and artnumber
+              (memq mark gnus-auto-expirable-marks)
+              (= mark gmark)
+              (gnus-group-auto-expirable-p artgroup))
+      (setq gmark gnus-expirable-mark))
+    gmark))
+
+
+(deffoo nnselect-request-set-mark (_group actions &optional _server)
+  (mapc
+   (lambda (request) (gnus-request-set-mark (car request) (cdr request)))
+   (nnselect-categorize
+    (cl-mapcan
+     (lambda (act)
+       (cl-destructuring-bind (range action marks) act
+        (mapcar
+         (lambda (artgroup)
+           (list (car artgroup)
+                 (gnus-compress-sequence (sort (cdr artgroup) '<))
+                 action marks))
+         (numbers-by-group
+          (gnus-uncompress-range range)))))
+     actions)
+    'car 'cdr)))
+
+(deffoo nnselect-request-update-info (group info &optional _server)
+  (let* ((group  (nnselect-add-prefix group))
+        (gnus-newsgroup-selection (or gnus-newsgroup-selection
+                                      (nnselect-get-artlist group))))
+    (gnus-info-set-marks info nil)
+    (setf (gnus-info-read info) nil)
+    (pcase-dolist (`(,artgroup . ,nartids)
+                  (ids-by-group
+                   (number-sequence 1 (nnselect-artlist-length
+                                       gnus-newsgroup-selection))))
+      (let* ((gnus-newsgroup-active nil)
+            (artids (cl-sort nartids '< :key 'car))
+            (group-info (gnus-get-info artgroup))
+            (marks (gnus-info-marks group-info))
+            (unread (gnus-uncompress-sequence
+                     (gnus-range-difference (gnus-active artgroup)
+                                            (gnus-info-read group-info)))))
+       (gnus-atomic-progn
+         (setf (gnus-info-read info)
+               (gnus-add-to-range
+                (gnus-info-read info)
+                (delq nil
+                      (mapcar
+                       #'(lambda (art)
+                           (unless (memq (cdr art) unread) (car art)))
+                       artids))))
+         (pcase-dolist (`(,type . ,range) marks)
+           (setq range (gnus-uncompress-sequence range))
+           (gnus-add-marked-articles
+            group type
+            (delq nil
+                  (mapcar
+                   #'(lambda (art)
+                       (when (memq (cdr art) range)
+                         (car art)))  artids)))))))
+    (gnus-set-active group (cons 1 (nnselect-artlist-length
+                                   gnus-newsgroup-selection)))))
+
+
+(deffoo nnselect-request-thread (header &optional group server)
+  (with-current-buffer gnus-summary-buffer
+    (let ((group (nnselect-add-prefix group))
+         ;; find the best group for the originating article. if its a
+         ;; pseudo-article look for real articles in the same thread
+         ;; and see where they come from.
+         (artgroup (nnselect-article-group
+                    (if (> (mail-header-number header) 0)
+                        (mail-header-number header)
+                      (if (> (gnus-summary-article-number) 0)
+                          (gnus-summary-article-number)
+                        (let ((thread
+                               (gnus-id-to-thread (mail-header-id header))))
+                          (when thread
+                            (cl-some #'(lambda (x)
+                                         (when (and x (> x 0)) x))
+                                     (gnus-articles-in-thread thread)))))))))
+      ;; Check if we are dealing with an imap backend.
+      (if (eq 'nnimap
+             (car (gnus-find-method-for-group artgroup)))
+         ;; If so we perform the query, massage the result, and return
+         ;; the new headers back to the caller to incorporate into the
+         ;; current summary buffer.
+         (let* ((group-spec
+                 (list (delq nil (list
+                                  (or server (gnus-group-server artgroup))
+                                  (unless  gnus-refer-thread-use-search
+                                    artgroup)))))
+                (query-spec
+                 (list (cons 'query (nnimap-make-thread-query header))
+                       (cons 'criteria "")))
+                (last (nnselect-artlist-length gnus-newsgroup-selection))
+                (first (1+ last))
+                (new-nnselect-artlist
+                 (nnir-run-query
+                  (list (cons 'nnir-query-spec query-spec)
+                        (cons 'nnir-group-spec group-spec))))
+                old-arts seq
+                headers)
+           (mapc
+            #'(lambda (article)
+                (if
+                    (setq seq
+                          (cl-position article
+                                       gnus-newsgroup-selection :test 'equal))
+                    (push (1+ seq) old-arts)
+                  (setq gnus-newsgroup-selection
+                        (vconcat gnus-newsgroup-selection (vector article)))
+                  (cl-incf last)))
+            new-nnselect-artlist)
+           (setq headers
+                 (gnus-fetch-headers
+                  (append (sort old-arts '<)
+                          (number-sequence first last)) nil t))
+           (gnus-group-set-parameter
+            group
+            'nnselect-artlist
+            (nnselect-compress-artlist gnus-newsgroup-selection))
+           (when (>= last first)
+             (let (new-marks)
+               (pcase-dolist (`(,artgroup . ,artids)
+                              (ids-by-group (number-sequence first last)))
+                 (pcase-dolist (`(,type . ,marked)
+                                (gnus-info-marks (gnus-get-info artgroup)))
+                   (setq marked (gnus-uncompress-sequence marked))
+                   (when (setq new-marks
+                               (delq nil
+                                     (mapcar
+                                      #'(lambda (art)
+                                          (when (memq (cdr art) marked)
+                                            (car art)))
+                                      artids)))
+                     (nconc
+                      (symbol-value
+                       (intern
+                        (format "gnus-newsgroup-%s"
+                                (car (rassq type gnus-article-mark-lists)))))
+                      new-marks)))))
+             (setq gnus-newsgroup-active
+                   (cons 1 (nnselect-artlist-length gnus-newsgroup-selection)))
+             (gnus-set-active
+              group
+              (cons 1 (nnselect-artlist-length gnus-newsgroup-selection))))
+           headers)
+       ;; If not an imap backend just warp to the original article
+       ;; group and punt back to gnus-summary-refer-thread.
+       (and (gnus-warp-to-article) (gnus-summary-refer-thread))))))
+
+
+(deffoo nnselect-close-group (group &optional _server)
+  (let ((group (nnselect-add-prefix group)))
+    (unless gnus-group-is-exiting-without-update-p
+      (nnselect-push-info group))
+    (setq gnus-newsgroup-selection nil)
+    (when (gnus-ephemeral-group-p group)
+      (gnus-kill-ephemeral-group group)
+      (setq gnus-ephemeral-servers
+           (assq-delete-all 'nnselect gnus-ephemeral-servers)))))
+
+
+(deffoo nnselect-request-create-group (group &optional _server args)
+  (message "Creating nnselect group %s" group)
+  (let* ((group (gnus-group-prefixed-name  group '(nnselect "nnselect")))
+         (specs (assq 'nnselect-specs args))
+         (function-spec
+          (or  (alist-get 'nnselect-function specs)
+              (intern (completing-read "Function: " obarray #'functionp))))
+         (args-spec
+          (or  (alist-get 'nnselect-args specs)
+               (read-from-minibuffer "Args: " nil nil t nil "nil")))
+         (nnselect-specs (list (cons 'nnselect-function function-spec)
+                              (cons 'nnselect-args args-spec))))
+    (gnus-group-set-parameter group 'nnselect-specs nnselect-specs)
+    (gnus-group-set-parameter
+     group 'nnselect-artlist
+     (nnselect-compress-artlist (or  (alist-get 'nnselect-artlist args)
+         (nnselect-run nnselect-specs))))
+    (nnselect-request-update-info group (gnus-get-info group)))
+  t)
+
+
+(deffoo nnselect-request-type (_group &optional article)
+  (if (and (numberp article) (> article 0))
+      (gnus-request-type
+       (nnselect-article-group article) (nnselect-article-number article))
+    'unknown))
+
+(deffoo nnselect-request-post (&optional _server)
+  (if (not gnus-message-group-art)
+      (nnheader-report 'nnselect "Can't post to an nnselect group")
+    (gnus-request-post
+     (gnus-find-method-for-group
+      (nnselect-article-group (cdr gnus-message-group-art))))))
+
+
+(deffoo nnselect-request-rename-group (_group _new-name &optional _server)
+  t)
+
+
+(deffoo nnselect-request-scan (group _method)
+  (when (and group
+            (gnus-group-get-parameter  (nnselect-add-prefix group)
+                                       'nnselect-rescan t))
+    (nnselect-request-group-scan group)))
+
+
+(deffoo nnselect-request-group-scan (group &optional _server _info)
+  (let* ((group (nnselect-add-prefix group))
+        (artlist (nnselect-run
+                  (gnus-group-get-parameter group 'nnselect-specs t))))
+    (gnus-set-active group (cons 1 (nnselect-artlist-length
+                                   artlist)))
+    (gnus-group-set-parameter
+     group 'nnselect-artlist
+     (nnselect-compress-artlist artlist))))
+
+;; Add any undefined required backend functions
+
+;; (nnoo-define-skeleton nnselect)
+
+;;; Util Code:
+
+(defun gnus-nnselect-group-p (group)
+  "Say whether GROUP is nnselect or not."
+  (or (and (gnus-group-prefixed-p group)
+          (eq 'nnselect (car (gnus-find-method-for-group group))))
+      (eq 'nnselect (car gnus-command-method))))
+
+
+(defun nnselect-run (specs)
+  "Apply nnselect-function to nnselect-args from SPECS.
+Return an article list."
+  (let ((func (alist-get 'nnselect-function specs))
+       (args (alist-get 'nnselect-args specs)))
+    (funcall func args)))
+
+
+(defun nnselect-search-thread (header)
+  "Make an nnselect group containing the thread with article HEADER.
+The current server will be searched.  If the registry is
+installed, the server that the registry reports the current
+article came from is also searched."
+  (let* ((query
+         (list (cons 'query (nnimap-make-thread-query header))
+               (cons 'criteria "")))
+        (server
+         (list (list (gnus-method-to-server
+          (gnus-find-method-for-group gnus-newsgroup-name)))))
+        (registry-group (and
+                         (bound-and-true-p gnus-registry-enabled)
+                         (car (gnus-registry-get-id-key
+                               (mail-header-id header) 'group))))
+        (registry-server
+         (and registry-group
+              (gnus-method-to-server
+               (gnus-find-method-for-group registry-group)))))
+    (when registry-server (cl-pushnew (list registry-server) server
+                                     :test 'equal))
+    (gnus-group-read-ephemeral-group
+     (concat "nnselect-" (message-unique-id))
+     (list 'nnselect "nnselect")
+     nil
+     (cons (current-buffer) gnus-current-window-configuration)
+                                       ;     nil
+     nil nil
+     (list
+      (cons 'nnselect-specs
+           (list
+            (cons 'nnselect-function 'nnir-run-query)
+            (cons 'nnselect-args
+                  (list (cons 'nnir-query-spec query)
+                        (cons 'nnir-group-spec server)))))
+      (cons 'nnselect-artlist nil)))
+    (gnus-summary-goto-subject (gnus-id-to-article (mail-header-id header)))))
+
+
+
+(defun nnselect-push-info (group)
+  "Copy mark-lists from GROUP to the originating groups."
+  (let ((select-unreads (numbers-by-group gnus-newsgroup-unreads))
+       (select-reads (numbers-by-group
+                      (gnus-uncompress-range
+                       (gnus-info-read (gnus-get-info group)))))
+       (select-unseen (numbers-by-group gnus-newsgroup-unseen))
+       (gnus-newsgroup-active nil)
+       mark-list type-list)
+    (pcase-dolist (`(,mark . ,type) gnus-article-mark-lists)
+      (when (setq type-list
+                 (symbol-value (intern (format "gnus-newsgroup-%s" mark))))
+       (push (cons type
+                   (numbers-by-group
+                    (gnus-uncompress-range type-list))) mark-list)))
+    (pcase-dolist (`(,artgroup . ,artlist)
+                  (numbers-by-group gnus-newsgroup-articles))
+      (let* ((group-info (gnus-get-info artgroup))
+            (old-unread (gnus-list-of-unread-articles artgroup))
+            newmarked)
+       (when group-info
+         (pcase-dolist (`(,_mark . ,type) gnus-article-mark-lists)
+           (let ((select-type
+                  (sort
+                   (cdr (assoc artgroup  (alist-get type mark-list)))
+                   '<))  list)
+             (setq list
+                   (gnus-uncompress-range
+                    (gnus-add-to-range
+                     (gnus-remove-from-range
+                      (alist-get type (gnus-info-marks group-info))
+                      artlist)
+                     select-type)))
+
+             (when list
+               ;; Get rid of the entries of the articles that have the
+               ;; default score.
+               (when (and (eq type 'score)
+                          gnus-save-score
+                          list)
+                 (let* ((arts list)
+                        (prev (cons nil list))
+                        (all prev))
+                   (while arts
+                     (if (or (not (consp (car arts)))
+                             (= (cdar arts) gnus-summary-default-score))
+                         (setcdr prev (cdr arts))
+                       (setq prev arts))
+                     (setq arts (cdr arts)))
+                   (setq list (cdr all)))))
+
+             (when  (or (eq (gnus-article-mark-to-type type) 'list)
+                        (eq (gnus-article-mark-to-type type) 'range))
+               (setq list
+                     (gnus-compress-sequence  (sort list '<) t)))
+
+             ;; When exiting the group, everything that's previously been
+             ;; unseen is now seen.
+             (when (eq  type 'seen)
+               (setq list (gnus-range-add
+                           list (cdr (assoc artgroup select-unseen)))))
+
+             (when (or list (eq  type 'unexist))
+               (push (cons  type list) newmarked))))
+
+         (gnus-atomic-progn
+           ;; Enter these new marks into the info of the group.
+           (if (nthcdr 3 group-info)
+               (setcar (nthcdr 3 group-info) newmarked)
+             ;; Add the marks lists to the end of the info.
+             (when newmarked
+               (setcdr (nthcdr 2 group-info) (list newmarked))))
+
+           ;; Cut off the end of the info if there's nothing else there.
+           (let ((i 5))
+             (while (and (> i 2)
+                         (not (nth i group-info)))
+               (when (nthcdr (cl-decf i) group-info)
+                 (setcdr (nthcdr i group-info) nil))))
+
+           ;; update read and unread
+           (gnus-update-read-articles
+            artgroup
+            (gnus-uncompress-range
+             (gnus-add-to-range
+              (gnus-remove-from-range
+               old-unread
+               (cdr (assoc artgroup select-reads)))
+              (sort (cdr (assoc artgroup select-unreads)) '<))))
+           (gnus-get-unread-articles-in-group
+            group-info (gnus-active artgroup) t)
+           (gnus-group-update-group artgroup t t)))))))
+
+
+(declare-function gnus-registry-get-id-key "gnus-registry" (id key))
+
+(defun gnus-summary-make-search-group (nnir-extra-parms)
+  "Search a group from the summary buffer.
+Pass NNIR-EXTRA-PARMS on to the search engine."
+  (interactive "P")
+  (gnus-warp-to-article)
+  (let ((spec
+        (list
+         (cons 'nnir-group-spec
+               (list (list
+                      (gnus-group-server gnus-newsgroup-name)
+                      gnus-newsgroup-name))))))
+    (gnus-group-make-search-group nnir-extra-parms spec)))
+
+
+;; The end.
+(provide 'nnselect)
+
+;;; nnselect.el ends here
diff --git a/lisp/gnus/nnspool.el b/lisp/gnus/nnspool.el
index 33b68fa..0b6bba5 100644
--- a/lisp/gnus/nnspool.el
+++ b/lisp/gnus/nnspool.el
@@ -422,7 +422,7 @@ there.")
              (nnspool-article-pathname nnspool-current-group article))
         (nnheader-insert-article-line article)
         (goto-char (point-min))
-        (let ((headers (nnheader-parse-head)))
+        (let ((headers (nnheader-parse-head nil t)))
           (set-buffer cur)
           (goto-char (point-max))
           (nnheader-insert-nov headers)))
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index a5241f2..baf0fef 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -151,9 +151,7 @@ When called from lisp, FUNCTION may also be a function 
object."
    (let* ((fn (function-called-at-point))
           (enable-recursive-minibuffers t)
           (val (completing-read
-                (if fn
-                    (format-prompt "Describe function" fn)
-                  "Describe function: ")
+                (format-prompt "Describe function" fn)
                 #'help--symbol-completion-table
                 (lambda (f) (or (fboundp f) (get f 'function-documentation)))
                 t nil nil
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 8a68df8..ba266cf 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -715,7 +715,7 @@ matches exist."
        (setq prospects (nreverse prospects))
         ;; Return the first match if the user hits enter.
         (when icomplete-show-matches-on-no-input
-          (setq completion-content-when-empty (car prospects)))
+          (setq-local completion-content-when-empty (car prospects)))
         ;; Decorate first of the prospects.
        (when prospects
          (let ((first (copy-sequence (pop prospects))))
diff --git a/lisp/indent.el b/lisp/indent.el
index 0a0dd99..9f32ced 100644
--- a/lisp/indent.el
+++ b/lisp/indent.el
@@ -53,7 +53,16 @@ If `complete', TAB first tries to indent the current line, 
and if the line
 was already indented, then try to complete the thing at point.
 
 Some programming language modes have their own variable to control this,
-e.g., `c-tab-always-indent', and do not respect this variable."
+e.g., `c-tab-always-indent', and do not respect this variable.
+
+If you want the TAB key to always insert a literal TAB character,
+this can't be controlled by setting this variable.  Instead you
+could say something like:
+
+\(setq overriding-terminal-local-map
+      (let ((map (make-sparse-keymap)))
+        (define-key map [?\t] 'self-insert-command)
+        map))"
   :group 'indent
   :type '(choice
          (const :tag "Always indent" t)
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 02dacaf..75d1c61 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -3010,6 +3010,15 @@ on encoding."
                ;; higher code, so it gets pushed later!
                (if new-name (puthash new-name c names))
                (if old-name (puthash old-name c names))
+                ;; Unicode uses the spelling "lamda" in character
+                ;; names, instead of "lambda", due to "preferences
+                ;; expressed by the Greek National Body" (Bug#30513).
+                ;; Some characters have an old-name with the "lambda"
+                ;; spelling, but others don't.  Add the traditional
+                ;; spelling for more convenient completion.
+                (when (and (not old-name) new-name
+                           (string-match "\\<LAMDA\\>" new-name))
+                  (puthash (replace-match "LAMBDA" t t new-name) c names))
                (setq c (1+ c))))))
         ;; Special case for "BELL" which is apparently the only char which
         ;; doesn't have a new name and whose old-name is shadowed by a newer
diff --git a/lisp/language/cyrillic.el b/lisp/language/cyrillic.el
index 9847ab6..c196370 100644
--- a/lisp/language/cyrillic.el
+++ b/lisp/language/cyrillic.el
@@ -169,13 +169,6 @@ Support for Russian using koi8-r and the russian-computer 
input method.")
   :charset-list '(ibm866)
   :mime-charset 'cp866)
 
-(define-coding-system 'koi8-u
-  "KOI8-U 8-bit encoding for Cyrillic (MIME: KOI8-U)"
-  :coding-type 'charset
-  :mnemonic ?U
-  :charset-list '(koi8-u)
-  :mime-charset 'koi8-u)
-
 (define-coding-system 'koi8-t
   "KOI8-T 8-bit encoding for Cyrillic"
   :coding-type 'charset
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el
index 7077925..40a4150 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -55,7 +55,7 @@ should return a grid vector array that is the new solution.
 
 \(fn BREEDER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"5x5" '("5x5-")))
+(register-definition-prefixes "5x5" '("5x5-"))
 
 ;;;***
 
@@ -192,7 +192,7 @@ old-style time formats for entries are supported.
 
 \(fn OTHER-LOG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"add-log" '("add-log-" "change-log-")))
+(register-definition-prefixes "add-log" '("add-log-" "change-log-"))
 
 ;;;***
 
@@ -329,7 +329,7 @@ usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] 
FLAG...)
 
 (function-put 'defadvice 'lisp-indent-function '2)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"advice" '("ad-")))
+(register-definition-prefixes "advice" '("ad-"))
 
 ;;;***
 
@@ -432,7 +432,7 @@ A replacement function for `newline-and-indent', aligning 
as it goes.
 The alignment is done by calling `align' on the region that was
 indented." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"align" '("align-")))
+(register-definition-prefixes "align" '("align-"))
 
 ;;;***
 
@@ -477,11 +477,11 @@ With value nil, inhibit any automatic allout-mode 
activation.")
 
 (custom-autoload 'allout-auto-activation "allout" nil)
 
-(put 'allout-use-hanging-indents 'safe-local-variable (if (fboundp 'booleanp) 
'booleanp (lambda (x) (member x '(t nil)))))
+(put 'allout-use-hanging-indents 'safe-local-variable 'booleanp)
 
 (put 'allout-reindent-bodies 'safe-local-variable (lambda (x) (memq x '(nil t 
text force))))
 
-(put 'allout-show-bodies 'safe-local-variable (if (fboundp 'booleanp) 
'booleanp (lambda (x) (member x '(t nil)))))
+(put 'allout-show-bodies 'safe-local-variable 'booleanp)
 
 (put 'allout-header-prefix 'safe-local-variable 'stringp)
 
@@ -493,13 +493,13 @@ With value nil, inhibit any automatic allout-mode 
activation.")
 
 (put 'allout-use-mode-specific-leader 'safe-local-variable (lambda (x) (or 
(memq x '(t nil allout-mode-leaders comment-start)) (stringp x))))
 
-(put 'allout-old-style-prefixes 'safe-local-variable (if (fboundp 'booleanp) 
'booleanp (lambda (x) (member x '(t nil)))))
+(put 'allout-old-style-prefixes 'safe-local-variable 'booleanp)
 
-(put 'allout-stylish-prefixes 'safe-local-variable (if (fboundp 'booleanp) 
'booleanp (lambda (x) (member x '(t nil)))))
+(put 'allout-stylish-prefixes 'safe-local-variable 'booleanp)
 
-(put 'allout-numbered-bullet 'safe-local-variable (if (fboundp 
'string-or-null-p) 'string-or-null-p (lambda (x) (or (stringp x) (null x)))))
+(put 'allout-numbered-bullet 'safe-local-variable 'string-or-null-p)
 
-(put 'allout-file-xref-bullet 'safe-local-variable (if (fboundp 
'string-or-null-p) 'string-or-null-p (lambda (x) (or (stringp x) (null x)))))
+(put 'allout-file-xref-bullet 'safe-local-variable 'string-or-null-p)
 
 (put 'allout-presentation-padding 'safe-local-variable 'integerp)
 
@@ -516,6 +516,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \\<allout-mode-map-value>
 Allout outline mode is a minor mode that provides extensive
 outline oriented formatting and manipulation.  It enables
@@ -788,7 +791,7 @@ for details on preparing Emacs for automatic allout 
activation.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"allout" '("allout-")))
+(register-definition-prefixes "allout" '("allout-"))
 
 ;;;***
 
@@ -821,7 +824,7 @@ See `allout-widgets-mode' for allout widgets mode 
features.")
 
 (custom-autoload 'allout-widgets-auto-activation "allout-widgets" nil)
 
-(put 'allout-widgets-mode-inhibit 'safe-local-variable (if (fboundp 'booleanp) 
'booleanp (lambda (x) (member x '(t nil)))))
+(put 'allout-widgets-mode-inhibit 'safe-local-variable 'booleanp)
 
 (autoload 'allout-widgets-mode "allout-widgets" "\
 Toggle Allout Widgets mode.
@@ -831,6 +834,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Allout Widgets mode is an extension of Allout mode that provides
 graphical decoration of outline structure.  It is meant to
 operate along with `allout-mode', via `allout-mode-hook'.
@@ -851,7 +857,7 @@ outline hot-spot navigation (see `allout-mode').
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"allout-widgets" '("allout-")))
+(register-definition-prefixes "allout-widgets" '("allout-"))
 
 ;;;***
 
@@ -874,7 +880,7 @@ directory, so that Emacs will know its current contents.
 
 \(fn OPERATION &rest ARGS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ange-ftp" '("ange-ftp-" "ftp-error" "internal-ange-ftp-mode")))
+(register-definition-prefixes "ange-ftp" '("ange-ftp-" "ftp-error" 
"internal-ange-ftp-mode"))
 
 ;;;***
 
@@ -908,7 +914,7 @@ the buffer *Birthday-Present-for-Name*.
 
 \(fn &optional NAME)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"animate" '("animat")))
+(register-definition-prefixes "animate" '("animat"))
 
 ;;;***
 
@@ -934,7 +940,7 @@ This is a good function to put in 
`comint-output-filter-functions'.
 
 \(fn IGNORED)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ansi-color" '("ansi-color-")))
+(register-definition-prefixes "ansi-color" '("ansi-color-"))
 
 ;;;***
 
@@ -969,7 +975,7 @@ Major mode for editing ANTLR grammar files.
 Use ANTLR's convention for TABs according to `antlr-tab-offset-alist'.
 Used in `antlr-mode'.  Also a useful function in `java-mode-hook'." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"antlr-mode" '("antlr-")))
+(register-definition-prefixes "antlr-mode" '("antlr-"))
 
 ;;;***
 
@@ -992,7 +998,7 @@ ARG is positive, otherwise off.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"appt" '("appt-")))
+(register-definition-prefixes "appt" '("appt-"))
 
 ;;;***
 
@@ -1038,6 +1044,19 @@ will be buffer-local when set.
 
 \(fn PATTERN &optional BUFFER)" t nil)
 
+(autoload 'apropos-function "apropos" "\
+Show functions that match PATTERN.
+
+PATTERN can be a word, a list of words (separated by spaces),
+or a regexp (using some regexp special characters).  If it is a word,
+search for matches for that word as a substring.  If it is a list of words,
+search for matches for any two (or more) of those words.
+
+This is the same as running `apropos-command' with a \\[universal-argument] 
prefix,
+or a non-nil `apropos-do-all' argument.
+
+\(fn PATTERN)" t nil)
+
 (defalias 'command-apropos 'apropos-command)
 
 (autoload 'apropos-command "apropos" "\
@@ -1126,7 +1145,7 @@ Returns list of symbols and documentation found.
 
 \(fn PATTERN &optional DO-ALL)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"apropos" '("apropos-")))
+(register-definition-prefixes "apropos" '("apropos-"))
 
 ;;;***
 
@@ -1148,7 +1167,7 @@ archive.
 
 \(fn &optional FORCE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"arc-mode" '("arc")))
+(register-definition-prefixes "arc-mode" '("arc"))
 
 ;;;***
 
@@ -1221,7 +1240,7 @@ Entering array mode calls the function `array-mode-hook'.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"array" '("array-" "current-line" "limit-index" "move-to-column-untabify" 
"untabify-backward")))
+(register-definition-prefixes "array" '("array-" "current-line" "limit-index" 
"move-to-column-untabify" "untabify-backward"))
 
 ;;;***
 
@@ -1237,6 +1256,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Artist lets you draw lines, squares, rectangles and poly-lines,
 ellipses and circles with your mouse and/or keyboard.
 
@@ -1434,7 +1456,7 @@ Keymap summary
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"artist" '("artist-")))
+(register-definition-prefixes "artist" '("artist-"))
 
 ;;;***
 
@@ -1463,7 +1485,7 @@ Special commands:
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"asm-mode" '("asm-")))
+(register-definition-prefixes "asm-mode" '("asm-"))
 
 ;;;***
 
@@ -1487,7 +1509,7 @@ passwords are revealed when point moved into the password.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"auth-source" '("auth")))
+(register-definition-prefixes "auth-source" '("auth"))
 
 ;;;***
 
@@ -1514,7 +1536,7 @@ key2: value2
 
 \(fn KEY ENTRY)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"auth-source-pass" '("auth-source-pass-")))
+(register-definition-prefixes "auth-source-pass" '("auth-source-pass-"))
 
 ;;;***
 
@@ -1569,6 +1591,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \\<autoarg-kp-mode-map>
 This is similar to `autoarg-mode' but rebinds the keypad keys
 `kp-1' etc. to supply digit arguments.
@@ -1577,7 +1602,7 @@ This is similar to `autoarg-mode' but rebinds the keypad 
keys
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"autoarg" '("autoarg-")))
+(register-definition-prefixes "autoarg" '("autoarg-"))
 
 ;;;***
 
@@ -1589,7 +1614,7 @@ Major mode for editing Autoconf configure.ac files.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"autoconf" '("autoconf-")))
+(register-definition-prefixes "autoconf" '("autoconf-"))
 
 ;;;***
 
@@ -1625,12 +1650,15 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Auto-insert mode is enabled, when new files are created you can
 insert a template for the file depending on the mode of the buffer.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"autoinsert" '("auto-insert")))
+(register-definition-prefixes "autoinsert" '("auto-insert"))
 
 ;;;***
 
@@ -1682,7 +1710,7 @@ Calls `update-directory-autoloads' on the command line 
arguments.
 Definitions are written to `generated-autoload-file' (which
 should be non-nil)." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"autoload" '("autoload-" "generate" "make-autoload" "no-update-autoloads")))
+(register-definition-prefixes "autoload" '("autoload-" 
"batch-update-autoloads--summary" "generate" "make-autoload" 
"no-update-autoloads"))
 
 ;;;***
 
@@ -1697,6 +1725,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Auto-Revert Mode is a minor mode that affects only the current
 buffer.  When enabled, it reverts the buffer when the file on
 disk changes.
@@ -1724,6 +1755,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Auto-Revert Tail Mode is enabled, the tail of the file is
 constantly followed, as with the shell command `tail -f'.  This
 means that whenever the file grows on disk (presumably because
@@ -1765,6 +1799,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Global Auto-Revert Mode is a global minor mode that reverts any
 buffer associated with a file when the file changes on disk.  Use
 `auto-revert-mode' to revert a particular buffer.
@@ -1784,7 +1821,7 @@ specifies in the mode line.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"autorevert" '("auto-revert-" "global-auto-revert-")))
+(register-definition-prefixes "autorevert" '("auto-revert-" 
"global-auto-revert-"))
 
 ;;;***
 
@@ -1792,7 +1829,7 @@ specifies in the mode line.
 ;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/avl-tree.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"avl-tree" '("avl-tree-")))
+(register-definition-prefixes "avl-tree" '("avl-tree-"))
 
 ;;;***
 
@@ -1832,7 +1869,7 @@ definition of \"random distance\".)
 
 \(fn &optional MODE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"avoid" '("mouse-avoidance-")))
+(register-definition-prefixes "avoid" '("mouse-avoidance-"))
 
 ;;;***
 
@@ -1845,7 +1882,7 @@ definition of \"random distance\".)
 Print a trace of Lisp function calls currently active.
 Output stream used is value of `standard-output'." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"backtrace" '("backtrace-")))
+(register-definition-prefixes "backtrace" '("backtrace-"))
 
 ;;;***
 
@@ -1865,7 +1902,7 @@ Run script using `bat-run' and `bat-run-args'.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"bat-mode" '("bat-")))
+(register-definition-prefixes "bat-mode" '("bat-"))
 
 ;;;***
 
@@ -1896,6 +1933,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 The text displayed in the mode line is controlled by
 `battery-mode-line-format' and `battery-status-function'.
 The mode line is be updated every `battery-update-interval'
@@ -1903,7 +1943,7 @@ seconds.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"battery" '("battery-")))
+(register-definition-prefixes "battery" '("battery-"))
 
 ;;;***
 
@@ -1951,14 +1991,14 @@ The return value is the value of the final form in BODY.
 
 (function-put 'benchmark-progn 'lisp-indent-function '0)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"benchmark" '("benchmark-elapse")))
+(register-definition-prefixes "benchmark" '("benchmark-elapse"))
 
 ;;;***
 
 ;;;### (autoloads nil "bib-mode" "textmodes/bib-mode.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/bib-mode.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"bib-mode" '("addbib" "bib-" "mark-bib" "return-key-bib" "unread-bib")))
+(register-definition-prefixes "bib-mode" '("addbib" "bib-" "mark-bib" 
"return-key-bib" "unread-bib"))
 
 ;;;***
 
@@ -2051,7 +2091,7 @@ A prefix arg negates the value of 
`bibtex-search-entry-globally'.
 
 \(fn KEY &optional GLOBAL START DISPLAY)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"bibtex" '("bibtex-")))
+(register-definition-prefixes "bibtex" '("bibtex-"))
 
 ;;;***
 
@@ -2064,14 +2104,14 @@ Major mode for editing BibTeX style files.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"bibtex-style" '("bibtex-style-")))
+(register-definition-prefixes "bibtex-style" '("bibtex-style-"))
 
 ;;;***
 
 ;;;### (autoloads nil "bindat" "emacs-lisp/bindat.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/bindat.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"bindat" '("bindat-")))
+(register-definition-prefixes "bindat" '("bindat-"))
 
 ;;;***
 
@@ -2097,7 +2137,7 @@ Binhex decode region between START and END.
 
 \(fn START END)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"binhex" '("binhex-")))
+(register-definition-prefixes "binhex" '("binhex-"))
 
 ;;;***
 
@@ -2218,7 +2258,7 @@ a reflection.
 
 \(fn NUM)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"blackbox" '("bb-" "blackbox-")))
+(register-definition-prefixes "blackbox" '("bb-" "blackbox-"))
 
 ;;;***
 
@@ -2229,7 +2269,7 @@ a reflection.
  (define-key ctl-x-r-map "M" 'bookmark-set-no-overwrite)
  (define-key ctl-x-r-map "l" 'bookmark-bmenu-list)
 
-(defvar bookmark-map (let ((map (make-sparse-keymap))) (define-key map "x" 
'bookmark-set) (define-key map "m" 'bookmark-set) (define-key map "M" 
'bookmark-set-no-overwrite) (define-key map "j" 'bookmark-jump) (define-key map 
"g" 'bookmark-jump) (define-key map "o" 'bookmark-jump-other-window) 
(define-key map "5" 'bookmark-jump-other-frame) (define-key map "i" 
'bookmark-insert) (define-key map "e" 'edit-bookmarks) (define-key map "f" 
'bookmark-insert-location) (define-key map "r" 'bookmar [...]
+(defvar bookmark-map (let ((map (make-sparse-keymap))) (define-key map "x" 
'bookmark-set) (define-key map "m" 'bookmark-set) (define-key map "M" 
'bookmark-set-no-overwrite) (define-key map "j" 'bookmark-jump) (define-key map 
"g" 'bookmark-jump) (define-key map "o" 'bookmark-jump-other-window) 
(define-key map "5" 'bookmark-jump-other-frame) (define-key map "i" 
'bookmark-insert) (define-key map "e" 'edit-bookmarks) (define-key map "f" 
'bookmark-insert-location) (define-key map "r" 'bookmar [...]
 Keymap containing bindings to bookmark functions.
 It is not bound to any key by default: to bind it
 so that you have a bookmark prefix, just use `global-set-key' and bind a
@@ -2382,6 +2422,13 @@ probably because we were called from there.
 
 \(fn BOOKMARK-NAME &optional BATCH)" t nil)
 
+(autoload 'bookmark-delete-all "bookmark" "\
+Permanently delete all bookmarks.
+If optional argument NO-CONFIRM is non-nil, don't ask for
+confirmation.
+
+\(fn &optional NO-CONFIRM)" t nil)
+
 (autoload 'bookmark-write "bookmark" "\
 Write bookmarks to a file (reading the file name with the minibuffer)." t nil)
 
@@ -2423,6 +2470,10 @@ unique numeric suffixes \"<2>\", \"<3>\", etc.
 
 \(fn FILE &optional OVERWRITE NO-MSG DEFAULT)" t nil)
 
+(autoload 'bookmark-bmenu-get-buffer "bookmark" "\
+Return the Bookmark List, building it if it doesn't exists.
+Don't affect the buffer ring order." nil nil)
+
 (autoload 'bookmark-bmenu-list "bookmark" "\
 Display a list of existing bookmarks.
 The list is displayed in a buffer named `*Bookmark List*'.
@@ -2436,11 +2487,11 @@ deletion, or > if it is flagged for displaying." t nil)
 (autoload 'bookmark-bmenu-search "bookmark" "\
 Incremental search of bookmarks, hiding the non-matches as we go." t nil)
 
-(defvar menu-bar-bookmark-map (let ((map (make-sparse-keymap "Bookmark 
functions"))) (bindings--define-key map [load] '(menu-item "Load a Bookmark 
File..." bookmark-load :help "Load bookmarks from a bookmark file)")) 
(bindings--define-key map [write] '(menu-item "Save Bookmarks As..." 
bookmark-write :help "Write bookmarks to a file (reading the file name with the 
minibuffer)")) (bindings--define-key map [save] '(menu-item "Save Bookmarks" 
bookmark-save :help "Save currently defined bookm [...]
+(defvar menu-bar-bookmark-map (let ((map (make-sparse-keymap "Bookmark 
functions"))) (bindings--define-key map [load] '(menu-item "Load a Bookmark 
File..." bookmark-load :help "Load bookmarks from a bookmark file)")) 
(bindings--define-key map [write] '(menu-item "Save Bookmarks As..." 
bookmark-write :help "Write bookmarks to a file (reading the file name with the 
minibuffer)")) (bindings--define-key map [save] '(menu-item "Save Bookmarks" 
bookmark-save :help "Save currently defined bookm [...]
 
 (defalias 'menu-bar-bookmark-map menu-bar-bookmark-map)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"bookmark" '("bookmark-" "with-buffer-modified-unmodified")))
+(register-definition-prefixes "bookmark" '("bookmark-" 
"with-buffer-modified-unmodified"))
 
 ;;;***
 
@@ -2668,46 +2719,6 @@ used instead of `browse-url-new-window-flag'.
 
 (make-obsolete 'browse-url-gnome-moz 'nil '"25.1")
 
-(autoload 'browse-url-mosaic "browse-url" "\
-Ask the XMosaic WWW browser to load URL.
-
-Default to the URL around or before point.  The strings in variable
-`browse-url-mosaic-arguments' are also passed to Mosaic and the
-program is invoked according to the variable
-`browse-url-mosaic-program'.
-
-When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new Mosaic window, otherwise use a
-random existing one.  A non-nil interactive prefix argument reverses
-the effect of `browse-url-new-window-flag'.
-
-When called non-interactively, optional second argument NEW-WINDOW is
-used instead of `browse-url-new-window-flag'.
-
-\(fn URL &optional NEW-WINDOW)" t nil)
-
-(make-obsolete 'browse-url-mosaic 'nil '"25.1")
-
-(autoload 'browse-url-cci "browse-url" "\
-Ask the XMosaic WWW browser to load URL.
-Default to the URL around or before point.
-
-This function only works for XMosaic version 2.5 or later.  You must
-select `CCI' from XMosaic's File menu, set the CCI Port Address to the
-value of variable `browse-url-CCI-port', and enable `Accept requests'.
-
-When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new browser window, otherwise use a
-random existing one.  A non-nil interactive prefix argument reverses
-the effect of `browse-url-new-window-flag'.
-
-When called non-interactively, optional second argument NEW-WINDOW is
-used instead of `browse-url-new-window-flag'.
-
-\(fn URL &optional NEW-WINDOW)" t nil)
-
-(make-obsolete 'browse-url-cci 'nil '"25.1")
-
 (autoload 'browse-url-conkeror "browse-url" "\
 Ask the Conkeror WWW browser to load URL.
 Default to the URL around or before point.  Also pass the strings
@@ -2823,7 +2834,7 @@ from `browse-url-elinks-wrapper'.
 
 \(fn URL &optional NEW-WINDOW)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"browse-url" '("browse-url-")))
+(register-definition-prefixes "browse-url" '("browse-url-"))
 
 ;;;***
 
@@ -2860,7 +2871,7 @@ name of buffer configuration.
 
 \(fn ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bs" 
'("bs-")))
+(register-definition-prefixes "bs" '("bs-"))
 
 ;;;***
 
@@ -2881,7 +2892,7 @@ columns on its right towards the left.
 \\[bubbles-set-game-difficult] sets the difficulty to difficult.
 \\[bubbles-set-game-hard] sets the difficulty to hard." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"bubbles" '("bubbles-")))
+(register-definition-prefixes "bubbles" '("bubbles-"))
 
 ;;;***
 
@@ -2901,6 +2912,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
 (autoload 'bug-reference-prog-mode "bug-reference" "\
@@ -2911,9 +2925,12 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"bug-reference" '("bug-reference-")))
+(register-definition-prefixes "bug-reference" '("bug-reference-"))
 
 ;;;***
 
@@ -2921,7 +2938,7 @@ ARG is `toggle'; disable the mode otherwise.
 ;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/byte-opt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"byte-opt" '("byte-" "disassemble-offset")))
+(register-definition-prefixes "byte-opt" '("byte-" "disassemble-offset"))
 
 ;;;***
 
@@ -3050,7 +3067,7 @@ and corresponding effects.
 
 \(fn &optional ARG)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"bytecomp" '("batch-byte-compile-file" "byte-" 
"displaying-byte-compile-warnings" "emacs-lisp-" "no-byte-compile")))
+(register-definition-prefixes "bytecomp" '("batch-byte-compile-file" "byte-" 
"displaying-byte-compile-warnings" "emacs-lisp-" "no-byte-compile"))
 
 ;;;***
 
@@ -3058,7 +3075,7 @@ and corresponding effects.
 ;;;;;;  0))
 ;;; Generated autoloads from calendar/cal-bahai.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-bahai" '("calendar-bahai-" "diary-bahai-" "holiday-bahai")))
+(register-definition-prefixes "cal-bahai" '("calendar-bahai-" "diary-bahai-" 
"holiday-bahai"))
 
 ;;;***
 
@@ -3068,7 +3085,7 @@ and corresponding effects.
 
 (put 'calendar-chinese-time-zone 'risky-local-variable t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-china" '("calendar-chinese-" "diary-chinese-" "holiday-chinese")))
+(register-definition-prefixes "cal-china" '("calendar-chinese-" 
"diary-chinese-" "holiday-chinese"))
 
 ;;;***
 
@@ -3076,7 +3093,7 @@ and corresponding effects.
 ;;;;;;  0 0))
 ;;; Generated autoloads from calendar/cal-coptic.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-coptic" '("calendar-" "diary-")))
+(register-definition-prefixes "cal-coptic" '("calendar-" "diary-"))
 
 ;;;***
 
@@ -3089,7 +3106,7 @@ and corresponding effects.
 
 (put 'calendar-current-time-zone-cache 'risky-local-variable t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-dst" '("calendar-" "dst-")))
+(register-definition-prefixes "cal-dst" '("calendar-" "dst-"))
 
 ;;;***
 
@@ -3097,7 +3114,7 @@ and corresponding effects.
 ;;;;;;  0 0))
 ;;; Generated autoloads from calendar/cal-french.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-french" '("calendar-french-" "diary-french-date")))
+(register-definition-prefixes "cal-french" '("calendar-french-" 
"diary-french-date"))
 
 ;;;***
 
@@ -3112,14 +3129,14 @@ from the cursor position.
 
 \(fn DEATH-DATE START-YEAR END-YEAR)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-hebrew" '("calendar-hebrew-" "diary-hebrew-" "holiday-hebrew")))
+(register-definition-prefixes "cal-hebrew" '("calendar-hebrew-" 
"diary-hebrew-" "holiday-hebrew"))
 
 ;;;***
 
 ;;;### (autoloads nil "cal-html" "calendar/cal-html.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/cal-html.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-html" '("cal-html-")))
+(register-definition-prefixes "cal-html" '("cal-html-"))
 
 ;;;***
 
@@ -3127,14 +3144,14 @@ from the cursor position.
 ;;;;;;  0))
 ;;; Generated autoloads from calendar/cal-islam.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-islam" '("calendar-islamic-" "diary-islamic-" "holiday-islamic")))
+(register-definition-prefixes "cal-islam" '("calendar-islamic-" 
"diary-islamic-" "holiday-islamic"))
 
 ;;;***
 
 ;;;### (autoloads nil "cal-iso" "calendar/cal-iso.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/cal-iso.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-iso" '("calendar-iso-" "diary-iso-date")))
+(register-definition-prefixes "cal-iso" '("calendar-iso-" "diary-iso-date"))
 
 ;;;***
 
@@ -3142,7 +3159,7 @@ from the cursor position.
 ;;;;;;  0 0))
 ;;; Generated autoloads from calendar/cal-julian.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-julian" '("calendar-" "diary-" "holiday-julian")))
+(register-definition-prefixes "cal-julian" '("calendar-" "diary-" 
"holiday-julian"))
 
 ;;;***
 
@@ -3150,21 +3167,21 @@ from the cursor position.
 ;;;;;;  0))
 ;;; Generated autoloads from calendar/cal-mayan.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-mayan" '("calendar-mayan-" "diary-mayan-date")))
+(register-definition-prefixes "cal-mayan" '("calendar-mayan-" 
"diary-mayan-date"))
 
 ;;;***
 
 ;;;### (autoloads nil "cal-menu" "calendar/cal-menu.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/cal-menu.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-menu" '("cal")))
+(register-definition-prefixes "cal-menu" '("cal"))
 
 ;;;***
 
 ;;;### (autoloads nil "cal-move" "calendar/cal-move.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/cal-move.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-move" '("calendar-")))
+(register-definition-prefixes "cal-move" '("calendar-"))
 
 ;;;***
 
@@ -3172,21 +3189,21 @@ from the cursor position.
 ;;;;;;  0 0))
 ;;; Generated autoloads from calendar/cal-persia.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-persia" '("calendar-persian-" "diary-persian-date")))
+(register-definition-prefixes "cal-persia" '("calendar-persian-" 
"diary-persian-date"))
 
 ;;;***
 
 ;;;### (autoloads nil "cal-tex" "calendar/cal-tex.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/cal-tex.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-tex" '("cal-tex-")))
+(register-definition-prefixes "cal-tex" '("cal-tex-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cal-x" "calendar/cal-x.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/cal-x.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cal-x" '("calendar-" "diary-frame")))
+(register-definition-prefixes "cal-x" '("calendar-" "diary-frame"))
 
 ;;;***
 
@@ -3274,7 +3291,7 @@ See Info node `(calc)Defining Functions'.
 
 (function-put 'defmath 'doc-string-elt '3)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc" '("calc" "defcalcmodevar" "inexact-result" "math-" "var-")))
+(register-definition-prefixes "calc" '("calc" "defcalcmodevar" 
"inexact-result" "math-" "var-"))
 
 ;;;***
 
@@ -3282,42 +3299,42 @@ See Info node `(calc)Defining Functions'.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from calc/calc-aent.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-aent" '("calc" "math-")))
+(register-definition-prefixes "calc-aent" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-alg" "calc/calc-alg.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-alg.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-alg" '("calc" "math-")))
+(register-definition-prefixes "calc-alg" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-arith" "calc/calc-arith.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-arith.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-arith" '("calc" "math-")))
+(register-definition-prefixes "calc-arith" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-bin" "calc/calc-bin.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-bin.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-bin" '("calc" "math-")))
+(register-definition-prefixes "calc-bin" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-comb" "calc/calc-comb.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-comb.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-comb" '("calc" "math-")))
+(register-definition-prefixes "calc-comb" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-cplx" "calc/calc-cplx.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-cplx.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-cplx" '("calc" "math-")))
+(register-definition-prefixes "calc-cplx" '("calc" "math-"))
 
 ;;;***
 
@@ -3325,105 +3342,105 @@ See Info node `(calc)Defining Functions'.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from calc/calc-embed.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-embed" '("calc-")))
+(register-definition-prefixes "calc-embed" '("calc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-ext" "calc/calc-ext.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-ext.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-ext" '("calc" "math-" "var-")))
+(register-definition-prefixes "calc-ext" '("calc" "math-" "var-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-fin" "calc/calc-fin.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-fin.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-fin" '("calc" "math-c")))
+(register-definition-prefixes "calc-fin" '("calc" "math-c"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-forms" "calc/calc-forms.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-forms.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-forms" '("calc" "math-" "var-TimeZone")))
+(register-definition-prefixes "calc-forms" '("calc" "math-" "var-TimeZone"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-frac" "calc/calc-frac.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-frac.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-frac" '("calc" "math-")))
+(register-definition-prefixes "calc-frac" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-funcs" "calc/calc-funcs.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-funcs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-funcs" '("calc" "math-")))
+(register-definition-prefixes "calc-funcs" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-graph" "calc/calc-graph.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-graph.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-graph" '("calc-")))
+(register-definition-prefixes "calc-graph" '("calc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-help" "calc/calc-help.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-help.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-help" '("calc-")))
+(register-definition-prefixes "calc-help" '("calc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-incom" "calc/calc-incom.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-incom.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-incom" '("calc-")))
+(register-definition-prefixes "calc-incom" '("calc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-keypd" "calc/calc-keypd.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-keypd.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-keypd" '("calc-")))
+(register-definition-prefixes "calc-keypd" '("calc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-lang" "calc/calc-lang.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-lang.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-lang" '("calc-" "math-")))
+(register-definition-prefixes "calc-lang" '("calc-" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-macs" "calc/calc-macs.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-macs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-macs" '("Math-" "calc-" "math-")))
+(register-definition-prefixes "calc-macs" '("Math-" "calc-" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-map" "calc/calc-map.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-map.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-map" '("calc" "math-")))
+(register-definition-prefixes "calc-map" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-math" "calc/calc-math.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-math.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-math" '("calc" "math-")))
+(register-definition-prefixes "calc-math" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-menu" "calc/calc-menu.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-menu.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-menu" '("calc-")))
+(register-definition-prefixes "calc-menu" '("calc-"))
 
 ;;;***
 
@@ -3431,91 +3448,91 @@ See Info node `(calc)Defining Functions'.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from calc/calc-misc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-misc" '("math-iipow")))
+(register-definition-prefixes "calc-misc" '("math-iipow"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-mode" "calc/calc-mode.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-mode.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-mode" '("calc-" "math-get-modes-vec")))
+(register-definition-prefixes "calc-mode" '("calc-" "math-get-modes-vec"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-mtx" "calc/calc-mtx.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-mtx.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-mtx" '("calc" "math-")))
+(register-definition-prefixes "calc-mtx" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-nlfit" "calc/calc-nlfit.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-nlfit.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-nlfit" '("calc-fit-" "math-nlfit-")))
+(register-definition-prefixes "calc-nlfit" '("calc-fit-" "math-nlfit-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-poly" "calc/calc-poly.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-poly.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-poly" '("calcFunc-" "math-")))
+(register-definition-prefixes "calc-poly" '("calcFunc-" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-prog" "calc/calc-prog.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-prog.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-prog" '("calc" "math-" "var-q")))
+(register-definition-prefixes "calc-prog" '("calc" "math-" "var-q"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-rewr" "calc/calc-rewr.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-rewr.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-rewr" '("calc" "math-")))
+(register-definition-prefixes "calc-rewr" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-rules" "calc/calc-rules.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-rules.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-rules" '("calc-")))
+(register-definition-prefixes "calc-rules" '("calc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-sel" "calc/calc-sel.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-sel.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-sel" '("calc-")))
+(register-definition-prefixes "calc-sel" '("calc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-stat" "calc/calc-stat.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-stat.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-stat" '("calc" "math-")))
+(register-definition-prefixes "calc-stat" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-store" "calc/calc-store.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-store.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-store" '("calc")))
+(register-definition-prefixes "calc-store" '("calc"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-stuff" "calc/calc-stuff.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-stuff.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-stuff" '("calc" "math-")))
+(register-definition-prefixes "calc-stuff" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-trail" "calc/calc-trail.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-trail.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-trail" '("calc-trail-")))
+(register-definition-prefixes "calc-trail" '("calc-trail-"))
 
 ;;;***
 
@@ -3527,21 +3544,21 @@ See Info node `(calc)Defining Functions'.
 
 \(fn N)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-undo" '("calc-")))
+(register-definition-prefixes "calc-undo" '("calc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-units" "calc/calc-units.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-units.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-units" '("calc" "math-")))
+(register-definition-prefixes "calc-units" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calc-vec" "calc/calc-vec.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-vec.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-vec" '("calc" "math-")))
+(register-definition-prefixes "calc-vec" '("calc" "math-"))
 
 ;;;***
 
@@ -3549,35 +3566,35 @@ See Info node `(calc)Defining Functions'.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from calc/calc-yank.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calc-yank" '("calc-" "math-number-regexp")))
+(register-definition-prefixes "calc-yank" '("calc-" "math-number-regexp"))
 
 ;;;***
 
 ;;;### (autoloads nil "calcalg2" "calc/calcalg2.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calcalg2.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calcalg2" '("calc" "math-" "var-IntegLimit")))
+(register-definition-prefixes "calcalg2" '("calc" "math-" "var-IntegLimit"))
 
 ;;;***
 
 ;;;### (autoloads nil "calcalg3" "calc/calcalg3.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calcalg3.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calcalg3" '("calc" "math-")))
+(register-definition-prefixes "calcalg3" '("calc" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calccomp" "calc/calccomp.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calccomp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calccomp" '("calcFunc-c" "math-")))
+(register-definition-prefixes "calccomp" '("calcFunc-c" "math-"))
 
 ;;;***
 
 ;;;### (autoloads nil "calcsel2" "calc/calcsel2.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calcsel2.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calcsel2" '("calc-")))
+(register-definition-prefixes "calcsel2" '("calc-"))
 
 ;;;***
 
@@ -3588,7 +3605,7 @@ See Info node `(calc)Defining Functions'.
 Run the Emacs calculator.
 See the documentation for `calculator-mode' for more information." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calculator" '("calculator-")))
+(register-definition-prefixes "calculator" '("calculator-"))
 
 ;;;***
 
@@ -3632,7 +3649,7 @@ This function is suitable for execution in an init file.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"calendar" '("calendar-" "diary-" "holiday-buffer" "lunar-phases-buffer" 
"solar-sunrises-buffer")))
+(register-definition-prefixes "calendar" '("calendar-" "diary-" 
"holiday-buffer" "lunar-phases-buffer" "solar-sunrises-buffer"))
 
 ;;;***
 
@@ -3651,21 +3668,21 @@ it fails.
 
 \(fn &optional BUFFER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"canlock" '("canlock-")))
+(register-definition-prefixes "canlock" '("canlock-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cc-align" "progmodes/cc-align.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cc-align.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-align" '("c-")))
+(register-definition-prefixes "cc-align" '("c-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cc-awk" "progmodes/cc-awk.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cc-awk.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-awk" '("awk-" "c-awk-")))
+(register-definition-prefixes "cc-awk" '("awk-" "c-awk-"))
 
 ;;;***
 
@@ -3673,21 +3690,21 @@ it fails.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from progmodes/cc-bytecomp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-bytecomp" '("cc-")))
+(register-definition-prefixes "cc-bytecomp" '("cc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cc-cmds" "progmodes/cc-cmds.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cc-cmds.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-cmds" '("c-")))
+(register-definition-prefixes "cc-cmds" '("c-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cc-defs" "progmodes/cc-defs.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cc-defs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-defs" '("c-" "cc-bytecomp-compiling-or-loading")))
+(register-definition-prefixes "cc-defs" '("c-" 
"cc-bytecomp-compiling-or-loading"))
 
 ;;;***
 
@@ -3698,14 +3715,14 @@ it fails.
 (autoload 'c-guess-basic-syntax "cc-engine" "\
 Return the syntactic context of the current line." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-engine" '("c-")))
+(register-definition-prefixes "cc-engine" '("c-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cc-fonts" "progmodes/cc-fonts.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cc-fonts.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-fonts" '("autodoc-" "c++-font-lock-keywords" "c-" "doxygen-font-lock-" 
"gtkdoc-font-lock-" "idl-font-lock-keywords" "java" "objc-font-lock-keywords" 
"pike-font-lock-keywords")))
+(register-definition-prefixes "cc-fonts" '("autodoc-" "c++-font-lock-keywords" 
"c-" "doxygen-font-lock-" "gtkdoc-font-lock-" "idl-font-lock-keywords" "java" 
"objc-font-lock-keywords" "pike-font-lock-keywords"))
 
 ;;;***
 
@@ -3805,21 +3822,21 @@ the absolute file name of the file if STYLE-NAME is nil.
 
 \(fn &optional STYLE-NAME)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-guess" '("c-guess-")))
+(register-definition-prefixes "cc-guess" '("c-guess-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cc-langs" "progmodes/cc-langs.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cc-langs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-langs" '("c-")))
+(register-definition-prefixes "cc-langs" '("c-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cc-menus" "progmodes/cc-menus.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cc-menus.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-menus" '("cc-imenu-")))
+(register-definition-prefixes "cc-menus" '("cc-imenu-"))
 
 ;;;***
 
@@ -3993,7 +4010,7 @@ Key bindings:
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-mode" '("awk-mode-map" "c++-mode-" "c-" "idl-mode-" "java-mode-" 
"objc-mode-" "pike-mode-")))
+(register-definition-prefixes "cc-mode" '("awk-mode-map" "c++-mode-" "c-" 
"idl-mode-" "java-mode-" "objc-mode-" "pike-mode-"))
 
 ;;;***
 
@@ -4047,7 +4064,7 @@ and exists only for compatibility reasons.
 
 \(fn SYMBOL OFFSET &optional IGNORED)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-styles" '("c-" "cc-choose-style-for-mode")))
+(register-definition-prefixes "cc-styles" '("c-" "cc-choose-style-for-mode"))
 
 ;;;***
 
@@ -4057,7 +4074,7 @@ and exists only for compatibility reasons.
 (put 'c-backslash-column 'safe-local-variable 'integerp)
 (put 'c-file-style 'safe-local-variable 'string-or-null-p)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cc-vars" '("awk-mode-hook" "c++-" "c-" "defcustom-c-stylevar" "idl-" "java-" 
"objc-" "pike-")))
+(register-definition-prefixes "cc-vars" '("awk-mode-hook" "c++-" "c-" 
"defcustom-c-stylevar" "idl-" "java-" "objc-" "pike-"))
 
 ;;;***
 
@@ -4352,7 +4369,7 @@ See the documentation of `define-ccl-program' for the 
detail of CCL program.
 
 \(fn CCL-PROG &rest ARGS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ccl" '("ccl-")))
+(register-definition-prefixes "ccl" '("ccl-"))
 
 ;;;***
 
@@ -4373,14 +4390,14 @@ Add the warnings that closure conversion would 
encounter.
 
 \(fn FORM)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cconv" '("cconv-")))
+(register-definition-prefixes "cconv" '("cconv-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cdl" "cdl.el" (0 0 0 0))
 ;;; Generated autoloads from cdl.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cdl" '("cdl-")))
+(register-definition-prefixes "cdl" '("cdl-"))
 
 ;;;***
 
@@ -4388,7 +4405,7 @@ Add the warnings that closure conversion would encounter.
 ;;; Generated autoloads from cedet/cedet.el
 (push (purecopy '(cedet 2 0)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cedet" '("cedet-")))
+(register-definition-prefixes "cedet" '("cedet-"))
 
 ;;;***
 
@@ -4396,7 +4413,7 @@ Add the warnings that closure conversion would encounter.
 ;;;;;;  0 0))
 ;;; Generated autoloads from cedet/cedet-cscope.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cedet-cscope" '("cedet-cscope-")))
+(register-definition-prefixes "cedet-cscope" '("cedet-cscope-"))
 
 ;;;***
 
@@ -4404,7 +4421,7 @@ Add the warnings that closure conversion would encounter.
 ;;;;;;  0))
 ;;; Generated autoloads from cedet/cedet-files.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cedet-files" '("cedet-")))
+(register-definition-prefixes "cedet-files" '("cedet-"))
 
 ;;;***
 
@@ -4412,7 +4429,7 @@ Add the warnings that closure conversion would encounter.
 ;;;;;;  0 0))
 ;;; Generated autoloads from cedet/cedet-global.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cedet-global" '("cedet-g")))
+(register-definition-prefixes "cedet-global" '("cedet-g"))
 
 ;;;***
 
@@ -4420,7 +4437,7 @@ Add the warnings that closure conversion would encounter.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from cedet/cedet-idutils.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cedet-idutils" '("cedet-idutils-")))
+(register-definition-prefixes "cedet-idutils" '("cedet-idutils-"))
 
 ;;;***
 
@@ -4449,7 +4466,7 @@ to the action header.
 (autoload 'cfengine-auto-mode "cfengine" "\
 Choose `cfengine2-mode' or `cfengine3-mode' by buffer contents." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cfengine" '("cfengine")))
+(register-definition-prefixes "cfengine" '("cfengine"))
 
 ;;;***
 
@@ -4476,7 +4493,7 @@ from which to start.
 
 \(fn STRING &optional LAX FROM)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"char-fold" '("char-fold-")))
+(register-definition-prefixes "char-fold" '("char-fold-"))
 
 ;;;***
 
@@ -4484,7 +4501,7 @@ from which to start.
 ;;; Generated autoloads from emacs-lisp/chart.el
 (push (purecopy '(chart 0 2)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"chart" '("chart")))
+(register-definition-prefixes "chart" '("chart"))
 
 ;;;***
 
@@ -4504,7 +4521,7 @@ Returns non-nil if any false statements are found.
 
 \(fn ROOT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"check-declare" '("check-declare-")))
+(register-definition-prefixes "check-declare" '("check-declare-"))
 
 ;;;***
 
@@ -4680,6 +4697,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 In Checkdoc minor mode, the usual bindings for `eval-defun' which is
 bound to \\<checkdoc-minor-mode-map>\\[checkdoc-eval-defun] and 
`checkdoc-eval-current-buffer' are overridden to include
 checking of documentation strings.
@@ -4691,7 +4711,7 @@ checking of documentation strings.
 (autoload 'checkdoc-package-keywords "checkdoc" "\
 Find package keywords that aren't in `finder-known-keywords'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"checkdoc" '("checkdoc-")))
+(register-definition-prefixes "checkdoc" '("checkdoc-"))
 
 ;;;***
 
@@ -4727,7 +4747,7 @@ Encode the text in the current buffer to HZ." t nil)
 
 \(fn FROM TO)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"china-util" '("decode-hz-line-continuation" "hz-" "hz/zw-start-gb" "iso2022-" 
"zw-start-gb")))
+(register-definition-prefixes "china-util" '("decode-hz-line-continuation" 
"hz-" "hz/zw-start-gb" "iso2022-" "zw-start-gb"))
 
 ;;;***
 
@@ -4764,7 +4784,7 @@ and digits provide prefix arguments.  Tab does not indent.
 This command always recompiles the Command History listing
 and runs the normal hook `command-history-hook'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"chistory" '("command-history-" "default-command-history-filter" 
"list-command-history-")))
+(register-definition-prefixes "chistory" '("command-history-" 
"default-command-history-filter" "list-command-history-"))
 
 ;;;***
 
@@ -4772,7 +4792,7 @@ and runs the normal hook `command-history-hook'." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/cl-extra.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cl-extra" '("cl-")))
+(register-definition-prefixes "cl-extra" '("cl-"))
 
 ;;;***
 
@@ -4798,9 +4818,12 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cl-font-lock" '("cl-font-lock-")))
+(register-definition-prefixes "cl-font-lock" '("cl-font-lock-"))
 
 ;;;***
 
@@ -4876,7 +4899,7 @@ The set of acceptable TYPEs (also called 
\"specializers\") is defined
 
 \(fn GENERIC QUALIFIERS SPECIALIZERS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cl-generic" '("cl-")))
+(register-definition-prefixes "cl-generic" '("cl-"))
 
 ;;;***
 
@@ -4962,7 +4985,7 @@ instead.
 
 \(fn INDENT-POINT STATE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cl-indent" '("common-lisp-" "lisp-")))
+(register-definition-prefixes "cl-indent" '("common-lisp-" "lisp-"))
 
 ;;;***
 
@@ -5010,9 +5033,12 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cl-lib" '("cl-")))
+(register-definition-prefixes "cl-lib" '("cl-"))
 
 ;;;***
 
@@ -5020,7 +5046,7 @@ ARG is `toggle'; disable the mode otherwise.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/cl-macs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cl-macs" '("cl-")))
+(register-definition-prefixes "cl-macs" '("cl-"))
 
 ;;;***
 
@@ -5076,7 +5102,7 @@ limit.
 
 \(fn PRINT-FUNCTION VALUE LIMIT)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cl-print" '("cl-print-" "help-byte-code")))
+(register-definition-prefixes "cl-print" '("cl-print-" "help-byte-code"))
 
 ;;;***
 
@@ -5084,7 +5110,7 @@ limit.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/cl-seq.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cl-seq" '("cl--")))
+(register-definition-prefixes "cl-seq" '("cl--"))
 
 ;;;***
 
@@ -5106,7 +5132,7 @@ For use inside Lisp programs, see also 
`c-macro-expansion'.
 
 \(fn START END SUBST)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cmacexp" '("c-macro-")))
+(register-definition-prefixes "cmacexp" '("c-macro-"))
 
 ;;;***
 
@@ -5128,7 +5154,7 @@ is run).
 
 \(fn CMD)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cmuscheme" '("cmuscheme-load-hook" "inferior-scheme-" "scheme-" 
"switch-to-scheme")))
+(register-definition-prefixes "cmuscheme" '("cmuscheme-load-hook" 
"inferior-scheme-" "scheme-" "switch-to-scheme"))
 
 ;;;***
 
@@ -5149,7 +5175,7 @@ If FRAME cannot display COLOR, return nil.
 
 \(fn COLOR &optional FRAME)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"color" '("color-")))
+(register-definition-prefixes "color" '("color-"))
 
 ;;;***
 
@@ -5257,7 +5283,7 @@ REGEXP-GROUP is the regular expression group in REGEXP to 
use.
 
 \(fn PROCESS COMMAND REGEXP REGEXP-GROUP)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"comint" '("comint-")))
+(register-definition-prefixes "comint" '("comint-"))
 
 ;;;***
 
@@ -5295,14 +5321,14 @@ on third call it again advances points to the next 
difference and so on.
 
 \(fn IGNORE-WHITESPACE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"compare-w" '("compare-")))
+(register-definition-prefixes "compare-w" '("compare-"))
 
 ;;;***
 
 ;;;### (autoloads nil "compface" "image/compface.el" (0 0 0 0))
 ;;; Generated autoloads from image/compface.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"compface" '("uncompface")))
+(register-definition-prefixes "compface" '("uncompface"))
 
 ;;;***
 
@@ -5459,6 +5485,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Compilation Shell minor mode is enabled, all the
 error-parsing commands of the Compilation major mode are
 available but bound to keys that don't collide with Shell mode.
@@ -5474,6 +5503,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Compilation minor mode is enabled, all the error-parsing
 commands of Compilation major mode are available.  See
 `compilation-mode'.
@@ -5486,7 +5518,7 @@ This is the value of `next-error-function' in Compilation 
buffers.
 
 \(fn N &optional RESET)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"compile" '("compil" "define-compilation-mode" "kill-compilation" "recompile")))
+(register-definition-prefixes "compile" '("compil" "define-compilation-mode" 
"kill-compilation" "recompile"))
 
 ;;;***
 
@@ -5511,9 +5543,12 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"completion" '("*c-def-regexp*" "*lisp-def-regexp*" "accept-completion" "add-" 
"cdabbrev-" "check-completion-length" "clear-all-completions" "cmpl-" "complet" 
"current-completion-source" "delete-completion" "enable-completion" "find-" 
"initialize-completions" "inside-locate-completion-entry" 
"interactive-completion-string-reader" "kill-" "list-all-completions" 
"load-completions-from-file" "make-c" "next-cdabbrev" " [...]
+(register-definition-prefixes "completion" '("*c-def-regexp*" 
"*lisp-def-regexp*" "accept-completion" "add-" "cdabbrev-" 
"check-completion-length" "clear-all-completions" "cmpl-" "complet" 
"current-completion-source" "delete-completion" "enable-completion" "find-" 
"initialize-completions" "inside-locate-completion-entry" 
"interactive-completion-string-reader" "kill-" "list-all-completions" 
"load-completions-from-file" "make-c" "next-cdabbrev" "num-cmpl-sources" 
"reset-cdabbrev" "save" "s [...]
 
 ;;;***
 
@@ -5688,7 +5723,7 @@ For details see `conf-mode'.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"conf-mode" '("conf-")))
+(register-definition-prefixes "conf-mode" '("conf-"))
 
 ;;;***
 
@@ -5718,7 +5753,7 @@ and subsequent calls on the same file won't go to disk.
 
 \(fn PHRASE-FILE &optional STARTMSG ENDMSG)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cookie1" '("cookie")))
+(register-definition-prefixes "cookie1" '("cookie"))
 
 ;;;***
 
@@ -5757,7 +5792,7 @@ If FIX is non-nil, run `copyright-fix-years' instead.
 
 \(fn DIRECTORY MATCH &optional FIX)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"copyright" '("copyright-")))
+(register-definition-prefixes "copyright" '("copyright-"))
 
 ;;;***
 
@@ -5956,7 +5991,7 @@ Run `perldoc' on WORD.
 (autoload 'cperl-perldoc-at-point "cperl-mode" "\
 Run a `perldoc' on the word around point." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cperl-mode" '("cperl-" "pod2man-program")))
+(register-definition-prefixes "cperl-mode" '("cperl-" "pod2man-program"))
 
 ;;;***
 
@@ -5974,7 +6009,7 @@ A prefix arg suppresses display of that buffer.
 (autoload 'cpp-parse-edit "cpp" "\
 Edit display information for cpp conditionals." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cpp" '("cpp-")))
+(register-definition-prefixes "cpp" '("cpp-"))
 
 ;;;***
 
@@ -6002,7 +6037,7 @@ with empty strings removed.
 
 \(fn PROMPT TABLE &optional PREDICATE REQUIRE-MATCH INITIAL-INPUT HIST DEF 
INHERIT-INPUT-METHOD)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"crm" '("crm-")))
+(register-definition-prefixes "crm" '("crm-"))
 
 ;;;***
 
@@ -6047,7 +6082,7 @@ on what is seen near point.
 
 \(fn SYMBOL)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"css-mode" '("css-" "scss-")))
+(register-definition-prefixes "css-mode" '("css-" "scss-"))
 
 ;;;***
 
@@ -6072,6 +6107,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 CUA mode is a global minor mode.  When enabled, typed text
 replaces the active selection, and you can use C-z, C-x, C-c, and
 C-v to undo, cut, copy, and paste in addition to the normal Emacs
@@ -6097,14 +6135,14 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v 
bindings.
 
 \(fn ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cua-base" '("cua-")))
+(register-definition-prefixes "cua-base" '("cua-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cua-gmrk" "emulation/cua-gmrk.el" (0 0 0 0))
 ;;; Generated autoloads from emulation/cua-gmrk.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cua-gmrk" '("cua-")))
+(register-definition-prefixes "cua-gmrk" '("cua-"))
 
 ;;;***
 
@@ -6120,9 +6158,12 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cua-rect" '("cua-")))
+(register-definition-prefixes "cua-rect" '("cua-"))
 
 ;;;***
 
@@ -6143,6 +6184,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
 (autoload 'cursor-sensor-mode "cursor-sensor" "\
@@ -6158,16 +6202,19 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cursor-sensor" '("cursor-sensor-")))
+(register-definition-prefixes "cursor-sensor" '("cursor-sensor-"))
 
 ;;;***
 
 ;;;### (autoloads nil "cus-dep" "cus-dep.el" (0 0 0 0))
 ;;; Generated autoloads from cus-dep.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cus-dep" '("custom-" "generated-custom-dependencies-file")))
+(register-definition-prefixes "cus-dep" '("custom-" 
"generated-custom-dependencies-file"))
 
 ;;;***
 
@@ -6476,7 +6523,7 @@ The format is suitable for use with `easy-menu-define'.
 
 \(fn SYMBOL &optional NAME)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cus-edit" '("Custom-" "custom" "widget-")))
+(register-definition-prefixes "cus-edit" '("Custom-" "custom" "widget-"))
 
 ;;;***
 
@@ -6511,7 +6558,7 @@ omitted, a buffer named *Custom Themes* is used.
 
 \(fn &optional BUFFER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cus-theme" '("custom-" "describe-theme-1")))
+(register-definition-prefixes "cus-theme" '("custom-" "describe-theme-1"))
 
 ;;;***
 
@@ -6523,7 +6570,7 @@ Mode used for cvs status output.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cvs-status" '("cvs-")))
+(register-definition-prefixes "cvs-status" '("cvs-"))
 
 ;;;***
 
@@ -6538,6 +6585,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Suspicious constructs are highlighted using `font-lock-warning-face'.
 
 Note, in addition to enabling this minor mode, the major mode must
@@ -6572,7 +6622,7 @@ See `cwarn-mode' for more information on Cwarn mode.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cwarn" '("cwarn-" "turn-on-cwarn-mode-if-enabled")))
+(register-definition-prefixes "cwarn" '("cwarn-" 
"turn-on-cwarn-mode-if-enabled"))
 
 ;;;***
 
@@ -6591,7 +6641,7 @@ Return ALTERNATIVNYJ external character code of CHAR if 
appropriate.
 \(fn CHAR)" nil nil)
 
 (autoload 'standard-display-cyrillic-translit "cyril-util" "\
-Display a cyrillic buffer using a transliteration.
+Display a Cyrillic buffer using a transliteration.
 For readability, the table is slightly
 different from the one used for the input method `cyrillic-translit'.
 
@@ -6603,7 +6653,7 @@ If the argument is nil, we return the display table to 
its standard state.
 
 \(fn &optional CYRILLIC-LANGUAGE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"cyril-util" '("cyrillic-language-alist")))
+(register-definition-prefixes "cyril-util" '("cyrillic-language-alist"))
 
 ;;;***
 
@@ -6654,7 +6704,7 @@ See also `dabbrev-abbrev-char-regexp' and 
\\[dabbrev-completion].
 
 \(fn ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dabbrev" '("dabbrev-")))
+(register-definition-prefixes "dabbrev" '("dabbrev-"))
 
 ;;;***
 
@@ -6666,7 +6716,7 @@ Create a new data-debug buffer with NAME.
 
 \(fn NAME)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"data-debug" '("data-debug-")))
+(register-definition-prefixes "data-debug" '("data-debug-"))
 
 ;;;***
 
@@ -6681,7 +6731,7 @@ If the HANDLER returns a `dbus-error', it is propagated 
as return message.
 
 \(fn EVENT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dbus" '("dbus-")))
+(register-definition-prefixes "dbus" '("dbus-"))
 
 ;;;***
 
@@ -6809,7 +6859,7 @@ There is some minimal font-lock support (see vars
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dcl-mode" '("dcl-")))
+(register-definition-prefixes "dcl-mode" '("dcl-"))
 
 ;;;***
 
@@ -6889,7 +6939,7 @@ To specify a nil argument interactively, exit with an 
empty minibuffer.
 
 (defalias 'cancel-debug-watch #'cancel-debug-on-variable-change)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"debug" '("debug" "inhibit-debug-on-entry")))
+(register-definition-prefixes "debug" '("debug" "inhibit-debug-on-entry"))
 
 ;;;***
 
@@ -6915,7 +6965,7 @@ The most useful commands are:
 \\[decipher-make-checkpoint]  Save the current cipher alphabet (checkpoint)
 \\[decipher-restore-checkpoint]  Restore a saved cipher alphabet (checkpoint)" 
t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"decipher" '("decipher-")))
+(register-definition-prefixes "decipher" '("decipher-"))
 
 ;;;***
 
@@ -6960,7 +7010,7 @@ START and END delimit the corners of the text rectangle.
 
 \(fn START END)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"delim-col" '("delimit-columns-")))
+(register-definition-prefixes "delim-col" '("delimit-columns-"))
 
 ;;;***
 
@@ -6987,6 +7037,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Delete Selection mode is enabled, typed text replaces the selection
 if the selection is active.  Otherwise, typed text is just inserted at
 point regardless of any selection.
@@ -6996,7 +7049,7 @@ information on adapting behavior of commands in Delete 
Selection mode.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"delsel" '("del" "minibuffer-keyboard-quit")))
+(register-definition-prefixes "delsel" '("del" "minibuffer-keyboard-quit"))
 
 ;;;***
 
@@ -7071,7 +7124,7 @@ the first time the mode is used.
 
 \(fn MODE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"derived" '("derived-mode-")))
+(register-definition-prefixes "derived" '("derived-mode-"))
 
 ;;;***
 
@@ -7131,7 +7184,7 @@ This function can be used as a value of
 
 \(fn CALLBACK &rest _)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"descr-text" '("describe-")))
+(register-definition-prefixes "descr-text" '("describe-"))
 
 ;;;***
 
@@ -7156,6 +7209,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Desktop Save mode is enabled, the state of Emacs is saved from
 one session to another.  In particular, Emacs will save the desktop when
 it exits (this may prompt you; see the option `desktop-save').  The next
@@ -7311,7 +7367,7 @@ file.
 
 To upgrade a version 206 file to version 208, call this command
 explicitly with a prefix argument: \\[universal-argument] \\[desktop-save].
-If you are upgrading from Emacs 24 or older, we recommed to do
+If you are upgrading from Emacs 24 or older, we recommend to do
 this once you decide you no longer need compatibility with versions
 of Emacs before 25.1.
 
@@ -7357,7 +7413,7 @@ Save the desktop in directory `desktop-dirname'." t nil)
 (autoload 'desktop-revert "desktop" "\
 Revert to the last loaded desktop." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"desktop" '("desktop-")))
+(register-definition-prefixes "desktop" '("desktop-"))
 
 ;;;***
 
@@ -7390,14 +7446,14 @@ article buffer.
 (autoload 'gnus-article-outlook-deuglify-article "deuglify" "\
 Deuglify broken Outlook (Express) articles and redisplay." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"deuglify" '("gnus-")))
+(register-definition-prefixes "deuglify" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "dframe" "dframe.el" (0 0 0 0))
 ;;; Generated autoloads from dframe.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dframe" '("dframe-")))
+(register-definition-prefixes "dframe" '("dframe-"))
 
 ;;;***
 
@@ -7442,7 +7498,7 @@ Major mode for editing the diary file.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"diary-lib" '("calendar-mark-" "diary-")))
+(register-definition-prefixes "diary-lib" '("calendar-mark-" "diary-"))
 
 ;;;***
 
@@ -7517,7 +7573,7 @@ OLD and NEW may each be a buffer or a buffer name.
 
 \(fn OLD NEW &optional SWITCHES NO-ASYNC)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"diff" '("diff-")))
+(register-definition-prefixes "diff" '("diff-"))
 
 ;;;***
 
@@ -7549,11 +7605,14 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \\{diff-minor-mode-map}
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"diff-mode" '("diff-")))
+(register-definition-prefixes "diff-mode" '("diff-"))
 
 ;;;***
 
@@ -7566,7 +7625,7 @@ Optional arguments are passed to `dig-invoke'.
 
 \(fn DOMAIN &optional QUERY-TYPE QUERY-CLASS QUERY-OPTION DIG-OPTION SERVER)" 
t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dig" '("dig-" "query-dig")))
+(register-definition-prefixes "dig" '("dig-" "query-dig"))
 
 ;;;***
 
@@ -7703,7 +7762,7 @@ Keybindings:
 \(fn &optional DIRNAME SWITCHES)" nil nil)
  (put 'dired-find-alternate-file 'disabled t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dired" '("dired-")))
+(register-definition-prefixes "dired" '("dired-"))
 
 ;;;***
 
@@ -7711,7 +7770,7 @@ Keybindings:
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from dired-aux.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dired-aux" '("dired-" "minibuffer-default-add-dired-shell-commands")))
+(register-definition-prefixes "dired-aux" '("dired-" 
"minibuffer-default-add-dired-shell-commands"))
 
 ;;;***
 
@@ -7719,7 +7778,7 @@ Keybindings:
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from dired-x.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dired-x" '("dired-" "virtual-dired")))
+(register-definition-prefixes "dired-x" '("dired-" "virtual-dired"))
 
 ;;;***
 
@@ -7734,6 +7793,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 This method requires that your shell prompt contain the current
 working directory at all times, and that you set the variable
 `dirtrack-list' to match the prompt.
@@ -7753,7 +7815,7 @@ from `default-directory'.
 
 \(fn INPUT)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dirtrack" '("dirtrack-")))
+(register-definition-prefixes "dirtrack" '("dirtrack-"))
 
 ;;;***
 
@@ -7769,7 +7831,7 @@ redefine OBJECT if it is a symbol.
 
 \(fn OBJECT &optional BUFFER INDENT INTERACTIVE-P)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"disass" '("disassemble-")))
+(register-definition-prefixes "disass" '("disassemble-"))
 
 ;;;***
 
@@ -7888,7 +7950,7 @@ in `.emacs'.
 
 \(fn ARG)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"disp-table" '("display-table-print-array")))
+(register-definition-prefixes "disp-table" '("display-table-print-array"))
 
 ;;;***
 
@@ -7905,6 +7967,9 @@ ARG is positive, and disable it if ARG is zero or 
negative.  If called
 from Lisp, also enable the mode if ARG is omitted or nil, and toggle
 it if ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 To change the position of the column displayed by default
 customize `display-fill-column-indicator-column'.  You can change the
 character for the indicator setting `display-fill-column-indicator-character'.
@@ -7936,7 +8001,7 @@ See `display-fill-column-indicator-mode' for more 
information on Display-Fill-Co
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"display-fill-column-indicator" '("display-fill-column-indicator--turn-on")))
+(register-definition-prefixes "display-fill-column-indicator" 
'("display-fill-column-indicator--turn-on"))
 
 ;;;***
 
@@ -7953,6 +8018,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 To change the type of line numbers displayed by default,
 customize `display-line-numbers-type'.  To change the type while
 the mode is on, set `display-line-numbers' directly.
@@ -7983,7 +8051,7 @@ See `display-line-numbers-mode' for more information on 
Display-Line-Numbers mod
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"display-line-numbers" '("display-line-numbers-")))
+(register-definition-prefixes "display-line-numbers" 
'("display-line-numbers-"))
 
 ;;;***
 
@@ -8021,14 +8089,14 @@ if some action was made, or nil if the URL is ignored.")
 
 (custom-autoload 'dnd-protocol-alist "dnd" t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dnd" '("dnd-")))
+(register-definition-prefixes "dnd" '("dnd-"))
 
 ;;;***
 
 ;;;### (autoloads nil "dns" "net/dns.el" (0 0 0 0))
 ;;; Generated autoloads from net/dns.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dns" '("dns-")))
+(register-definition-prefixes "dns" '("dns-"))
 
 ;;;***
 
@@ -8051,7 +8119,7 @@ Turning on DNS mode runs `dns-mode-hook'.
 (autoload 'dns-mode-soa-increment-serial "dns-mode" "\
 Locate SOA record and increment the serial field." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dns-mode" '("dns-mode-")))
+(register-definition-prefixes "dns-mode" '("dns-mode-"))
 
 ;;;***
 
@@ -8088,6 +8156,9 @@ positive, and disable it if ARG is zero or negative.  If 
called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 See the command `doc-view-mode' for more information on this mode.
 
 \(fn &optional ARG)" t nil)
@@ -8097,7 +8168,7 @@ See the command `doc-view-mode' for more information on 
this mode.
 
 \(fn BMK)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"doc-view" '("doc-view-")))
+(register-definition-prefixes "doc-view" '("doc-view-"))
 
 ;;;***
 
@@ -8107,35 +8178,35 @@ See the command `doc-view-mode' for more information on 
this mode.
 (autoload 'doctor "doctor" "\
 Switch to *doctor* buffer and start giving psychotherapy." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"doctor" '("doc" "make-doctor-variables")))
+(register-definition-prefixes "doctor" '("doc" "make-doctor-variables"))
 
 ;;;***
 
 ;;;### (autoloads nil "dom" "dom.el" (0 0 0 0))
 ;;; Generated autoloads from dom.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dom" '("dom-")))
+(register-definition-prefixes "dom" '("dom-"))
 
 ;;;***
 
 ;;;### (autoloads nil "dos-fns" "dos-fns.el" (0 0 0 0))
 ;;; Generated autoloads from dos-fns.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dos-fns" '("dos")))
+(register-definition-prefixes "dos-fns" '("dos"))
 
 ;;;***
 
 ;;;### (autoloads nil "dos-vars" "dos-vars.el" (0 0 0 0))
 ;;; Generated autoloads from dos-vars.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dos-vars" '("dos-codepage-setup-hook" "msdos-shells")))
+(register-definition-prefixes "dos-vars" '("dos-codepage-setup-hook" 
"msdos-shells"))
 
 ;;;***
 
 ;;;### (autoloads nil "dos-w32" "dos-w32.el" (0 0 0 0))
 ;;; Generated autoloads from dos-w32.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dos-w32" '("file-name-buffer-file-type-alist" "find-" "w32-")))
+(register-definition-prefixes "dos-w32" '("file-name-buffer-file-type-alist" 
"find-" "w32-"))
 
 ;;;***
 
@@ -8150,12 +8221,15 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Double mode is enabled, some keys will insert different
 strings when pressed twice.  See `double-map' for details.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"double" '("double-")))
+(register-definition-prefixes "double" '("double-"))
 
 ;;;***
 
@@ -8166,7 +8240,7 @@ strings when pressed twice.  See `double-map' for details.
 (autoload 'dunnet "dunnet" "\
 Switch to *dungeon* buffer and start game." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dunnet" '("dun" "obj-special")))
+(register-definition-prefixes "dunnet" '("dun" "obj-special"))
 
 ;;;***
 
@@ -8174,7 +8248,7 @@ Switch to *dungeon* buffer and start game." t nil)
 ;;;;;;  0 0))
 ;;; Generated autoloads from dynamic-setting.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"dynamic-setting" '("dynamic-setting-handle-config-changed-event" 
"font-setting-change-default-font")))
+(register-definition-prefixes "dynamic-setting" 
'("dynamic-setting-handle-config-changed-event" 
"font-setting-change-default-font"))
 
 ;;;***
 
@@ -8329,7 +8403,7 @@ CSS contains a list of syntax specifications of the form 
(CHAR . SYNTAX).
 
 (function-put 'easy-mmode-defsyntax 'lisp-indent-function '1)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"easy-mmode" '("easy-mmode-")))
+(register-definition-prefixes "easy-mmode" '("easy-mmode-"))
 
 ;;;***
 
@@ -8481,56 +8555,56 @@ To implement dynamic menus, either call this from
 
 \(fn PATH NAME ITEMS &optional BEFORE MAP)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"easymenu" '("add-submenu" "easy-menu-")))
+(register-definition-prefixes "easymenu" '("add-submenu" "easy-menu-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ebnf-abn" "progmodes/ebnf-abn.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ebnf-abn.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ebnf-abn" '("ebnf-abn-")))
+(register-definition-prefixes "ebnf-abn" '("ebnf-abn-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ebnf-bnf" "progmodes/ebnf-bnf.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ebnf-bnf.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ebnf-bnf" '("ebnf-")))
+(register-definition-prefixes "ebnf-bnf" '("ebnf-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ebnf-dtd" "progmodes/ebnf-dtd.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ebnf-dtd.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ebnf-dtd" '("ebnf-dtd-")))
+(register-definition-prefixes "ebnf-dtd" '("ebnf-dtd-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ebnf-ebx" "progmodes/ebnf-ebx.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ebnf-ebx.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ebnf-ebx" '("ebnf-ebx-")))
+(register-definition-prefixes "ebnf-ebx" '("ebnf-ebx-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ebnf-iso" "progmodes/ebnf-iso.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ebnf-iso.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ebnf-iso" '("ebnf-")))
+(register-definition-prefixes "ebnf-iso" '("ebnf-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ebnf-otz" "progmodes/ebnf-otz.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ebnf-otz.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ebnf-otz" '("ebnf-")))
+(register-definition-prefixes "ebnf-otz" '("ebnf-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ebnf-yac" "progmodes/ebnf-yac.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ebnf-yac.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ebnf-yac" '("ebnf-yac-")))
+(register-definition-prefixes "ebnf-yac" '("ebnf-yac-"))
 
 ;;;***
 
@@ -8785,7 +8859,7 @@ See also `ebnf-push-style'.
 
 See `ebnf-style-database' documentation." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ebnf2ps" '("ebnf-")))
+(register-definition-prefixes "ebnf2ps" '("ebnf-"))
 
 ;;;***
 
@@ -8907,7 +8981,7 @@ Otherwise, FILE-NAME specifies the file to save the tree 
in.
 (autoload 'ebrowse-statistics "ebrowse" "\
 Display statistics for a class tree." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ebrowse" '("ebrowse-" "electric-buffer-menu-mode-hook")))
+(register-definition-prefixes "ebrowse" '("ebrowse-" 
"electric-buffer-menu-mode-hook"))
 
 ;;;***
 
@@ -8942,7 +9016,7 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry.
 
 \(fn ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ebuff-menu" '("Electric-buffer-menu-" "electric-buffer-")))
+(register-definition-prefixes "ebuff-menu" '("Electric-buffer-menu-" 
"electric-buffer-"))
 
 ;;;***
 
@@ -8955,7 +9029,7 @@ With prefix arg NOCONFIRM, execute current line as-is 
without editing.
 
 \(fn &optional NOCONFIRM)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"echistory" '("Electric-history-" "electric-")))
+(register-definition-prefixes "echistory" '("Electric-history-" "electric-"))
 
 ;;;***
 
@@ -8965,7 +9039,7 @@ With prefix arg NOCONFIRM, execute current line as-is 
without editing.
 (autoload 'ecomplete-setup "ecomplete" "\
 Read the .ecompleterc file." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ecomplete" '("ecomplete-")))
+(register-definition-prefixes "ecomplete" '("ecomplete-"))
 
 ;;;***
 
@@ -8991,19 +9065,22 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 This global minor mode enables `ede-minor-mode' in all buffers in
 an EDE controlled project.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede" '("ede" "global-ede-mode-map" "project-try-ede")))
+(register-definition-prefixes "ede" '("ede" "global-ede-mode-map" 
"project-try-ede"))
 
 ;;;***
 
 ;;;### (autoloads nil "ede/auto" "cedet/ede/auto.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/auto.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/auto" '("ede-")))
+(register-definition-prefixes "ede/auto" '("ede-"))
 
 ;;;***
 
@@ -9011,7 +9088,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/autoconf-edit.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/autoconf-edit" '("autoconf-")))
+(register-definition-prefixes "ede/autoconf-edit" '("autoconf-"))
 
 ;;;***
 
@@ -9019,7 +9096,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/base.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/base" '("ede-")))
+(register-definition-prefixes "ede/base" '("ede-"))
 
 ;;;***
 
@@ -9027,7 +9104,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/config.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/config" '("ede-")))
+(register-definition-prefixes "ede/config" '("ede-"))
 
 ;;;***
 
@@ -9035,7 +9112,7 @@ an EDE controlled project.
 ;;;;;;  "cedet/ede/cpp-root.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/cpp-root.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/cpp-root" '("ede-cpp-root-")))
+(register-definition-prefixes "ede/cpp-root" '("ede-cpp-root-"))
 
 ;;;***
 
@@ -9043,14 +9120,14 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/custom.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/custom" '("ede-" "eieio-ede-old-variables")))
+(register-definition-prefixes "ede/custom" '("ede-" "eieio-ede-old-variables"))
 
 ;;;***
 
 ;;;### (autoloads nil "ede/detect" "cedet/ede/detect.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/detect.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/detect" '("ede-")))
+(register-definition-prefixes "ede/detect" '("ede-"))
 
 ;;;***
 
@@ -9058,7 +9135,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/dired.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/dired" '("ede-dired-")))
+(register-definition-prefixes "ede/dired" '("ede-dired-"))
 
 ;;;***
 
@@ -9066,7 +9143,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/emacs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/emacs" '("ede-emacs-")))
+(register-definition-prefixes "ede/emacs" '("ede-emacs-"))
 
 ;;;***
 
@@ -9074,7 +9151,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/files.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/files" '("ede-")))
+(register-definition-prefixes "ede/files" '("ede-"))
 
 ;;;***
 
@@ -9082,7 +9159,7 @@ an EDE controlled project.
 ;;;;;;  "cedet/ede/generic.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/generic.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/generic" '("ede-generic-")))
+(register-definition-prefixes "ede/generic" '("ede-generic-"))
 
 ;;;***
 
@@ -9090,7 +9167,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/linux.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/linux" '("ede-linux-" "project-linux-")))
+(register-definition-prefixes "ede/linux" '("ede-linux-" "project-linux-"))
 
 ;;;***
 
@@ -9098,7 +9175,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/locate.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/locate" '("ede-locate-")))
+(register-definition-prefixes "ede/locate" '("ede-locate-"))
 
 ;;;***
 
@@ -9106,7 +9183,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/make.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/make" '("ede-make-")))
+(register-definition-prefixes "ede/make" '("ede-"))
 
 ;;;***
 
@@ -9114,28 +9191,28 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/makefile-edit.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/makefile-edit" '("makefile-")))
+(register-definition-prefixes "ede/makefile-edit" '("makefile-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ede/pconf" "cedet/ede/pconf.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/pconf.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/pconf" '("ede-pconf-create-file-query")))
+(register-definition-prefixes "ede/pconf" '("ede-pconf-create-file-query"))
 
 ;;;***
 
 ;;;### (autoloads nil "ede/pmake" "cedet/ede/pmake.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/pmake.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/pmake" '("ede-pmake-")))
+(register-definition-prefixes "ede/pmake" '("ede-pmake-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ede/proj" "cedet/ede/proj.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/proj.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj" '("ede-proj-")))
+(register-definition-prefixes "ede/proj" '("ede-proj-"))
 
 ;;;***
 
@@ -9143,7 +9220,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/proj-archive.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj-archive" '("ede-")))
+(register-definition-prefixes "ede/proj-archive" '("ede-"))
 
 ;;;***
 
@@ -9151,7 +9228,7 @@ an EDE controlled project.
 ;;;;;;  0 0))
 ;;; Generated autoloads from cedet/ede/proj-aux.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj-aux" '("ede-")))
+(register-definition-prefixes "ede/proj-aux" '("ede-"))
 
 ;;;***
 
@@ -9159,7 +9236,7 @@ an EDE controlled project.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from cedet/ede/proj-comp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj-comp" '("ede-" "proj-comp-insert-variable-once")))
+(register-definition-prefixes "ede/proj-comp" '("ede-" 
"proj-comp-insert-variable-once"))
 
 ;;;***
 
@@ -9167,7 +9244,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/proj-elisp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj-elisp" '("ede-")))
+(register-definition-prefixes "ede/proj-elisp" '("ede-"))
 
 ;;;***
 
@@ -9175,7 +9252,7 @@ an EDE controlled project.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from cedet/ede/proj-info.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj-info" '("ede-")))
+(register-definition-prefixes "ede/proj-info" '("ede-"))
 
 ;;;***
 
@@ -9183,7 +9260,7 @@ an EDE controlled project.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from cedet/ede/proj-misc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj-misc" '("ede-")))
+(register-definition-prefixes "ede/proj-misc" '("ede-"))
 
 ;;;***
 
@@ -9191,7 +9268,7 @@ an EDE controlled project.
 ;;;;;;  0 0))
 ;;; Generated autoloads from cedet/ede/proj-obj.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj-obj" '("ede-")))
+(register-definition-prefixes "ede/proj-obj" '("ede-"))
 
 ;;;***
 
@@ -9199,7 +9276,7 @@ an EDE controlled project.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from cedet/ede/proj-prog.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj-prog" '("ede-proj-target-makefile-program")))
+(register-definition-prefixes "ede/proj-prog" 
'("ede-proj-target-makefile-program"))
 
 ;;;***
 
@@ -9207,7 +9284,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/proj-scheme.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj-scheme" '("ede-proj-target-scheme")))
+(register-definition-prefixes "ede/proj-scheme" '("ede-proj-target-scheme"))
 
 ;;;***
 
@@ -9215,7 +9292,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/proj-shared.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/proj-shared" '("ede-")))
+(register-definition-prefixes "ede/proj-shared" '("ede-"))
 
 ;;;***
 
@@ -9223,7 +9300,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/project-am.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/project-am" '("project-am-")))
+(register-definition-prefixes "ede/project-am" '("project-am-"))
 
 ;;;***
 
@@ -9231,21 +9308,21 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/shell.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/shell" '("ede-shell-run-command")))
+(register-definition-prefixes "ede/shell" '("ede-shell-run-command"))
 
 ;;;***
 
 ;;;### (autoloads nil "ede/simple" "cedet/ede/simple.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/simple.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/simple" '("ede-simple-")))
+(register-definition-prefixes "ede/simple" '("ede-simple-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ede/source" "cedet/ede/source.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/source.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/source" '("ede-source")))
+(register-definition-prefixes "ede/source" '("ede-source"))
 
 ;;;***
 
@@ -9253,7 +9330,7 @@ an EDE controlled project.
 ;;;;;;  "cedet/ede/speedbar.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/speedbar.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/speedbar" '("ede-")))
+(register-definition-prefixes "ede/speedbar" '("ede-"))
 
 ;;;***
 
@@ -9261,7 +9338,7 @@ an EDE controlled project.
 ;;;;;;  0))
 ;;; Generated autoloads from cedet/ede/srecode.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/srecode" '("ede-srecode-")))
+(register-definition-prefixes "ede/srecode" '("ede-srecode-"))
 
 ;;;***
 
@@ -9269,7 +9346,7 @@ an EDE controlled project.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/ede/util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ede/util" '("ede-make-buffer-writable")))
+(register-definition-prefixes "ede/util" '("ede-make-buffer-writable"))
 
 ;;;***
 
@@ -9329,7 +9406,7 @@ Toggle edebugging of all definitions." t nil)
 (autoload 'edebug-all-forms "edebug" "\
 Toggle edebugging of all forms." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"edebug" '("cancel-edebug-on-entry" "edebug" "get-edebug-spec" 
"global-edebug-")))
+(register-definition-prefixes "edebug" '("cancel-edebug-on-entry" "edebug" 
"get-edebug-spec" "global-edebug-"))
 
 ;;;***
 
@@ -9652,14 +9729,14 @@ Call `ediff-merge-directories' with the next three 
command line arguments." nil
 (autoload 'ediff-merge-directories-with-ancestor-command "ediff" "\
 Call `ediff-merge-directories-with-ancestor' with the next four command line 
arguments." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ediff" '("ediff-")))
+(register-definition-prefixes "ediff" '("ediff-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ediff-diff" "vc/ediff-diff.el" (0 0 0 0))
 ;;; Generated autoloads from vc/ediff-diff.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ediff-diff" '("ediff-")))
+(register-definition-prefixes "ediff-diff" '("ediff-"))
 
 ;;;***
 
@@ -9668,21 +9745,21 @@ Call `ediff-merge-directories-with-ancestor' with the 
next four command line arg
 
 (autoload 'ediff-customize "ediff-help" nil t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ediff-help" '("ediff-")))
+(register-definition-prefixes "ediff-help" '("ediff-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ediff-init" "vc/ediff-init.el" (0 0 0 0))
 ;;; Generated autoloads from vc/ediff-init.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ediff-init" '("ediff-" "stipple-pixmap")))
+(register-definition-prefixes "ediff-init" '("ediff-" "stipple-pixmap"))
 
 ;;;***
 
 ;;;### (autoloads nil "ediff-merg" "vc/ediff-merg.el" (0 0 0 0))
 ;;; Generated autoloads from vc/ediff-merg.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ediff-merg" '("ediff-")))
+(register-definition-prefixes "ediff-merg" '("ediff-"))
 
 ;;;***
 
@@ -9694,14 +9771,14 @@ Display Ediff's registry." t nil)
 
 (defalias 'eregistry 'ediff-show-registry)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ediff-mult" '("ediff-")))
+(register-definition-prefixes "ediff-mult" '("ediff-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ediff-ptch" "vc/ediff-ptch.el" (0 0 0 0))
 ;;; Generated autoloads from vc/ediff-ptch.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ediff-ptch" '("ediff-")))
+(register-definition-prefixes "ediff-ptch" '("ediff-"))
 
 ;;;***
 
@@ -9718,21 +9795,21 @@ Enable or disable Ediff toolbar.
 Works only in versions of Emacs that support toolbars.
 To change the default, set the variable `ediff-use-toolbar-p', which see." t 
nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ediff-util" '("ediff-")))
+(register-definition-prefixes "ediff-util" '("ediff-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ediff-vers" "vc/ediff-vers.el" (0 0 0 0))
 ;;; Generated autoloads from vc/ediff-vers.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ediff-vers" '("ediff-" "rcs-ediff-view-revision")))
+(register-definition-prefixes "ediff-vers" '("ediff-" 
"rcs-ediff-view-revision"))
 
 ;;;***
 
 ;;;### (autoloads nil "ediff-wind" "vc/ediff-wind.el" (0 0 0 0))
 ;;; Generated autoloads from vc/ediff-wind.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ediff-wind" '("ediff-")))
+(register-definition-prefixes "ediff-wind" '("ediff-"))
 
 ;;;***
 
@@ -9784,7 +9861,7 @@ or nil, use a compact 80-column format.
 
 \(fn &optional MACRO VERBOSE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"edmacro" '("edmacro-")))
+(register-definition-prefixes "edmacro" '("edmacro-"))
 
 ;;;***
 
@@ -9801,7 +9878,7 @@ Argument BOTTOM is the bottom margin in number of lines 
or percent of window.
 (autoload 'edt-emulation-on "edt" "\
 Turn on EDT Emulation." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"edt" '("edt-")))
+(register-definition-prefixes "edt" '("edt-"))
 
 ;;;***
 
@@ -9809,7 +9886,7 @@ Turn on EDT Emulation." t nil)
 ;;;;;;  0))
 ;;; Generated autoloads from emulation/edt-lk201.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"edt-lk201" '("*EDT-keys*")))
+(register-definition-prefixes "edt-lk201" '("*EDT-keys*"))
 
 ;;;***
 
@@ -9817,14 +9894,14 @@ Turn on EDT Emulation." t nil)
 ;;;;;;  0 0))
 ;;; Generated autoloads from emulation/edt-mapper.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"edt-mapper" '("edt-")))
+(register-definition-prefixes "edt-mapper" '("edt-"))
 
 ;;;***
 
 ;;;### (autoloads nil "edt-pc" "emulation/edt-pc.el" (0 0 0 0))
 ;;; Generated autoloads from emulation/edt-pc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"edt-pc" '("*EDT-keys*")))
+(register-definition-prefixes "edt-pc" '("*EDT-keys*"))
 
 ;;;***
 
@@ -9832,7 +9909,7 @@ Turn on EDT Emulation." t nil)
 ;;;;;;  0))
 ;;; Generated autoloads from emulation/edt-vt100.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"edt-vt100" '("edt-set-term-width-")))
+(register-definition-prefixes "edt-vt100" '("edt-set-term-width-"))
 
 ;;;***
 
@@ -9870,7 +9947,7 @@ BUFFER is put back into its original major mode.
 
 \(fn FUN &optional NAME)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ehelp" '("ehelp-" "electric-")))
+(register-definition-prefixes "ehelp" '("ehelp-" "electric-"))
 
 ;;;***
 
@@ -9878,7 +9955,7 @@ BUFFER is put back into its original major mode.
 ;;; Generated autoloads from emacs-lisp/eieio.el
 (push (purecopy '(eieio 1 4)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eieio" '("child-of-class-p" "defclass" "eieio-" "find-class" "obj" "oref" 
"oset" "same-class-p" "set-slot-value" "slot-" "with-slots")))
+(register-definition-prefixes "eieio" '("child-of-class-p" "defclass" "eieio-" 
"find-class" "obj" "oref" "oset" "same-class-p" "set-slot-value" "slot-" 
"with-slots"))
 
 ;;;***
 
@@ -9886,7 +9963,7 @@ BUFFER is put back into its original major mode.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from emacs-lisp/eieio-base.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eieio-base" '("eieio-")))
+(register-definition-prefixes "eieio-base" '("eieio-"))
 
 ;;;***
 
@@ -9894,7 +9971,7 @@ BUFFER is put back into its original major mode.
 ;;;;;;  "emacs-lisp/eieio-compat.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/eieio-compat.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eieio-compat" '("eieio--generic-static-symbol-specializers" "generic-p" 
"next-method-p" "no-")))
+(register-definition-prefixes "eieio-compat" 
'("eieio--generic-static-symbol-specializers" "generic-p" "next-method-p" 
"no-"))
 
 ;;;***
 
@@ -9913,7 +9990,7 @@ It creates an autoload function for CNAME's constructor.
 
 \(fn CNAME SUPERCLASSES FILENAME DOC)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eieio-core" '("class-" "eieio-" "inconsistent-class-hierarchy" "invalid-slot-" 
"unbound-slot")))
+(register-definition-prefixes "eieio-core" '("class-" "eieio-" 
"inconsistent-class-hierarchy" "invalid-slot-" "unbound-slot"))
 
 ;;;***
 
@@ -9921,7 +9998,7 @@ It creates an autoload function for CNAME's constructor.
 ;;;;;;  "emacs-lisp/eieio-custom.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/eieio-custom.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eieio-custom" '("eieio-")))
+(register-definition-prefixes "eieio-custom" '("eieio-"))
 
 ;;;***
 
@@ -9929,7 +10006,7 @@ It creates an autoload function for CNAME's constructor.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/eieio-datadebug.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eieio-datadebug" '("data-debug-insert-object-")))
+(register-definition-prefixes "eieio-datadebug" '("data-debug-insert-object-"))
 
 ;;;***
 
@@ -9937,7 +10014,7 @@ It creates an autoload function for CNAME's constructor.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/eieio-opt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eieio-opt" '("eieio-")))
+(register-definition-prefixes "eieio-opt" '("eieio-"))
 
 ;;;***
 
@@ -9945,13 +10022,13 @@ It creates an autoload function for CNAME's 
constructor.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/eieio-speedbar.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eieio-speedbar" '("eieio-speedbar")))
+(register-definition-prefixes "eieio-speedbar" '("eieio-speedbar"))
 
 ;;;***
 
 ;;;### (autoloads nil "eldoc" "emacs-lisp/eldoc.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/eldoc.el
-(push (purecopy '(eldoc 1 8 0)) package--builtin-versions)
+(push (purecopy '(eldoc 1 9 0)) package--builtin-versions)
 
 ;;;***
 
@@ -9976,6 +10053,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Electric Pair mode is a global minor mode.  When enabled, typing
 an open parenthesis automatically inserts the corresponding
 closing parenthesis, and vice versa.  (Likewise for brackets, etc.).
@@ -9994,9 +10074,12 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"elec-pair" '("electric-pair-")))
+(register-definition-prefixes "elec-pair" '("electric-pair-"))
 
 ;;;***
 
@@ -10013,7 +10096,7 @@ This is suitable as an entry on `find-file-hook' or 
appropriate mode hooks.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"elide-head" '("elide-head-")))
+(register-definition-prefixes "elide-head" '("elide-head-"))
 
 ;;;***
 
@@ -10046,7 +10129,7 @@ optional prefix argument REINIT is non-nil.
 
 \(fn &optional REINIT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"elint" '("elint-")))
+(register-definition-prefixes "elint" '("elint-"))
 
 ;;;***
 
@@ -10081,7 +10164,7 @@ If `elp-reset-after-results' is non-nil, then current 
profiling
 information for all instrumented functions is reset after results are
 displayed." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"elp" '("elp-")))
+(register-definition-prefixes "elp" '("elp-"))
 
 ;;;***
 
@@ -10089,7 +10172,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-alias.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-alias" '("eshell" "pcomplete/eshell-mode/alias")))
+(register-definition-prefixes "em-alias" '("eshell" 
"pcomplete/eshell-mode/alias"))
 
 ;;;***
 
@@ -10097,7 +10180,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-banner.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-banner" '("eshell-banner-")))
+(register-definition-prefixes "em-banner" '("eshell-banner-"))
 
 ;;;***
 
@@ -10105,7 +10188,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-basic.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-basic" '("eshell")))
+(register-definition-prefixes "em-basic" '("eshell"))
 
 ;;;***
 
@@ -10113,7 +10196,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-cmpl.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-cmpl" '("eshell-")))
+(register-definition-prefixes "em-cmpl" '("eshell-"))
 
 ;;;***
 
@@ -10121,7 +10204,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-dirs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-dirs" '("eshell")))
+(register-definition-prefixes "em-dirs" '("eshell"))
 
 ;;;***
 
@@ -10129,7 +10212,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-glob.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-glob" '("eshell-")))
+(register-definition-prefixes "em-glob" '("eshell-"))
 
 ;;;***
 
@@ -10137,7 +10220,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-hist.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-hist" '("eshell")))
+(register-definition-prefixes "em-hist" '("eshell"))
 
 ;;;***
 
@@ -10145,7 +10228,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-ls.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-ls" '("eshell")))
+(register-definition-prefixes "em-ls" '("eshell"))
 
 ;;;***
 
@@ -10153,7 +10236,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-pred.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-pred" '("eshell-")))
+(register-definition-prefixes "em-pred" '("eshell-"))
 
 ;;;***
 
@@ -10161,7 +10244,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-prompt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-prompt" '("eshell-")))
+(register-definition-prefixes "em-prompt" '("eshell-"))
 
 ;;;***
 
@@ -10169,7 +10252,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-rebind.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-rebind" '("eshell-")))
+(register-definition-prefixes "em-rebind" '("eshell-"))
 
 ;;;***
 
@@ -10177,7 +10260,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-script.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-script" '("eshell")))
+(register-definition-prefixes "em-script" '("eshell"))
 
 ;;;***
 
@@ -10185,7 +10268,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-smart.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-smart" '("eshell-")))
+(register-definition-prefixes "em-smart" '("eshell-"))
 
 ;;;***
 
@@ -10193,7 +10276,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-term.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-term" '("eshell-")))
+(register-definition-prefixes "em-term" '("eshell-"))
 
 ;;;***
 
@@ -10201,7 +10284,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-tramp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-tramp" '("eshell")))
+(register-definition-prefixes "em-tramp" '("eshell"))
 
 ;;;***
 
@@ -10209,7 +10292,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-unix.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-unix" '("eshell" "nil-blank-string" "pcomplete/")))
+(register-definition-prefixes "em-unix" '("eshell" "nil-blank-string" 
"pcomplete/"))
 
 ;;;***
 
@@ -10217,7 +10300,7 @@ displayed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from eshell/em-xtra.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"em-xtra" '("eshell/" "pcomplete/bcc")))
+(register-definition-prefixes "em-xtra" '("eshell/" "pcomplete/bcc"))
 
 ;;;***
 
@@ -10247,7 +10330,7 @@ some major modes from being locked under some 
circumstances.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"emacs-lock" '("emacs-lock-" "toggle-emacs-lock")))
+(register-definition-prefixes "emacs-lock" '("emacs-lock-" 
"toggle-emacs-lock"))
 
 ;;;***
 
@@ -10266,7 +10349,7 @@ Already submitted bugs can be found in the Emacs bug 
tracker:
 
 (set-advertised-calling-convention 'report-emacs-bug '(topic) '"24.5")
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"emacsbug" '("report-emacs-bug-")))
+(register-definition-prefixes "emacsbug" '("report-emacs-bug-"))
 
 ;;;***
 
@@ -10322,7 +10405,7 @@ Emerge two RCS revisions of a file, with another 
revision as ancestor.
 
 \(fn A-DIR B-DIR ANCESTOR-DIR OUTPUT-DIR)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"emerge" '("emerge-")))
+(register-definition-prefixes "emerge" '("emerge-"))
 
 ;;;***
 
@@ -10339,6 +10422,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Turning the mode on or off runs `enriched-mode-hook'.
 
 More information about Enriched mode is available in the file
@@ -10360,7 +10446,7 @@ Commands:
 
 \(fn FROM TO)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"enriched" '("enriched-")))
+(register-definition-prefixes "enriched" '("enriched-"))
 
 ;;;***
 
@@ -10550,7 +10636,7 @@ Insert selected KEYS after the point.
 
 \(fn KEYS)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"epa" '("epa-")))
+(register-definition-prefixes "epa" '("epa-"))
 
 ;;;***
 
@@ -10583,7 +10669,7 @@ Encrypt marked files." t nil)
 
 (autoload 'epa-file-disable "epa-file" nil t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"epa-file" '("epa-")))
+(register-definition-prefixes "epa-file" '("epa-"))
 
 ;;;***
 
@@ -10598,6 +10684,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
 (autoload 'epa-mail-decrypt "epa-mail" "\
@@ -10662,9 +10751,12 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"epa-mail" '("epa-mail-")))
+(register-definition-prefixes "epa-mail" '("epa-mail-"))
 
 ;;;***
 
@@ -10677,7 +10769,7 @@ Return a context object.
 
 \(fn &optional PROTOCOL ARMOR TEXTMODE INCLUDE-CERTS CIPHER-ALGORITHM 
DIGEST-ALGORITHM COMPRESS-ALGORITHM)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"epg" '("epg-")))
+(register-definition-prefixes "epg" '("epg-"))
 
 ;;;***
 
@@ -10717,7 +10809,7 @@ Look at CONFIG and try to expand GROUP.
 
 \(fn CONFIG GROUP)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"epg-config" '("epg-")))
+(register-definition-prefixes "epg-config" '("epg-"))
 
 ;;;***
 
@@ -10766,7 +10858,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 
 \(fn HOST PORT CHANNEL USER PASSWORD)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc" '("define-erc-module" "erc-")))
+(register-definition-prefixes "erc" '("define-erc-module" "erc-"))
 
 ;;;***
 
@@ -10774,14 +10866,14 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  "erc/erc-autoaway.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-autoaway.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-autoaway" '("erc-auto")))
+(register-definition-prefixes "erc-autoaway" '("erc-auto"))
 
 ;;;***
 
 ;;;### (autoloads nil "erc-backend" "erc/erc-backend.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-backend.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-backend" '("erc-")))
+(register-definition-prefixes "erc-backend" '("erc-"))
 
 ;;;***
 
@@ -10789,7 +10881,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-button.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-button" '("erc-")))
+(register-definition-prefixes "erc-button" '("erc-"))
 
 ;;;***
 
@@ -10797,15 +10889,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-capab.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-capab" '("erc-capab-identify-")))
-
-;;;***
-
-;;;### (autoloads "actual autoloads are elsewhere" "erc-compat" 
"erc/erc-compat.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from erc/erc-compat.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-compat" '("erc-")))
+(register-definition-prefixes "erc-capab" '("erc-capab-identify-"))
 
 ;;;***
 
@@ -10813,7 +10897,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-dcc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-dcc" '("erc-" "pcomplete/erc-mode/")))
+(register-definition-prefixes "erc-dcc" '("erc-" "pcomplete/erc-mode/"))
 
 ;;;***
 
@@ -10821,7 +10905,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  "erc/erc-desktop-notifications.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-desktop-notifications.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-desktop-notifications" '("erc-notifications-")))
+(register-definition-prefixes "erc-desktop-notifications" 
'("erc-notifications-"))
 
 ;;;***
 
@@ -10829,7 +10913,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  "erc/erc-ezbounce.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-ezbounce.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-ezbounce" '("erc-ezb-")))
+(register-definition-prefixes "erc-ezbounce" '("erc-ezb-"))
 
 ;;;***
 
@@ -10837,21 +10921,21 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-fill.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-fill" '("erc-")))
+(register-definition-prefixes "erc-fill" '("erc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "erc-goodies" "erc/erc-goodies.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-goodies.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-goodies" '("erc-")))
+(register-definition-prefixes "erc-goodies" '("erc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "erc-ibuffer" "erc/erc-ibuffer.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-ibuffer.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-ibuffer" '("erc-")))
+(register-definition-prefixes "erc-ibuffer" '("erc-"))
 
 ;;;***
 
@@ -10859,7 +10943,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-identd.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-identd" '("erc-identd-")))
+(register-definition-prefixes "erc-identd" '("erc-identd-"))
 
 ;;;***
 
@@ -10867,7 +10951,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-imenu.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-imenu" '("erc-unfill-notice")))
+(register-definition-prefixes "erc-imenu" '("erc-unfill-notice"))
 
 ;;;***
 
@@ -10875,14 +10959,14 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-join.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-join" '("erc-")))
+(register-definition-prefixes "erc-join" '("erc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "erc-lang" "erc/erc-lang.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-lang.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-lang" '("erc-cmd-LANG" "iso-638-languages" "language")))
+(register-definition-prefixes "erc-lang" '("erc-cmd-LANG" "iso-638-languages" 
"language"))
 
 ;;;***
 
@@ -10890,7 +10974,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-list.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-list" '("erc-")))
+(register-definition-prefixes "erc-list" '("erc-"))
 
 ;;;***
 
@@ -10898,7 +10982,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-log.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-log" '("erc-")))
+(register-definition-prefixes "erc-log" '("erc-"))
 
 ;;;***
 
@@ -10906,7 +10990,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-match.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-match" '("erc-")))
+(register-definition-prefixes "erc-match" '("erc-"))
 
 ;;;***
 
@@ -10914,7 +10998,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-menu.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-menu" '("erc-menu-")))
+(register-definition-prefixes "erc-menu" '("erc-menu-"))
 
 ;;;***
 
@@ -10922,7 +11006,7 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 ;;;;;;  "erc/erc-netsplit.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-netsplit.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-netsplit" '("erc-")))
+(register-definition-prefixes "erc-netsplit" '("erc-"))
 
 ;;;***
 
@@ -10938,7 +11022,7 @@ server name and search for a match in 
`erc-networks-alist'." nil nil)
 (autoload 'erc-server-select "erc-networks" "\
 Interactively select a server to connect to using `erc-server-alist'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-networks" '("erc-")))
+(register-definition-prefixes "erc-networks" '("erc-"))
 
 ;;;***
 
@@ -10946,7 +11030,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-notify.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-notify" '("erc-")))
+(register-definition-prefixes "erc-notify" '("erc-"))
 
 ;;;***
 
@@ -10954,7 +11038,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-page.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-page" '("erc-")))
+(register-definition-prefixes "erc-page" '("erc-"))
 
 ;;;***
 
@@ -10962,7 +11046,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  "erc/erc-pcomplete.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-pcomplete.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-pcomplete" '("erc-pcomplet" "pcomplete")))
+(register-definition-prefixes "erc-pcomplete" '("erc-pcomplet" "pcomplete"))
 
 ;;;***
 
@@ -10970,7 +11054,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  "erc/erc-replace.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-replace.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-replace" '("erc-replace-")))
+(register-definition-prefixes "erc-replace" '("erc-replace-"))
 
 ;;;***
 
@@ -10978,7 +11062,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-ring.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-ring" '("erc-")))
+(register-definition-prefixes "erc-ring" '("erc-"))
 
 ;;;***
 
@@ -10986,7 +11070,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  "erc/erc-services.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-services.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-services" '("erc-")))
+(register-definition-prefixes "erc-services" '("erc-"))
 
 ;;;***
 
@@ -10994,7 +11078,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-sound.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-sound" '("erc-")))
+(register-definition-prefixes "erc-sound" '("erc-"))
 
 ;;;***
 
@@ -11002,7 +11086,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  "erc/erc-speedbar.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-speedbar.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-speedbar" '("erc-")))
+(register-definition-prefixes "erc-speedbar" '("erc-"))
 
 ;;;***
 
@@ -11010,7 +11094,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  "erc/erc-spelling.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-spelling.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-spelling" '("erc-spelling-")))
+(register-definition-prefixes "erc-spelling" '("erc-spelling-"))
 
 ;;;***
 
@@ -11018,7 +11102,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-stamp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-stamp" '("erc-")))
+(register-definition-prefixes "erc-stamp" '("erc-"))
 
 ;;;***
 
@@ -11026,7 +11110,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-track.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-track" '("erc-")))
+(register-definition-prefixes "erc-track" '("erc-"))
 
 ;;;***
 
@@ -11034,7 +11118,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  "erc/erc-truncate.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-truncate.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-truncate" '("erc-max-buffer-size")))
+(register-definition-prefixes "erc-truncate" '("erc-max-buffer-size"))
 
 ;;;***
 
@@ -11042,7 +11126,7 @@ Interactively select a server to connect to using 
`erc-server-alist'." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-xdcc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"erc-xdcc" '("erc-")))
+(register-definition-prefixes "erc-xdcc" '("erc-"))
 
 ;;;***
 
@@ -11117,7 +11201,7 @@ Display the documentation for TEST-OR-TEST-NAME (a 
symbol or ert-test).
 
 \(fn TEST-OR-TEST-NAME)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ert" '("ert-")))
+(register-definition-prefixes "ert" '("ert-"))
 
 ;;;***
 
@@ -11129,35 +11213,35 @@ Display the documentation for TEST-OR-TEST-NAME (a 
symbol or ert-test).
 (autoload 'ert-kill-all-test-buffers "ert-x" "\
 Kill all test buffers that are still live." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ert-x" '("ert-")))
+(register-definition-prefixes "ert-x" '("ert-"))
 
 ;;;***
 
 ;;;### (autoloads nil "esh-arg" "eshell/esh-arg.el" (0 0 0 0))
 ;;; Generated autoloads from eshell/esh-arg.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"esh-arg" '("eshell-")))
+(register-definition-prefixes "esh-arg" '("eshell-"))
 
 ;;;***
 
 ;;;### (autoloads nil "esh-cmd" "eshell/esh-cmd.el" (0 0 0 0))
 ;;; Generated autoloads from eshell/esh-cmd.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"esh-cmd" '("eshell" "pcomplete/eshell-mode/eshell-debug")))
+(register-definition-prefixes "esh-cmd" '("eshell" 
"pcomplete/eshell-mode/eshell-debug"))
 
 ;;;***
 
 ;;;### (autoloads nil "esh-ext" "eshell/esh-ext.el" (0 0 0 0))
 ;;; Generated autoloads from eshell/esh-ext.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"esh-ext" '("eshell")))
+(register-definition-prefixes "esh-ext" '("eshell"))
 
 ;;;***
 
 ;;;### (autoloads nil "esh-io" "eshell/esh-io.el" (0 0 0 0))
 ;;; Generated autoloads from eshell/esh-io.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"esh-io" '("eshell-")))
+(register-definition-prefixes "esh-io" '("eshell-"))
 
 ;;;***
 
@@ -11169,7 +11253,7 @@ Emacs shell interactive mode.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"esh-mode" '("eshell")))
+(register-definition-prefixes "esh-mode" '("eshell"))
 
 ;;;***
 
@@ -11177,35 +11261,35 @@ Emacs shell interactive mode.
 ;;;;;;  0))
 ;;; Generated autoloads from eshell/esh-module.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"esh-module" '("eshell-")))
+(register-definition-prefixes "esh-module" '("eshell-"))
 
 ;;;***
 
 ;;;### (autoloads nil "esh-opt" "eshell/esh-opt.el" (0 0 0 0))
 ;;; Generated autoloads from eshell/esh-opt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"esh-opt" '("eshell-")))
+(register-definition-prefixes "esh-opt" '("eshell-"))
 
 ;;;***
 
 ;;;### (autoloads nil "esh-proc" "eshell/esh-proc.el" (0 0 0 0))
 ;;; Generated autoloads from eshell/esh-proc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"esh-proc" '("eshell")))
+(register-definition-prefixes "esh-proc" '("eshell"))
 
 ;;;***
 
 ;;;### (autoloads nil "esh-util" "eshell/esh-util.el" (0 0 0 0))
 ;;; Generated autoloads from eshell/esh-util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"esh-util" '("eshell-")))
+(register-definition-prefixes "esh-util" '("eshell-"))
 
 ;;;***
 
 ;;;### (autoloads nil "esh-var" "eshell/esh-var.el" (0 0 0 0))
 ;;; Generated autoloads from eshell/esh-var.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"esh-var" '("eshell" "pcomplete/eshell-mode/")))
+(register-definition-prefixes "esh-var" '("eshell" "pcomplete/eshell-mode/"))
 
 ;;;***
 
@@ -11247,9 +11331,7 @@ corresponding to a successful execution.
 
 \(fn COMMAND &optional STATUS-VAR)" nil nil)
 
-(define-obsolete-function-alias 'eshell-report-bug 'report-emacs-bug "23.1")
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eshell" '("eshell-")))
+(register-definition-prefixes "eshell" '("eshell-"))
 
 ;;;***
 
@@ -11553,7 +11635,7 @@ for \\[find-tag] (which see)." t nil)
 
 (autoload 'etags--xref-backend "etags" nil nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"etags" '("default-tags-table-function" "etags-" "file-of-tag" "find-tag-" 
"goto-tag-location-function" "initialize-new-tags-table" "last-tag" 
"list-tags-function" "select-tags-table-" "snarf-tag-function" "tag" 
"verify-tags-table-function" "xref-")))
+(register-definition-prefixes "etags" '("default-tags-table-function" "etags-" 
"file-of-tag" "find-tag-" "goto-tag-location-function" 
"initialize-new-tags-table" "last-tag" "list-tags-function" 
"select-tags-table-" "snarf-tag-function" "tag" "verify-tags-table-function" 
"xref-"))
 
 ;;;***
 
@@ -11707,7 +11789,7 @@ With ARG, insert that many delimiters.
 
 \(fn POS TO FONT-OBJECT STRING DIRECTION)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ethio-util" '("ethio-" "exit-ethiopic-environment")))
+(register-definition-prefixes "ethio-util" '("ethio-" 
"exit-ethiopic-environment"))
 
 ;;;***
 
@@ -11774,7 +11856,7 @@ This does nothing except loading eudc by autoload 
side-effect." t nil)
 
 (fset 'eudc-tools-menu (symbol-value 'eudc-tools-menu))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eudc" '("eudc-")))
+(register-definition-prefixes "eudc" '("eudc-"))
 
 ;;;***
 
@@ -11811,7 +11893,7 @@ Display a button for the JPEG DATA.
 
 \(fn DATA)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eudc-bob" '("eudc-")))
+(register-definition-prefixes "eudc-bob" '("eudc-bob-"))
 
 ;;;***
 
@@ -11825,7 +11907,7 @@ This function can only be called from a directory query 
result buffer." t nil)
 (autoload 'eudc-try-bbdb-insert "eudc-export" "\
 Call `eudc-insert-record-at-point-into-bbdb' if on a record." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eudc-export" '("eudc-")))
+(register-definition-prefixes "eudc-export" '("eudc-"))
 
 ;;;***
 
@@ -11836,35 +11918,35 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a 
record." t nil)
 (autoload 'eudc-edit-hotlist "eudc-hotlist" "\
 Edit the hotlist of directory servers in a specialized buffer." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eudc-hotlist" '("eudc-hotlist-")))
+(register-definition-prefixes "eudc-hotlist" '("eudc-hotlist-"))
 
 ;;;***
 
 ;;;### (autoloads nil "eudc-vars" "net/eudc-vars.el" (0 0 0 0))
 ;;; Generated autoloads from net/eudc-vars.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eudc-vars" '("eudc-")))
+(register-definition-prefixes "eudc-vars" '("eudc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "eudcb-bbdb" "net/eudcb-bbdb.el" (0 0 0 0))
 ;;; Generated autoloads from net/eudcb-bbdb.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eudcb-bbdb" '("eudc-bbdb-")))
+(register-definition-prefixes "eudcb-bbdb" '("eudc-bbdb-"))
 
 ;;;***
 
 ;;;### (autoloads nil "eudcb-ldap" "net/eudcb-ldap.el" (0 0 0 0))
 ;;; Generated autoloads from net/eudcb-ldap.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eudcb-ldap" '("eudc-")))
+(register-definition-prefixes "eudcb-ldap" '("eudc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "eudcb-mab" "net/eudcb-mab.el" (0 0 0 0))
 ;;; Generated autoloads from net/eudcb-mab.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eudcb-mab" '("eudc-")))
+(register-definition-prefixes "eudcb-mab" '("eudc-"))
 
 ;;;***
 
@@ -11872,7 +11954,7 @@ Edit the hotlist of directory servers in a specialized 
buffer." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from net/eudcb-macos-contacts.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eudcb-macos-contacts" '("eudc-macos-contacts-")))
+(register-definition-prefixes "eudcb-macos-contacts" '("eudc-macos-contacts-"))
 
 ;;;***
 
@@ -11900,7 +11982,7 @@ fourth arg NOSEP non-nil inhibits this.
 
 \(fn PRETTY-PRINTER &optional HEADER FOOTER NOSEP)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ewoc" '("ewoc-")))
+(register-definition-prefixes "ewoc" '("ewoc-"))
 
 ;;;***
 
@@ -11915,6 +11997,20 @@ duplicate entries (if any) removed.")
 
 (custom-autoload 'eww-suggest-uris "eww" t)
 
+(autoload 'eww-browse "eww" "\
+Function to be run to parse command line URLs.
+This is meant to be used for MIME handlers or command line use.
+
+Setting the handler for \"text/x-uri;\" to
+\"emacs -f eww-browse %u\" will then start up Emacs and call eww
+to browse the url.
+
+This can also be used on the command line directly:
+
+ emacs -f eww-browse https://gnu.org
+
+will start Emacs and browse the GNU web site." t nil)
+
 (autoload 'eww "eww" "\
 Fetch URL and render the page.
 If the input doesn't look like an URL or a domain name, the
@@ -11967,7 +12063,7 @@ instead of `browse-url-new-window-flag'.
 (autoload 'eww-list-bookmarks "eww" "\
 Display the bookmarks." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"eww" '("erc--download-directory" "eww-")))
+(register-definition-prefixes "eww" '("erc--download-directory" "eww-"))
 
 ;;;***
 
@@ -12003,14 +12099,14 @@ Make file executable according to umask if not 
already executable.
 If file already has any execute bits set at all, do not change existing
 file modes." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"executable" '("executable-")))
+(register-definition-prefixes "executable" '("executable-"))
 
 ;;;***
 
 ;;;### (autoloads nil "exif" "image/exif.el" (0 0 0 0))
 ;;; Generated autoloads from image/exif.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"exif" '("exif-")))
+(register-definition-prefixes "exif" '("exif-"))
 
 ;;;***
 
@@ -12055,14 +12151,14 @@ This is used only in conjunction with 
`expand-add-abbrevs'." t nil)
  (define-key abbrev-map "p" 'expand-jump-to-previous-slot)
  (define-key abbrev-map "n" 'expand-jump-to-next-slot)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"expand" '("expand-")))
+(register-definition-prefixes "expand" '("expand-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ezimage" "ezimage.el" (0 0 0 0))
 ;;; Generated autoloads from ezimage.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ezimage" '("defezimage" "ezimage-")))
+(register-definition-prefixes "ezimage" '("defezimage" "ezimage-"))
 
 ;;;***
 
@@ -12131,7 +12227,7 @@ with no args, if that value is non-nil.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"f90" '("f90-")))
+(register-definition-prefixes "f90" '("f90-"))
 
 ;;;***
 
@@ -12254,6 +12350,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When enabled, the face specified by the variable
 `buffer-face-mode-face' is used to display the buffer text.
 
@@ -12296,7 +12395,7 @@ Besides the choice of face, it is the same as 
`buffer-face-mode'.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"face-remap" '("buffer-face-mode-" "face-" "internal-lisp-face-attributes" 
"text-scale-m")))
+(register-definition-prefixes "face-remap" '("buffer-face-mode-" "face-" 
"internal-lisp-face-attributes" "text-scale-m"))
 
 ;;;***
 
@@ -12335,7 +12434,7 @@ FUNCTION must return an explanation when the test fails 
and
 
 \(fn FUNCTION)" nil t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"faceup" '("faceup-")))
+(register-definition-prefixes "faceup" '("faceup-"))
 
 ;;;***
 
@@ -12389,7 +12488,7 @@ you can set `feedmail-queue-reminder-alist' to nil.
 
 \(fn &optional WHAT-EVENT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"feedmail" '("feedmail-")))
+(register-definition-prefixes "feedmail" '("feedmail-"))
 
 ;;;***
 
@@ -12451,7 +12550,7 @@ This hook is intended to be put in 
`file-name-at-point-functions'." nil nil)
 (autoload 'ffap-bindings "ffap" "\
 Evaluate the forms in variable `ffap-bindings'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ffap" '("dired-at-point-" "ffap-" "find-file-literally-at-point")))
+(register-definition-prefixes "ffap" '("dired-at-point-" "ffap-" 
"find-file-literally-at-point"))
 
 ;;;***
 
@@ -12510,7 +12609,7 @@ the name is considered already unique; only the second 
substitution
 
 \(fn ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"filecache" '("file-cache-")))
+(register-definition-prefixes "filecache" '("file-cache-"))
 
 ;;;***
 
@@ -12550,7 +12649,7 @@ DELIMITED if non-nil means replace only word-delimited 
matches.
 
 \(fn FROM TO FILES CASE-FOLD &optional DELIMITED)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"fileloop" '("fileloop-")))
+(register-definition-prefixes "fileloop" '("fileloop-"))
 
 ;;;***
 
@@ -12564,7 +12663,7 @@ Otherwise, signal a `file-notify-error'.
 
 \(fn OBJECT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"filenotify" '("file-notify-")))
+(register-definition-prefixes "filenotify" '("file-notify-"))
 
 ;;;***
 
@@ -12670,7 +12769,7 @@ Execute BODY, and unwind connection-local variables.
 
 \(fn &rest BODY)" nil t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"files-x" '("connection-local-" "dir-locals-to-string" 
"hack-connection-local-variables" "modify-" "read-file-local-variable")))
+(register-definition-prefixes "files-x" '("connection-local-" 
"dir-locals-to-string" "hack-connection-local-variables" "modify-" 
"read-file-local-variable"))
 
 ;;;***
 
@@ -12681,7 +12780,7 @@ Execute BODY, and unwind connection-local variables.
 Filesets initialization.
 Set up hooks, load the cache file -- if existing -- and build the menu." nil 
nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"filesets" '("filesets-")))
+(register-definition-prefixes "filesets" '("filesets-"))
 
 ;;;***
 
@@ -12703,7 +12802,7 @@ result is a string that should be ready for the command 
line.
 
 \(fn &rest SUBFINDS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"find-cmd" '("find-")))
+(register-definition-prefixes "find-cmd" '("find-"))
 
 ;;;***
 
@@ -12745,7 +12844,7 @@ specifies what to use in place of \"-ls\" as the final 
argument.
 
 \(fn DIR REGEXP)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"find-dired" '("find-" "kill-find" "lookfor-dired")))
+(register-definition-prefixes "find-dired" '("find-" "kill-find" 
"lookfor-dired"))
 
 ;;;***
 
@@ -12837,7 +12936,7 @@ Visit the file you click on in another window.
 
 \(fn EVENT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"find-file" '("cc-" "ff-" "modula2-other-file-alist")))
+(register-definition-prefixes "find-file" '("cc-" "ff-" 
"modula2-other-file-alist"))
 
 ;;;***
 
@@ -13026,7 +13125,7 @@ Find directly the variable at point in the other 
window." t nil)
 (autoload 'find-function-setup-keys "find-func" "\
 Define some key bindings for the find-function family of functions." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"find-func" '("find-")))
+(register-definition-prefixes "find-func" '("find-"))
 
 ;;;***
 
@@ -13048,7 +13147,7 @@ Change the filter on a `find-lisp-find-dired' buffer to 
REGEXP.
 
 \(fn REGEXP)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"find-lisp" '("find-lisp-")))
+(register-definition-prefixes "find-lisp" '("find-lisp-"))
 
 ;;;***
 
@@ -13068,7 +13167,7 @@ FILE should be in a form suitable for passing to 
`locate-library'.
 (autoload 'finder-by-keyword "finder" "\
 Find packages matching a given keyword." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"finder" '("finder-" "generated-finder-keywords-file")))
+(register-definition-prefixes "finder" '("finder-" 
"generated-finder-keywords-file"))
 
 ;;;***
 
@@ -13091,7 +13190,7 @@ to get the effect of a C-q.
 
 \(fn &rest LOSING-TERMINAL-TYPES)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"flow-ctrl" '("flow-control-c-")))
+(register-definition-prefixes "flow-ctrl" '("flow-control-c-"))
 
 ;;;***
 
@@ -13112,7 +13211,7 @@ lines.
 
 \(fn &optional BUFFER DELETE-SPACE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"flow-fill" '("fill-flowed-")))
+(register-definition-prefixes "flow-fill" '("fill-flowed-"))
 
 ;;;***
 
@@ -13167,6 +13266,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Flymake is an Emacs minor mode for on-the-fly syntax checking.
 Flymake collects diagnostic information from multiple sources,
 called backends, and visually annotates the buffer with the
@@ -13205,7 +13307,7 @@ Turn Flymake mode on." nil nil)
 (autoload 'flymake-mode-off "flymake" "\
 Turn Flymake mode off." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"flymake" '("flymake-")))
+(register-definition-prefixes "flymake" '("flymake-"))
 
 ;;;***
 
@@ -13221,7 +13323,7 @@ REPORT-FN is Flymake's callback.
 
 \(fn REPORT-FN &rest ARGS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"flymake-cc" '("flymake-cc-")))
+(register-definition-prefixes "flymake-cc" '("flymake-cc-"))
 
 ;;;***
 
@@ -13230,7 +13332,7 @@ REPORT-FN is Flymake's callback.
 ;;; Generated autoloads from progmodes/flymake-proc.el
 (push (purecopy '(flymake-proc 1 0)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"flymake-proc" '("flymake-proc-")))
+(register-definition-prefixes "flymake-proc" '("flymake-proc-"))
 
 ;;;***
 
@@ -13249,6 +13351,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Flyspell mode is a buffer-local minor mode.  When enabled, it
 spawns a single Ispell process and checks each word.  The default
 flyspell behavior is to highlight incorrect words.
@@ -13297,7 +13402,7 @@ of a misspelled word removed when you've corrected it.
 (autoload 'flyspell-buffer "flyspell" "\
 Flyspell whole buffer." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"flyspell" '("flyspell-" "mail-mode-flyspell-verify" "make-flyspell-overlay" 
"sgml-mode-flyspell-verify" "tex")))
+(register-definition-prefixes "flyspell" '("flyspell-" 
"mail-mode-flyspell-verify" "make-flyspell-overlay" "sgml-mode-flyspell-verify" 
"tex"))
 
 ;;;***
 
@@ -13305,7 +13410,7 @@ Flyspell whole buffer." t nil)
 ;;; Generated autoloads from foldout.el
 (push (purecopy '(foldout 1 10)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"foldout" '("foldout-")))
+(register-definition-prefixes "foldout" '("foldout-"))
 
 ;;;***
 
@@ -13326,6 +13431,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Follow mode is a minor mode that combines windows into one tall
 virtual window.  This is accomplished by two main techniques:
 
@@ -13427,7 +13535,7 @@ selected if the original window is the first one in the 
frame.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"follow" '("follow-")))
+(register-definition-prefixes "follow" '("follow-"))
 
 ;;;***
 
@@ -13435,7 +13543,7 @@ selected if the original window is the first one in the 
frame.
 ;;;;;;  0))
 ;;; Generated autoloads from international/fontset.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"fontset" '("charset-script-alist" "create-" "fontset-" "generate-fontset-menu" 
"set" "standard-fontset-spec" "x-" "xlfd-")))
+(register-definition-prefixes "fontset" '("charset-script-alist" "create-" 
"fontset-" "generate-fontset-menu" "set" "standard-fontset-spec" "x-" "xlfd-"))
 
 ;;;***
 
@@ -13451,6 +13559,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Footnote mode is a buffer-local minor mode.  If enabled, it
 provides footnote support for `message-mode'.  To get started,
 play around with the following keys:
@@ -13458,7 +13569,7 @@ play around with the following keys:
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"footnote" '("footnote-")))
+(register-definition-prefixes "footnote" '("footnote-"))
 
 ;;;***
 
@@ -13512,7 +13623,7 @@ any occurrences of \"%%\" in FORMAT verbatim in the 
result.
 
 \(fn FORMAT SPECIFICATION &optional IGNORE-MISSING)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"format-spec" '("format-spec-")))
+(register-definition-prefixes "format-spec" '("format-spec-"))
 
 ;;;***
 
@@ -13550,7 +13661,7 @@ Visit a file in Forms mode in other window.
 
 \(fn FN)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"forms" '("forms-")))
+(register-definition-prefixes "forms" '("forms-"))
 
 ;;;***
 
@@ -13629,7 +13740,7 @@ with no args, if that value is non-nil.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"fortran" '("fortran-")))
+(register-definition-prefixes "fortran" '("fortran-"))
 
 ;;;***
 
@@ -13686,7 +13797,7 @@ and choose the directory as the fortune-file.
 
 \(fn &optional FILE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"fortune" '("fortune-")))
+(register-definition-prefixes "fortune" '("fortune-"))
 
 ;;;***
 
@@ -13862,7 +13973,7 @@ Interactively, reads the register using 
`register-read-with-preview'.
 
 \(fn REGISTER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"frameset" '("frameset-")))
+(register-definition-prefixes "frameset" '("frameset-"))
 
 ;;;***
 
@@ -13871,7 +13982,7 @@ Interactively, reads the register using 
`register-read-with-preview'.
 
 (unless (fboundp 'define-fringe-bitmap) (defun define-fringe-bitmap (_bitmap 
_bits &optional _height _width _align) "Define fringe bitmap BITMAP from BITS 
of size HEIGHT x WIDTH.\nBITMAP is a symbol identifying the new fringe 
bitmap.\nBITS is either a string or a vector of integers.\nHEIGHT is height of 
bitmap.  If HEIGHT is nil, use length of BITS.\nWIDTH must be an integer 
between 1 and 16, or nil which defaults to 8.\nOptional fifth arg ALIGN may be 
one of ‘top’, ‘center’, or ‘bottom’ [...]
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"fringe" '("fringe-" "set-fringe-")))
+(register-definition-prefixes "fringe" '("fringe-" "set-fringe-"))
 
 ;;;***
 
@@ -13879,14 +13990,14 @@ Interactively, reads the register using 
`register-read-with-preview'.
 ;;; Generated autoloads from play/gamegrid.el
 (push (purecopy '(gamegrid 1 2)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gamegrid" '("gamegrid-")))
+(register-definition-prefixes "gamegrid" '("gamegrid-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gametree" "play/gametree.el" (0 0 0 0))
 ;;; Generated autoloads from play/gametree.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gametree" '("gametree-")))
+(register-definition-prefixes "gametree" '("gametree-"))
 
 ;;;***
 
@@ -13913,6 +14024,9 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
 (autoload 'gdb "gdb-mi" "\
@@ -13975,7 +14089,7 @@ detailed description of this mode.
 
 \(fn COMMAND-LINE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gdb-mi" '("breakpoint" "def-gdb-" "gdb" "gud-" "hollow-right-triangle" "nil")))
+(register-definition-prefixes "gdb-mi" '("breakpoint" "def-gdb-" "gdb" "gud-" 
"hollow-right-triangle" "nil"))
 
 ;;;***
 
@@ -13983,7 +14097,7 @@ detailed description of this mode.
 ;;;;;;  0 0))
 ;;; Generated autoloads from emacs-lisp/generator.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"generator" '("cps-" "iter-")))
+(register-definition-prefixes "generator" '("cps-" "iter-"))
 
 ;;;***
 
@@ -14065,14 +14179,14 @@ regular expression that can be used as an element of
 
 (make-obsolete 'generic-make-keywords-list 'regexp-opt '"24.4")
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"generic" '("generic-")))
+(register-definition-prefixes "generic" '("generic-"))
 
 ;;;***
 
 ;;;### (autoloads nil "generic-x" "generic-x.el" (0 0 0 0))
 ;;; Generated autoloads from generic-x.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"generic-x" '("default-generic-mode" "generic-")))
+(register-definition-prefixes "generic-x" '("default-generic-mode" "generic-"))
 
 ;;;***
 
@@ -14087,12 +14201,15 @@ disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When this mode is active, it tries to add virtual
 separators (like underscores) at places they belong to.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"glasses" '("glasses-")))
+(register-definition-prefixes "glasses" '("glasses-"))
 
 ;;;***
 
@@ -14148,15 +14265,14 @@ DEFAULT-MAP specifies the default key map for 
ICON-LIST.
 
 \(fn ICON-LIST ZAP-LIST DEFAULT-MAP)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gmm-utils" '("defun-gmm" "gmm-")))
+(register-definition-prefixes "gmm-utils" '("defun-gmm" "gmm-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus" "gnus/gnus.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus.el
 (push (purecopy '(gnus 5 13)) package--builtin-versions)
-(when (fboundp 'custom-autoload)
- (custom-autoload 'gnus-select-method "gnus"))
+(custom-autoload 'gnus-select-method "gnus")
 
 (autoload 'gnus-child-no-server "gnus" "\
 Read network news as a child, without connecting to the local server.
@@ -14210,7 +14326,7 @@ prompt the user for the name of an NNTP server to use.
 
 \(fn &optional ARG DONT-CONNECT CHILD)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus" '("gnus-")))
+(register-definition-prefixes "gnus" '("gnus-"))
 
 ;;;***
 
@@ -14293,7 +14409,7 @@ CLEAN is obsolete and ignored.
 
 \(fn &optional CLEAN REREAD)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-agent" '("gnus-")))
+(register-definition-prefixes "gnus-agent" '("gnus-"))
 
 ;;;***
 
@@ -14303,21 +14419,21 @@ CLEAN is obsolete and ignored.
 (autoload 'gnus-article-prepare-display "gnus-art" "\
 Make the current buffer look like a nice article." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-art" '("article-" "gnus-")))
+(register-definition-prefixes "gnus-art" '("article-" "gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-async" "gnus/gnus-async.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-async.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-async" '("gnus-")))
+(register-definition-prefixes "gnus-async" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-bcklg" "gnus/gnus-bcklg.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-bcklg.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-bcklg" '("gnus-backlog-")))
+(register-definition-prefixes "gnus-bcklg" '("gnus-backlog-"))
 
 ;;;***
 
@@ -14339,7 +14455,7 @@ The list is displayed in a buffer named `*Gnus Bookmark 
List*'.
 The leftmost column displays a D if the bookmark is flagged for
 deletion, or > if it is flagged for displaying." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-bookmark" '("gnus-bookmark-")))
+(register-definition-prefixes "gnus-bookmark" '("gnus-bookmark-"))
 
 ;;;***
 
@@ -14380,28 +14496,35 @@ supported.
 
 \(fn GROUP)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-cache" '("gnus-")))
+(register-definition-prefixes "gnus-cache" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-cite" "gnus/gnus-cite.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-cite.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-cite" '("gnus-" "turn-o")))
+(register-definition-prefixes "gnus-cite" '("gnus-" "turn-o"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-cloud" "gnus/gnus-cloud.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-cloud.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-cloud" '("gnus-cloud-")))
+(register-definition-prefixes "gnus-cloud" '("gnus-cloud-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-cus" "gnus/gnus-cus.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-cus.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-cus" '("category-fields" "gnus-")))
+(register-definition-prefixes "gnus-cus" '("category-fields" "gnus-"))
+
+;;;***
+
+;;;### (autoloads nil "gnus-dbus" "gnus/gnus-dbus.el" (0 0 0 0))
+;;; Generated autoloads from gnus/gnus-dbus.el
+
+(register-definition-prefixes "gnus-dbus" '("gnus-dbus-"))
 
 ;;;***
 
@@ -14440,14 +14563,14 @@ Checking delayed messages is skipped if optional arg 
NO-CHECK is non-nil.
 
 \(fn &optional NO-KEYMAP NO-CHECK)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-delay" '("gnus-delay-")))
+(register-definition-prefixes "gnus-delay" '("gnus-delay-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-demon" "gnus/gnus-demon.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-demon.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-demon" '("gnus-")))
+(register-definition-prefixes "gnus-demon" '("gnus-"))
 
 ;;;***
 
@@ -14464,7 +14587,7 @@ Checking delayed messages is skipped if optional arg 
NO-CHECK is non-nil.
 
 \(fn HEADER)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-diary" '("gnus-")))
+(register-definition-prefixes "gnus-diary" '("gnus-"))
 
 ;;;***
 
@@ -14474,7 +14597,7 @@ Checking delayed messages is skipped if optional arg 
NO-CHECK is non-nil.
 (autoload 'turn-on-gnus-dired-mode "gnus-dired" "\
 Convenience method to turn on gnus-dired-mode." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-dired" '("gnus-dired-")))
+(register-definition-prefixes "gnus-dired" '("gnus-dired-"))
 
 ;;;***
 
@@ -14484,21 +14607,21 @@ Convenience method to turn on gnus-dired-mode." t nil)
 (autoload 'gnus-draft-reminder "gnus-draft" "\
 Reminder user if there are unsent drafts." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-draft" '("gnus-")))
+(register-definition-prefixes "gnus-draft" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-dup" "gnus/gnus-dup.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-dup.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-dup" '("gnus-")))
+(register-definition-prefixes "gnus-dup" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-eform" "gnus/gnus-eform.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-eform.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-eform" '("gnus-edit-form")))
+(register-definition-prefixes "gnus-eform" '("gnus-edit-form"))
 
 ;;;***
 
@@ -14557,7 +14680,7 @@ Files matching `gnus-face-omit-files' are not 
considered." t nil)
 (autoload 'gnus-insert-random-face-header "gnus-fun" "\
 Insert a random Face header from `gnus-face-directory'." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-fun" '("gnus-")))
+(register-definition-prefixes "gnus-fun" '("gnus-"))
 
 ;;;***
 
@@ -14577,7 +14700,7 @@ If gravatars are already displayed, remove them.
 
 \(fn &optional FORCE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-gravatar" '("gnus-gravatar-")))
+(register-definition-prefixes "gnus-gravatar" '("gnus-gravatar-"))
 
 ;;;***
 
@@ -14603,7 +14726,7 @@ The arguments have the same meaning as those of
 
 \(fn IDS &optional WINDOW-CONF)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-group" '("gnus-")))
+(register-definition-prefixes "gnus-group" '("gnus-"))
 
 ;;;***
 
@@ -14620,7 +14743,7 @@ The arguments have the same meaning as those of
 
 \(fn SUMMARY)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-html" '("gnus-")))
+(register-definition-prefixes "gnus-html" '("gnus-"))
 
 ;;;***
 
@@ -14633,14 +14756,14 @@ The arguments have the same meaning as those of
 
 \(fn HANDLE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-icalendar" '("gnus-icalendar")))
+(register-definition-prefixes "gnus-icalendar" '("gnus-icalendar"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-int" "gnus/gnus-int.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-int.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-int" '("gnus-")))
+(register-definition-prefixes "gnus-int" '("gnus-"))
 
 ;;;***
 
@@ -14653,21 +14776,21 @@ The arguments have the same meaning as those of
 Run batched scoring.
 Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-kill" '("gnus-")))
+(register-definition-prefixes "gnus-kill" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-logic" "gnus/gnus-logic.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-logic.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-logic" '("gnus-")))
+(register-definition-prefixes "gnus-logic" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-mh" "gnus/gnus-mh.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-mh.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-mh" '("gnus-")))
+(register-definition-prefixes "gnus-mh" '("gnus-"))
 
 ;;;***
 
@@ -14690,11 +14813,14 @@ positive, and disable it if ARG is zero or negative.  
If called
 from Lisp, also enable the mode if ARG is omitted or nil, and
 toggle it if ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when
+it is disabled.
+
 \\{gnus-mailing-list-mode-map}
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-ml" '("gnus-mailing-list-")))
+(register-definition-prefixes "gnus-ml" '("gnus-mailing-list-"))
 
 ;;;***
 
@@ -14793,7 +14919,7 @@ Calling (gnus-group-split-fancy nil nil 
\"mail.others\") returns:
 
 \(fn &optional GROUPS NO-CROSSPOST CATCH-ALL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-mlspl" '("gnus-group-split-")))
+(register-definition-prefixes "gnus-mlspl" '("gnus-group-split-"))
 
 ;;;***
 
@@ -14821,7 +14947,7 @@ Like `message-reply'.
 
 (define-mail-user-agent 'gnus-user-agent 'gnus-msg-mail 'message-send-and-exit 
'message-kill-buffer 'message-send-hook)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-msg" '("gnus-")))
+(register-definition-prefixes "gnus-msg" '("gnus-"))
 
 ;;;***
 
@@ -14838,7 +14964,7 @@ notification using `notifications-notify' for it.
 This is typically a function to add in
 `gnus-after-getting-new-news-hook'" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-notifications" '("gnus-notifications-")))
+(register-definition-prefixes "gnus-notifications" '("gnus-notifications-"))
 
 ;;;***
 
@@ -14857,7 +14983,7 @@ If picons are already displayed, remove them." t nil)
 Display picons in the Newsgroups and Followup-To headers.
 If picons are already displayed, remove them." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-picon" '("gnus-picon-")))
+(register-definition-prefixes "gnus-picon" '("gnus-picon-"))
 
 ;;;***
 
@@ -14926,7 +15052,7 @@ Add NUM into sorted LIST by side effect.
 
 \(fn LIST NUM)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-range" '("gnus-")))
+(register-definition-prefixes "gnus-range" '("gnus-"))
 
 ;;;***
 
@@ -14937,7 +15063,7 @@ Add NUM into sorted LIST by side effect.
 (autoload 'gnus-registry-initialize "gnus-registry" "\
 Initialize the Gnus registry." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-registry" '("gnus-")))
+(register-definition-prefixes "gnus-registry" '("gnus-"))
 
 ;;;***
 
@@ -14945,21 +15071,21 @@ Initialize the Gnus registry." t nil)
 ;;;;;;  0 0))
 ;;; Generated autoloads from gnus/gnus-rfc1843.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-rfc1843" '("rfc1843-")))
+(register-definition-prefixes "gnus-rfc1843" '("rfc1843-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-salt" "gnus/gnus-salt.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-salt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-salt" '("gnus-")))
+(register-definition-prefixes "gnus-salt" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-score" "gnus/gnus-score.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-score.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-score" '("gnus-")))
+(register-definition-prefixes "gnus-score" '("gnus-"))
 
 ;;;***
 
@@ -14981,7 +15107,7 @@ See the documentation for these variables and functions 
for details." t nil)
 
 (autoload 'gnus-sieve-article-add-rule "gnus-sieve" nil t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-sieve" '("gnus-sieve-")))
+(register-definition-prefixes "gnus-sieve" '("gnus-sieve-"))
 
 ;;;***
 
@@ -14993,14 +15119,14 @@ Update the format specification near point.
 
 \(fn VAR)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-spec" '("gnus-")))
+(register-definition-prefixes "gnus-spec" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-srvr" "gnus/gnus-srvr.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-srvr.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-srvr" '("gnus-")))
+(register-definition-prefixes "gnus-srvr" '("gnus-"))
 
 ;;;***
 
@@ -15012,7 +15138,7 @@ Declare back end NAME with ABILITIES as a Gnus back end.
 
 \(fn NAME &rest ABILITIES)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-start" '("gnus-")))
+(register-definition-prefixes "gnus-start" '("gnus-"))
 
 ;;;***
 
@@ -15025,42 +15151,42 @@ BOOKMARK is a bookmark name or a bookmark record.
 
 \(fn BOOKMARK)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-sum" '("gnus-")))
+(register-definition-prefixes "gnus-sum" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-topic" "gnus/gnus-topic.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-topic.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-topic" '("gnus-")))
+(register-definition-prefixes "gnus-topic" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-undo" "gnus/gnus-undo.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-undo.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-undo" '("gnus-")))
+(register-definition-prefixes "gnus-undo" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-util" "gnus/gnus-util.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-util" '("gnus-")))
+(register-definition-prefixes "gnus-util" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-uu" "gnus/gnus-uu.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-uu.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-uu" '("gnus-")))
+(register-definition-prefixes "gnus-uu" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnus-vm" "gnus/gnus-vm.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-vm.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-vm" '("gnus-")))
+(register-definition-prefixes "gnus-vm" '("gnus-"))
 
 ;;;***
 
@@ -15072,14 +15198,14 @@ Add the window configuration CONF to 
`gnus-buffer-configuration'.
 
 \(fn CONF)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnus-win" '("gnus-")))
+(register-definition-prefixes "gnus-win" '("gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gnutls" "net/gnutls.el" (0 0 0 0))
 ;;; Generated autoloads from net/gnutls.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gnutls" '("gnutls-" "open-gnutls-stream")))
+(register-definition-prefixes "gnutls" '("gnutls-" "open-gnutls-stream"))
 
 ;;;***
 
@@ -15107,7 +15233,7 @@ Use \\[describe-mode] for more info.
 
 \(fn &optional N M)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gomoku" '("gomoku-")))
+(register-definition-prefixes "gomoku" '("gomoku-"))
 
 ;;;***
 
@@ -15141,6 +15267,33 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
+\(fn &optional ARG)" t nil)
+
+(put 'global-goto-address-mode 'globalized-minor-mode t)
+
+(defvar global-goto-address-mode nil "\
+Non-nil if Global Goto-Address mode is enabled.
+See the `global-goto-address-mode' command
+for a description of this minor mode.
+Setting this variable directly does not take effect;
+either customize it (see the info node `Easy Customization')
+or call the function `global-goto-address-mode'.")
+
+(custom-autoload 'global-goto-address-mode "goto-addr" nil)
+
+(autoload 'global-goto-address-mode "goto-addr" "\
+Toggle Goto-Address mode in all buffers.
+With prefix ARG, enable Global Goto-Address mode if ARG is positive;
+otherwise, disable it.  If called from Lisp, enable the mode if
+ARG is omitted or nil.
+
+Goto-Address mode is enabled in all buffers where
+`goto-addr-mode--turn-on' would do it.
+See `goto-address-mode' for more information on Goto-Address mode.
+
 \(fn &optional ARG)" t nil)
 
 (autoload 'goto-address-prog-mode "goto-addr" "\
@@ -15151,9 +15304,12 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"goto-addr" '("goto-address-")))
+(register-definition-prefixes "goto-addr" '("goto-addr"))
 
 ;;;***
 
@@ -15175,7 +15331,7 @@ retrieval failed.
 
 \(fn MAIL-ADDRESS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gravatar" '("gravatar-")))
+(register-definition-prefixes "gravatar" '("gravatar-"))
 
 ;;;***
 
@@ -15203,7 +15359,12 @@ by `grep-compute-defaults'; to change the default 
value, use
 The default find command for \\[grep-find].
 In interactive usage, the actual value of this variable is set up
 by `grep-compute-defaults'; to change the default value, use
-\\[customize] or call the function `grep-apply-setting'.")
+\\[customize] or call the function `grep-apply-setting'.
+
+This variable can either be a string, or a cons of the
+form (COMMAND . POSITION).  In the latter case, COMMAND will be
+used as the default command, and point will be placed at POSITION
+for easier editing.")
 
 (custom-autoload 'grep-find-command "grep" nil)
 
@@ -15363,14 +15524,14 @@ command before it's run.
 
 (defalias 'rzgrep 'zrgrep)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"grep" '("grep-" "kill-grep" "rgrep-")))
+(register-definition-prefixes "grep" '("grep-" "kill-grep" "rgrep-"))
 
 ;;;***
 
 ;;;### (autoloads nil "gssapi" "gnus/gssapi.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gssapi.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gssapi" '("gssapi-program" "open-gssapi-stream")))
+(register-definition-prefixes "gssapi" '("gssapi-program" 
"open-gssapi-stream"))
 
 ;;;***
 
@@ -15480,9 +15641,12 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"gud" '("gdb-" "gud-")))
+(register-definition-prefixes "gud" '("gdb-" "gud-"))
 
 ;;;***
 
@@ -15590,7 +15754,7 @@ binding mode.
 
 \(fn PLACE)" nil t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gv" 
'("gv-")))
+(register-definition-prefixes "gv" '("gv-"))
 
 ;;;***
 
@@ -15607,7 +15771,7 @@ Variables: `handwrite-linespace'     (default 12)
            `handwrite-numlines'      (default 60)
            `handwrite-pagenumbering' (default nil)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"handwrite" '("handwrite-" "menu-bar-handwrite-map")))
+(register-definition-prefixes "handwrite" '("handwrite-" 
"menu-bar-handwrite-map"))
 
 ;;;***
 
@@ -15615,7 +15779,7 @@ Variables: `handwrite-linespace'     (default 12)
 ;;;;;;  0 0))
 ;;; Generated autoloads from language/hanja-util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hanja-util" '("han")))
+(register-definition-prefixes "hanja-util" '("han"))
 
 ;;;***
 
@@ -15640,7 +15804,7 @@ This is, necessarily (as of Emacs 20.3), a crock.  When 
the
 current-time interface is made s2G-compliant, hanoi.el will need
 to be updated." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hanoi" '("hanoi-")))
+(register-definition-prefixes "hanoi" '("hanoi-"))
 
 ;;;***
 
@@ -15684,7 +15848,7 @@ Prefix arg sets default accept amount temporarily.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hashcash" '("hashcash-")))
+(register-definition-prefixes "hashcash" '("hashcash-"))
 
 ;;;***
 
@@ -15714,6 +15878,9 @@ the `kbd-help' property at point.  If `kbd-help' does 
not produce
 a string, but the `help-echo' property does, then that string is
 printed instead.
 
+The string is passed through `substitute-command-keys' before it
+is displayed.
+
 A numeric argument ARG prevents display of a message in case
 there is no help.  While ARG can be used interactively, it is
 mainly meant for use from Lisp.
@@ -15740,6 +15907,10 @@ included in this list.  Suggested properties are 
`keymap',
 `local-map', `button' and `kbd-help'.  Any value other than t or
 a non-empty list disables the feature.
 
+The text printed from the `help-echo' property is often only
+relevant when using the mouse.  The presence of a `kbd-help'
+property guarantees that non mouse specific help is available.
+
 This variable only takes effect after a call to
 `help-at-pt-set-timer'.  The help gets printed after Emacs has
 been idle for `help-at-pt-timer-delay' seconds.  You can call
@@ -15807,7 +15978,7 @@ different regions.  With numeric argument ARG, behaves 
like
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"help-at-pt" '("help-at-pt-" "scan-buf-move-hook")))
+(register-definition-prefixes "help-at-pt" '("help-at-pt-" 
"scan-buf-move-hook"))
 
 ;;;***
 
@@ -15921,6 +16092,21 @@ documentation for the major and minor modes of that 
buffer.
 
 \(fn &optional BUFFER)" t nil)
 
+(autoload 'describe-widget "help-fns" "\
+Display a buffer with information about a widget.
+You can use this command to describe buttons (e.g., the links in a *Help*
+buffer), editable fields of the customization buffers, etc.
+
+Interactively, click on a widget to describe it, or hit RET to describe the
+widget at point.
+
+When called from Lisp, POS may be a buffer position or a mouse position list.
+
+Calls each function of the list `describe-widget-functions' in turn, until
+one of them returns non-nil.
+
+\(fn &optional POS)" t nil)
+
 (autoload 'doc-file-to-man "help-fns" "\
 Produce an nroff buffer containing the doc-strings from the DOC file.
 
@@ -15931,7 +16117,7 @@ Produce a texinfo buffer with sorted doc-strings from 
the DOC file.
 
 \(fn FILE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"help-fns" '("describe-" "help-")))
+(register-definition-prefixes "help-fns" '("describe-" "help-"))
 
 ;;;***
 
@@ -15947,7 +16133,7 @@ gives the window that lists the options.")
 
 (custom-autoload 'three-step-help "help-macro" t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"help-macro" '("make-help-screen")))
+(register-definition-prefixes "help-macro" '("make-help-screen"))
 
 ;;;***
 
@@ -16044,7 +16230,7 @@ BOOKMARK is a bookmark name or a bookmark record.
 
 \(fn BOOKMARK)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"help-mode" '("describe-symbol-backends" "help-")))
+(register-definition-prefixes "help-mode" '("describe-symbol-backends" 
"help-"))
 
 ;;;***
 
@@ -16057,14 +16243,14 @@ Describe local key bindings of current mode." t nil)
 (autoload 'Helper-help "helper" "\
 Provide help for current mode." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"helper" '("Helper-")))
+(register-definition-prefixes "helper" '("Helper-"))
 
 ;;;***
 
 ;;;### (autoloads nil "hex-util" "hex-util.el" (0 0 0 0))
 ;;; Generated autoloads from hex-util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hex-util" '("decode-hex-string" "encode-hex-string")))
+(register-definition-prefixes "hex-util" '("decode-hex-string" 
"encode-hex-string"))
 
 ;;;***
 
@@ -16158,7 +16344,7 @@ and edit the file in `hexl-mode'.
 Convert a binary buffer to hexl format.
 This discards the buffer's undo information." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hexl" '("dehexlify-buffer" "hexl-")))
+(register-definition-prefixes "hexl" '("dehexlify-buffer" "hexl-"))
 
 ;;;***
 
@@ -16166,7 +16352,7 @@ This discards the buffer's undo information." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from hfy-cmap.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hfy-cmap" '("hfy-" "htmlfontify-unload-rgb-file")))
+(register-definition-prefixes "hfy-cmap" '("hfy-" 
"htmlfontify-unload-rgb-file"))
 
 ;;;***
 
@@ -16181,6 +16367,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Hi Lock mode is automatically enabled when you invoke any of the
 highlighting commands listed below, such as \\[highlight-regexp].
 To enable Hi Lock mode in all buffers, use `global-hi-lock-mode'
@@ -16367,7 +16556,7 @@ Interactively added patterns are those normally 
specified using
 `highlight-regexp' and `highlight-lines-matching-regexp'; they can
 be found in variable `hi-lock-interactive-patterns'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hi-lock" '("hi-lock-" "turn-on-hi-lock-if-enabled")))
+(register-definition-prefixes "hi-lock" '("hi-lock-" 
"turn-on-hi-lock-if-enabled"))
 
 ;;;***
 
@@ -16382,6 +16571,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Hide-Ifdef mode is a buffer-local minor mode for use with C and
 C-like major modes.  When enabled, code within #ifdef constructs
 that the C preprocessor would eliminate may be hidden from view.
@@ -16418,7 +16610,7 @@ Several variables affect how the hiding is done:
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hideif" '("backward-ifdef" "down-ifdef" "forward-ifdef" "hide-ifdef" "hif-" 
"intern-safe" "next-ifdef" "previous-ifdef" "show-ifdef" "up-ifdef")))
+(register-definition-prefixes "hideif" '("backward-ifdef" "down-ifdef" 
"forward-ifdef" "hide-ifdef" "hif-" "intern-safe" "next-ifdef" "previous-ifdef" 
"show-ifdef" "up-ifdef"))
 
 ;;;***
 
@@ -16461,6 +16653,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When hideshow minor mode is on, the menu bar is augmented with hideshow
 commands and the hideshow commands are enabled.
 The value (hs . t) is added to `buffer-invisibility-spec'.
@@ -16482,7 +16677,15 @@ Key bindings:
 (autoload 'turn-off-hideshow "hideshow" "\
 Unconditionally turn off `hs-minor-mode'." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hideshow" '("hs-")))
+(register-definition-prefixes "hideshow" '("hs-"))
+
+;;;***
+
+;;;### (autoloads nil "hierarchy" "emacs-lisp/hierarchy.el" (0 0
+;;;;;;  0 0))
+;;; Generated autoloads from emacs-lisp/hierarchy.el
+
+(register-definition-prefixes "hierarchy" '("hierarchy-"))
 
 ;;;***
 
@@ -16497,6 +16700,9 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Highlight Changes is enabled, changes are marked with a text
 property.  Normally they are displayed in a distinctive face, but
 command \\[highlight-changes-visible-mode] can be used to toggle
@@ -16522,6 +16728,9 @@ is positive, and disable it if ARG is zero or negative. 
 If called
 from Lisp, also enable the mode if ARG is omitted or nil, and toggle
 it if ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Highlight Changes Visible mode only has an effect when Highlight
 Changes mode is on.  When enabled, the changed text is displayed
 in a distinctive face.
@@ -16616,7 +16825,7 @@ See `highlight-changes-mode' for more information on 
Highlight-Changes mode.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hilit-chg" '("global-highlight-changes" "highlight-" "hilit-chg-")))
+(register-definition-prefixes "hilit-chg" '("highlight-" "hilit-chg-"))
 
 ;;;***
 
@@ -16649,7 +16858,7 @@ argument VERBOSE non-nil makes the function verbose.
 
 \(fn TRY-LIST &optional VERBOSE)" nil t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hippie-exp" '("he-" "hippie-expand-" "try-")))
+(register-definition-prefixes "hippie-exp" '("he-" "hippie-expand-" "try-"))
 
 ;;;***
 
@@ -16664,6 +16873,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Hl-Line mode is a buffer-local minor mode.  If
 `hl-line-sticky-flag' is non-nil, Hl-Line mode highlights the
 line about the buffer's point in all windows.  Caveat: the
@@ -16696,6 +16908,9 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 If `global-hl-line-sticky-flag' is non-nil, Global Hl-Line mode
 highlights the line about the current buffer's point in all live
 windows.
@@ -16705,21 +16920,21 @@ and `global-hl-line-maybe-unhighlight' on 
`post-command-hook'.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hl-line" '("global-hl-line-" "hl-line-")))
+(register-definition-prefixes "hl-line" '("global-hl-line-" "hl-line-"))
 
 ;;;***
 
 ;;;### (autoloads nil "hmac-def" "net/hmac-def.el" (0 0 0 0))
 ;;; Generated autoloads from net/hmac-def.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hmac-def" '("define-hmac-function")))
+(register-definition-prefixes "hmac-def" '("define-hmac-function"))
 
 ;;;***
 
 ;;;### (autoloads nil "hmac-md5" "net/hmac-md5.el" (0 0 0 0))
 ;;; Generated autoloads from net/hmac-md5.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"hmac-md5" '("hmac-md5" "md5-binary")))
+(register-definition-prefixes "hmac-md5" '("hmac-md5" "md5-binary"))
 
 ;;;***
 
@@ -16831,7 +17046,7 @@ The optional LABEL is used to label the buffer created.
 
 (defalias 'holiday-list 'list-holidays)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"holidays" '("calendar-" "holiday-")))
+(register-definition-prefixes "holidays" '("calendar-" "holiday-"))
 
 ;;;***
 
@@ -16867,7 +17082,7 @@ You may also want to set `hfy-page-header' and 
`hfy-page-footer'.
 
 \(fn SRCDIR DSTDIR &optional F-EXT L-EXT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"htmlfontify" '("hfy-" "htmlfontify-")))
+(register-definition-prefixes "htmlfontify" '("hfy-" "htmlfontify-"))
 
 ;;;***
 
@@ -16875,7 +17090,7 @@ You may also want to set `hfy-page-header' and 
`hfy-page-footer'.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from ibuf-ext.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ibuf-ext" '("alphabetic" "basename" "content" "derived-mode" "directory" 
"eval" "file" "ibuffer-" "major-mode" "mod" "name" "predicate" "print" 
"process" "query-replace" "rename-uniquely" "replace-regexp" "revert" 
"shell-command-" "size" "starred-name" "used-mode" "view-and-eval" 
"visiting-file")))
+(register-definition-prefixes "ibuf-ext" '("alphabetic" "basename" "content" 
"derived-mode" "directory" "eval" "file" "ibuffer-" "major-mode" "mod" "name" 
"predicate" "print" "process" "query-replace" "rename-uniquely" 
"replace-regexp" "revert" "shell-command-" "size" "starred-name" "used-mode" 
"view-and-eval" "visiting-file"))
 
 ;;;***
 
@@ -16989,7 +17204,7 @@ bound to the current value of the filter.
 
 (function-put 'define-ibuffer-filter 'doc-string-elt '2)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ibuf-macs" '("ibuffer-")))
+(register-definition-prefixes "ibuf-macs" '("ibuffer-"))
 
 ;;;***
 
@@ -17036,7 +17251,7 @@ If optional arg OTHER-WINDOW is non-nil, then use 
another window.
 
 \(fn &optional OTHER-WINDOW)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ibuffer" '("filename" "ibuffer-" "locked" "mark" "mod" "name" "process" 
"read-only" "size")))
+(register-definition-prefixes "ibuffer" '("filename" "ibuffer-" "locked" 
"mark" "mod" "name" "process" "read-only" "size"))
 
 ;;;***
 
@@ -17091,7 +17306,7 @@ buffer `*icalendar-errors*'.
 
 \(fn &optional DIARY-FILENAME DO-NOT-ASK NON-MARKING)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"icalendar" '("icalendar-")))
+(register-definition-prefixes "icalendar" '("icalendar-"))
 
 ;;;***
 
@@ -17116,6 +17331,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 This global minor mode makes minibuffer completion behave
 more like `ido-mode' than regular `icomplete-mode'.
 
@@ -17139,6 +17357,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When this global minor mode is enabled, typing in the minibuffer
 continuously displays a list of possible completions that match
 the string you have typed.  See `icomplete-completions' for a
@@ -17158,7 +17379,7 @@ completions:
  (make-obsolete 'iswitchb-mode
    "use `icomplete-mode' or `ido-mode' instead." "24.4"))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"icomplete" '("icomplete-")))
+(register-definition-prefixes "icomplete" '("icomplete-"))
 
 ;;;***
 
@@ -17200,7 +17421,7 @@ with no args, if that value is non-nil.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"icon" '("beginning-of-icon-defun" "calculate-icon-indent" 
"electric-icon-brace" "end-of-icon-defun" "icon-" "indent-icon-exp" 
"mark-icon-function")))
+(register-definition-prefixes "icon" '("beginning-of-icon-defun" 
"calculate-icon-indent" "electric-icon-brace" "end-of-icon-defun" "icon-" 
"indent-icon-exp" "mark-icon-function"))
 
 ;;;***
 
@@ -17208,7 +17429,7 @@ with no args, if that value is non-nil.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from progmodes/idlw-complete-structtag.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"idlw-complete-structtag" '("idlwave-")))
+(register-definition-prefixes "idlw-complete-structtag" '("idlwave-"))
 
 ;;;***
 
@@ -17216,7 +17437,7 @@ with no args, if that value is non-nil.
 ;;;;;;  0))
 ;;; Generated autoloads from progmodes/idlw-help.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"idlw-help" '("idlwave-")))
+(register-definition-prefixes "idlw-help" '("idlwave-"))
 
 ;;;***
 
@@ -17244,7 +17465,7 @@ See also the variable `idlwave-shell-prompt-pattern'.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"idlw-shell" '("idlwave-")))
+(register-definition-prefixes "idlw-shell" '("idlwave-"))
 
 ;;;***
 
@@ -17252,7 +17473,7 @@ See also the variable `idlwave-shell-prompt-pattern'.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from progmodes/idlw-toolbar.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"idlw-toolbar" '("idlwave-toolbar-")))
+(register-definition-prefixes "idlw-toolbar" '("idlwave-toolbar-"))
 
 ;;;***
 
@@ -17382,7 +17603,7 @@ The main features of this mode are
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"idlwave" '("idlwave-")))
+(register-definition-prefixes "idlwave" '("idlwave-"))
 
 ;;;***
 
@@ -17642,7 +17863,7 @@ DEF, if non-nil, is the default value.
 
 \(fn PROMPT CHOICES &optional PREDICATE REQUIRE-MATCH INITIAL-INPUT HIST DEF 
INHERIT-INPUT-METHOD)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ido" '("ido-")))
+(register-definition-prefixes "ido" '("ido-"))
 
 ;;;***
 
@@ -17657,14 +17878,14 @@ See `inferior-emacs-lisp-mode' for details.
 
 \(fn &optional BUF-NAME)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ielm" '("ielm-" "inferior-emacs-lisp-mode")))
+(register-definition-prefixes "ielm" '("ielm-" "inferior-emacs-lisp-mode"))
 
 ;;;***
 
 ;;;### (autoloads nil "ietf-drums" "mail/ietf-drums.el" (0 0 0 0))
 ;;; Generated autoloads from mail/ietf-drums.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ietf-drums" '("ietf-drums-")))
+(register-definition-prefixes "ietf-drums" '("ietf-drums-"))
 
 ;;;***
 
@@ -17681,11 +17902,14 @@ disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \\{iimage-mode-map}
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"iimage" '("iimage-" "turn-off-iimage-mode")))
+(register-definition-prefixes "iimage" '("iimage-" "turn-off-iimage-mode"))
 
 ;;;***
 
@@ -17885,7 +18109,7 @@ recognizes these files as having image type 
`imagemagick'.
 
 If Emacs is compiled without ImageMagick support, this does nothing." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"image" '("image" "unknown-image-type")))
+(register-definition-prefixes "image" '("image" "unknown-image-type"))
 
 ;;;***
 
@@ -17893,7 +18117,7 @@ If Emacs is compiled without ImageMagick support, this 
does nothing." nil nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from image/image-converter.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"image-converter" '("image-convert")))
+(register-definition-prefixes "image-converter" '("image-convert"))
 
 ;;;***
 
@@ -17989,6 +18213,9 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
 (define-obsolete-function-alias 'image-dired-setup-dired-keybindings 
'image-dired-minor-mode "26.1")
@@ -18025,7 +18252,7 @@ Edit comment and tags of current or marked image files.
 Edit comment and tags for all marked image files in an
 easy-to-use form." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"image-dired" '("image-dired-")))
+(register-definition-prefixes "image-dired" '("image-dired-"))
 
 ;;;***
 
@@ -18085,13 +18312,16 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 An image file is one whose name has an extension in
 `image-file-name-extensions', or matches a regexp in
 `image-file-name-regexps'.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"image-file" '("image-file-")))
+(register-definition-prefixes "image-file" '("image-file-"))
 
 ;;;***
 
@@ -18114,6 +18344,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Image minor mode provides the key \\<image-mode-map>\\[image-toggle-display],
 to switch back to `image-mode' and display an image file as the
 actual image.
@@ -18130,14 +18363,14 @@ displays an image file as text." nil nil)
 
 \(fn BMK)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"image-mode" '("image-")))
+(register-definition-prefixes "image-mode" '("image-"))
 
 ;;;***
 
 ;;;### (autoloads nil "imap" "net/imap.el" (0 0 0 0))
 ;;; Generated autoloads from net/imap.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"imap" '("imap-")))
+(register-definition-prefixes "imap" '("imap-"))
 
 ;;;***
 
@@ -18275,7 +18508,7 @@ for more information.
 
 \(fn INDEX-ITEM)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"imenu" '("imenu-")))
+(register-definition-prefixes "imenu" '("imenu-"))
 
 ;;;***
 
@@ -18307,7 +18540,7 @@ Convert old Emacs Devanagari characters to UCS.
 
 \(fn FROM TO)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ind-util" '("indian-" "is13194-")))
+(register-definition-prefixes "ind-util" '("indian-" "is13194-"))
 
 ;;;***
 
@@ -18327,7 +18560,7 @@ of `inferior-lisp-program').  Runs the hooks from
 
 (defalias 'run-lisp 'inferior-lisp)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"inf-lisp" '("inferior-lisp-" "lisp-" "switch-to-lisp")))
+(register-definition-prefixes "inf-lisp" '("inferior-lisp-" "lisp-" 
"switch-to-lisp"))
 
 ;;;***
 
@@ -18532,7 +18765,7 @@ completion alternatives to currently visited manuals.
 
 \(fn MANUAL)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"info" '("Info-" "info-")))
+(register-definition-prefixes "info" '("Info-" "info-"))
 
 ;;;***
 
@@ -18579,7 +18812,7 @@ Perform completion on file preceding point.
 
 \(fn &optional MODE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"info-look" '("info-")))
+(register-definition-prefixes "info-look" '("info-"))
 
 ;;;***
 
@@ -18660,7 +18893,7 @@ the sources handy.
 
 \(fn FILENAME-LIST)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"info-xref" '("info-xref-")))
+(register-definition-prefixes "info-xref" '("info-xref-"))
 
 ;;;***
 
@@ -18701,7 +18934,7 @@ 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-info-validate $info/ ~/*.info\"" 
nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"informat" '("Info-validate-")))
+(register-definition-prefixes "informat" '("Info-validate-"))
 
 ;;;***
 
@@ -18720,7 +18953,7 @@ See Info node `(elisp)Defining Functions' for more 
details.
 
 (function-put 'define-inline 'doc-string-elt '3)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"inline" '("inline-")))
+(register-definition-prefixes "inline" '("inline-"))
 
 ;;;***
 
@@ -18734,7 +18967,7 @@ Only checks one based on which kind of Emacs is being 
run.
 
 \(fn EMACS-VER XEMACS-VER SXEMACS-VER)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"inversion" '("inversion-")))
+(register-definition-prefixes "inversion" '("inversion-"))
 
 ;;;***
 
@@ -18753,7 +18986,7 @@ Toggle input method in interactive search." t nil)
 
 \(fn LAST-CHAR &optional COUNT)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"isearch-x" '("isearch-")))
+(register-definition-prefixes "isearch-x" '("isearch-"))
 
 ;;;***
 
@@ -18767,7 +19000,7 @@ Executing this command again will terminate the search; 
or, if
 the search has not yet begun, will toggle to the last buffer
 accessed via isearchb." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"isearchb" '("isearchb")))
+(register-definition-prefixes "isearchb" '("isearchb"))
 
 ;;;***
 
@@ -18775,7 +19008,7 @@ accessed via isearchb." t nil)
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from international/iso-ascii.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"iso-ascii" '("iso-ascii-")))
+(register-definition-prefixes "iso-ascii" '("iso-ascii-"))
 
 ;;;***
 
@@ -18866,7 +19099,7 @@ Warn that format is write-only.
 (autoload 'iso-cvt-define-menu "iso-cvt" "\
 Add submenus to the File menu, to convert to and from various formats." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"iso-cvt" '("iso-")))
+(register-definition-prefixes "iso-cvt" '("iso-"))
 
 ;;;***
 
@@ -18876,14 +19109,14 @@ Add submenus to the File menu, to convert to and from 
various formats." t nil)
  (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map)
  (autoload 'iso-transl-ctl-x-8-map "iso-transl" "Keymap for C-x 8 prefix." t 
'keymap)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"iso-transl" '("iso-transl-")))
+(register-definition-prefixes "iso-transl" '("iso-transl-"))
 
 ;;;***
 
 ;;;### (autoloads nil "iso8601" "calendar/iso8601.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/iso8601.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"iso8601" '("iso8601-")))
+(register-definition-prefixes "iso8601" '("iso8601-"))
 
 ;;;***
 
@@ -19016,7 +19249,16 @@ amount for last line processed.
 \(fn REG-START REG-END &optional RECHECKP SHIFT)" t nil)
 
 (autoload 'ispell-comments-and-strings "ispell" "\
-Check comments and strings in the current buffer for spelling errors." t nil)
+Check comments and strings in the current buffer for spelling errors.
+If called interactively with an active region, check only comments and
+strings in the region.
+When called from Lisp, START and END buffer positions can be provided
+to limit the check.
+
+\(fn &optional START END)" t nil)
+
+(autoload 'ispell-comment-or-string-at-point "ispell" "\
+Check the comment or string containing point for spelling errors." t nil)
 
 (autoload 'ispell-buffer "ispell" "\
 Check the current buffer for spelling errors interactively." t nil)
@@ -19060,6 +19302,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Ispell minor mode is a buffer-local minor mode.  When enabled,
 typing SPC or RET warns you if the previous word is incorrectly
 spelled.
@@ -19093,7 +19338,7 @@ You can bind this to the key C-c i in GNUS or mail by 
adding to
 `news-reply-mode-hook' or `mail-mode-hook' the following lambda expression:
    (function (lambda () (local-set-key \"\\C-ci\" \\='ispell-message)))" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ispell" '("check-ispell-version" "ispell-")))
+(register-definition-prefixes "ispell" '("check-ispell-version" "ispell-"))
 
 ;;;***
 
@@ -19101,7 +19346,7 @@ You can bind this to the key C-c i in GNUS or mail by 
adding to
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from international/ja-dic-cnv.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ja-dic-cnv" '("batch-skkdic-convert" "ja-dic-filename" "skkdic-")))
+(register-definition-prefixes "ja-dic-cnv" '("batch-skkdic-convert" 
"ja-dic-filename" "skkdic-"))
 
 ;;;***
 
@@ -19109,7 +19354,7 @@ You can bind this to the key C-c i in GNUS or mail by 
adding to
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from international/ja-dic-utl.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ja-dic-utl" '("skkdic-")))
+(register-definition-prefixes "ja-dic-utl" '("skkdic-"))
 
 ;;;***
 
@@ -19186,7 +19431,7 @@ If non-nil, second arg INITIAL-INPUT is a string to 
insert before reading.
 
 \(fn PROMPT &optional INITIAL-INPUT)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"japan-util" '("japanese-")))
+(register-definition-prefixes "japan-util" '("japanese-"))
 
 ;;;***
 
@@ -19209,7 +19454,7 @@ This removes the entries in `file-name-handler-alist' 
and `auto-mode-alist'
 and `inhibit-local-variables-suffixes' that were added
 by `jka-compr-installed'." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"jka-compr" '("compression-error" "jka-compr-")))
+(register-definition-prefixes "jka-compr" '("compression-error" "jka-compr-"))
 
 ;;;***
 
@@ -19240,7 +19485,7 @@ one of the aforementioned options instead of using this 
mode.
 
 (dolist (name (list "node" "nodejs" "gjs" "rhino")) (add-to-list 
'interpreter-mode-alist (cons (purecopy name) 'js-mode)))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "js" 
'("js-" "with-js")))
+(register-definition-prefixes "js" '("js-" "with-js"))
 
 ;;;***
 
@@ -19248,7 +19493,7 @@ one of the aforementioned options instead of using this 
mode.
 ;;; Generated autoloads from json.el
 (push (purecopy '(json 1 5)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"json" '("json-")))
+(register-definition-prefixes "json" '("json-"))
 
 ;;;***
 
@@ -19256,14 +19501,14 @@ one of the aforementioned options instead of using 
this mode.
 ;;; Generated autoloads from jsonrpc.el
 (push (purecopy '(jsonrpc 1 0 12)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"jsonrpc" '("jrpc-default-request-timeout" "jsonrpc-")))
+(register-definition-prefixes "jsonrpc" '("jsonrpc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "kermit" "kermit.el" (0 0 0 0))
 ;;; Generated autoloads from kermit.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kermit" '("kermit-")))
+(register-definition-prefixes "kermit" '("kermit-"))
 
 ;;;***
 
@@ -19342,7 +19587,7 @@ the context of text formatting.
 
 \(fn LINEBEG)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kinsoku" '("kinsoku-")))
+(register-definition-prefixes "kinsoku" '("kinsoku-"))
 
 ;;;***
 
@@ -19366,7 +19611,7 @@ and the return value is the length of the conversion.
 
 \(fn FROM TO)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kkc" '("kkc-")))
+(register-definition-prefixes "kkc" '("kkc-"))
 
 ;;;***
 
@@ -19490,7 +19735,7 @@ Create lambda form for macro bound to symbol or key.
 
 \(fn MAC &optional COUNTER FORMAT)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kmacro" '("kmacro-")))
+(register-definition-prefixes "kmacro" '("kmacro-"))
 
 ;;;***
 
@@ -19504,7 +19749,7 @@ The kind of Korean keyboard for Korean input method.
 
 (autoload 'setup-korean-environment-internal "korea-util" nil nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"korea-util" '("exit-korean-environment" "isearch-" "korean-key-bindings" 
"quail-hangul-switch-" "toggle-korean-input-method")))
+(register-definition-prefixes "korea-util" '("exit-korean-environment" 
"isearch-" "korean-key-bindings" "quail-hangul-switch-" 
"toggle-korean-input-method"))
 
 ;;;***
 
@@ -19543,7 +19788,7 @@ Transcribe Romanized Lao string STR to Lao character 
string.
 
 \(fn FROM TO)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"lao-util" '("lao-")))
+(register-definition-prefixes "lao-util" '("lao-"))
 
 ;;;***
 
@@ -19577,7 +19822,7 @@ coding system names is determined from 
`latex-inputenc-coding-alist'.
 
 \(fn ARG-LIST)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"latexenc" '("latexenc-dont-use-")))
+(register-definition-prefixes "latexenc" '("latexenc-dont-use-"))
 
 ;;;***
 
@@ -19621,7 +19866,7 @@ use either \\[customize] or the function 
`latin1-display'.")
 
 (custom-autoload 'latin1-display-ucs-per-lynx "latin1-disp" nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"latin1-disp" '("latin1-display-")))
+(register-definition-prefixes "latin1-disp" '("latin1-display-"))
 
 ;;;***
 
@@ -19634,14 +19879,14 @@ A major mode to edit GNU ld script files
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ld-script" '("ld-script-")))
+(register-definition-prefixes "ld-script" '("ld-script-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ldap" "net/ldap.el" (0 0 0 0))
 ;;; Generated autoloads from net/ldap.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ldap" '("ldap-")))
+(register-definition-prefixes "ldap" '("ldap-"))
 
 ;;;***
 
@@ -19649,7 +19894,7 @@ A major mode to edit GNU ld script files
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from gnus/legacy-gnus-agent.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"legacy-gnus-agent" '("gnus-agent-")))
+(register-definition-prefixes "legacy-gnus-agent" '("gnus-agent-"))
 
 ;;;***
 
@@ -19673,7 +19918,7 @@ Special commands:
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"less-css-mode" '("less-css-")))
+(register-definition-prefixes "less-css-mode" '("less-css-"))
 
 ;;;***
 
@@ -19715,7 +19960,7 @@ displayed in the example above.
 
 (function-put 'let-alist 'lisp-indent-function '1)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"let-alist" '("let-alist--")))
+(register-definition-prefixes "let-alist" '("let-alist--"))
 
 ;;;***
 
@@ -19724,13 +19969,17 @@ displayed in the example above.
 
 (autoload 'life "life" "\
 Run Conway's Life simulation.
-The starting pattern is randomly selected.  Prefix arg (optional first
-arg non-nil from a program) is the number of seconds to sleep between
-generations (this defaults to 1).
+The starting pattern is randomly selected from `life-patterns'.
 
-\(fn &optional SLEEPTIME)" t nil)
+Prefix arg is the number of tenths of a second to sleep between
+generations (the default is `life-step-time').
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"life" '("life-")))
+When called from Lisp, optional argument STEP-TIME is the time to
+sleep in seconds.
+
+\(fn &optional STEP-TIME)" t nil)
+
+(register-definition-prefixes "life" '("life-"))
 
 ;;;***
 
@@ -19745,6 +19994,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Linum mode is a buffer-local minor mode.
 
 \(fn &optional ARG)" t nil)
@@ -19773,7 +20025,7 @@ See `linum-mode' for more information on Linum mode.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"linum" '("linum-")))
+(register-definition-prefixes "linum" '("linum-"))
 
 ;;;***
 
@@ -19781,7 +20033,7 @@ See `linum-mode' for more information on Linum mode.
 ;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/lisp-mnt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"lisp-mnt" '("lm-")))
+(register-definition-prefixes "lisp-mnt" '("lm-"))
 
 ;;;***
 
@@ -19814,7 +20066,7 @@ something strange, such as redefining an Emacs function.
 
 \(fn FEATURE &optional FORCE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"loadhist" '("feature-" "file-" "loadhist-" "read-feature" "unload-")))
+(register-definition-prefixes "loadhist" '("feature-" "file-" "loadhist-" 
"read-feature" "unload-"))
 
 ;;;***
 
@@ -19868,7 +20120,7 @@ except that FILTER is not optional.
 
 \(fn SEARCH-STRING FILTER &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"locate" '("locate-")))
+(register-definition-prefixes "locate" '("locate-"))
 
 ;;;***
 
@@ -19901,7 +20153,7 @@ done.  Otherwise, it uses the current buffer.
 
 \(fn CALLBACK &optional SETUP PARAMS BUFFER MODE &rest IGNORE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"log-edit" '("log-edit-")))
+(register-definition-prefixes "log-edit" '("log-edit-"))
 
 ;;;***
 
@@ -19913,7 +20165,7 @@ Major mode for browsing CVS log output.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"log-view" '("log-view-")))
+(register-definition-prefixes "log-view" '("log-view-"))
 
 ;;;***
 
@@ -20006,7 +20258,7 @@ for further customization of the printer command.
 
 \(fn START END)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"lpr" '("lpr-" "print")))
+(register-definition-prefixes "lpr" '("lpr-" "print"))
 
 ;;;***
 
@@ -20019,7 +20271,7 @@ Otherwise they are treated as Emacs regexps (for 
backward compatibility).")
 
 (custom-autoload 'ls-lisp-support-shell-wildcards "ls-lisp" t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ls-lisp" '("ls-lisp-")))
+(register-definition-prefixes "ls-lisp" '("ls-lisp-"))
 
 ;;;***
 
@@ -20033,7 +20285,7 @@ This function is suitable for execution in an init file.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"lunar" '("calendar-lunar-phases" "diary-lunar-phases" "eclipse-check" 
"lunar-")))
+(register-definition-prefixes "lunar" '("calendar-lunar-phases" 
"diary-lunar-phases" "eclipse-check" "lunar-"))
 
 ;;;***
 
@@ -20045,7 +20297,7 @@ A major mode to edit m4 macro files.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"m4-mode" '("m4-")))
+(register-definition-prefixes "m4-mode" '("m4-"))
 
 ;;;***
 
@@ -20130,7 +20382,7 @@ and then select the region of un-tablified names and use
 \(fn TOP BOTTOM &optional MACRO)" t nil)
  (define-key ctl-x-map "q" 'kbd-macro-query)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"macros" '("macros--insert-vector-macro")))
+(register-definition-prefixes "macros" '("macros--insert-vector-macro"))
 
 ;;;***
 
@@ -20169,7 +20421,7 @@ Convert mail domain DOMAIN to the country it 
corresponds to.
 
 \(fn DOMAIN)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mail-extr" '("mail-extr-")))
+(register-definition-prefixes "mail-extr" '("mail-extr-"))
 
 ;;;***
 
@@ -20193,21 +20445,21 @@ message.
 
 This function normally would be called when the message is sent." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mail-hist" '("mail-hist-")))
+(register-definition-prefixes "mail-hist" '("mail-hist-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mail-parse" "mail/mail-parse.el" (0 0 0 0))
 ;;; Generated autoloads from mail/mail-parse.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mail-parse" '("mail-")))
+(register-definition-prefixes "mail-parse" '("mail-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mail-prsvr" "mail/mail-prsvr.el" (0 0 0 0))
 ;;; Generated autoloads from mail/mail-prsvr.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mail-prsvr" '("mail-parse-")))
+(register-definition-prefixes "mail-prsvr" '("mail-parse-"))
 
 ;;;***
 
@@ -20215,7 +20467,7 @@ This function normally would be called when the message 
is sent." nil nil)
 ;;;;;;  0))
 ;;; Generated autoloads from gnus/mail-source.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mail-source" '("mail-source")))
+(register-definition-prefixes "mail-source" '("mail-source"))
 
 ;;;***
 
@@ -20293,7 +20545,7 @@ matches may be returned from the message body.
 
 \(fn FIELD-NAME &optional LAST ALL LIST DELETE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mail-utils" '("mail-")))
+(register-definition-prefixes "mail-utils" '("mail-"))
 
 ;;;***
 
@@ -20318,6 +20570,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Mail Abbrevs mode is a global minor mode.  When enabled,
 abbrev-like expansion is performed when editing certain mail
 headers (those specified by `mail-abbrev-mode-regexp'), based on
@@ -20345,7 +20600,7 @@ double-quotes.
 
 \(fn NAME DEFINITION &optional FROM-MAILRC-FILE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mailabbrev" '("mail-" "merge-mail-abbrevs" "rebuild-mail-abbrevs")))
+(register-definition-prefixes "mailabbrev" '("mail-" "merge-mail-abbrevs" 
"rebuild-mail-abbrevs"))
 
 ;;;***
 
@@ -20398,14 +20653,14 @@ current header, calls `mail-complete-function' and 
passes prefix ARG if any.
 
 (make-obsolete 'mail-complete 'mail-completion-at-point-function '"24.1")
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mailalias" '("build-mail-aliases" "mail-")))
+(register-definition-prefixes "mailalias" '("build-mail-aliases" "mail-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mailcap" "net/mailcap.el" (0 0 0 0))
 ;;; Generated autoloads from net/mailcap.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mailcap" '("mailcap-")))
+(register-definition-prefixes "mailcap" '("mailcap-"))
 
 ;;;***
 
@@ -20417,21 +20672,21 @@ Pass current buffer on to the system's mail client.
 Suitable value for `send-mail-function'.
 The mail client is taken to be the handler of mailto URLs." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mailclient" '("mailclient-")))
+(register-definition-prefixes "mailclient" '("mailclient-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mailheader" "mail/mailheader.el" (0 0 0 0))
 ;;; Generated autoloads from mail/mailheader.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mailheader" '("mail-header")))
+(register-definition-prefixes "mailheader" '("mail-header"))
 
 ;;;***
 
 ;;;### (autoloads nil "mairix" "net/mairix.el" (0 0 0 0))
 ;;; Generated autoloads from net/mairix.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mairix" '("mairix-")))
+(register-definition-prefixes "mairix" '("mairix-"))
 
 ;;;***
 
@@ -20551,14 +20806,14 @@ An adapted `makefile-mode' that knows about imake.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"make-mode" '("makefile-")))
+(register-definition-prefixes "make-mode" '("makefile-"))
 
 ;;;***
 
 ;;;### (autoloads nil "makeinfo" "textmodes/makeinfo.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/makeinfo.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"makeinfo" '("makeinfo-")))
+(register-definition-prefixes "makeinfo" '("makeinfo-"))
 
 ;;;***
 
@@ -20569,14 +20824,14 @@ An adapted `makefile-mode' that knows about imake.
 Make a summary of current key bindings in the buffer *Summary*.
 Previous contents of that buffer are killed first." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"makesum" '("double-column")))
+(register-definition-prefixes "makesum" '("double-column"))
 
 ;;;***
 
 ;;;### (autoloads nil "man" "man.el" (0 0 0 0))
 ;;; Generated autoloads from man.el
 
-(define-obsolete-function-alias 'manual-entry 'man "28.1")
+(defalias 'manual-entry 'man)
 
 (autoload 'man "man" "\
 Get a Un*x manual page and put it in a buffer.
@@ -20631,7 +20886,7 @@ Default bookmark handler for Man buffers.
 
 \(fn BOOKMARK)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"man" '("Man-" "man")))
+(register-definition-prefixes "man" '("Man-" "man"))
 
 ;;;***
 
@@ -20639,7 +20894,7 @@ Default bookmark handler for Man buffers.
 ;;; Generated autoloads from emacs-lisp/map.el
 (push (purecopy '(map 2 1)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"map" '("map-")))
+(register-definition-prefixes "map" '("map-"))
 
 ;;;***
 
@@ -20654,6 +20909,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Master mode is enabled, you can scroll the slave buffer
 using the following commands:
 
@@ -20665,7 +20923,7 @@ yourself the value of `master-of' by calling 
`master-show-slave'.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"master" '("master-")))
+(register-definition-prefixes "master" '("master-"))
 
 ;;;***
 
@@ -20690,6 +20948,9 @@ is positive, and disable it if ARG is zero or negative. 
 If called
 from Lisp, also enable the mode if ARG is omitted or nil, and toggle
 it if ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Minibuffer Depth Indication mode is a global minor mode.  When
 enabled, any recursive use of the minibuffer will show the
 recursion depth in the minibuffer prompt.  This is only useful if
@@ -20697,7 +20958,7 @@ recursion depth in the minibuffer prompt.  This is only 
useful if
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mb-depth" '("minibuffer-depth-")))
+(register-definition-prefixes "mb-depth" '("minibuffer-depth-"))
 
 ;;;***
 
@@ -20705,7 +20966,7 @@ recursion depth in the minibuffer prompt.  This is only 
useful if
 ;;; Generated autoloads from md4.el
 (push (purecopy '(md4 1 0)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"md4" '("md4")))
+(register-definition-prefixes "md4" '("md4"))
 
 ;;;***
 
@@ -20831,7 +21092,13 @@ which specify the range to operate on.
 
 \(fn START END)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"message" '("message-" "nil")))
+(autoload 'message-mailto "message" "\
+Command to parse command line mailto: links.
+This is meant to be used for MIME handlers: Setting the handler
+for \"x-scheme-handler/mailto;\" to \"emacs -f message-mailto %u\"
+will then start up Emacs ready to compose mail." t nil)
+
+(register-definition-prefixes "message" '("message-" "nil"))
 
 ;;;***
 
@@ -20850,28 +21117,28 @@ Major mode for editing MetaPost sources.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"meta-mode" '("font-lock-match-meta-declaration-item-and-skip-to-next" "meta")))
+(register-definition-prefixes "meta-mode" 
'("font-lock-match-meta-declaration-item-and-skip-to-next" "meta"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-acros" "mh-e/mh-acros.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-acros.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-acros" '("defmacro-mh" "defun-mh" "mh-" "with-mh-folder-updating")))
+(register-definition-prefixes "mh-acros" '("defmacro-mh" "defun-mh" "mh-" 
"with-mh-folder-updating"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-alias" "mh-e/mh-alias.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-alias.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-alias" '("mh-")))
+(register-definition-prefixes "mh-alias" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-buffers" "mh-e/mh-buffers.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-buffers.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-buffers" '("mh-")))
+(register-definition-prefixes "mh-buffers" '("mh-"))
 
 ;;;***
 
@@ -20956,14 +21223,14 @@ this command to kill the draft buffer and delete the 
draft
 message. Use the command \\[kill-buffer] if you don't want to
 delete the draft message." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-comp" '("mh-")))
+(register-definition-prefixes "mh-comp" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-compat" "mh-e/mh-compat.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-compat.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-compat" '("mh-")))
+(register-definition-prefixes "mh-compat" '("mh-"))
 
 ;;;***
 
@@ -20980,7 +21247,7 @@ delete the draft message." t nil)
 (autoload 'mh-version "mh-e" "\
 Display version information about MH-E and the MH mail handling system." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-e" '("defcustom-mh" "defface-mh" "defgroup-mh" "mh-")))
+(register-definition-prefixes "mh-e" '("defcustom-mh" "defface-mh" 
"defgroup-mh" "mh-"))
 
 ;;;***
 
@@ -21063,14 +21330,14 @@ perform the operation on all messages in that region.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-folder" '("mh-")))
+(register-definition-prefixes "mh-folder" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-funcs" "mh-e/mh-funcs.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-funcs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-funcs" '("mh-")))
+(register-definition-prefixes "mh-funcs" '("mh-"))
 
 ;;;***
 
@@ -21078,91 +21345,91 @@ perform the operation on all messages in that region.
 ;;;;;;  0))
 ;;; Generated autoloads from mh-e/mh-identity.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-identity" '("mh-")))
+(register-definition-prefixes "mh-identity" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-inc" "mh-e/mh-inc.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-inc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-inc" '("mh-inc-spool-")))
+(register-definition-prefixes "mh-inc" '("mh-inc-spool-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-junk" "mh-e/mh-junk.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-junk.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-junk" '("mh-")))
+(register-definition-prefixes "mh-junk" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-letter" "mh-e/mh-letter.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-letter.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-letter" '("mh-")))
+(register-definition-prefixes "mh-letter" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-limit" "mh-e/mh-limit.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-limit.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-limit" '("mh-")))
+(register-definition-prefixes "mh-limit" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-mime" "mh-e/mh-mime.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-mime.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-mime" '("mh-")))
+(register-definition-prefixes "mh-mime" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-print" "mh-e/mh-print.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-print.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-print" '("mh-p")))
+(register-definition-prefixes "mh-print" '("mh-p"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-scan" "mh-e/mh-scan.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-scan.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-scan" '("mh-")))
+(register-definition-prefixes "mh-scan" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-search" "mh-e/mh-search.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-search.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-search" '("mh-")))
+(register-definition-prefixes "mh-search" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-seq" "mh-e/mh-seq.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-seq.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-seq" '("mh-")))
+(register-definition-prefixes "mh-seq" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-show" "mh-e/mh-show.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-show.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-show" '("mh-")))
+(register-definition-prefixes "mh-show" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-speed" "mh-e/mh-speed.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-speed.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-speed" '("mh-")))
+(register-definition-prefixes "mh-speed" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-thread" "mh-e/mh-thread.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-thread.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-thread" '("mh-")))
+(register-definition-prefixes "mh-thread" '("mh-"))
 
 ;;;***
 
@@ -21170,21 +21437,21 @@ perform the operation on all messages in that region.
 ;;;;;;  0))
 ;;; Generated autoloads from mh-e/mh-tool-bar.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-tool-bar" '("mh-tool-bar-")))
+(register-definition-prefixes "mh-tool-bar" '("mh-tool-bar-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-utils" "mh-e/mh-utils.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-utils.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-utils" '("mh-")))
+(register-definition-prefixes "mh-utils" '("mh-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mh-xface" "mh-e/mh-xface.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-xface.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mh-xface" '("mh-")))
+(register-definition-prefixes "mh-xface" '("mh-"))
 
 ;;;***
 
@@ -21201,7 +21468,7 @@ the rules from `css-mode'.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mhtml-mode" '("mhtml-")))
+(register-definition-prefixes "mhtml-mode" '("mhtml-"))
 
 ;;;***
 
@@ -21226,6 +21493,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
 (autoload 'clean-buffer-list "midnight" "\
@@ -21247,7 +21517,7 @@ to its second argument TM.
 
 \(fn SYMB TM)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"midnight" '("clean-buffer-list-" "midnight-")))
+(register-definition-prefixes "midnight" '("clean-buffer-list-" "midnight-"))
 
 ;;;***
 
@@ -21272,6 +21542,9 @@ ARG is positive, and disable it if ARG is zero or 
negative.  If called
 from Lisp, also enable the mode if ARG is omitted or nil, and toggle
 it if ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Minibuffer Electric Default mode is a global minor mode.  When
 enabled, minibuffer prompts that show a default value only show
 the default when it's applicable -- that is, when hitting RET
@@ -21281,7 +21554,7 @@ is modified to remove the default indication.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"minibuf-eldef" '("minibuf")))
+(register-definition-prefixes "minibuf-eldef" '("minibuf"))
 
 ;;;***
 
@@ -21348,7 +21621,7 @@ The return value is always nil.
 
 \(fn &optional LOADED-ONLY-P BUFFER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"misc" '("list-dynamic-libraries--")))
+(register-definition-prefixes "misc" '("list-dynamic-libraries--"))
 
 ;;;***
 
@@ -21436,7 +21709,7 @@ whose file names match the specified wildcard.
 
 \(fn FILES)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"misearch" '("misearch-unload-function" "multi-isearch-")))
+(register-definition-prefixes "misearch" '("misearch-unload-function" 
"multi-isearch-"))
 
 ;;;***
 
@@ -21450,28 +21723,28 @@ Major mode for the mixal asm language.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mixal-mode" '("mixal-")))
+(register-definition-prefixes "mixal-mode" '("mixal-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mm-archive" "gnus/mm-archive.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mm-archive.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mm-archive" '("mm-")))
+(register-definition-prefixes "mm-archive" '("mm-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mm-bodies" "gnus/mm-bodies.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mm-bodies.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mm-bodies" '("mm-")))
+(register-definition-prefixes "mm-bodies" '("mm-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mm-decode" "gnus/mm-decode.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mm-decode.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mm-decode" '("mm-")))
+(register-definition-prefixes "mm-decode" '("mm-"))
 
 ;;;***
 
@@ -21483,7 +21756,7 @@ Return a default encoding for FILE.
 
 \(fn FILE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mm-encode" '("mm-")))
+(register-definition-prefixes "mm-encode" '("mm-"))
 
 ;;;***
 
@@ -21503,7 +21776,7 @@ If NO-DISPLAY is nil, display it.  Otherwise, do 
nothing after replacing.
 
 \(fn HANDLE &optional NO-DISPLAY)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mm-extern" '("mm-extern-")))
+(register-definition-prefixes "mm-extern" '("mm-extern-"))
 
 ;;;***
 
@@ -21518,7 +21791,7 @@ If NO-DISPLAY is nil, display it.  Otherwise, do 
nothing after replacing.
 
 \(fn HANDLE &optional NO-DISPLAY)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mm-partial" '("mm-partial-find-parts")))
+(register-definition-prefixes "mm-partial" '("mm-partial-find-parts"))
 
 ;;;***
 
@@ -21536,14 +21809,14 @@ Insert file contents of URL using `mm-url-program'.
 
 \(fn URL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mm-url" '("mm-url-")))
+(register-definition-prefixes "mm-url" '("mm-url-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mm-util" "gnus/mm-util.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mm-util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mm-util" '("mm-")))
+(register-definition-prefixes "mm-util" '("mm-"))
 
 ;;;***
 
@@ -21564,14 +21837,14 @@ Assume text has been decoded if DECODED is non-nil.
 
 \(fn HANDLE &optional DECODED)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mm-uu" '("mm-")))
+(register-definition-prefixes "mm-uu" '("mm-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mm-view" "gnus/mm-view.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mm-view.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mm-view" '("mm-")))
+(register-definition-prefixes "mm-view" '("mm-"))
 
 ;;;***
 
@@ -21600,21 +21873,21 @@ will be computed and used.
 
 \(fn FILE &optional TYPE DESCRIPTION DISPOSITION)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mml" '("mime-to-mml" "mml-")))
+(register-definition-prefixes "mml" '("mime-to-mml" "mml-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mml-sec" "gnus/mml-sec.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mml-sec.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mml-sec" '("mml-")))
+(register-definition-prefixes "mml-sec" '("mml-"))
 
 ;;;***
 
 ;;;### (autoloads nil "mml-smime" "gnus/mml-smime.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mml-smime.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mml-smime" '("mml-smime-")))
+(register-definition-prefixes "mml-smime" '("mml-smime-"))
 
 ;;;***
 
@@ -21631,7 +21904,7 @@ will be computed and used.
 
 \(fn CONT)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mml1991" '("mml1991-")))
+(register-definition-prefixes "mml1991" '("mml1991-"))
 
 ;;;***
 
@@ -21670,7 +21943,7 @@ will be computed and used.
 
 (autoload 'mml2015-self-encrypt "mml2015" nil nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mml2015" '("mml2015-")))
+(register-definition-prefixes "mml2015" '("mml2015-"))
 
 ;;;***
 
@@ -21679,7 +21952,7 @@ will be computed and used.
 
 (put 'define-overloadable-function 'doc-string-elt 3)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mode-local" '("def" "describe-mode-local-bindings" "fetch-overload" 
"get-mode-local-parent" "make-obsolete-overload" "mode-local-" 
"setq-mode-local" "with-mode-local" "xref-mode-local-")))
+(register-definition-prefixes "mode-local" '("def" 
"describe-mode-local-bindings" "fetch-overload" "get-mode-local-parent" 
"make-obsolete-overload" "mode-local-" "setq-mode-local" "with-mode-local" 
"xref-mode-local-"))
 
 ;;;***
 
@@ -21714,7 +21987,7 @@ followed by the first character of the construct.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"modula2" '("m2-" "m3-font-lock-keywords")))
+(register-definition-prefixes "modula2" '("m2-" "m3-font-lock-keywords"))
 
 ;;;***
 
@@ -21741,14 +22014,14 @@ Convert NATO phonetic alphabet in region to ordinary 
ASCII text.
 
 \(fn BEG END)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"morse" '("morse-code" "nato-alphabet")))
+(register-definition-prefixes "morse" '("morse-code" "nato-alphabet"))
 
 ;;;***
 
 ;;;### (autoloads nil "mouse-copy" "mouse-copy.el" (0 0 0 0))
 ;;; Generated autoloads from mouse-copy.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mouse-copy" '("mouse-")))
+(register-definition-prefixes "mouse-copy" '("mouse-"))
 
 ;;;***
 
@@ -21797,7 +22070,7 @@ To test this function, evaluate:
 
 \(fn START-EVENT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mouse-drag" '("mouse-")))
+(register-definition-prefixes "mouse-drag" '("mouse-"))
 
 ;;;***
 
@@ -21807,7 +22080,7 @@ To test this function, evaluate:
 (autoload 'mpc "mpc" "\
 Main entry point for MPC." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mpc" '("mpc-" "tag-browser-tagtypes")))
+(register-definition-prefixes "mpc" '("mpc-" "tag-browser-tagtypes"))
 
 ;;;***
 
@@ -21817,7 +22090,7 @@ Main entry point for MPC." t nil)
 (autoload 'mpuz "mpuz" "\
 Multiplication puzzle with GNU Emacs." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mpuz" '("mpuz-")))
+(register-definition-prefixes "mpuz" '("mpuz-"))
 
 ;;;***
 
@@ -21842,19 +22115,22 @@ disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 This mode overrides the binding(s) of `mouse-buffer-menu' to provide a
 different buffer menu using the function `msb'.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"msb" '("mouse-select-buffer" "msb")))
+(register-definition-prefixes "msb" '("mouse-select-buffer" "msb"))
 
 ;;;***
 
 ;;;### (autoloads nil "mspools" "mail/mspools.el" (0 0 0 0))
 ;;; Generated autoloads from mail/mspools.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mspools" '("mspools-")))
+(register-definition-prefixes "mspools" '("mspools-"))
 
 ;;;***
 
@@ -21978,7 +22254,7 @@ The default is 20.  If LIMIT is negative, do not limit 
the listing.
 
 \(fn &optional LIMIT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mule-diag" '("charset-history" "describe-font-internal" "insert-section" 
"list-" "non-iso-charset-alist" "print-" "sort-listed-character-sets")))
+(register-definition-prefixes "mule-diag" '("charset-history" 
"describe-font-internal" "insert-section" "list-" "print-" 
"sort-listed-character-sets"))
 
 ;;;***
 
@@ -22085,15 +22361,6 @@ operations such as `find-coding-systems-region'.
 \(fn CODING-SYSTEMS &rest BODY)" nil t)
 (put 'with-coding-priority 'lisp-indent-function 1)
 
-(autoload 'detect-coding-with-priority "mule-util" "\
-Detect a coding system of the text between FROM and TO with PRIORITY-LIST.
-PRIORITY-LIST is an alist of coding categories vs the corresponding
-coding systems ordered by priority.
-
-\(fn FROM TO PRIORITY-LIST)" nil t)
-
-(make-obsolete 'detect-coding-with-priority 'with-coding-priority '"23.1")
-
 (autoload 'detect-coding-with-language-environment "mule-util" "\
 Detect a coding system for the text between FROM and TO with LANG-ENV.
 The detection takes into account the coding system priorities for the
@@ -22129,14 +22396,14 @@ QUALITY can be:
 
 \(fn POSITION &optional QUALITY CODING-SYSTEM)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mule-util" '("filepos-to-bufferpos--dos" "truncate-string-ellipsis")))
+(register-definition-prefixes "mule-util" '("filepos-to-bufferpos--dos" 
"truncate-string-ellipsis"))
 
 ;;;***
 
 ;;;### (autoloads nil "mwheel" "mwheel.el" (0 0 0 0))
 ;;; Generated autoloads from mwheel.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"mwheel" '("mouse-wheel-" "mwheel-")))
+(register-definition-prefixes "mwheel" '("mouse-wheel-" "mwheel-"))
 
 ;;;***
 
@@ -22266,7 +22533,7 @@ Open a network connection to HOST on PORT.
 
 \(fn HOST PORT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"net-utils" '("arp-program" "dig-program" "dns-lookup-program" 
"finger-X.500-host-regexps" "ftp-" "ifconfig-program" "ipconfig" 
"iwconfig-program" "net" "nslookup-" "ping-program" "route-program" 
"run-network-program" "smbclient" "traceroute-program" "whois-")))
+(register-definition-prefixes "net-utils" '("arp-program" "dig-program" 
"dns-lookup-program" "finger-X.500-host-regexps" "ftp-" "ifconfig-program" 
"ipconfig" "iwconfig-program" "net" "nslookup-" "ping-program" "route-program" 
"run-network-program" "smbclient" "traceroute-program" "whois-"))
 
 ;;;***
 
@@ -22280,7 +22547,7 @@ listed in the PORTS list.
 
 \(fn MACHINE &rest PORTS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"netrc" '("netrc-")))
+(register-definition-prefixes "netrc" '("netrc-"))
 
 ;;;***
 
@@ -22398,7 +22665,7 @@ gnutls-boot (as returned by `gnutls-boot-parameters').
 
 (defalias 'open-protocol-stream 'open-network-stream)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"network-stream" '("network-stream-")))
+(register-definition-prefixes "network-stream" '("network-stream-"))
 
 ;;;***
 
@@ -22420,7 +22687,7 @@ Run `newsticker-start-hook' if newsticker was not 
running already.
 
 \(fn &optional DO-NOT-COMPLAIN-IF-RUNNING)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"newst-backend" '("newsticker-")))
+(register-definition-prefixes "newst-backend" '("newsticker-"))
 
 ;;;***
 
@@ -22431,7 +22698,7 @@ Run `newsticker-start-hook' if newsticker was not 
running already.
 (autoload 'newsticker-plainview "newst-plainview" "\
 Start newsticker plainview." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"newst-plainview" '("newsticker-")))
+(register-definition-prefixes "newst-plainview" '("newsticker-"))
 
 ;;;***
 
@@ -22442,7 +22709,7 @@ Start newsticker plainview." t nil)
 (autoload 'newsticker-show-news "newst-reader" "\
 Start reading news.  You may want to bind this to a key." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"newst-reader" '("newsticker-")))
+(register-definition-prefixes "newst-reader" '("newsticker-"))
 
 ;;;***
 
@@ -22461,7 +22728,7 @@ Start newsticker's ticker (but not the news retrieval).
 Start display timer for the actual ticker if wanted and not
 running already." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"newst-ticker" '("newsticker-")))
+(register-definition-prefixes "newst-ticker" '("newsticker-"))
 
 ;;;***
 
@@ -22472,28 +22739,28 @@ running already." t nil)
 (autoload 'newsticker-treeview "newst-treeview" "\
 Start newsticker treeview." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"newst-treeview" '("newsticker-")))
+(register-definition-prefixes "newst-treeview" '("newsticker-"))
 
 ;;;***
 
 ;;;### (autoloads nil "newsticker" "net/newsticker.el" (0 0 0 0))
 ;;; Generated autoloads from net/newsticker.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"newsticker" '("newsticker-version")))
+(register-definition-prefixes "newsticker" '("newsticker-version"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnagent" "gnus/nnagent.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnagent.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnagent" '("nnagent-")))
+(register-definition-prefixes "nnagent" '("nnagent-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnbabyl" "gnus/nnbabyl.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnbabyl.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnbabyl" '("nnbabyl-")))
+(register-definition-prefixes "nnbabyl" '("nnbabyl-"))
 
 ;;;***
 
@@ -22505,14 +22772,14 @@ Generate NOV databases in all nndiary directories.
 
 \(fn &optional SERVER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nndiary" '("nndiary-")))
+(register-definition-prefixes "nndiary" '("nndiary-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nndir" "gnus/nndir.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nndir.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nndir" '("nndir-")))
+(register-definition-prefixes "nndir" '("nndir-"))
 
 ;;;***
 
@@ -22528,21 +22795,21 @@ symbol in the alist.
 
 \(fn DEFINITION &optional POSITION)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nndoc" '("nndoc-")))
+(register-definition-prefixes "nndoc" '("nndoc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nndraft" "gnus/nndraft.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nndraft.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nndraft" '("nndraft-")))
+(register-definition-prefixes "nndraft" '("nndraft-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nneething" "gnus/nneething.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nneething.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nneething" '("nneething-")))
+(register-definition-prefixes "nneething" '("nneething-"))
 
 ;;;***
 
@@ -22553,70 +22820,70 @@ symbol in the alist.
 Look for mbox folders in the nnfolder directory and make them into groups.
 This command does not work if you use short group names." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnfolder" '("nnfolder-")))
+(register-definition-prefixes "nnfolder" '("nnfolder-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nngateway" "gnus/nngateway.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nngateway.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nngateway" '("nngateway-")))
+(register-definition-prefixes "nngateway" '("nngateway-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnheader" "gnus/nnheader.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnheader.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnheader" '("gnus-" "mail-header-" "make-mail-header" "nnheader-" "nntp-")))
+(register-definition-prefixes "nnheader" '("gnus-" "mail-header-" 
"make-mail-header" "nnheader-" "nntp-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnimap" "gnus/nnimap.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnimap.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnimap" '("nnimap-")))
+(register-definition-prefixes "nnimap" '("nnimap-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnir" "gnus/nnir.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnir.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnir" '("gnus-" "nnir-")))
+(register-definition-prefixes "nnir" '("gnus-" "nnir-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnmail" "gnus/nnmail.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnmail.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnmail" '("nnmail-")))
+(register-definition-prefixes "nnmail" '("nnmail-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnmaildir" "gnus/nnmaildir.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnmaildir.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnmaildir" '("nnmaildir-")))
+(register-definition-prefixes "nnmaildir" '("nnmaildir-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnmairix" "gnus/nnmairix.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnmairix.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnmairix" '("nnmairix-")))
+(register-definition-prefixes "nnmairix" '("nnmairix-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnmbox" "gnus/nnmbox.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnmbox.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnmbox" '("nnmbox-")))
+(register-definition-prefixes "nnmbox" '("nnmbox-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnmh" "gnus/nnmh.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnmh.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnmh" '("nnmh-")))
+(register-definition-prefixes "nnmh" '("nnmh-"))
 
 ;;;***
 
@@ -22628,70 +22895,70 @@ Generate NOV databases in all nnml directories.
 
 \(fn &optional SERVER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnml" '("nnml-")))
+(register-definition-prefixes "nnml" '("nnml-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnnil" "gnus/nnnil.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnnil.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnnil" '("nnnil-")))
+(register-definition-prefixes "nnnil" '("nnnil-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnoo" "gnus/nnoo.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnoo.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnoo" '("deffoo" "defvoo" "nnoo-")))
+(register-definition-prefixes "nnoo" '("deffoo" "defvoo" "nnoo-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnregistry" "gnus/nnregistry.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnregistry.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnregistry" '("nnregistry-")))
+(register-definition-prefixes "nnregistry" '("nnregistry-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnrss" "gnus/nnrss.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnrss.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnrss" '("nnrss-")))
+(register-definition-prefixes "nnrss" '("nnrss-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnspool" "gnus/nnspool.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnspool.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnspool" '("news-inews-program" "nnspool-")))
+(register-definition-prefixes "nnspool" '("news-inews-program" "nnspool-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nntp" "gnus/nntp.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nntp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nntp" '("nntp-")))
+(register-definition-prefixes "nntp" '("nntp-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnvirtual" "gnus/nnvirtual.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnvirtual.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnvirtual" '("nnvirtual-")))
+(register-definition-prefixes "nnvirtual" '("nnvirtual-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nnweb" "gnus/nnweb.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnweb.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nnweb" '("nnweb-")))
+(register-definition-prefixes "nnweb" '("nnweb-"))
 
 ;;;***
 
 ;;;### (autoloads nil "notifications" "notifications.el" (0 0 0 0))
 ;;; Generated autoloads from notifications.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"notifications" '("notifications-")))
+(register-definition-prefixes "notifications" '("notifications-"))
 
 ;;;***
 
@@ -22723,7 +22990,7 @@ future sessions.
 
 \(fn COMMAND)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"novice" '("en/disable-command")))
+(register-definition-prefixes "novice" '("en/disable-command"))
 
 ;;;***
 
@@ -22740,14 +23007,14 @@ closing requests for requests that are used in 
matched pairs.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nroff-mode" '("nroff-")))
+(register-definition-prefixes "nroff-mode" '("nroff-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nsm" "net/nsm.el" (0 0 0 0))
 ;;; Generated autoloads from net/nsm.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nsm" '("network-security-" "nsm-")))
+(register-definition-prefixes "nsm" '("network-security-" "nsm-"))
 
 ;;;***
 
@@ -22755,21 +23022,21 @@ closing requests for requests that are used in 
matched pairs.
 ;;; Generated autoloads from net/ntlm.el
 (push (purecopy '(ntlm 2 1 0)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ntlm" '("ntlm-")))
+(register-definition-prefixes "ntlm" '("ntlm-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nxml-enc" "nxml/nxml-enc.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/nxml-enc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nxml-enc" '("nxml-")))
+(register-definition-prefixes "nxml-enc" '("nxml-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nxml-maint" "nxml/nxml-maint.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/nxml-maint.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nxml-maint" '("nxml-insert-target-repertoire-glyph-set")))
+(register-definition-prefixes "nxml-maint" 
'("nxml-insert-target-repertoire-glyph-set"))
 
 ;;;***
 
@@ -22830,63 +23097,63 @@ Many aspects this mode can be customized using
 \(fn)" t nil)
 (defalias 'xml-mode 'nxml-mode)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nxml-mode" '("nxml-")))
+(register-definition-prefixes "nxml-mode" '("nxml-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nxml-ns" "nxml/nxml-ns.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/nxml-ns.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nxml-ns" '("nxml-ns-")))
+(register-definition-prefixes "nxml-ns" '("nxml-ns-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nxml-outln" "nxml/nxml-outln.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/nxml-outln.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nxml-outln" '("nxml-")))
+(register-definition-prefixes "nxml-outln" '("nxml-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nxml-parse" "nxml/nxml-parse.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/nxml-parse.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nxml-parse" '("nxml-")))
+(register-definition-prefixes "nxml-parse" '("nxml-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nxml-rap" "nxml/nxml-rap.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/nxml-rap.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nxml-rap" '("nxml-")))
+(register-definition-prefixes "nxml-rap" '("nxml-"))
 
 ;;;***
 
 ;;;### (autoloads nil "nxml-util" "nxml/nxml-util.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/nxml-util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"nxml-util" '("nxml-")))
+(register-definition-prefixes "nxml-util" '("nxml-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-C" "org/ob-C.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-C.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-C" '("org-babel-")))
+(register-definition-prefixes "ob-C" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-J" "org/ob-J.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-J.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-J" '("obj-" "org-babel-")))
+(register-definition-prefixes "ob-J" '("obj-" "org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-R" "org/ob-R.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-R.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-R" '("ob-R-" "org-babel-")))
+(register-definition-prefixes "ob-R" '("ob-R-" "org-babel-"))
 
 ;;;***
 
@@ -22894,7 +23161,7 @@ Many aspects this mode can be customized using
 ;;; Generated autoloads from org/ob-abc.el
 (push (purecopy '(ob-abc 0 1)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-abc" '("org-babel-")))
+(register-definition-prefixes "ob-abc" '("org-babel-"))
 
 ;;;***
 
@@ -22902,42 +23169,42 @@ Many aspects this mode can be customized using
 ;;;;;;  0))
 ;;; Generated autoloads from org/ob-asymptote.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-asymptote" '("org-babel-")))
+(register-definition-prefixes "ob-asymptote" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-awk" "org/ob-awk.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-awk.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-awk" '("org-babel-")))
+(register-definition-prefixes "ob-awk" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-calc" "org/ob-calc.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-calc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-calc" '("org-babel-")))
+(register-definition-prefixes "ob-calc" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-clojure" "org/ob-clojure.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-clojure.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-clojure" '("org-babel-")))
+(register-definition-prefixes "ob-clojure" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-comint" "org/ob-comint.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-comint.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-comint" '("org-babel-comint-")))
+(register-definition-prefixes "ob-comint" '("org-babel-comint-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-coq" "org/ob-coq.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-coq.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-coq" '("coq-program-name" "org-babel-")))
+(register-definition-prefixes "ob-coq" '("coq-program-name" "org-babel-"))
 
 ;;;***
 
@@ -22945,28 +23212,28 @@ Many aspects this mode can be customized using
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ob-core.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-core" '("org-")))
+(register-definition-prefixes "ob-core" '("org-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-css" "org/ob-css.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-css.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-css" '("org-babel-")))
+(register-definition-prefixes "ob-css" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-ditaa" "org/ob-ditaa.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-ditaa.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-ditaa" '("org-")))
+(register-definition-prefixes "ob-ditaa" '("org-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-dot" "org/ob-dot.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-dot.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-dot" '("org-babel-")))
+(register-definition-prefixes "ob-dot" '("org-babel-"))
 
 ;;;***
 
@@ -22974,7 +23241,7 @@ Many aspects this mode can be customized using
 ;;; Generated autoloads from org/ob-ebnf.el
 (push (purecopy '(ob-ebnf 1 0)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-ebnf" '("org-babel-")))
+(register-definition-prefixes "ob-ebnf" '("org-babel-"))
 
 ;;;***
 
@@ -22982,119 +23249,119 @@ Many aspects this mode can be customized using
 ;;;;;;  0 0))
 ;;; Generated autoloads from org/ob-emacs-lisp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-emacs-lisp" '("org-babel-")))
+(register-definition-prefixes "ob-emacs-lisp" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-eshell" "org/ob-eshell.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-eshell.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-eshell" '("ob-eshell-session-live-p" "org-babel-")))
+(register-definition-prefixes "ob-eshell" '("ob-eshell-session-live-p" 
"org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-eval" "org/ob-eval.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-eval.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-eval" '("org-babel-")))
+(register-definition-prefixes "ob-eval" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-exp" "org/ob-exp.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-exp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-exp" '("org-")))
+(register-definition-prefixes "ob-exp" '("org-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-forth" "org/ob-forth.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-forth.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-forth" '("org-babel-")))
+(register-definition-prefixes "ob-forth" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-fortran" "org/ob-fortran.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-fortran.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-fortran" '("org-babel-")))
+(register-definition-prefixes "ob-fortran" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-gnuplot" "org/ob-gnuplot.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-gnuplot.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-gnuplot" '("*org-babel-gnuplot-" "org-babel-")))
+(register-definition-prefixes "ob-gnuplot" '("*org-babel-gnuplot-" 
"org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-groovy" "org/ob-groovy.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-groovy.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-groovy" '("org-babel-")))
+(register-definition-prefixes "ob-groovy" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-haskell" "org/ob-haskell.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-haskell.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-haskell" '("org-babel-")))
+(register-definition-prefixes "ob-haskell" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-hledger" "org/ob-hledger.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-hledger.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-hledger" '("org-babel-")))
+(register-definition-prefixes "ob-hledger" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-io" "org/ob-io.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-io.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-io" '("org-babel-")))
+(register-definition-prefixes "ob-io" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-java" "org/ob-java.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-java.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-java" '("org-babel-")))
+(register-definition-prefixes "ob-java" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-js" "org/ob-js.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-js.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-js" '("org-babel-")))
+(register-definition-prefixes "ob-js" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-latex" "org/ob-latex.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-latex.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-latex" '("org-babel-")))
+(register-definition-prefixes "ob-latex" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-ledger" "org/ob-ledger.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-ledger.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-ledger" '("org-babel-")))
+(register-definition-prefixes "ob-ledger" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-lilypond" "org/ob-lilypond.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-lilypond.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-lilypond" '("lilypond-mode" "org-babel-")))
+(register-definition-prefixes "ob-lilypond" '("lilypond-mode" "org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-lisp" "org/ob-lisp.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-lisp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-lisp" '("org-babel-")))
+(register-definition-prefixes "ob-lisp" '("org-babel-"))
 
 ;;;***
 
@@ -23102,77 +23369,77 @@ Many aspects this mode can be customized using
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ob-lob.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-lob" '("org-babel-")))
+(register-definition-prefixes "ob-lob" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-lua" "org/ob-lua.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-lua.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-lua" '("org-babel-")))
+(register-definition-prefixes "ob-lua" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-makefile" "org/ob-makefile.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-makefile.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-makefile" '("org-babel-")))
+(register-definition-prefixes "ob-makefile" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-maxima" "org/ob-maxima.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-maxima.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-maxima" '("org-babel-")))
+(register-definition-prefixes "ob-maxima" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-mscgen" "org/ob-mscgen.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-mscgen.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-mscgen" '("org-babel-")))
+(register-definition-prefixes "ob-mscgen" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-ocaml" "org/ob-ocaml.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-ocaml.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-ocaml" '("org-babel-")))
+(register-definition-prefixes "ob-ocaml" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-octave" "org/ob-octave.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-octave.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-octave" '("org-babel-")))
+(register-definition-prefixes "ob-octave" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-org" "org/ob-org.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-org.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-org" '("org-babel-")))
+(register-definition-prefixes "ob-org" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-perl" "org/ob-perl.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-perl.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-perl" '("org-babel-")))
+(register-definition-prefixes "ob-perl" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-picolisp" "org/ob-picolisp.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-picolisp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-picolisp" '("org-babel-")))
+(register-definition-prefixes "ob-picolisp" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-plantuml" "org/ob-plantuml.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-plantuml.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-plantuml" '("org-")))
+(register-definition-prefixes "ob-plantuml" '("org-"))
 
 ;;;***
 
@@ -23180,49 +23447,49 @@ Many aspects this mode can be customized using
 ;;;;;;  0 0))
 ;;; Generated autoloads from org/ob-processing.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-processing" '("org-babel-")))
+(register-definition-prefixes "ob-processing" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-python" "org/ob-python.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-python.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-python" '("org-babel-")))
+(register-definition-prefixes "ob-python" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-ref" "org/ob-ref.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-ref.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-ref" '("org-babel-")))
+(register-definition-prefixes "ob-ref" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-ruby" "org/ob-ruby.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-ruby.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-ruby" '("org-babel-")))
+(register-definition-prefixes "ob-ruby" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-sass" "org/ob-sass.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-sass.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-sass" '("org-babel-")))
+(register-definition-prefixes "ob-sass" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-scheme" "org/ob-scheme.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-scheme.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-scheme" '("org-babel-")))
+(register-definition-prefixes "ob-scheme" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-screen" "org/ob-screen.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-screen.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-screen" '("org-babel-")))
+(register-definition-prefixes "ob-screen" '("org-babel-"))
 
 ;;;***
 
@@ -23230,49 +23497,49 @@ Many aspects this mode can be customized using
 ;;; Generated autoloads from org/ob-sed.el
 (push (purecopy '(ob-sed 0 1 1)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-sed" '("org-babel-")))
+(register-definition-prefixes "ob-sed" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-shell" "org/ob-shell.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-shell.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-shell" '("org-babel-")))
+(register-definition-prefixes "ob-shell" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-shen" "org/ob-shen.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-shen.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-shen" '("org-babel-")))
+(register-definition-prefixes "ob-shen" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-sql" "org/ob-sql.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-sql.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-sql" '("org-babel-")))
+(register-definition-prefixes "ob-sql" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-sqlite" "org/ob-sqlite.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-sqlite.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-sqlite" '("org-babel-")))
+(register-definition-prefixes "ob-sqlite" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-stan" "org/ob-stan.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-stan.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-stan" '("org-babel-")))
+(register-definition-prefixes "ob-stan" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-table" "org/ob-table.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-table.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-table" '("org-")))
+(register-definition-prefixes "ob-table" '("org-"))
 
 ;;;***
 
@@ -23280,14 +23547,14 @@ Many aspects this mode can be customized using
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ob-tangle.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-tangle" '("org-babel-")))
+(register-definition-prefixes "ob-tangle" '("org-babel-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ob-vala" "org/ob-vala.el" (0 0 0 0))
 ;;; Generated autoloads from org/ob-vala.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ob-vala" '("org-babel-")))
+(register-definition-prefixes "ob-vala" '("org-babel-"))
 
 ;;;***
 
@@ -23330,14 +23597,14 @@ startup file, `~/.emacs-octave'.
 
 (defalias 'run-octave 'inferior-octave)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"octave" '("inferior-octave-" "octave-")))
+(register-definition-prefixes "octave" '("inferior-octave-" "octave-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ogonek" "international/ogonek.el" (0 0 0 0))
 ;;; Generated autoloads from international/ogonek.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ogonek" '("ogonek-")))
+(register-definition-prefixes "ogonek" '("ogonek-"))
 
 ;;;***
 
@@ -23441,7 +23708,7 @@ This command can be called in any mode to insert a link 
in Org syntax." t nil)
 Find all radio targets in this file and update the regular expression.
 Also refresh fontification if needed." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol" 
'("org-")))
+(register-definition-prefixes "ol" '("org-"))
 
 ;;;***
 
@@ -23449,49 +23716,49 @@ Also refresh fontification if needed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ol-bbdb.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-bbdb" '("org-bbdb-")))
+(register-definition-prefixes "ol-bbdb" '("org-bbdb-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ol-bibtex" "org/ol-bibtex.el" (0 0 0 0))
 ;;; Generated autoloads from org/ol-bibtex.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-bibtex" '("org-")))
+(register-definition-prefixes "ol-bibtex" '("org-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ol-docview" "org/ol-docview.el" (0 0 0 0))
 ;;; Generated autoloads from org/ol-docview.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-docview" '("org-docview-")))
+(register-definition-prefixes "ol-docview" '("org-docview-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ol-eshell" "org/ol-eshell.el" (0 0 0 0))
 ;;; Generated autoloads from org/ol-eshell.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-eshell" '("org-eshell-")))
+(register-definition-prefixes "ol-eshell" '("org-eshell-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ol-eww" "org/ol-eww.el" (0 0 0 0))
 ;;; Generated autoloads from org/ol-eww.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-eww" '("org-eww-")))
+(register-definition-prefixes "ol-eww" '("org-eww-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ol-gnus" "org/ol-gnus.el" (0 0 0 0))
 ;;; Generated autoloads from org/ol-gnus.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-gnus" '("org-gnus-")))
+(register-definition-prefixes "ol-gnus" '("org-gnus-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ol-info" "org/ol-info.el" (0 0 0 0))
 ;;; Generated autoloads from org/ol-info.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-info" '("org-info-")))
+(register-definition-prefixes "ol-info" '("org-info-"))
 
 ;;;***
 
@@ -23499,28 +23766,28 @@ Also refresh fontification if needed." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ol-irc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-irc" '("org-irc-")))
+(register-definition-prefixes "ol-irc" '("org-irc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ol-mhe" "org/ol-mhe.el" (0 0 0 0))
 ;;; Generated autoloads from org/ol-mhe.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-mhe" '("org-mhe-")))
+(register-definition-prefixes "ol-mhe" '("org-mhe-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ol-rmail" "org/ol-rmail.el" (0 0 0 0))
 ;;; Generated autoloads from org/ol-rmail.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-rmail" '("org-rmail-")))
+(register-definition-prefixes "ol-rmail" '("org-rmail-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ol-w3m" "org/ol-w3m.el" (0 0 0 0))
 ;;; Generated autoloads from org/ol-w3m.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ol-w3m" '("org-w3m-")))
+(register-definition-prefixes "ol-w3m" '("org-w3m-"))
 
 ;;;***
 
@@ -23557,7 +23824,7 @@ Coloring:
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"opascal" '("opascal-")))
+(register-definition-prefixes "opascal" '("opascal-"))
 
 ;;;***
 
@@ -23752,7 +24019,7 @@ With prefix arg UNCOMPILED, load the uncompiled 
versions.
 (autoload 'org-customize "org" "\
 Call the customize function with org as argument." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org" '("org-" "turn-on-org-cdlatex")))
+(register-definition-prefixes "org" '("org-" "turn-on-org-cdlatex"))
 
 ;;;***
 
@@ -24028,7 +24295,7 @@ to override `appt-message-warning-time'.
 
 \(fn &optional REFRESH FILTER &rest ARGS)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-agenda" '("org-")))
+(register-definition-prefixes "org-agenda" '("org-"))
 
 ;;;***
 
@@ -24036,7 +24303,7 @@ to override `appt-message-warning-time'.
 ;;;;;;  "org/org-archive.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-archive.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-archive" '("org-a")))
+(register-definition-prefixes "org-archive" '("org-a"))
 
 ;;;***
 
@@ -24044,7 +24311,7 @@ to override `appt-message-warning-time'.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/org-attach.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-attach" '("org-attach-")))
+(register-definition-prefixes "org-attach" '("org-attach-"))
 
 ;;;***
 
@@ -24052,7 +24319,7 @@ to override `appt-message-warning-time'.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from org/org-attach-git.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-attach-git" '("org-attach-git-")))
+(register-definition-prefixes "org-attach-git" '("org-attach-git-"))
 
 ;;;***
 
@@ -24098,7 +24365,7 @@ of the day at point (if any) or the current HH:MM time.
 (autoload 'org-capture-import-remember-templates "org-capture" "\
 Set `org-capture-templates' to be similar to `org-remember-templates'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-capture" '("org-capture-")))
+(register-definition-prefixes "org-capture" '("org-capture-"))
 
 ;;;***
 
@@ -24106,7 +24373,7 @@ Set `org-capture-templates' to be similar to 
`org-remember-templates'." t nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/org-clock.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-clock" '("org-")))
+(register-definition-prefixes "org-clock" '("org-"))
 
 ;;;***
 
@@ -24197,7 +24464,7 @@ Create a dynamic block capturing a column view table." 
t nil)
 (autoload 'org-agenda-columns "org-colview" "\
 Turn on or update column view in the agenda." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-colview" '("org-")))
+(register-definition-prefixes "org-colview" '("org-"))
 
 ;;;***
 
@@ -24207,21 +24474,21 @@ Turn on or update column view in the agenda." t nil)
 (autoload 'org-check-version "org-compat" "\
 Try very hard to provide sensible version strings." nil t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-compat" '("org-")))
+(register-definition-prefixes "org-compat" '("org-"))
 
 ;;;***
 
 ;;;### (autoloads nil "org-crypt" "org/org-crypt.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-crypt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-crypt" '("org-")))
+(register-definition-prefixes "org-crypt" '("org-"))
 
 ;;;***
 
 ;;;### (autoloads nil "org-ctags" "org/org-ctags.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-ctags.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-ctags" '("org-ctags-")))
+(register-definition-prefixes "org-ctags" '("org-ctags-"))
 
 ;;;***
 
@@ -24229,7 +24496,7 @@ Try very hard to provide sensible version strings." nil 
t)
 ;;;;;;  "org/org-datetree.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-datetree.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-datetree" '("org-datetree-")))
+(register-definition-prefixes "org-datetree" '("org-datetree-"))
 
 ;;;***
 
@@ -24284,7 +24551,7 @@ with \"H:MM:SS\" format, return `h:mm:ss'.  Otherwise, 
return
 
 \(fn TIMES)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-duration" '("org-duration-")))
+(register-definition-prefixes "org-duration" '("org-duration-"))
 
 ;;;***
 
@@ -24292,7 +24559,7 @@ with \"H:MM:SS\" format, return `h:mm:ss'.  Otherwise, 
return
 ;;;;;;  "org/org-element.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-element.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-element" '("org-element-")))
+(register-definition-prefixes "org-element" '("org-element-"))
 
 ;;;***
 
@@ -24300,14 +24567,14 @@ with \"H:MM:SS\" format, return `h:mm:ss'.  
Otherwise, return
 ;;;;;;  0))
 ;;; Generated autoloads from org/org-entities.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-entities" '("org-entit")))
+(register-definition-prefixes "org-entities" '("org-entit"))
 
 ;;;***
 
 ;;;### (autoloads nil "org-faces" "org/org-faces.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-faces.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-faces" '("org-")))
+(register-definition-prefixes "org-faces" '("org-"))
 
 ;;;***
 
@@ -24315,7 +24582,7 @@ with \"H:MM:SS\" format, return `h:mm:ss'.  Otherwise, 
return
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/org-feed.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-feed" '("org-feed-")))
+(register-definition-prefixes "org-feed" '("org-feed-"))
 
 ;;;***
 
@@ -24323,7 +24590,7 @@ with \"H:MM:SS\" format, return `h:mm:ss'.  Otherwise, 
return
 ;;;;;;  "org/org-footnote.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-footnote.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-footnote" '("org-footnote-")))
+(register-definition-prefixes "org-footnote" '("org-footnote-"))
 
 ;;;***
 
@@ -24359,14 +24626,14 @@ With a prefix argument, use the alternative 
interface: e.g., if
 
 \(fn &optional ALTERNATIVE-INTERFACE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-goto" '("org-goto-")))
+(register-definition-prefixes "org-goto" '("org-goto-"))
 
 ;;;***
 
 ;;;### (autoloads nil "org-habit" "org/org-habit.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-habit.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-habit" '("org-")))
+(register-definition-prefixes "org-habit" '("org-"))
 
 ;;;***
 
@@ -24374,7 +24641,7 @@ With a prefix argument, use the alternative interface: 
e.g., if
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/org-id.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-id" '("org-id-")))
+(register-definition-prefixes "org-id" '("org-id-"))
 
 ;;;***
 
@@ -24382,7 +24649,7 @@ With a prefix argument, use the alternative interface: 
e.g., if
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/org-indent.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-indent" '("org-")))
+(register-definition-prefixes "org-indent" '("org-"))
 
 ;;;***
 
@@ -24390,7 +24657,7 @@ With a prefix argument, use the alternative interface: 
e.g., if
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from org/org-inlinetask.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-inlinetask" '("org-inlinetask-")))
+(register-definition-prefixes "org-inlinetask" '("org-inlinetask-"))
 
 ;;;***
 
@@ -24400,7 +24667,7 @@ With a prefix argument, use the alternative interface: 
e.g., if
 (autoload 'org-babel-describe-bindings "org-keys" "\
 Describe all keybindings behind `org-babel-key-prefix'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-keys" '("org-")))
+(register-definition-prefixes "org-keys" '("org-"))
 
 ;;;***
 
@@ -24418,21 +24685,21 @@ ARG can also be a list of checker names, as symbols, 
to run.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-lint" '("org-lint-")))
+(register-definition-prefixes "org-lint" '("org-lint-"))
 
 ;;;***
 
 ;;;### (autoloads nil "org-list" "org/org-list.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-list.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-list" '("org-")))
+(register-definition-prefixes "org-list" '("org-"))
 
 ;;;***
 
 ;;;### (autoloads nil "org-macro" "org/org-macro.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-macro.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-macro" '("org-macro-")))
+(register-definition-prefixes "org-macro" '("org-macro-"))
 
 ;;;***
 
@@ -24444,7 +24711,7 @@ Load FILE with optional arguments NOERROR and 
MUSTSUFFIX.
 
 \(fn FILE)" nil t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-macs" '("org-")))
+(register-definition-prefixes "org-macs" '("org-"))
 
 ;;;***
 
@@ -24452,14 +24719,14 @@ Load FILE with optional arguments NOERROR and 
MUSTSUFFIX.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/org-mobile.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-mobile" '("org-mobile-")))
+(register-definition-prefixes "org-mobile" '("org-mobile-"))
 
 ;;;***
 
 ;;;### (autoloads nil "org-mouse" "org/org-mouse.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-mouse.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-mouse" '("org-mouse-")))
+(register-definition-prefixes "org-mouse" '("org-mouse-"))
 
 ;;;***
 
@@ -24480,9 +24747,12 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-num" '("org-num-")))
+(register-definition-prefixes "org-num" '("org-num-"))
 
 ;;;***
 
@@ -24490,7 +24760,7 @@ enable the mode if ARG is omitted or nil, and toggle it 
if ARG is
 ;;;;;;  0 0))
 ;;; Generated autoloads from org/org-pcomplete.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-pcomplete" '("org-" "pcomplete/org-mode/")))
+(register-definition-prefixes "org-pcomplete" '("org-" "pcomplete/org-mode/"))
 
 ;;;***
 
@@ -24498,7 +24768,7 @@ enable the mode if ARG is omitted or nil, and toggle it 
if ARG is
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/org-plot.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-plot" '("org-plot")))
+(register-definition-prefixes "org-plot" '("org-plot"))
 
 ;;;***
 
@@ -24506,14 +24776,14 @@ enable the mode if ARG is omitted or nil, and toggle 
it if ARG is
 ;;;;;;  0))
 ;;; Generated autoloads from org/org-protocol.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-protocol" '("org-protocol-")))
+(register-definition-prefixes "org-protocol" '("org-protocol-"))
 
 ;;;***
 
 ;;;### (autoloads nil "org-src" "org/org-src.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-src.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-src" '("org-")))
+(register-definition-prefixes "org-src" '("org-"))
 
 ;;;***
 
@@ -24521,14 +24791,14 @@ enable the mode if ARG is omitted or nil, and toggle 
it if ARG is
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/org-table.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-table" '("org")))
+(register-definition-prefixes "org-table" '("org"))
 
 ;;;***
 
 ;;;### (autoloads nil "org-tempo" "org/org-tempo.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-tempo.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-tempo" '("org-tempo-")))
+(register-definition-prefixes "org-tempo" '("org-tempo-"))
 
 ;;;***
 
@@ -24536,7 +24806,7 @@ enable the mode if ARG is omitted or nil, and toggle it 
if ARG is
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/org-timer.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"org-timer" '("org-timer-")))
+(register-definition-prefixes "org-timer" '("org-timer-"))
 
 ;;;***
 
@@ -24591,12 +24861,15 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 See the command `outline-mode' for more information on this mode.
 
 \(fn &optional ARG)" t nil)
 (put 'outline-level 'risky-local-variable t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"outline" '("outline-")))
+(register-definition-prefixes "outline" '("outline-"))
 
 ;;;***
 
@@ -24604,7 +24877,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox" 
'("org-export-")))
+(register-definition-prefixes "ox" '("org-export-"))
 
 ;;;***
 
@@ -24612,7 +24885,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox-ascii.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-ascii" '("org-ascii-")))
+(register-definition-prefixes "ox-ascii" '("org-ascii-"))
 
 ;;;***
 
@@ -24620,7 +24893,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox-beamer.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-beamer" '("org-beamer-")))
+(register-definition-prefixes "ox-beamer" '("org-beamer-"))
 
 ;;;***
 
@@ -24628,7 +24901,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox-html.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-html" '("org-html-")))
+(register-definition-prefixes "ox-html" '("org-html-"))
 
 ;;;***
 
@@ -24636,7 +24909,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  "org/ox-icalendar.el" (0 0 0 0))
 ;;; Generated autoloads from org/ox-icalendar.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-icalendar" '("org-icalendar-")))
+(register-definition-prefixes "ox-icalendar" '("org-icalendar-"))
 
 ;;;***
 
@@ -24644,7 +24917,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox-latex.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-latex" '("org-latex-")))
+(register-definition-prefixes "ox-latex" '("org-latex-"))
 
 ;;;***
 
@@ -24652,7 +24925,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox-man.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-man" '("org-man-")))
+(register-definition-prefixes "ox-man" '("org-man-"))
 
 ;;;***
 
@@ -24660,7 +24933,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox-md.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-md" '("org-md-")))
+(register-definition-prefixes "ox-md" '("org-md-"))
 
 ;;;***
 
@@ -24668,7 +24941,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox-odt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-odt" '("org-odt-")))
+(register-definition-prefixes "ox-odt" '("org-odt-"))
 
 ;;;***
 
@@ -24676,7 +24949,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox-org.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-org" '("org-org-")))
+(register-definition-prefixes "ox-org" '("org-org-"))
 
 ;;;***
 
@@ -24684,7 +24957,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox-publish.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-publish" '("org-publish-")))
+(register-definition-prefixes "ox-publish" '("org-publish-"))
 
 ;;;***
 
@@ -24692,7 +24965,7 @@ See the command `outline-mode' for more information on 
this mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from org/ox-texinfo.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ox-texinfo" '("org-texinfo-")))
+(register-definition-prefixes "ox-texinfo" '("org-texinfo-"))
 
 ;;;***
 
@@ -24835,7 +25108,7 @@ The return value is a string (or nil in case we can't 
find it)." nil nil)
 
 (function-put 'package-get-version 'pure 't)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"package" '("bad-signature" "define-package" "describe-package-1" "package-")))
+(register-definition-prefixes "package" '("bad-signature" "define-package" 
"describe-package-1" "package-"))
 
 ;;;***
 
@@ -24858,14 +25131,14 @@ archive).
 
 \(fn FILE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"package-x" '("package-")))
+(register-definition-prefixes "package-x" '("package-"))
 
 ;;;***
 
 ;;;### (autoloads nil "page-ext" "textmodes/page-ext.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/page-ext.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"page-ext" '("pages-")))
+(register-definition-prefixes "page-ext" '("pages-"))
 
 ;;;***
 
@@ -24890,13 +25163,16 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Show Paren mode is a global minor mode.  When enabled, any
 matching parenthesis is highlighted in `show-paren-style' after
 `show-paren-delay' seconds of Emacs idle time.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"paren" '("show-paren-")))
+(register-definition-prefixes "paren" '("show-paren-"))
 
 ;;;***
 
@@ -24918,7 +25194,7 @@ unknown DST value is returned as -1.
 
 \(fn STRING)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"parse-time" '("parse-")))
+(register-definition-prefixes "parse-time" '("parse-"))
 
 ;;;***
 
@@ -24969,7 +25245,7 @@ See also the user variables `pascal-type-keywords', 
`pascal-start-keywords' and
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pascal" '("electric-pascal-" "pascal-")))
+(register-definition-prefixes "pascal" '("electric-pascal-" "pascal-"))
 
 ;;;***
 
@@ -24993,7 +25269,7 @@ Check if KEY is in the cache.
 
 \(fn KEY)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"password-cache" '("password-")))
+(register-definition-prefixes "password-cache" '("password-"))
 
 ;;;***
 
@@ -25127,7 +25403,7 @@ for the result of evaluating EXP (first arg to `pcase').
 
 (function-put 'pcase-defmacro 'doc-string-elt '3)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcase" '("pcase-")))
+(register-definition-prefixes "pcase" '("pcase-"))
 
 ;;;***
 
@@ -25137,7 +25413,7 @@ for the result of evaluating EXP (first arg to `pcase').
 (autoload 'pcomplete/cvs "pcmpl-cvs" "\
 Completion rules for the `cvs' command." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcmpl-cvs" '("pcmpl-cvs-")))
+(register-definition-prefixes "pcmpl-cvs" '("pcmpl-cvs-"))
 
 ;;;***
 
@@ -25161,7 +25437,7 @@ Completion for the GNU find utility." nil nil)
 
 (defalias 'pcomplete/gdb 'pcomplete/xargs)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcmpl-gnu" '("pcmpl-gnu-")))
+(register-definition-prefixes "pcmpl-gnu" '("pcmpl-gnu-"))
 
 ;;;***
 
@@ -25177,7 +25453,7 @@ Completion for GNU/Linux `umount'." nil nil)
 (autoload 'pcomplete/mount "pcmpl-linux" "\
 Completion for GNU/Linux `mount'." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcmpl-linux" '("pcmpl-linux-" "pcomplete-pare-list")))
+(register-definition-prefixes "pcmpl-linux" '("pcmpl-linux-" 
"pcomplete-pare-list"))
 
 ;;;***
 
@@ -25187,7 +25463,7 @@ Completion for GNU/Linux `mount'." nil nil)
 (autoload 'pcomplete/rpm "pcmpl-rpm" "\
 Completion for the `rpm' command." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcmpl-rpm" '("pcmpl-rpm-")))
+(register-definition-prefixes "pcmpl-rpm" '("pcmpl-rpm-"))
 
 ;;;***
 
@@ -25226,7 +25502,7 @@ Completion rules for the `ssh' command." nil nil)
 Completion rules for the `scp' command.
 Includes files as well as host names followed by a colon." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcmpl-unix" '("pcmpl-")))
+(register-definition-prefixes "pcmpl-unix" '("pcmpl-"))
 
 ;;;***
 
@@ -25246,7 +25522,7 @@ long options." nil nil)
 (autoload 'pcomplete/ag "pcmpl-x" "\
 Completion for the `ag' command." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcmpl-x" '("pcmpl-x-")))
+(register-definition-prefixes "pcmpl-x" '("pcmpl-x-"))
 
 ;;;***
 
@@ -25295,7 +25571,7 @@ this is `comint-dynamic-complete-functions'.
 (autoload 'pcomplete-shell-setup "pcomplete" "\
 Setup `shell-mode' to use pcomplete." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcomplete" '("pcomplete-")))
+(register-definition-prefixes "pcomplete" '("pcomplete-"))
 
 ;;;***
 
@@ -25372,7 +25648,7 @@ Anything else means to do it only if the prefix arg is 
equal to this value.")
 Run `cvs-examine' if DIR is a CVS administrative directory.
 The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp 
dir) (setq dir (directory-file-name dir)) (when (and (string= "CVS" 
(file-name-nondirectory dir)) (file-readable-p (expand-file-name "Entries" 
dir)) cvs-dired-use-hook (if (eq cvs-dired-use-hook 'always) (not 
current-prefix-arg) (equal current-prefix-arg cvs-dired-use-hook))) 
(save-excursion (funcall cvs-dired-action (file-name-directory dir) t t)))))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcvs" '("cvs-" "defun-cvs-mode")))
+(register-definition-prefixes "pcvs" '("cvs-" "defun-cvs-mode"))
 
 ;;;***
 
@@ -25382,28 +25658,28 @@ The exact behavior is determined also by 
`cvs-dired-use-hook'." (when (stringp d
 (defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key 
m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help 
,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] 
`(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check 
out a module from the repository"))) (define-key m [update] `(menu-item 
,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from 
the repository"))) (define-key m [ex [...]
 Global menu used by PCL-CVS.")
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcvs-defs" '("cvs-")))
+(register-definition-prefixes "pcvs-defs" '("cvs-"))
 
 ;;;***
 
 ;;;### (autoloads nil "pcvs-info" "vc/pcvs-info.el" (0 0 0 0))
 ;;; Generated autoloads from vc/pcvs-info.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcvs-info" '("cvs-")))
+(register-definition-prefixes "pcvs-info" '("cvs-"))
 
 ;;;***
 
 ;;;### (autoloads nil "pcvs-parse" "vc/pcvs-parse.el" (0 0 0 0))
 ;;; Generated autoloads from vc/pcvs-parse.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcvs-parse" '("cvs-")))
+(register-definition-prefixes "pcvs-parse" '("cvs-"))
 
 ;;;***
 
 ;;;### (autoloads nil "pcvs-util" "vc/pcvs-util.el" (0 0 0 0))
 ;;; Generated autoloads from vc/pcvs-util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pcvs-util" '("cvs-")))
+(register-definition-prefixes "pcvs-util" '("cvs-"))
 
 ;;;***
 
@@ -25475,7 +25751,7 @@ Turning on Perl mode runs the normal hook 
`perl-mode-hook'.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"perl-mode" '("indent-perl-exp" "mark-perl-function" "perl-")))
+(register-definition-prefixes "perl-mode" '("indent-perl-exp" 
"mark-perl-function" "perl-"))
 
 ;;;***
 
@@ -25555,14 +25831,14 @@ they are not by default assigned to keys." t nil)
 
 (defalias 'edit-picture 'picture-mode)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"picture" '("picture-")))
+(register-definition-prefixes "picture" '("picture-"))
 
 ;;;***
 
 ;;;### (autoloads nil "pinyin" "language/pinyin.el" (0 0 0 0))
 ;;; Generated autoloads from language/pinyin.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pinyin" '("pinyin-character-map")))
+(register-definition-prefixes "pinyin" '("pinyin-character-map"))
 
 ;;;***
 
@@ -25587,9 +25863,12 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pixel-scroll" '("pixel-")))
+(register-definition-prefixes "pixel-scroll" '("pixel-"))
 
 ;;;***
 
@@ -25606,7 +25885,7 @@ Major mode for editing PLSTORE files.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"plstore" '("plstore-")))
+(register-definition-prefixes "plstore" '("plstore-"))
 
 ;;;***
 
@@ -25619,7 +25898,7 @@ Called through `file-coding-system-alist', before the 
file is visited for real.
 
 \(fn ARG-LIST)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "po" 
'("po-")))
+(register-definition-prefixes "po" '("po-"))
 
 ;;;***
 
@@ -25635,7 +25914,7 @@ pong-mode keybindings:\\<pong-mode-map>
 
 \\{pong-mode-map}" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pong" '("pong-")))
+(register-definition-prefixes "pong" '("pong-"))
 
 ;;;***
 
@@ -25648,7 +25927,7 @@ Use streaming commands.
 
 \(fn FILE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pop3" '("pop3-")))
+(register-definition-prefixes "pop3" '("pop3-"))
 
 ;;;***
 
@@ -25698,7 +25977,7 @@ Ignores leading comment characters.
 
 \(fn ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pp" 
'("pp-")))
+(register-definition-prefixes "pp" '("pp-"))
 
 ;;;***
 
@@ -26238,7 +26517,7 @@ are both set to t.
 
 \(fn &optional SELECT-PRINTER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"printing" '("lpr-setup" "pr-")))
+(register-definition-prefixes "printing" '("lpr-setup" "pr-"))
 
 ;;;***
 
@@ -26258,7 +26537,7 @@ Proced buffers.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"proced" '("proced-")))
+(register-definition-prefixes "proced" '("proced-"))
 
 ;;;***
 
@@ -26288,13 +26567,13 @@ Open profile FILENAME.
 
 \(fn FILENAME)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"profiler" '("profiler-")))
+(register-definition-prefixes "profiler" '("profiler-"))
 
 ;;;***
 
 ;;;### (autoloads nil "project" "progmodes/project.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/project.el
-(push (purecopy '(project 0 5 0)) package--builtin-versions)
+(push (purecopy '(project 0 5 1)) package--builtin-versions)
 
 (autoload 'project-current "project" "\
 Return the project instance in DIRECTORY, defaulting to `default-directory'.
@@ -26315,7 +26594,7 @@ of the project instance object.
 
 \(fn &optional MAYBE-PROMPT DIRECTORY)" nil nil)
 
-(defvar project-prefix-map (let ((map (make-sparse-keymap))) (define-key map 
"f" 'project-find-file) (define-key map "F" 'project-or-external-find-file) 
(define-key map "b" 'project-switch-to-buffer) (define-key map "s" 
'project-shell) (define-key map "d" 'project-dired) (define-key map "v" 
'project-vc-dir) (define-key map "c" 'project-compile) (define-key map "e" 
'project-eshell) (define-key map "k" 'project-kill-buffers) (define-key map "p" 
'project-switch-project) (define-key map "g"  [...]
+(defvar project-prefix-map (let ((map (make-sparse-keymap))) (define-key map 
"!" 'project-shell-command) (define-key map "&" 'project-async-shell-command) 
(define-key map "f" 'project-find-file) (define-key map "F" 
'project-or-external-find-file) (define-key map "b" 'project-switch-to-buffer) 
(define-key map "s" 'project-shell) (define-key map "d" 'project-dired) 
(define-key map "v" 'project-vc-dir) (define-key map "c" 'project-compile) 
(define-key map "e" 'project-eshell) (define-key ma [...]
 Keymap for project commands.")
  (define-key ctl-x-map "p" project-prefix-map)
 
@@ -26393,6 +26672,12 @@ switch to it.  Otherwise, create a new Eshell buffer.
 With \\[universal-argument] prefix arg, create a new Eshell buffer even
 if one already exists." t nil)
 
+(autoload 'project-async-shell-command "project" "\
+Run `async-shell-command' in the current project's root directory." t nil)
+
+(autoload 'project-shell-command "project" "\
+Run `shell-command' in the current project's root directory." t nil)
+
 (autoload 'project-search "project" "\
 Search for REGEXP in all the files of the project.
 Stops when a match is found.
@@ -26484,7 +26769,7 @@ the menu entries in the dispatch menu.")
 The available commands are presented as a dispatch menu
 made from `project-switch-commands'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"project" '("project-")))
+(register-definition-prefixes "project" '("project-"))
 
 ;;;***
 
@@ -26519,7 +26804,7 @@ With prefix argument ARG, restart the Prolog process if 
running before.
 
 \(fn ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"prolog" '("mercury-mode-map" "prolog-")))
+(register-definition-prefixes "prolog" '("mercury-mode-map" "prolog-"))
 
 ;;;***
 
@@ -26532,14 +26817,14 @@ The default value is 
(\"/usr/local/share/emacs/fonts/bdf\").")
 
 (custom-autoload 'bdf-directory-list "ps-bdf" t)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ps-bdf" '("bdf-")))
+(register-definition-prefixes "ps-bdf" '("bdf-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ps-def" "ps-def.el" (0 0 0 0))
 ;;; Generated autoloads from ps-def.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ps-def" '("ps-")))
+(register-definition-prefixes "ps-def" '("ps-"))
 
 ;;;***
 
@@ -26587,7 +26872,7 @@ Typing \\<ps-run-mode-map>\\[ps-run-goto-error] when 
the cursor is at the number
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ps-mode" '("ps-")))
+(register-definition-prefixes "ps-mode" '("ps-"))
 
 ;;;***
 
@@ -26595,7 +26880,7 @@ Typing \\<ps-run-mode-map>\\[ps-run-goto-error] when 
the cursor is at the number
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from ps-mule.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ps-mule" '("ps-mule-")))
+(register-definition-prefixes "ps-mule" '("ps-mule-"))
 
 ;;;***
 
@@ -26784,14 +27069,14 @@ If EXTENSION is any other symbol, it is ignored.
 
 \(fn FACE-EXTENSION &optional MERGE-P ALIST-SYM)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ps-print" '("ps-")))
+(register-definition-prefixes "ps-print" '("ps-"))
 
 ;;;***
 
 ;;;### (autoloads nil "ps-samp" "ps-samp.el" (0 0 0 0))
 ;;; Generated autoloads from ps-samp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ps-samp" '("ps-")))
+(register-definition-prefixes "ps-samp" '("ps-"))
 
 ;;;***
 
@@ -26811,14 +27096,14 @@ Optional argument FACE specifies the face to do the 
highlighting.
 
 \(fn START END &optional FACE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"pulse" '("pulse-")))
+(register-definition-prefixes "pulse" '("pulse-"))
 
 ;;;***
 
 ;;;### (autoloads nil "puny" "net/puny.el" (0 0 0 0))
 ;;; Generated autoloads from net/puny.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"puny" '("puny-")))
+(register-definition-prefixes "puny" '("puny-"))
 
 ;;;***
 
@@ -26857,7 +27142,7 @@ Major mode for editing Python files.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"python" '("inferior-python-mode" "python-" "run-python-internal")))
+(register-definition-prefixes "python" '("inferior-python-mode" "python-" 
"run-python-internal"))
 
 ;;;***
 
@@ -26878,7 +27163,7 @@ them into characters should be done separately.
 
 \(fn FROM TO &optional CODING-SYSTEM)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "qp" 
'("quoted-printable-")))
+(register-definition-prefixes "qp" '("quoted-printable-"))
 
 ;;;***
 
@@ -27108,7 +27393,7 @@ of each directory.
 
 \(fn DIRNAME &rest DIRNAMES)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail" '("quail-")))
+(register-definition-prefixes "quail" '("quail-"))
 
 ;;;***
 
@@ -27116,7 +27401,7 @@ of each directory.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from leim/quail/ethiopic.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/ethiopic" '("ethio-select-a-translation")))
+(register-definition-prefixes "quail/ethiopic" '("ethio-select-a-translation"))
 
 ;;;***
 
@@ -27131,7 +27416,7 @@ HELP-TEXT is a text set in 
`hangul-input-method-help-text'.
 
 \(fn INPUT-METHOD FUNC HELP-TEXT &rest ARGS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/hangul" '("alphabetp" "hangul" "notzerop")))
+(register-definition-prefixes "quail/hangul" '("alphabetp" "hangul" 
"notzerop"))
 
 ;;;***
 
@@ -27139,14 +27424,14 @@ HELP-TEXT is a text set in 
`hangul-input-method-help-text'.
 ;;;;;;  0 0))
 ;;; Generated autoloads from leim/quail/indian.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/indian" '("indian-mlm-mozhi-u" "inscript-" "quail-")))
+(register-definition-prefixes "quail/indian" '("indian-mlm-mozhi-u" 
"inscript-" "quail-"))
 
 ;;;***
 
 ;;;### (autoloads nil "quail/ipa" "leim/quail/ipa.el" (0 0 0 0))
 ;;; Generated autoloads from leim/quail/ipa.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/ipa" '("ipa-x-sampa-")))
+(register-definition-prefixes "quail/ipa" '("ipa-x-sampa-"))
 
 ;;;***
 
@@ -27154,21 +27439,21 @@ HELP-TEXT is a text set in 
`hangul-input-method-help-text'.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from leim/quail/japanese.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/japanese" '("quail-japanese-")))
+(register-definition-prefixes "quail/japanese" '("quail-japanese-"))
 
 ;;;***
 
 ;;;### (autoloads nil "quail/lao" "leim/quail/lao.el" (0 0 0 0))
 ;;; Generated autoloads from leim/quail/lao.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/lao" '("lao-" "quail-lao-update-translation")))
+(register-definition-prefixes "quail/lao" '("lao-" 
"quail-lao-update-translation"))
 
 ;;;***
 
 ;;;### (autoloads nil "quail/lrt" "leim/quail/lrt.el" (0 0 0 0))
 ;;; Generated autoloads from leim/quail/lrt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/lrt" '("quail-lrt-update-translation")))
+(register-definition-prefixes "quail/lrt" '("quail-lrt-update-translation"))
 
 ;;;***
 
@@ -27176,14 +27461,14 @@ HELP-TEXT is a text set in 
`hangul-input-method-help-text'.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from leim/quail/sisheng.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/sisheng" '("quail-make-sisheng-rules" "sisheng-")))
+(register-definition-prefixes "quail/sisheng" '("quail-make-sisheng-rules" 
"sisheng-"))
 
 ;;;***
 
 ;;;### (autoloads nil "quail/thai" "leim/quail/thai.el" (0 0 0 0))
 ;;; Generated autoloads from leim/quail/thai.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/thai" '("thai-generate-quail-map")))
+(register-definition-prefixes "quail/thai" '("thai-generate-quail-map"))
 
 ;;;***
 
@@ -27191,7 +27476,7 @@ HELP-TEXT is a text set in 
`hangul-input-method-help-text'.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from leim/quail/tibetan.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/tibetan" '("quail-tib" "tibetan-")))
+(register-definition-prefixes "quail/tibetan" '("quail-tib" "tibetan-"))
 
 ;;;***
 
@@ -27208,14 +27493,14 @@ While this input method is active, the variable
 
 \(fn &optional ARG)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/uni-input" '("ucs-input-")))
+(register-definition-prefixes "quail/uni-input" '("ucs-input-"))
 
 ;;;***
 
 ;;;### (autoloads nil "quail/viqr" "leim/quail/viqr.el" (0 0 0 0))
 ;;; Generated autoloads from leim/quail/viqr.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quail/viqr" '("viet-quail-define-rules")))
+(register-definition-prefixes "quail/viqr" '("viet-quail-define-rules"))
 
 ;;;***
 
@@ -27284,7 +27569,7 @@ The key bindings for `quickurl-list-mode' are:
 (autoload 'quickurl-list "quickurl" "\
 Display `quickurl-list' as a formatted list using `quickurl-list-mode'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"quickurl" '("quickurl-")))
+(register-definition-prefixes "quickurl" '("quickurl-"))
 
 ;;;***
 
@@ -27292,7 +27577,7 @@ Display `quickurl-list' as a formatted list using 
`quickurl-list-mode'." t nil)
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from emacs-lisp/radix-tree.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"radix-tree" '("radix-tree-")))
+(register-definition-prefixes "radix-tree" '("radix-tree-"))
 
 ;;;***
 
@@ -27333,9 +27618,12 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rcirc" '("defun-rcirc-command" "rcirc-" "set-rcirc-" "with-rcirc-")))
+(register-definition-prefixes "rcirc" '("defun-rcirc-command" "rcirc-" 
"set-rcirc-" "with-rcirc-"))
 
 ;;;***
 
@@ -27354,7 +27642,7 @@ in another window, initially containing an empty regexp.
 As you edit the regexp in the \"*RE-Builder*\" buffer, the
 matching parts of the target buffer will be highlighted." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"re-builder" '("re-builder-unload-function" "reb-")))
+(register-definition-prefixes "re-builder" '("re-builder-unload-function" 
"reb-"))
 
 ;;;***
 
@@ -27379,13 +27667,16 @@ disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Recentf mode is enabled, a \"Open Recent\" submenu is
 displayed in the \"File\" menu, containing a list of files that
 were operated on recently, in the most-recently-used order.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"recentf" '("recentf-")))
+(register-definition-prefixes "recentf" '("recentf-"))
 
 ;;;***
 
@@ -27531,25 +27822,28 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Activates the region if needed.  Only lasts until the region is deactivated.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rect" '("apply-on-rectangle" "clear-rectangle-line" "delete-" 
"extract-rectangle-" "killed-rectangle" "ope" "rectangle-" "spaces-string" 
"string-rectangle-")))
+(register-definition-prefixes "rect" '("apply-on-rectangle" 
"clear-rectangle-line" "delete-" "extract-rectangle-" "killed-rectangle" "ope" 
"rectangle-" "spaces-string" "string-rectangle-"))
 
 ;;;***
 
 ;;;### (autoloads nil "refbib" "textmodes/refbib.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/refbib.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"refbib" '("r2b-")))
+(register-definition-prefixes "refbib" '("r2b-"))
 
 ;;;***
 
 ;;;### (autoloads nil "refer" "textmodes/refer.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/refer.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"refer" '("refer-")))
+(register-definition-prefixes "refer" '("refer-"))
 
 ;;;***
 
@@ -27564,6 +27858,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Refill mode is a buffer-local minor mode.  When enabled, the
 current paragraph is refilled as you edit.  Self-inserting
 characters only cause refilling if they would cause
@@ -27573,7 +27870,7 @@ For true \"word wrap\" behavior, use `visual-line-mode' 
instead.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"refill" '("refill-")))
+(register-definition-prefixes "refill" '("refill-"))
 
 ;;;***
 
@@ -27595,6 +27892,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \\<reftex-mode-map>A Table of Contents of the entire (multifile) document with 
browsing
 capabilities is available with `\\[reftex-toc]'.
 
@@ -27629,7 +27929,7 @@ on the menu bar.
 Reset the symbols containing information from buffer scanning.
 This enforces rescanning the buffer on next use." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex" '("reftex-")))
+(register-definition-prefixes "reftex" '("reftex-"))
 
 ;;;***
 
@@ -27637,7 +27937,7 @@ This enforces rescanning the buffer on next use." nil 
nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from textmodes/reftex-auc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex-auc" '("reftex-")))
+(register-definition-prefixes "reftex-auc" '("reftex-"))
 
 ;;;***
 
@@ -27645,7 +27945,7 @@ This enforces rescanning the buffer on next use." nil 
nil)
 ;;;;;;  "textmodes/reftex-cite.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/reftex-cite.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex-cite" '("reftex-")))
+(register-definition-prefixes "reftex-cite" '("reftex-"))
 
 ;;;***
 
@@ -27653,7 +27953,7 @@ This enforces rescanning the buffer on next use." nil 
nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from textmodes/reftex-dcr.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex-dcr" '("reftex-")))
+(register-definition-prefixes "reftex-dcr" '("reftex-"))
 
 ;;;***
 
@@ -27661,7 +27961,7 @@ This enforces rescanning the buffer on next use." nil 
nil)
 ;;;;;;  "textmodes/reftex-global.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/reftex-global.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex-global" '("reftex-")))
+(register-definition-prefixes "reftex-global" '("reftex-"))
 
 ;;;***
 
@@ -27669,7 +27969,7 @@ This enforces rescanning the buffer on next use." nil 
nil)
 ;;;;;;  "textmodes/reftex-index.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/reftex-index.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex-index" '("reftex-")))
+(register-definition-prefixes "reftex-index" '("reftex-"))
 
 ;;;***
 
@@ -27677,7 +27977,7 @@ This enforces rescanning the buffer on next use." nil 
nil)
 ;;;;;;  "textmodes/reftex-parse.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/reftex-parse.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex-parse" '("reftex-")))
+(register-definition-prefixes "reftex-parse" '("reftex-"))
 
 ;;;***
 
@@ -27685,7 +27985,7 @@ This enforces rescanning the buffer on next use." nil 
nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from textmodes/reftex-ref.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex-ref" '("reftex-")))
+(register-definition-prefixes "reftex-ref" '("reftex-"))
 
 ;;;***
 
@@ -27693,7 +27993,7 @@ This enforces rescanning the buffer on next use." nil 
nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from textmodes/reftex-sel.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex-sel" '("reftex-")))
+(register-definition-prefixes "reftex-sel" '("reftex-"))
 
 ;;;***
 
@@ -27701,7 +28001,7 @@ This enforces rescanning the buffer on next use." nil 
nil)
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from textmodes/reftex-toc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex-toc" '("reftex-")))
+(register-definition-prefixes "reftex-toc" '("reftex-"))
 
 ;;;***
 
@@ -27713,7 +28013,7 @@ This enforces rescanning the buffer on next use." nil 
nil)
 (put 'reftex-level-indent 'safe-local-variable 'integerp)
 (put 'reftex-guess-label-type 'safe-local-variable (lambda (x) (memq x '(nil 
t))))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reftex-vars" '("reftex-")))
+(register-definition-prefixes "reftex-vars" '("reftex-"))
 
 ;;;***
 
@@ -27777,7 +28077,7 @@ This means the number of non-shy regexp grouping 
constructs
 
 \(fn REGEXP)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"regexp-opt" '("regexp-opt-")))
+(register-definition-prefixes "regexp-opt" '("regexp-opt-"))
 
 ;;;***
 
@@ -27785,14 +28085,14 @@ This means the number of non-shy regexp grouping 
constructs
 ;;; Generated autoloads from emacs-lisp/regi.el
 (push (purecopy '(regi 1 8)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"regi" '("regi-")))
+(register-definition-prefixes "regi" '("regi-"))
 
 ;;;***
 
 ;;;### (autoloads nil "registry" "registry.el" (0 0 0 0))
 ;;; Generated autoloads from registry.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"registry" '("registry-")))
+(register-definition-prefixes "registry" '("registry-"))
 
 ;;;***
 
@@ -27843,7 +28143,7 @@ to turn the *scratch* buffer into your notes buffer.
 
 \(fn &optional SWITCH-TO)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"remember" '("remember-")))
+(register-definition-prefixes "remember" '("remember-"))
 
 ;;;***
 
@@ -27867,7 +28167,7 @@ recently executed command not bound to an input event\".
 
 \(fn REPEAT-ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"repeat" '("repeat-")))
+(register-definition-prefixes "repeat" '("repeat-"))
 
 ;;;***
 
@@ -27900,7 +28200,7 @@ mail-sending package is used for editing and sending 
the message.
 
 \(fn ADDRESS PKGNAME VARLIST &optional PRE-HOOKS POST-HOOKS SALUTATION)" nil 
nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reporter" '("reporter-")))
+(register-definition-prefixes "reporter" '("reporter-"))
 
 ;;;***
 
@@ -27928,7 +28228,7 @@ first comment line visible (if point is in a comment).
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reposition" '("repos-count-screen-lines")))
+(register-definition-prefixes "reposition" '("repos-count-screen-lines"))
 
 ;;;***
 
@@ -27943,6 +28243,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Reveal mode is a buffer-local minor mode.  When enabled, it
 reveals invisible text around point.
 
@@ -27967,9 +28270,12 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"reveal" '("reveal-")))
+(register-definition-prefixes "reveal" '("reveal-"))
 
 ;;;***
 
@@ -27977,49 +28283,49 @@ enable the mode if ARG is omitted or nil, and toggle 
it if ARG is
 ;;;;;;  0))
 ;;; Generated autoloads from international/rfc1843.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rfc1843" '("rfc1843-")))
+(register-definition-prefixes "rfc1843" '("rfc1843-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rfc2045" "mail/rfc2045.el" (0 0 0 0))
 ;;; Generated autoloads from mail/rfc2045.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rfc2045" '("rfc2045-encode-string")))
+(register-definition-prefixes "rfc2045" '("rfc2045-encode-string"))
 
 ;;;***
 
 ;;;### (autoloads nil "rfc2047" "mail/rfc2047.el" (0 0 0 0))
 ;;; Generated autoloads from mail/rfc2047.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rfc2047" '("rfc2047-")))
+(register-definition-prefixes "rfc2047" '("rfc2047-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rfc2104" "net/rfc2104.el" (0 0 0 0))
 ;;; Generated autoloads from net/rfc2104.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rfc2104" '("rfc2104-")))
+(register-definition-prefixes "rfc2104" '("rfc2104-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rfc2231" "mail/rfc2231.el" (0 0 0 0))
 ;;; Generated autoloads from mail/rfc2231.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rfc2231" '("rfc2231-")))
+(register-definition-prefixes "rfc2231" '("rfc2231-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rfc2368" "mail/rfc2368.el" (0 0 0 0))
 ;;; Generated autoloads from mail/rfc2368.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rfc2368" '("rfc2368-")))
+(register-definition-prefixes "rfc2368" '("rfc2368-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rfc822" "mail/rfc822.el" (0 0 0 0))
 ;;; Generated autoloads from mail/rfc822.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rfc822" '("rfc822-")))
+(register-definition-prefixes "rfc822" '("rfc822-"))
 
 ;;;***
 
@@ -28036,7 +28342,7 @@ Make a ring that can contain SIZE elements.
 
 \(fn SIZE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ring" '("ring-")))
+(register-definition-prefixes "ring" '("ring-"))
 
 ;;;***
 
@@ -28082,7 +28388,7 @@ variable.
 
 \(fn INPUT-ARGS &optional BUFFER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rlogin" '("rlogin-")))
+(register-definition-prefixes "rlogin" '("rlogin-"))
 
 ;;;***
 
@@ -28279,7 +28585,7 @@ Set PASSWORD to be used for retrieving mail from a POP 
or IMAP server.
 
 \(fn PASSWORD)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rmail" '("mail-" "rmail-")))
+(register-definition-prefixes "rmail" '("mail-" "rmail-"))
 
 ;;;***
 
@@ -28287,7 +28593,7 @@ Set PASSWORD to be used for retrieving mail from a POP 
or IMAP server.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from mail/rmail-spam-filter.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rmail-spam-filter" '("rmail-" "rsf-")))
+(register-definition-prefixes "rmail-spam-filter" '("rmail-" "rsf-"))
 
 ;;;***
 
@@ -28295,7 +28601,7 @@ Set PASSWORD to be used for retrieving mail from a POP 
or IMAP server.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from mail/rmailedit.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rmailedit" '("rmail-")))
+(register-definition-prefixes "rmailedit" '("rmail-"))
 
 ;;;***
 
@@ -28303,7 +28609,7 @@ Set PASSWORD to be used for retrieving mail from a POP 
or IMAP server.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from mail/rmailkwd.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rmailkwd" '("rmail-")))
+(register-definition-prefixes "rmailkwd" '("rmail-"))
 
 ;;;***
 
@@ -28311,7 +28617,7 @@ Set PASSWORD to be used for retrieving mail from a POP 
or IMAP server.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from mail/rmailmm.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rmailmm" '("rmail-")))
+(register-definition-prefixes "rmailmm" '("rmail-"))
 
 ;;;***
 
@@ -28383,7 +28689,7 @@ than appending to it.  Deletes the message after 
writing if
 
 \(fn FILE-NAME)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rmailout" '("rmail-")))
+(register-definition-prefixes "rmailout" '("rmail-"))
 
 ;;;***
 
@@ -28391,7 +28697,7 @@ than appending to it.  Deletes the message after 
writing if
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from mail/rmailsort.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rmailsort" '("rmail-")))
+(register-definition-prefixes "rmailsort" '("rmail-"))
 
 ;;;***
 
@@ -28399,7 +28705,7 @@ than appending to it.  Deletes the message after 
writing if
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from mail/rmailsum.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rmailsum" '("rmail-")))
+(register-definition-prefixes "rmailsum" '("rmail-"))
 
 ;;;***
 
@@ -28452,35 +28758,35 @@ Return a pattern.
 
 \(fn FILENAME)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-cmpct" '("rng-")))
+(register-definition-prefixes "rng-cmpct" '("rng-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rng-dt" "nxml/rng-dt.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-dt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-dt" '("rng-dt-")))
+(register-definition-prefixes "rng-dt" '("rng-dt-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rng-loc" "nxml/rng-loc.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-loc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-loc" '("rng-")))
+(register-definition-prefixes "rng-loc" '("rng-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rng-maint" "nxml/rng-maint.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-maint.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-maint" '("rng-")))
+(register-definition-prefixes "rng-maint" '("rng-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rng-match" "nxml/rng-match.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-match.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-match" '("rng-")))
+(register-definition-prefixes "rng-match" '("rng-"))
 
 ;;;***
 
@@ -28492,35 +28798,35 @@ Initialize `nxml-mode' to take advantage of 
`rng-validate-mode'.
 This is typically called from `nxml-mode-hook'.
 Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-nxml" '("rng-")))
+(register-definition-prefixes "rng-nxml" '("rng-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rng-parse" "nxml/rng-parse.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-parse.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-parse" '("rng-parse-")))
+(register-definition-prefixes "rng-parse" '("rng-parse-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rng-pttrn" "nxml/rng-pttrn.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-pttrn.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-pttrn" '("rng-")))
+(register-definition-prefixes "rng-pttrn" '("rng-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rng-uri" "nxml/rng-uri.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-uri.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-uri" '("rng-")))
+(register-definition-prefixes "rng-uri" '("rng-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rng-util" "nxml/rng-util.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-util" '("rng-")))
+(register-definition-prefixes "rng-util" '("rng-"))
 
 ;;;***
 
@@ -28535,6 +28841,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Checks whether the buffer is a well-formed XML 1.0 document,
 conforming to the XML Namespaces Recommendation and valid against a
 RELAX NG schema.  The mode-line indicates whether it is or not.  Any
@@ -28557,7 +28866,7 @@ to use for finding the schema.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-valid" '("rng-")))
+(register-definition-prefixes "rng-valid" '("rng-"))
 
 ;;;***
 
@@ -28586,7 +28895,7 @@ must be equal.
 
 \(fn NAME PARAMS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rng-xsd" '("rng-xsd-" "xsd-duration-reference-dates")))
+(register-definition-prefixes "rng-xsd" '("rng-xsd-" 
"xsd-duration-reference-dates"))
 
 ;;;***
 
@@ -28620,7 +28929,7 @@ Start using robin package NAME, which is a string.
 
 \(fn NAME)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"robin" '("robin-")))
+(register-definition-prefixes "robin" '("robin-"))
 
 ;;;***
 
@@ -28658,7 +28967,7 @@ See also `toggle-rot13-mode'." t nil)
 (autoload 'toggle-rot13-mode "rot13" "\
 Toggle the use of ROT13 encoding for the current window." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rot13" '("rot13-")))
+(register-definition-prefixes "rot13" '("rot13-"))
 
 ;;;***
 
@@ -28686,20 +28995,23 @@ disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When ReST minor mode is enabled, the ReST mode keybindings
 are installed on top of the major mode bindings.  Use this
 for modes derived from Text mode, like Mail mode.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rst" '("rst-")))
+(register-definition-prefixes "rst" '("rst-"))
 
 ;;;***
 
 ;;;### (autoloads nil "rtree" "rtree.el" (0 0 0 0))
 ;;; Generated autoloads from rtree.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"rtree" '("rtree-")))
+(register-definition-prefixes "rtree" '("rtree-"))
 
 ;;;***
 
@@ -28717,7 +29029,7 @@ Major mode for editing Ruby code.
 
 (dolist (name (list "ruby" "rbx" "jruby" "ruby1.9" "ruby1.8")) (add-to-list 
'interpreter-mode-alist (cons (purecopy name) 'ruby-mode)))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ruby-mode" '("ruby-")))
+(register-definition-prefixes "ruby-mode" '("ruby-"))
 
 ;;;***
 
@@ -28736,9 +29048,12 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ruler-mode" '("ruler-")))
+(register-definition-prefixes "ruler-mode" '("ruler-"))
 
 ;;;***
 
@@ -28932,28 +29247,28 @@ For more details, see Info node `(elisp) Extending 
Rx'.
 
 (function-put 'rx-define 'lisp-indent-function 'defun)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rx" 
'("rx-")))
+(register-definition-prefixes "rx" '("rx-"))
 
 ;;;***
 
 ;;;### (autoloads nil "sasl" "net/sasl.el" (0 0 0 0))
 ;;; Generated autoloads from net/sasl.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sasl" '("sasl-")))
+(register-definition-prefixes "sasl" '("sasl-"))
 
 ;;;***
 
 ;;;### (autoloads nil "sasl-cram" "net/sasl-cram.el" (0 0 0 0))
 ;;; Generated autoloads from net/sasl-cram.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sasl-cram" '("sasl-cram-md5-")))
+(register-definition-prefixes "sasl-cram" '("sasl-cram-md5-"))
 
 ;;;***
 
 ;;;### (autoloads nil "sasl-digest" "net/sasl-digest.el" (0 0 0 0))
 ;;; Generated autoloads from net/sasl-digest.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sasl-digest" '("sasl-digest-md5-")))
+(register-definition-prefixes "sasl-digest" '("sasl-digest-md5-"))
 
 ;;;***
 
@@ -28961,7 +29276,7 @@ For more details, see Info node `(elisp) Extending Rx'.
 ;;; Generated autoloads from net/sasl-ntlm.el
 (push (purecopy '(sasl 1 0)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sasl-ntlm" '("sasl-ntlm-")))
+(register-definition-prefixes "sasl-ntlm" '("sasl-ntlm-"))
 
 ;;;***
 
@@ -28969,7 +29284,7 @@ For more details, see Info node `(elisp) Extending Rx'.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from net/sasl-scram-rfc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sasl-scram-rfc" '("sasl-scram-")))
+(register-definition-prefixes "sasl-scram-rfc" '("sasl-scram-"))
 
 ;;;***
 
@@ -28977,7 +29292,7 @@ For more details, see Info node `(elisp) Extending Rx'.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from net/sasl-scram-sha256.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sasl-scram-sha256" '("sasl-scram-sha")))
+(register-definition-prefixes "sasl-scram-sha256" '("sasl-scram-sha"))
 
 ;;;***
 
@@ -29003,6 +29318,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Savehist mode is enabled, minibuffer history is saved
 to `savehist-file' periodically and when exiting Emacs.  When
 Savehist mode is enabled for the first time in an Emacs session,
@@ -29031,7 +29349,7 @@ histories, which is probably undesirable.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"savehist" '("savehist-")))
+(register-definition-prefixes "savehist" '("savehist-"))
 
 ;;;***
 
@@ -29058,6 +29376,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
 (autoload 'save-place-local-mode "saveplace" "\
@@ -29071,6 +29392,9 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 To save places automatically in all files, put this in your init
 file:
 
@@ -29078,7 +29402,7 @@ file:
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"saveplace" '("load-save-place-alist-from-file" "save-place")))
+(register-definition-prefixes "saveplace" '("load-save-place-alist-from-file" 
"save-place"))
 
 ;;;***
 
@@ -29119,7 +29443,7 @@ that variable's value is a string.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"scheme" '("dsssl-" "scheme-")))
+(register-definition-prefixes "scheme" '("dsssl-" "scheme-"))
 
 ;;;***
 
@@ -29134,7 +29458,7 @@ This mode is an extended emacs-lisp mode.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"score-mode" '("gnus-score-" "score-mode-")))
+(register-definition-prefixes "score-mode" '("gnus-score-" "score-mode-"))
 
 ;;;***
 
@@ -29159,19 +29483,22 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Scroll-All mode is enabled, scrolling commands invoked in
 one window apply to all visible windows in the same frame.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"scroll-all" '("scroll-all-")))
+(register-definition-prefixes "scroll-all" '("scroll-all-"))
 
 ;;;***
 
 ;;;### (autoloads nil "scroll-bar" "scroll-bar.el" (0 0 0 0))
 ;;; Generated autoloads from scroll-bar.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"scroll-bar" '("get-scroll-bar-mode" "horizontal-scroll-bar" 
"previous-scroll-bar-mode" "scroll-bar-" "set-scroll-bar-mode" "toggle-")))
+(register-definition-prefixes "scroll-bar" '("get-scroll-bar-mode" 
"horizontal-scroll-bar" "previous-scroll-bar-mode" "scroll-bar-" 
"set-scroll-bar-mode" "toggle-"))
 
 ;;;***
 
@@ -29186,6 +29513,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When enabled, keys that normally move point by line or paragraph
 will scroll the buffer by the respective amount of lines instead
 and point will be kept vertically fixed relative to window
@@ -29196,7 +29526,7 @@ MS-Windows systems if `w32-scroll-lock-modifier' is 
non-nil.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"scroll-lock" '("scroll-lock-")))
+(register-definition-prefixes "scroll-lock" '("scroll-lock-"))
 
 ;;;***
 
@@ -29205,7 +29535,7 @@ MS-Windows systems if `w32-scroll-lock-modifier' is 
non-nil.
 (when (featurep 'dbusbind)
  (autoload 'secrets-show-secrets "secrets" nil t))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"secrets" '("secrets-")))
+(register-definition-prefixes "secrets" '("secrets-"))
 
 ;;;***
 
@@ -29257,6 +29587,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 In Semantic mode, Emacs parses the buffers you visit for their
 semantic content.  This information is used by a variety of
 auxiliary minor modes, listed in `semantic-default-submodes';
@@ -29267,7 +29600,7 @@ Semantic mode.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic" '("bovinate" "semantic-")))
+(register-definition-prefixes "semantic" '("bovinate" "semantic-"))
 
 ;;;***
 
@@ -29275,7 +29608,7 @@ Semantic mode.
 ;;;;;;  "cedet/semantic/analyze.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/analyze.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/analyze" '("semantic-a")))
+(register-definition-prefixes "semantic/analyze" '("semantic-a"))
 
 ;;;***
 
@@ -29283,7 +29616,7 @@ Semantic mode.
 ;;;;;;  "cedet/semantic/analyze/complete.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/analyze/complete.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/analyze/complete" '("semantic-analyze-")))
+(register-definition-prefixes "semantic/analyze/complete" 
'("semantic-analyze-"))
 
 ;;;***
 
@@ -29291,7 +29624,7 @@ Semantic mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/analyze/debug.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/analyze/debug" '("semantic-analyze")))
+(register-definition-prefixes "semantic/analyze/debug" '("semantic-analyze"))
 
 ;;;***
 
@@ -29299,7 +29632,7 @@ Semantic mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/analyze/fcn.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/analyze/fcn" '("semantic-analyze-")))
+(register-definition-prefixes "semantic/analyze/fcn" '("semantic-analyze-"))
 
 ;;;***
 
@@ -29307,7 +29640,7 @@ Semantic mode.
 ;;;;;;  "cedet/semantic/analyze/refs.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/analyze/refs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/analyze/refs" '("semantic-")))
+(register-definition-prefixes "semantic/analyze/refs" '("semantic-"))
 
 ;;;***
 
@@ -29315,7 +29648,7 @@ Semantic mode.
 ;;;;;;  "cedet/semantic/bovine.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/bovine.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/bovine" '("semantic-")))
+(register-definition-prefixes "semantic/bovine" '("semantic-"))
 
 ;;;***
 
@@ -29323,7 +29656,7 @@ Semantic mode.
 ;;;;;;  "cedet/semantic/bovine/c.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/bovine/c.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/bovine/c" '("c-mode" "semantic")))
+(register-definition-prefixes "semantic/bovine/c" '("c-mode" "semantic"))
 
 ;;;***
 
@@ -29331,7 +29664,7 @@ Semantic mode.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/bovine/debug.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/bovine/debug" '("semantic-")))
+(register-definition-prefixes "semantic/bovine/debug" '("semantic-"))
 
 ;;;***
 
@@ -29339,7 +29672,7 @@ Semantic mode.
 ;;;;;;  "cedet/semantic/bovine/el.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/bovine/el.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/bovine/el" '("emacs-lisp-mode" "semantic-")))
+(register-definition-prefixes "semantic/bovine/el" '("emacs-lisp-mode" 
"semantic-"))
 
 ;;;***
 
@@ -29347,7 +29680,7 @@ Semantic mode.
 ;;;;;;  "cedet/semantic/bovine/gcc.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/bovine/gcc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/bovine/gcc" '("semantic-")))
+(register-definition-prefixes "semantic/bovine/gcc" '("semantic-"))
 
 ;;;***
 
@@ -29360,7 +29693,7 @@ Major mode for editing Bovine grammars.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/bovine/grammar" '("bovine-")))
+(register-definition-prefixes "semantic/bovine/grammar" '("bovine-"))
 
 ;;;***
 
@@ -29368,7 +29701,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/bovine/make.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/bovine/make.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/bovine/make" '("makefile-mode" "semantic-")))
+(register-definition-prefixes "semantic/bovine/make" '("makefile-mode" 
"semantic-"))
 
 ;;;***
 
@@ -29376,7 +29709,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/bovine/scm.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/bovine/scm.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/bovine/scm" '("semantic-")))
+(register-definition-prefixes "semantic/bovine/scm" '("semantic-"))
 
 ;;;***
 
@@ -29384,7 +29717,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/chart.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/chart" '("semantic-chart-")))
+(register-definition-prefixes "semantic/chart" '("semantic-chart-"))
 
 ;;;***
 
@@ -29392,7 +29725,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/complete.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/complete.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/complete" '("semantic-")))
+(register-definition-prefixes "semantic/complete" '("semantic-"))
 
 ;;;***
 
@@ -29400,7 +29733,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/ctxt.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/ctxt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/ctxt" '("semantic-")))
+(register-definition-prefixes "semantic/ctxt" '("semantic-"))
 
 ;;;***
 
@@ -29408,7 +29741,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/db.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db" '("semanticdb-")))
+(register-definition-prefixes "semantic/db" '("semanticdb-"))
 
 ;;;***
 
@@ -29416,7 +29749,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db-debug.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db-debug" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-debug" '("semanticdb-"))
 
 ;;;***
 
@@ -29424,7 +29757,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db-ebrowse.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db-ebrowse" '("c++-mode" "semanticdb-")))
+(register-definition-prefixes "semantic/db-ebrowse" '("c++-mode" 
"semanticdb-"))
 
 ;;;***
 
@@ -29432,7 +29765,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db-el.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db-el" '("emacs-lisp-mode" "semanticdb-")))
+(register-definition-prefixes "semantic/db-el" '("emacs-lisp-mode" 
"semanticdb-"))
 
 ;;;***
 
@@ -29440,7 +29773,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/db-file.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db-file.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db-file" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-file" '("semanticdb-"))
 
 ;;;***
 
@@ -29448,7 +29781,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/db-find.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db-find.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db-find" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-find" '("semanticdb-"))
 
 ;;;***
 
@@ -29456,7 +29789,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/db-global.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db-global.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db-global" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-global" '("semanticdb-"))
 
 ;;;***
 
@@ -29464,7 +29797,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db-javascript.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db-javascript" '("javascript-mode" "semanticdb-")))
+(register-definition-prefixes "semantic/db-javascript" '("javascript-mode" 
"semanticdb-"))
 
 ;;;***
 
@@ -29472,7 +29805,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/db-mode.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db-mode.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db-mode" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-mode" '("semanticdb-"))
 
 ;;;***
 
@@ -29480,7 +29813,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db-ref.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db-ref" '("semanticdb-ref-")))
+(register-definition-prefixes "semantic/db-ref" '("semanticdb-ref-"))
 
 ;;;***
 
@@ -29488,7 +29821,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/db-typecache.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/db-typecache.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/db-typecache" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-typecache" '("semanticdb-"))
 
 ;;;***
 
@@ -29496,7 +29829,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/debug.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/debug.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/debug" '("semantic-debug-")))
+(register-definition-prefixes "semantic/debug" '("semantic-debug-"))
 
 ;;;***
 
@@ -29504,7 +29837,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/decorate.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/decorate" '("semantic-")))
+(register-definition-prefixes "semantic/decorate" '("semantic-"))
 
 ;;;***
 
@@ -29512,7 +29845,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/decorate/include.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/decorate/include.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/decorate/include" '("semantic-decoration-")))
+(register-definition-prefixes "semantic/decorate/include" 
'("semantic-decoration-"))
 
 ;;;***
 
@@ -29520,7 +29853,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/decorate/mode.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/decorate/mode.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/decorate/mode" '("define-semantic-decoration-style" "semantic-")))
+(register-definition-prefixes "semantic/decorate/mode" 
'("define-semantic-decoration-style" "semantic-"))
 
 ;;;***
 
@@ -29528,7 +29861,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/dep.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/dep.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/dep" '("defcustom-mode-local-semantic-dependency-system-include-path" 
"semantic-")))
+(register-definition-prefixes "semantic/dep" 
'("defcustom-mode-local-semantic-dependency-system-include-path" "semantic-"))
 
 ;;;***
 
@@ -29536,7 +29869,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/doc.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/doc.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/doc" '("semantic-doc")))
+(register-definition-prefixes "semantic/doc" '("semantic-doc"))
 
 ;;;***
 
@@ -29544,7 +29877,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/ede-grammar.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/ede-grammar" '("semantic-ede-")))
+(register-definition-prefixes "semantic/ede-grammar" '("semantic-ede-"))
 
 ;;;***
 
@@ -29552,7 +29885,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/edit.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/edit.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/edit" '("semantic-")))
+(register-definition-prefixes "semantic/edit" '("semantic-"))
 
 ;;;***
 
@@ -29560,7 +29893,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/find.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/find.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/find" '("semantic-")))
+(register-definition-prefixes "semantic/find" '("semantic-"))
 
 ;;;***
 
@@ -29568,7 +29901,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/format.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/format.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/format" '("semantic-")))
+(register-definition-prefixes "semantic/format" '("semantic-"))
 
 ;;;***
 
@@ -29576,7 +29909,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  0))
 ;;; Generated autoloads from cedet/semantic/fw.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/fw" '("semantic")))
+(register-definition-prefixes "semantic/fw" '("semantic"))
 
 ;;;***
 
@@ -29584,7 +29917,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/grammar.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/grammar" '("semantic-")))
+(register-definition-prefixes "semantic/grammar" '("semantic-"))
 
 ;;;***
 
@@ -29592,7 +29925,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/grammar-wy.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/grammar-wy" '("semantic-grammar-wy--")))
+(register-definition-prefixes "semantic/grammar-wy" '("semantic-grammar-wy--"))
 
 ;;;***
 
@@ -29600,7 +29933,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/html.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/html.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/html" '("semantic-")))
+(register-definition-prefixes "semantic/html" '("semantic-"))
 
 ;;;***
 
@@ -29608,7 +29941,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/ia.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/ia.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/ia" '("semantic-ia-")))
+(register-definition-prefixes "semantic/ia" '("semantic-ia-"))
 
 ;;;***
 
@@ -29616,7 +29949,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/ia-sb.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/ia-sb.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/ia-sb" '("semantic-ia-s")))
+(register-definition-prefixes "semantic/ia-sb" '("semantic-ia-s"))
 
 ;;;***
 
@@ -29624,7 +29957,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/idle.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/idle.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/idle" '("define-semantic-idle-service" 
"global-semantic-idle-summary-mode" "semantic-")))
+(register-definition-prefixes "semantic/idle" '("define-semantic-idle-service" 
"global-semantic-idle-summary-mode" "semantic-"))
 
 ;;;***
 
@@ -29632,7 +29965,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/imenu.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/imenu.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/imenu" '("semantic-")))
+(register-definition-prefixes "semantic/imenu" '("semantic-"))
 
 ;;;***
 
@@ -29640,7 +29973,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from cedet/semantic/java.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/java" '("semantic-")))
+(register-definition-prefixes "semantic/java" '("semantic-"))
 
 ;;;***
 
@@ -29648,7 +29981,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/lex.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/lex.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/lex" '("define-lex" "semantic-")))
+(register-definition-prefixes "semantic/lex" '("define-lex" "semantic-"))
 
 ;;;***
 
@@ -29656,7 +29989,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/lex-spp.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/lex-spp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/lex-spp" '("define-lex-spp-" "semantic-lex-")))
+(register-definition-prefixes "semantic/lex-spp" '("define-lex-spp-" 
"semantic-lex-"))
 
 ;;;***
 
@@ -29664,7 +29997,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/mru-bookmark.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/mru-bookmark.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/mru-bookmark" '("global-semantic-mru-bookmark-mode" "semantic-")))
+(register-definition-prefixes "semantic/mru-bookmark" 
'("global-semantic-mru-bookmark-mode" "semantic-"))
 
 ;;;***
 
@@ -29672,7 +30005,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  0))
 ;;; Generated autoloads from cedet/semantic/sb.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/sb" '("semantic-sb-")))
+(register-definition-prefixes "semantic/sb" '("semantic-sb-"))
 
 ;;;***
 
@@ -29680,7 +30013,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/scope.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/scope.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/scope" '("semantic-")))
+(register-definition-prefixes "semantic/scope" '("semantic-"))
 
 ;;;***
 
@@ -29688,7 +30021,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/senator.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/senator.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/senator" '("semantic-up-reference" "senator-")))
+(register-definition-prefixes "semantic/senator" '("semantic-up-reference" 
"senator-"))
 
 ;;;***
 
@@ -29696,7 +30029,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/sort.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/sort.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/sort" '("semantic-")))
+(register-definition-prefixes "semantic/sort" '("semantic-"))
 
 ;;;***
 
@@ -29704,7 +30037,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/symref.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/symref.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/symref" '("semantic-symref-")))
+(register-definition-prefixes "semantic/symref" '("semantic-symref-"))
 
 ;;;***
 
@@ -29712,7 +30045,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/symref/cscope.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/symref/cscope.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/symref/cscope" '("semantic-symref-cscope--line-re")))
+(register-definition-prefixes "semantic/symref/cscope" 
'("semantic-symref-cscope--line-re"))
 
 ;;;***
 
@@ -29720,7 +30053,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/symref/filter.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/symref/filter" '("semantic-symref-")))
+(register-definition-prefixes "semantic/symref/filter" '("semantic-symref-"))
 
 ;;;***
 
@@ -29728,7 +30061,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/symref/global.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/symref/global.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/symref/global" '("semantic-symref-global--line-re")))
+(register-definition-prefixes "semantic/symref/global" 
'("semantic-symref-global--line-re"))
 
 ;;;***
 
@@ -29736,7 +30069,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/symref/grep.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/symref/grep.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/symref/grep" '("semantic-symref-")))
+(register-definition-prefixes "semantic/symref/grep" '("semantic-symref-"))
 
 ;;;***
 
@@ -29744,7 +30077,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/symref/idutils.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/symref/idutils.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/symref/idutils" '("semantic-symref-idutils--line-re")))
+(register-definition-prefixes "semantic/symref/idutils" 
'("semantic-symref-idutils--line-re"))
 
 ;;;***
 
@@ -29752,7 +30085,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/symref/list.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/symref/list.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/symref/list" '("semantic-symref-")))
+(register-definition-prefixes "semantic/symref/list" '("semantic-symref-"))
 
 ;;;***
 
@@ -29760,7 +30093,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/tag.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/tag.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/tag" '("semantic-")))
+(register-definition-prefixes "semantic/tag" '("semantic-"))
 
 ;;;***
 
@@ -29768,7 +30101,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/tag-file.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/tag-file.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/tag-file" '("semantic-prototype-file")))
+(register-definition-prefixes "semantic/tag-file" '("semantic-prototype-file"))
 
 ;;;***
 
@@ -29776,7 +30109,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/tag-ls.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/tag-ls.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/tag-ls" '("semantic-")))
+(register-definition-prefixes "semantic/tag-ls" '("semantic-"))
 
 ;;;***
 
@@ -29784,7 +30117,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/tag-write.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/tag-write.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/tag-write" '("semantic-tag-write-")))
+(register-definition-prefixes "semantic/tag-write" '("semantic-tag-write-"))
 
 ;;;***
 
@@ -29792,7 +30125,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/texi.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/texi.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/texi" '("semantic-")))
+(register-definition-prefixes "semantic/texi" '("semantic-"))
 
 ;;;***
 
@@ -29800,7 +30133,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from cedet/semantic/util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/util" '("semantic-")))
+(register-definition-prefixes "semantic/util" '("semantic-"))
 
 ;;;***
 
@@ -29808,7 +30141,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  "cedet/semantic/util-modes.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/util-modes.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/util-modes" '("semantic-")))
+(register-definition-prefixes "semantic/util-modes" '("semantic-"))
 
 ;;;***
 
@@ -29816,7 +30149,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/wisent.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/wisent" '("define-wisent-lexer" "wisent-")))
+(register-definition-prefixes "semantic/wisent" '("define-wisent-lexer" 
"wisent-"))
 
 ;;;***
 
@@ -29824,7 +30157,7 @@ Major mode for editing Bovine grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/wisent/comp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/wisent/comp" '("wisent-")))
+(register-definition-prefixes "semantic/wisent/comp" '("wisent-"))
 
 ;;;***
 
@@ -29837,7 +30170,7 @@ Major mode for editing Wisent grammars.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/wisent/grammar" '("wisent-")))
+(register-definition-prefixes "semantic/wisent/grammar" '("wisent-"))
 
 ;;;***
 
@@ -29845,7 +30178,7 @@ Major mode for editing Wisent grammars.
 ;;;;;;  "cedet/semantic/wisent/java-tags.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/wisent/java-tags.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/wisent/java-tags" '("semantic-" "wisent-java-parse-error")))
+(register-definition-prefixes "semantic/wisent/java-tags" '("semantic-" 
"wisent-java-parse-error"))
 
 ;;;***
 
@@ -29853,7 +30186,7 @@ Major mode for editing Wisent grammars.
 ;;;;;;  "cedet/semantic/wisent/javascript.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/wisent/javascript.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/wisent/javascript" '("semantic-" "wisent-javascript-jv-expand-tag")))
+(register-definition-prefixes "semantic/wisent/javascript" '("semantic-" 
"wisent-javascript-jv-expand-tag"))
 
 ;;;***
 
@@ -29861,7 +30194,7 @@ Major mode for editing Wisent grammars.
 ;;;;;;  "cedet/semantic/wisent/python.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/wisent/python.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/wisent/python" '("semantic-" "wisent-python-")))
+(register-definition-prefixes "semantic/wisent/python" '("semantic-" 
"wisent-python-"))
 
 ;;;***
 
@@ -29869,7 +30202,7 @@ Major mode for editing Wisent grammars.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/wisent/wisent.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"semantic/wisent/wisent" '("$action" "$nterm" "$region" "wisent-")))
+(register-definition-prefixes "semantic/wisent/wisent" '("$action" "$nterm" 
"$region" "wisent-"))
 
 ;;;***
 
@@ -30151,13 +30484,13 @@ Like `mail' command, but display mail buffer in 
another frame.
 
 \(fn &optional NOERASE TO SUBJECT IN-REPLY-TO CC REPLYBUFFER SENDACTIONS)" t 
nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sendmail" '("mail-" "sendmail-")))
+(register-definition-prefixes "sendmail" '("mail-" "sendmail-"))
 
 ;;;***
 
 ;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/seq.el
-(push (purecopy '(seq 2 21)) package--builtin-versions)
+(push (purecopy '(seq 2 22)) package--builtin-versions)
 
 (autoload 'seq-take "seq" "\
 Take the first N elements of SEQUENCE and return the result.
@@ -30224,7 +30557,13 @@ Equality is defined by TESTFN if non-nil or by `equal' 
if nil.
 
 \(fn SEQUENCE ELT &optional TESTFN)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"seq" '("seq-")))
+(autoload 'seq-max "seq" "\
+Return the largest element of SEQUENCE.
+SEQUENCE must be a sequence of numbers or markers.
+
+\(fn SEQUENCE)" nil nil)
+
+(register-definition-prefixes "seq" '("seq-"))
 
 ;;;***
 
@@ -30284,6 +30623,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Server mode runs a process that accepts commands from the
 `emacsclient' program.  See Info node `Emacs server' and
 `server-start' for details.
@@ -30299,7 +30641,7 @@ only these files will be asked to be saved.
 
 \(fn ARG)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"server" '("server-")))
+(register-definition-prefixes "server" '("server-"))
 
 ;;;***
 
@@ -30343,7 +30685,7 @@ These are active only in the minibuffer, when entering 
or editing a
 formula:
 \\{ses-mode-edit-map}" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ses" '("ses")))
+(register-definition-prefixes "ses" '("ses"))
 
 ;;;***
 
@@ -30411,7 +30753,7 @@ To work around that, do:
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sgml-mode" '("html-" "sgml-")))
+(register-definition-prefixes "sgml-mode" '("html-" "sgml-"))
 
 ;;;***
 
@@ -30477,7 +30819,7 @@ with your script for an edit-interpret-debug cycle.
 
 (defalias 'shell-script-mode 'sh-mode)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sh-script" '("sh-")))
+(register-definition-prefixes "sh-script" '("sh-"))
 
 ;;;***
 
@@ -30528,7 +30870,7 @@ function, `load-path-shadows-find'.
 
 \(fn &optional STRINGP)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"shadow" '("load-path-shadows-")))
+(register-definition-prefixes "shadow" '("load-path-shadows-"))
 
 ;;;***
 
@@ -30562,7 +30904,7 @@ function).  Each site can be either a hostname or the 
name of a cluster (see
 (autoload 'shadow-initialize "shadowfile" "\
 Set up file shadowing." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"shadowfile" '("shadow")))
+(register-definition-prefixes "shadowfile" '("shadow"))
 
 ;;;***
 
@@ -30614,7 +30956,7 @@ Make the shell buffer the current buffer, and return it.
 
 \(fn &optional BUFFER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"shell" '("dirs" "explicit-" "shell-")))
+(register-definition-prefixes "shell" '("dirs" "explicit-" "shell-"))
 
 ;;;***
 
@@ -30633,14 +30975,14 @@ DOM should be a parse tree as generated by
 
 \(fn DOM)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"shr" '("shr-" "svg--wrap-svg")))
+(register-definition-prefixes "shr" '("shr-"))
 
 ;;;***
 
 ;;;### (autoloads nil "shr-color" "net/shr-color.el" (0 0 0 0))
 ;;; Generated autoloads from net/shr-color.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"shr-color" '("shr-color-")))
+(register-definition-prefixes "shr-color" '("shr-color-"))
 
 ;;;***
 
@@ -30667,7 +31009,7 @@ DOM should be a parse tree as generated by
 
 \(fn &optional NAME)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sieve" '("sieve-")))
+(register-definition-prefixes "sieve" '("sieve-"))
 
 ;;;***
 
@@ -30675,7 +31017,7 @@ DOM should be a parse tree as generated by
 ;;;;;;  0))
 ;;; Generated autoloads from net/sieve-manage.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sieve-manage" '("sieve-")))
+(register-definition-prefixes "sieve-manage" '("sieve-"))
 
 ;;;***
 
@@ -30692,7 +31034,7 @@ Turning on Sieve mode runs `sieve-mode-hook'.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sieve-mode" '("sieve-")))
+(register-definition-prefixes "sieve-mode" '("sieve-"))
 
 ;;;***
 
@@ -30742,7 +31084,7 @@ with no arguments, if that value is non-nil.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"simula" '("simula-")))
+(register-definition-prefixes "simula" '("simula-"))
 
 ;;;***
 
@@ -30864,7 +31206,7 @@ twice for the others.
 
 \(fn ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"skeleton" '("skeleton-")))
+(register-definition-prefixes "skeleton" '("skeleton-"))
 
 ;;;***
 
@@ -30903,6 +31245,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \\{smerge-mode-map}
 
 \(fn &optional ARG)" t nil)
@@ -30913,14 +31258,14 @@ If no conflict maker is found, turn off `smerge-mode'.
 
 \(fn &optional INTERACTIVELY)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"smerge-mode" '("smerge-")))
+(register-definition-prefixes "smerge-mode" '("smerge-"))
 
 ;;;***
 
 ;;;### (autoloads nil "smie" "emacs-lisp/smie.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/smie.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"smie" '("smie-")))
+(register-definition-prefixes "smie" '("smie-"))
 
 ;;;***
 
@@ -30939,14 +31284,14 @@ interactively.  If there's no argument, do it at the 
current buffer.
 
 \(fn &optional BUFFER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"smiley" '("gnus-smiley-file-types" "smiley-")))
+(register-definition-prefixes "smiley" '("gnus-smiley-file-types" "smiley-"))
 
 ;;;***
 
 ;;;### (autoloads nil "smime" "gnus/smime.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/smime.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"smime" '("smime")))
+(register-definition-prefixes "smime" '("smime"))
 
 ;;;***
 
@@ -30958,7 +31303,7 @@ interactively.  If there's no argument, do it at the 
current buffer.
 (autoload 'smtpmail-send-queued-mail "smtpmail" "\
 Send mail that was queued as a result of setting `smtpmail-queue-mail'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"smtpmail" '("smtpmail-")))
+(register-definition-prefixes "smtpmail" '("smtpmail-"))
 
 ;;;***
 
@@ -30981,7 +31326,7 @@ Snake mode keybindings:
 \\[snake-move-up]      Makes the snake move up
 \\[snake-move-down]    Makes the snake move down" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"snake" '("snake-")))
+(register-definition-prefixes "snake" '("snake-"))
 
 ;;;***
 
@@ -31008,7 +31353,7 @@ Delete converts tabs to spaces as it moves back.
 Turning on snmp-mode runs the hooks in `snmp-common-mode-hook',
 then `snmpv2-mode-hook'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"snmp-mode" '("snmp")))
+(register-definition-prefixes "snmp-mode" '("snmp"))
 
 ;;;***
 
@@ -31030,6 +31375,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Any active minor modes listed in `so-long-minor-modes' are disabled for the
 current buffer, and buffer-local values are assigned to variables in accordance
 with `so-long-variable-overrides'.
@@ -31106,6 +31454,9 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Many Emacs modes struggle with buffers which contain excessively long lines,
 and may consequently cause unacceptable performance issues.
 
@@ -31122,7 +31473,7 @@ Use \\[so-long-customize] to configure the behaviour.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"so-long" '("so-long-" "turn-o")))
+(register-definition-prefixes "so-long" '("so-long-" "turn-o"))
 
 ;;;***
 
@@ -31130,7 +31481,7 @@ Use \\[so-long-customize] to configure the behaviour.
 ;;; Generated autoloads from net/soap-client.el
 (push (purecopy '(soap-client 3 1 5)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"soap-client" '("soap-")))
+(register-definition-prefixes "soap-client" '("soap-"))
 
 ;;;***
 
@@ -31138,14 +31489,14 @@ Use \\[so-long-customize] to configure the behaviour.
 ;;;;;;  0))
 ;;; Generated autoloads from net/soap-inspect.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"soap-inspect" '("soap-")))
+(register-definition-prefixes "soap-inspect" '("soap-"))
 
 ;;;***
 
 ;;;### (autoloads nil "socks" "net/socks.el" (0 0 0 0))
 ;;; Generated autoloads from net/socks.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"socks" '("socks-")))
+(register-definition-prefixes "socks" '("socks-"))
 
 ;;;***
 
@@ -31162,7 +31513,7 @@ This function is suitable for execution in an init file.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"solar" '("calendar-" "diary-sunrise-sunset" "solar-")))
+(register-definition-prefixes "solar" '("calendar-" "diary-sunrise-sunset" 
"solar-"))
 
 ;;;***
 
@@ -31239,7 +31590,7 @@ Pick your favorite shortcuts:
 
 \(fn ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"solitaire" '("solitaire-")))
+(register-definition-prefixes "solitaire" '("solitaire-"))
 
 ;;;***
 
@@ -31421,14 +31772,14 @@ is non-nil, it also prints a message describing the 
number of deletions.
 
 \(fn BEG END &optional REVERSE ADJACENT KEEP-BLANKS INTERACTIVE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sort" '("sort-")))
+(register-definition-prefixes "sort" '("sort-"))
 
 ;;;***
 
 ;;;### (autoloads nil "soundex" "soundex.el" (0 0 0 0))
 ;;; Generated autoloads from soundex.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"soundex" '("soundex")))
+(register-definition-prefixes "soundex" '("soundex"))
 
 ;;;***
 
@@ -31444,7 +31795,7 @@ installed through `spam-necessary-extra-headers'.
 
 \(fn &rest SYMBOLS)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"spam" '("spam-")))
+(register-definition-prefixes "spam" '("spam-"))
 
 ;;;***
 
@@ -31485,21 +31836,21 @@ Remove spam-report support from the Agent.
 Spam reports will be queued with the method used when
 \\[spam-report-agentize] was run." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"spam-report" '("spam-report-")))
+(register-definition-prefixes "spam-report" '("spam-report-"))
 
 ;;;***
 
 ;;;### (autoloads nil "spam-stat" "gnus/spam-stat.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/spam-stat.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"spam-stat" '("spam-stat" "with-spam-stat-max-buffer-size")))
+(register-definition-prefixes "spam-stat" '("spam-stat" 
"with-spam-stat-max-buffer-size"))
 
 ;;;***
 
 ;;;### (autoloads nil "spam-wash" "gnus/spam-wash.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/spam-wash.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"spam-wash" '("spam-")))
+(register-definition-prefixes "spam-wash" '("spam-"))
 
 ;;;***
 
@@ -31523,7 +31874,7 @@ Change frame focus to or from the speedbar frame.
 If the selected frame is not speedbar, then speedbar frame is
 selected.  If the speedbar frame is active, then select the attached frame." t 
nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"speedbar" '("speedbar-")))
+(register-definition-prefixes "speedbar" '("speedbar-"))
 
 ;;;***
 
@@ -31536,7 +31887,7 @@ Adds that special touch of class to your outgoing 
mail." t nil)
 (autoload 'snarf-spooks "spook" "\
 Return a vector containing the lines from `spook-phrases-file'." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"spook" '("spook-phrase")))
+(register-definition-prefixes "spook" '("spook-phrase"))
 
 ;;;***
 
@@ -31591,7 +31942,7 @@ must tell Emacs.  Here's how to do that in your init 
file:
 
 \(add-hook \\='sql-mode-hook
           (lambda ()
-           (modify-syntax-entry ?\\\\ \".\" sql-mode-syntax-table)))
+           (modify-syntax-entry ?\\\\ \"\\\\\" sql-mode-syntax-table)))
 
 \(fn)" t nil)
 
@@ -32036,7 +32387,7 @@ Run vsql as an inferior process.
 
 \(fn &optional BUFFER)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"sql" '("sql-")))
+(register-definition-prefixes "sql" '("sql-"))
 
 ;;;***
 
@@ -32044,7 +32395,7 @@ Run vsql as an inferior process.
 ;;; Generated autoloads from cedet/srecode.el
 (push (purecopy '(srecode 1 2)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode" '("srecode-version")))
+(register-definition-prefixes "srecode" '("srecode-version"))
 
 ;;;***
 
@@ -32052,7 +32403,7 @@ Run vsql as an inferior process.
 ;;;;;;  0 0))
 ;;; Generated autoloads from cedet/srecode/args.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/args" '("srecode-")))
+(register-definition-prefixes "srecode/args" '("srecode-"))
 
 ;;;***
 
@@ -32060,7 +32411,7 @@ Run vsql as an inferior process.
 ;;;;;;  "cedet/srecode/compile.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/compile.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/compile" '("srecode-")))
+(register-definition-prefixes "srecode/compile" '("srecode-"))
 
 ;;;***
 
@@ -32068,7 +32419,7 @@ Run vsql as an inferior process.
 ;;;;;;  "cedet/srecode/cpp.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/cpp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/cpp" '("srecode-")))
+(register-definition-prefixes "srecode/cpp" '("srecode-"))
 
 ;;;***
 
@@ -32076,7 +32427,7 @@ Run vsql as an inferior process.
 ;;;;;;  0 0))
 ;;; Generated autoloads from cedet/srecode/ctxt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/ctxt" '("srecode-")))
+(register-definition-prefixes "srecode/ctxt" '("srecode-"))
 
 ;;;***
 
@@ -32084,7 +32435,7 @@ Run vsql as an inferior process.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/dictionary.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/dictionary" '("srecode-")))
+(register-definition-prefixes "srecode/dictionary" '("srecode-"))
 
 ;;;***
 
@@ -32092,7 +32443,7 @@ Run vsql as an inferior process.
 ;;;;;;  "cedet/srecode/document.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/document.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/document" '("srecode-document-")))
+(register-definition-prefixes "srecode/document" '("srecode-document-"))
 
 ;;;***
 
@@ -32100,7 +32451,7 @@ Run vsql as an inferior process.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/el.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/el" '("srecode-semantic-apply-tag-to-dict")))
+(register-definition-prefixes "srecode/el" 
'("srecode-semantic-apply-tag-to-dict"))
 
 ;;;***
 
@@ -32108,7 +32459,7 @@ Run vsql as an inferior process.
 ;;;;;;  "cedet/srecode/expandproto.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/expandproto.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/expandproto" '("srecode-")))
+(register-definition-prefixes "srecode/expandproto" '("srecode-"))
 
 ;;;***
 
@@ -32116,7 +32467,7 @@ Run vsql as an inferior process.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/extract.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/extract" '("srecode-extract")))
+(register-definition-prefixes "srecode/extract" '("srecode-extract"))
 
 ;;;***
 
@@ -32124,7 +32475,7 @@ Run vsql as an inferior process.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/fields.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/fields" '("srecode-")))
+(register-definition-prefixes "srecode/fields" '("srecode-"))
 
 ;;;***
 
@@ -32132,7 +32483,7 @@ Run vsql as an inferior process.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/filters.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/filters" '("srecode-comment-prefix")))
+(register-definition-prefixes "srecode/filters" '("srecode-comment-prefix"))
 
 ;;;***
 
@@ -32140,7 +32491,7 @@ Run vsql as an inferior process.
 ;;;;;;  0 0))
 ;;; Generated autoloads from cedet/srecode/find.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/find" '("srecode-")))
+(register-definition-prefixes "srecode/find" '("srecode-"))
 
 ;;;***
 
@@ -32148,7 +32499,7 @@ Run vsql as an inferior process.
 ;;;;;;  "cedet/srecode/getset.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/getset.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/getset" '("srecode-")))
+(register-definition-prefixes "srecode/getset" '("srecode-"))
 
 ;;;***
 
@@ -32156,7 +32507,7 @@ Run vsql as an inferior process.
 ;;;;;;  "cedet/srecode/insert.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/insert.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/insert" '("srecode-")))
+(register-definition-prefixes "srecode/insert" '("srecode-"))
 
 ;;;***
 
@@ -32164,7 +32515,7 @@ Run vsql as an inferior process.
 ;;;;;;  "cedet/srecode/map.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/map.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/map" '("srecode-")))
+(register-definition-prefixes "srecode/map" '("srecode-"))
 
 ;;;***
 
@@ -32172,7 +32523,7 @@ Run vsql as an inferior process.
 ;;;;;;  "cedet/srecode/mode.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/mode.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/mode" '("srecode-")))
+(register-definition-prefixes "srecode/mode" '("srecode-"))
 
 ;;;***
 
@@ -32180,7 +32531,7 @@ Run vsql as an inferior process.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/semantic.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/semantic" '("srecode-semantic-")))
+(register-definition-prefixes "srecode/semantic" '("srecode-semantic-"))
 
 ;;;***
 
@@ -32188,7 +32539,7 @@ Run vsql as an inferior process.
 ;;;;;;  "cedet/srecode/srt.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/srt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/srt" '("srecode-read-")))
+(register-definition-prefixes "srecode/srt" '("srecode-read-"))
 
 ;;;***
 
@@ -32203,7 +32554,7 @@ Major-mode for writing SRecode macros.
 
 (defalias 'srt-mode 'srecode-template-mode)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/srt-mode" '("semantic-" "srecode-")))
+(register-definition-prefixes "srecode/srt-mode" '("semantic-" "srecode-"))
 
 ;;;***
 
@@ -32211,7 +32562,7 @@ Major-mode for writing SRecode macros.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from cedet/srecode/table.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/table" '("object-sort-list" "srecode-")))
+(register-definition-prefixes "srecode/table" '("object-sort-list" "srecode-"))
 
 ;;;***
 
@@ -32219,7 +32570,7 @@ Major-mode for writing SRecode macros.
 ;;;;;;  "cedet/srecode/template.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/template.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/template" '("semantic-tag-components")))
+(register-definition-prefixes "srecode/template" '("semantic-tag-components"))
 
 ;;;***
 
@@ -32227,7 +32578,7 @@ Major-mode for writing SRecode macros.
 ;;;;;;  "cedet/srecode/texi.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/texi.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"srecode/texi" '("semantic-insert-foreign-tag" "srecode-texi-")))
+(register-definition-prefixes "srecode/texi" '("semantic-insert-foreign-tag" 
"srecode-texi-"))
 
 ;;;***
 
@@ -32314,6 +32665,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \\<strokes-mode-map>
 Strokes are pictographic mouse gestures which invoke commands.
 Strokes are invoked with \\[strokes-do-stroke].  You can define
@@ -32339,7 +32693,7 @@ Optional FORCE non-nil will ignore the buffer's 
read-only status.
 (autoload 'strokes-compose-complex-stroke "strokes" "\
 Read a complex stroke and insert its glyph into the current buffer." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"strokes" '("strokes-")))
+(register-definition-prefixes "strokes" '("strokes-"))
 
 ;;;***
 
@@ -32380,7 +32734,7 @@ Truncate STRING to LENGTH, replacing initial surplus 
with \"...\".
 
 \(fn STRING LENGTH)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"subr-x" '("and-let*" "hash-table-" "if-let" "internal--" 
"replace-region-contents" "string-" "thread-" "when-let*")))
+(register-definition-prefixes "subr-x" '("and-let*" "hash-table-" "if-let" 
"internal--" "replace-region-contents" "string-" "thread-" "when-let*"))
 
 ;;;***
 
@@ -32397,6 +32751,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Subword mode is a buffer-local minor mode.  Enabling it changes
 the definition of a word so that word-based commands stop inside
 symbols with mixed uppercase and lowercase letters,
@@ -32449,6 +32806,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Superword mode is a buffer-local minor mode.  Enabling it changes
 the definition of words such that symbols characters are treated
 as parts of words: e.g., in `superword-mode',
@@ -32482,7 +32842,7 @@ See `superword-mode' for more information on Superword 
mode.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"subword" '("subword-" "superword-mode-map")))
+(register-definition-prefixes "subword" '("subword-" "superword-mode-map"))
 
 ;;;***
 
@@ -32514,7 +32874,7 @@ The region need not be active (and typically isn't when 
this
 function is called).  Also, the hook `sc-pre-hook' is run before,
 and `sc-post-hook' is run after the guts of this function." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"supercite" '("sc-")))
+(register-definition-prefixes "supercite" '("sc-"))
 
 ;;;***
 
@@ -32522,15 +32882,13 @@ and `sc-post-hook' is run after the guts of this 
function." nil nil)
 ;;; Generated autoloads from svg.el
 (push (purecopy '(svg 1 0)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"svg" '("svg-")))
+(register-definition-prefixes "svg" '("svg-"))
 
 ;;;***
 
 ;;;### (autoloads nil "t-mouse" "t-mouse.el" (0 0 0 0))
 ;;; Generated autoloads from t-mouse.el
 
-(define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1")
-
 (defvar gpm-mouse-mode t "\
 Non-nil if Gpm-Mouse mode is enabled.
 See the `gpm-mouse-mode' command
@@ -32549,6 +32907,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 This allows the use of the mouse when operating on a GNU/Linux console,
 in the same way as you can use the mouse under X11.
 It relies on the `gpm' daemon being activated.
@@ -32559,7 +32920,7 @@ GPM.  This is due to limitations in GPM and the Linux 
kernel.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"t-mouse" '("gpm-mouse-")))
+(register-definition-prefixes "t-mouse" '("gpm-mouse-"))
 
 ;;;***
 
@@ -32574,6 +32935,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
 (defvar tab-line-exclude nil)
@@ -32604,7 +32968,7 @@ See `tab-line-mode' for more information on Tab-Line 
mode.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tab-line" '("tab-line-")))
+(register-definition-prefixes "tab-line" '("tab-line-"))
 
 ;;;***
 
@@ -32635,7 +32999,7 @@ The variable `tab-width' controls the spacing of tab 
stops.
 
 \(fn START END &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tabify" '("tabify-regexp")))
+(register-definition-prefixes "tabify" '("tabify-regexp"))
 
 ;;;***
 
@@ -32982,6 +33346,9 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
 (autoload 'table-query-dimension "table" "\
@@ -33199,7 +33566,7 @@ Remove the frame from a table and deactivate the table. 
 This command
 converts a table into plain text without frames.  It is a companion to
 `table-capture' which does the opposite process." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"table" '("*table--" "table-")))
+(register-definition-prefixes "table" '("*table--" "table-"))
 
 ;;;***
 
@@ -33221,7 +33588,7 @@ Connect to display DISPLAY for the Emacs talk group.
 (autoload 'talk "talk" "\
 Connect to the Emacs talk group from the current X display or tty frame." t 
nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"talk" '("talk-")))
+(register-definition-prefixes "talk" '("talk-"))
 
 ;;;***
 
@@ -33246,7 +33613,7 @@ See also: variables `tar-update-datestamp' and 
`tar-anal-blocksize'.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tar-mode" '("tar-")))
+(register-definition-prefixes "tar-mode" '("tar-"))
 
 ;;;***
 
@@ -33296,7 +33663,7 @@ Prefix argument means invert sense of 
`tcl-use-smart-word-finder'.
 
 \(fn COMMAND &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tcl" '("add-log-tcl-defun" "calculate-tcl-indent" "indent-tcl-exp" 
"inferior-tcl-" "run-tcl" "switch-to-tcl" "tcl-")))
+(register-definition-prefixes "tcl" '("add-log-tcl-defun" 
"calculate-tcl-indent" "indent-tcl-exp" "inferior-tcl-" "run-tcl" 
"switch-to-tcl" "tcl-"))
 
 ;;;***
 
@@ -33304,15 +33671,7 @@ Prefix argument means invert sense of 
`tcl-use-smart-word-finder'.
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from emacs-lisp/tcover-ses.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tcover-ses" '("ses-exercise")))
-
-;;;***
-
-;;;### (autoloads nil "tcover-unsafep" "emacs-lisp/tcover-unsafep.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from emacs-lisp/tcover-unsafep.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tcover-unsafep" '("testcover-unsafep")))
+(register-definition-prefixes "tcover-ses" '("ses-exercise"))
 
 ;;;***
 
@@ -33339,14 +33698,14 @@ Normally input is edited in Emacs and sent a line at 
a time.
 
 \(fn HOST)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"telnet" '("send-process-next-char" "telnet-")))
+(register-definition-prefixes "telnet" '("send-process-next-char" "telnet-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tempo" "tempo.el" (0 0 0 0))
 ;;; Generated autoloads from tempo.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tempo" '("tempo-")))
+(register-definition-prefixes "tempo" '("tempo-"))
 
 ;;;***
 
@@ -33399,7 +33758,7 @@ use in that buffer.
 
 \(fn PORT SPEED &optional LINE-MODE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"term" '("ansi-term-color-vector" "explicit-shell-file-name" "serial-" 
"term-")))
+(register-definition-prefixes "term" '("ansi-term-color-vector" 
"explicit-shell-file-name" "serial-" "term-"))
 
 ;;;***
 
@@ -33416,7 +33775,7 @@ If BYTE-COMPILE is non-nil, byte compile each function 
after instrumenting.
 (autoload 'testcover-this-defun "testcover" "\
 Start coverage on function under point." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"testcover" '("testcover-")))
+(register-definition-prefixes "testcover" '("testcover-"))
 
 ;;;***
 
@@ -33443,7 +33802,7 @@ tetris-mode keybindings:
 
 " t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tetris" '("tetris-")))
+(register-definition-prefixes "tetris" '("tetris-"))
 
 ;;;***
 
@@ -33744,7 +34103,7 @@ Major mode to edit DocTeX files.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tex-mode" '("doctex-font-lock-" "latex-" "plain-tex-mode-map" "tex-")))
+(register-definition-prefixes "tex-mode" '("doctex-font-lock-" "latex-" 
"plain-tex-mode-map" "tex-"))
 
 ;;;***
 
@@ -33785,7 +34144,7 @@ if large.  You can use `Info-split' to do this manually.
 
 \(fn &optional NOSPLIT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"texinfmt" '("batch-texinfo-format" "texinf")))
+(register-definition-prefixes "texinfmt" '("batch-texinfo-format" "texinf"))
 
 ;;;***
 
@@ -33871,7 +34230,7 @@ value of `texinfo-mode-hook'.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"texinfo" '("texinfo-")))
+(register-definition-prefixes "texinfo" '("texinfo-"))
 
 ;;;***
 
@@ -33879,7 +34238,7 @@ value of `texinfo-mode-hook'.
 ;;;;;;  0 0))
 ;;; Generated autoloads from textmodes/texnfo-upd.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"texnfo-upd" '("texinfo-")))
+(register-definition-prefixes "texnfo-upd" '("texinfo-"))
 
 ;;;***
 
@@ -33887,7 +34246,7 @@ value of `texinfo-mode-hook'.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/text-property-search.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"text-property-search" '("text-property-")))
+(register-definition-prefixes "text-property-search" '("text-property-"))
 
 ;;;***
 
@@ -33915,7 +34274,7 @@ Compose Thai characters in the current buffer." t nil)
 
 \(fn GSTRING DIRECTION)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"thai-util" '("exit-thai-language-environment-internal" 
"setup-thai-language-environment-internal" "thai-")))
+(register-definition-prefixes "thai-util" 
'("exit-thai-language-environment-internal" 
"setup-thai-language-environment-internal" "thai-"))
 
 ;;;***
 
@@ -33923,7 +34282,7 @@ Compose Thai characters in the current buffer." t nil)
 ;;;;;;  0))
 ;;; Generated autoloads from language/thai-word.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"thai-word" '("thai-")))
+(register-definition-prefixes "thai-word" '("thai-"))
 
 ;;;***
 
@@ -33987,7 +34346,7 @@ treated as white space.
 
 \(fn &optional IGNORE-COMMENT-OR-STRING)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"thingatpt" '("beginning-of-thing" "define-thing-chars" "end-of-thing" 
"filename" "form-at-point" "in-string-p" "sentence-at-point" "thing-at-point-" 
"word-at-point")))
+(register-definition-prefixes "thingatpt" '("beginning-of-thing" 
"define-thing-chars" "end-of-thing" "filename" "form-at-point" "in-string-p" 
"sentence-at-point" "thing-at-point-" "word-at-point"))
 
 ;;;***
 
@@ -34005,7 +34364,7 @@ An EVENT has the format
 Display a list of threads." t nil)
  (put 'list-threads 'disabled "Beware: manually canceling threads can ruin 
your Emacs session.")
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"thread" '("thread-list-")))
+(register-definition-prefixes "thread" '("thread-list-"))
 
 ;;;***
 
@@ -34035,7 +34394,7 @@ In dired, make a thumbs buffer with all files in 
current directory." t nil)
 (autoload 'thumbs-dired-setroot "thumbs" "\
 In dired, call the setroot program on the image at point." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"thumbs" '("thumbs-")))
+(register-definition-prefixes "thumbs" '("thumbs-"))
 
 ;;;***
 
@@ -34043,7 +34402,7 @@ In dired, call the setroot program on the image at 
point." t nil)
 ;;; Generated autoloads from emacs-lisp/thunk.el
 (push (purecopy '(thunk 1 0)) package--builtin-versions)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"thunk" '("thunk-")))
+(register-definition-prefixes "thunk" '("thunk-"))
 
 ;;;***
 
@@ -34115,7 +34474,7 @@ See also docstring of the function 
tibetan-compose-region." t nil)
 
 \(fn FROM TO)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tibet-util" '("tibetan-")))
+(register-definition-prefixes "tibet-util" '("tibetan-"))
 
 ;;;***
 
@@ -34175,6 +34534,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When space is inserted into a buffer in a position where hard space is required
 instead (determined by `tildify-space-pattern' and `tildify-space-predicates'),
 that space character is replaced by a hard space specified by
@@ -34186,7 +34548,7 @@ variable will be set to the representation.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tildify" '("tildify-")))
+(register-definition-prefixes "tildify" '("tildify-"))
 
 ;;;***
 
@@ -34224,6 +34586,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When Display Time mode is enabled, it updates every minute (you
 can control the number of seconds between updates by customizing
 `display-time-interval').  If `display-time-day-and-date' is
@@ -34232,10 +34597,12 @@ runs the normal hook `display-time-hook' after each 
update.
 
 \(fn &optional ARG)" t nil)
 
-(autoload 'display-time-world "time" "\
-Enable updating display of times in various time zones.
-`display-time-world-list' specifies the zones.
-To turn off the world time display, go to that window and type `q'." t nil)
+(defalias 'display-time-world #'world-clock)
+
+(autoload 'world-clock "time" "\
+Display a world clock buffer with times in various time zones.
+The variable `world-clock-list' specifies which time zones to use.
+To turn off the world time display, go to the window and type 
`\\[quit-window]'." t nil)
 
 (autoload 'emacs-uptime "time" "\
 Return a string giving the uptime of this instance of Emacs.
@@ -34247,7 +34614,7 @@ For example, the Unix uptime command format is \"%D, 
%z%2h:%.2m\".
 (autoload 'emacs-init-time "time" "\
 Return a string giving the duration of the Emacs initialization." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"time" '("display-time-" "legacy-style-world-list" "time--display-world-list" 
"zoneinfo-style-world-list")))
+(register-definition-prefixes "time" '("display-time-" 
"legacy-style-world-list" "time--display-world-list" "world-clock-" 
"zoneinfo-style-world-list"))
 
 ;;;***
 
@@ -34344,7 +34711,7 @@ Convert the time interval in seconds to a short string.
 
 \(fn DELAY)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"time-date" '("date-" "decoded-time-" "encode-time-value" "seconds-to-string" 
"time-" "with-decoded-time-value")))
+(register-definition-prefixes "time-date" '("date-" "decoded-time-" 
"encode-time-value" "seconds-to-string" "time-" "with-decoded-time-value"))
 
 ;;;***
 
@@ -34392,7 +34759,7 @@ With ARG, turn time stamping on if and only if arg is 
positive.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"time-stamp" '("time-stamp-")))
+(register-definition-prefixes "time-stamp" '("time-stamp-"))
 
 ;;;***
 
@@ -34501,7 +34868,7 @@ relative only to the time worked today, and not to past 
time.
 
 \(fn &optional SHOW-SECONDS TODAY-ONLY)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"timeclock" '("timeclock-")))
+(register-definition-prefixes "timeclock" '("timeclock-"))
 
 ;;;***
 
@@ -34515,14 +34882,14 @@ List all timers in a buffer.
 \(fn &optional IGNORE-AUTO NONCONFIRM)" t nil)
  (put 'list-timers 'disabled "Beware: manually canceling timers can ruin your 
Emacs session.")
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"timer-list" '("timer-list-")))
+(register-definition-prefixes "timer-list" '("timer-list-"))
 
 ;;;***
 
 ;;;### (autoloads nil "timezone" "timezone.el" (0 0 0 0))
 ;;; Generated autoloads from timezone.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"timezone" '("timezone-")))
+(register-definition-prefixes "timezone" '("timezone-"))
 
 ;;;***
 
@@ -34547,7 +34914,7 @@ To get complete usage, invoke \"emacs -batch -f 
batch-titdic-convert -h\".
 
 \(fn &optional FORCE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"titdic-cnv" '("batch-miscdic-convert" "ctlau-" "miscdic-convert" 
"pinyin-convert" "py-converter" "quail-" "quick-" "tit-" "tsang-" 
"ziranma-converter")))
+(register-definition-prefixes "titdic-cnv" '("batch-miscdic-convert" "ctlau-" 
"miscdic-convert" "pinyin-convert" "py-converter" "quail-" "quick-" "tit-" 
"tsang-" "ziranma-converter"))
 
 ;;;***
 
@@ -34593,7 +34960,7 @@ instead of executing it.
 
 \(fn MENU &optional IN-POPUP DEFAULT-ITEM NO-EXECUTE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tmm" '("tmm-")))
+(register-definition-prefixes "tmm" '("tmm-"))
 
 ;;;***
 
@@ -34661,7 +35028,7 @@ Mode for displaying and reprioritizing top priority 
Todo.
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"todo-mode" '("todo-")))
+(register-definition-prefixes "todo-mode" '("todo-"))
 
 ;;;***
 
@@ -34733,14 +35100,14 @@ holds a keymap.
 
 \(fn COMMAND ICON IN-MAP &optional FROM-MAP &rest PROPS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tool-bar" '("tool-bar-")))
+(register-definition-prefixes "tool-bar" '("tool-bar-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tooltip" "tooltip.el" (0 0 0 0))
 ;;; Generated autoloads from tooltip.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tooltip" '("tooltip-")))
+(register-definition-prefixes "tooltip" '("tooltip-"))
 
 ;;;***
 
@@ -34755,7 +35122,7 @@ to a tcp server on another machine.
 
 \(fn PROCESS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tq" 
'("tq-")))
+(register-definition-prefixes "tq" '("tq-"))
 
 ;;;***
 
@@ -34804,7 +35171,7 @@ the output buffer or changing the window configuration.
 
 (defalias 'trace-function 'trace-function-foreground)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"trace" '("inhibit-trace" "trace-" "untrace-")))
+(register-definition-prefixes "trace" '("inhibit-trace" "trace-" "untrace-"))
 
 ;;;***
 
@@ -34852,14 +35219,14 @@ Unload Tramp file name handlers from 
`file-name-handler-alist'." (dolist (fnh fi
 (defun tramp-unload-tramp nil "\
 Discard Tramp from loading remote files." (interactive) (ignore-errors 
(unload-feature 'tramp 'force)))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp" '("tramp-" "with-")))
+(register-definition-prefixes "tramp" '("tramp-" "with-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tramp-adb" "net/tramp-adb.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp-adb.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-adb" '("tramp-")))
+(register-definition-prefixes "tramp-adb" '("tramp-"))
 
 ;;;***
 
@@ -34890,21 +35257,21 @@ Add archive file name handler to 
`file-name-handler-alist'." (when tramp-archive
 
 (add-hook 'tramp-archive-unload-hook (lambda nil (remove-hook 'after-init-hook 
#'tramp-register-archive-file-name-handler)))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-archive" '("tramp-" "with-parsed-tramp-archive-file-name")))
+(register-definition-prefixes "tramp-archive" '("tramp-" 
"with-parsed-tramp-archive-file-name"))
 
 ;;;***
 
 ;;;### (autoloads nil "tramp-cache" "net/tramp-cache.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp-cache.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-cache" '("tramp-")))
+(register-definition-prefixes "tramp-cache" '("tramp-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tramp-cmds" "net/tramp-cmds.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp-cmds.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-cmds" '("tramp-")))
+(register-definition-prefixes "tramp-cmds" '("tramp-"))
 
 ;;;***
 
@@ -34912,28 +35279,28 @@ Add archive file name handler to 
`file-name-handler-alist'." (when tramp-archive
 ;;;;;;  0))
 ;;; Generated autoloads from net/tramp-compat.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-compat" '("tramp-")))
+(register-definition-prefixes "tramp-compat" '("tramp-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tramp-crypt" "net/tramp-crypt.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp-crypt.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-crypt" '("tramp-crypt-")))
+(register-definition-prefixes "tramp-crypt" '("tramp-crypt-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp-ftp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-ftp" '("tramp-")))
+(register-definition-prefixes "tramp-ftp" '("tramp-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tramp-gvfs" "net/tramp-gvfs.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp-gvfs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-gvfs" '("tramp-" "with-tramp-dbus-")))
+(register-definition-prefixes "tramp-gvfs" '("tramp-" "with-tramp-dbus-"))
 
 ;;;***
 
@@ -34941,7 +35308,7 @@ Add archive file name handler to 
`file-name-handler-alist'." (when tramp-archive
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from net/tramp-integration.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-integration" '("tramp-")))
+(register-definition-prefixes "tramp-integration" '("tramp-"))
 
 ;;;***
 
@@ -34949,21 +35316,21 @@ Add archive file name handler to 
`file-name-handler-alist'." (when tramp-archive
 ;;;;;;  0))
 ;;; Generated autoloads from net/tramp-rclone.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-rclone" '("tramp-rclone-")))
+(register-definition-prefixes "tramp-rclone" '("tramp-rclone-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tramp-sh" "net/tramp-sh.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp-sh.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-sh" '("tramp-")))
+(register-definition-prefixes "tramp-sh" '("tramp-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tramp-smb" "net/tramp-smb.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp-smb.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-smb" '("tramp-smb-")))
+(register-definition-prefixes "tramp-smb" '("tramp-smb-"))
 
 ;;;***
 
@@ -34971,28 +35338,28 @@ Add archive file name handler to 
`file-name-handler-alist'." (when tramp-archive
 ;;;;;;  0 0 0))
 ;;; Generated autoloads from net/tramp-sudoedit.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-sudoedit" '("tramp-sudoedit-")))
+(register-definition-prefixes "tramp-sudoedit" '("tramp-sudoedit-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tramp-uu" "net/tramp-uu.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp-uu.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tramp-uu" '("tramp-uu")))
+(register-definition-prefixes "tramp-uu" '("tramp-uu"))
 
 ;;;***
 
 ;;;### (autoloads nil "trampver" "net/trampver.el" (0 0 0 0))
 ;;; Generated autoloads from net/trampver.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"trampver" '("tramp-")))
+(register-definition-prefixes "trampver" '("tramp-"))
 
 ;;;***
 
 ;;;### (autoloads nil "tree-widget" "tree-widget.el" (0 0 0 0))
 ;;; Generated autoloads from tree-widget.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tree-widget" '("tree-widget-")))
+(register-definition-prefixes "tree-widget" '("tree-widget-"))
 
 ;;;***
 
@@ -35018,7 +35385,7 @@ resumed later.
 
 \(fn &optional ARG DONT-ASK-FOR-REVERT)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tutorial" '("get-lang-string" "lang-strings" "tutorial--")))
+(register-definition-prefixes "tutorial" '("get-lang-string" "lang-strings" 
"tutorial--"))
 
 ;;;***
 
@@ -35030,7 +35397,7 @@ resumed later.
 
 \(fn FROM TO FONT-OBJECT STRING DIRECTION)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"tv-util" '("tai-viet-")))
+(register-definition-prefixes "tv-util" '("tai-viet-"))
 
 ;;;***
 
@@ -35078,7 +35445,7 @@ First column's text    sSs  Second column's text
 
 \(fn ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"two-column" '("2C-")))
+(register-definition-prefixes "two-column" '("2C-"))
 
 ;;;***
 
@@ -35104,6 +35471,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When this mode is enabled, the user is encouraged to take typing breaks at
 appropriate intervals; either after a specified amount of time or when the
 user has exceeded a keystroke threshold.  When the time arrives, the user
@@ -35211,7 +35581,7 @@ FRAC should be the inverse of the fractional value; for 
example, a value of
 
 \(fn WPM &optional WORDLEN FRAC)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"type-break" '("timep" "type-break-")))
+(register-definition-prefixes "type-break" '("timep" "type-break-"))
 
 ;;;***
 
@@ -35226,7 +35596,7 @@ You might need to set `uce-mail-reader' before using 
this.
 
 \(fn &optional IGNORED)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"uce" '("uce-")))
+(register-definition-prefixes "uce" '("uce-"))
 
 ;;;***
 
@@ -35294,7 +35664,7 @@ Normalize the string STR by the Unicode NFC and Mac 
OS's HFS Plus.
 
 \(fn STR)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"ucs-normalize" '("ucs-normalize-" "utf-8-hfs")))
+(register-definition-prefixes "ucs-normalize" '("ucs-normalize-" "utf-8-hfs"))
 
 ;;;***
 
@@ -35323,7 +35693,7 @@ which specify the range to operate on.
 ;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from mail/undigest.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"undigest" '("rmail-")))
+(register-definition-prefixes "undigest" '("rmail-"))
 
 ;;;***
 
@@ -35343,7 +35713,7 @@ The variable `unrmail-mbox-format' controls which mbox 
format to use.
 
 \(fn FILE TO-FILE)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"unrmail" '("unrmail-mbox-format")))
+(register-definition-prefixes "unrmail" '("unrmail-mbox-format"))
 
 ;;;***
 
@@ -35357,7 +35727,7 @@ UNSAFEP-VARS is a list of symbols with local bindings.
 
 \(fn FORM &optional UNSAFEP-VARS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"unsafep" '("safe-functions" "unsafep-")))
+(register-definition-prefixes "unsafep" '("safe-functions" "unsafep-"))
 
 ;;;***
 
@@ -35413,14 +35783,14 @@ how long to wait for a response before giving up.
 
 \(fn URL &optional SILENT INHIBIT-COOKIES TIMEOUT)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url" '("url-")))
+(register-definition-prefixes "url" '("url-"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-about" "url/url-about.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-about.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-about" '("url-")))
+(register-definition-prefixes "url-about" '("url-"))
 
 ;;;***
 
@@ -35463,7 +35833,7 @@ RATING   a rating between 1 and 10 of the strength of 
the authentication.
 
 \(fn TYPE &optional FUNCTION RATING)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-auth" '("url-")))
+(register-definition-prefixes "url-auth" '("url-"))
 
 ;;;***
 
@@ -35486,7 +35856,7 @@ Extract FNAM from the local disk cache.
 
 \(fn FNAM)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-cache" '("url-")))
+(register-definition-prefixes "url-cache" '("url-"))
 
 ;;;***
 
@@ -35498,14 +35868,14 @@ Extract FNAM from the local disk cache.
 
 \(fn URL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-cid" '("url-cid-gnus")))
+(register-definition-prefixes "url-cid" '("url-cid-gnus"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-cookie" "url/url-cookie.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-cookie.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-cookie" '("url-cookie")))
+(register-definition-prefixes "url-cookie" '("url-cookie"))
 
 ;;;***
 
@@ -35541,28 +35911,28 @@ added to this list, so most requests can just pass in 
nil.
 
 \(fn URL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-dav" '("url-")))
+(register-definition-prefixes "url-dav" '("url-"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-dired" "url/url-dired.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-dired.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-dired" '("url-")))
+(register-definition-prefixes "url-dired" '("url-"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-domsuf" "url/url-domsuf.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-domsuf.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-domsuf" '("url-domsuf-")))
+(register-definition-prefixes "url-domsuf" '("url-domsuf-"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-expand" "url/url-expand.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-expand.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-expand" '("url-")))
+(register-definition-prefixes "url-expand" '("url-"))
 
 ;;;***
 
@@ -35574,21 +35944,21 @@ Handle file: and ftp: URLs.
 
 \(fn URL CALLBACK CBARGS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-file" '("url-file-")))
+(register-definition-prefixes "url-file" '("url-file-"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-ftp" "url/url-ftp.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-ftp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-ftp" '("url-ftp")))
+(register-definition-prefixes "url-ftp" '("url-ftp"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-future" "url/url-future.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-future.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-future" '("url-future-")))
+(register-definition-prefixes "url-future" '("url-future-"))
 
 ;;;***
 
@@ -35611,7 +35981,7 @@ overriding the value of `url-gateway-method'.
 
 \(fn NAME BUFFER HOST SERVICE &optional GATEWAY-METHOD)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-gw" '("url-")))
+(register-definition-prefixes "url-gw" '("url-"))
 
 ;;;***
 
@@ -35637,6 +36007,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
 (autoload 'url-file-handler "url-handlers" "\
@@ -35674,14 +36047,14 @@ if it had been inserted from a file named URL.
 
 \(fn URL &optional VISIT BEG END REPLACE)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-handlers" '("url-")))
+(register-definition-prefixes "url-handlers" '("url-"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-history" "url/url-history.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-history.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-history" '("url-")))
+(register-definition-prefixes "url-history" '("url-"))
 
 ;;;***
 
@@ -35695,14 +36068,14 @@ if it had been inserted from a file named URL.
  (autoload 'url-https-file-readable-p "url-http")
  (autoload 'url-https-file-attributes "url-http")
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-http" '("url-h")))
+(register-definition-prefixes "url-http" '("url-h"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-imap" "url/url-imap.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-imap.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-imap" '("url-imap")))
+(register-definition-prefixes "url-imap" '("url-imap"))
 
 ;;;***
 
@@ -35714,7 +36087,7 @@ if it had been inserted from a file named URL.
 
 \(fn URL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-irc" '("url-irc-")))
+(register-definition-prefixes "url-irc" '("url-irc-"))
 
 ;;;***
 
@@ -35729,7 +36102,7 @@ URL can be a URL string, or a URL record of the type 
returned by
 
 \(fn URL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-ldap" '("url-ldap-")))
+(register-definition-prefixes "url-ldap" '("url-ldap-"))
 
 ;;;***
 
@@ -35746,14 +36119,14 @@ Handle the mailto: URL syntax.
 
 \(fn URL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-mailto" '("url-mail-goto-field")))
+(register-definition-prefixes "url-mailto" '("url-mail-goto-field"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-methods" "url/url-methods.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-methods.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-methods" '("url-scheme-")))
+(register-definition-prefixes "url-methods" '("url-scheme-"))
 
 ;;;***
 
@@ -35786,7 +36159,7 @@ Fetch a data URL (RFC 2397).
 
 \(fn URL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-misc" '("url-do-terminal-emulator")))
+(register-definition-prefixes "url-misc" '("url-do-terminal-emulator"))
 
 ;;;***
 
@@ -35803,14 +36176,14 @@ Fetch a data URL (RFC 2397).
 
 \(fn URL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-news" '("url-news-")))
+(register-definition-prefixes "url-news" '("url-news-"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-nfs" "url/url-nfs.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-nfs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-nfs" '("url-nfs")))
+(register-definition-prefixes "url-nfs" '("url-nfs"))
 
 ;;;***
 
@@ -35863,7 +36236,7 @@ parses to
 
 \(fn URL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-parse" '("url-")))
+(register-definition-prefixes "url-parse" '("url-"))
 
 ;;;***
 
@@ -35873,14 +36246,14 @@ parses to
 (autoload 'url-setup-privacy-info "url-privacy" "\
 Setup variables that expose info about you and your system." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-privacy" '("url-device-type")))
+(register-definition-prefixes "url-privacy" '("url-device-type"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-proxy" "url/url-proxy.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-proxy.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-proxy" '("url-")))
+(register-definition-prefixes "url-proxy" '("url-"))
 
 ;;;***
 
@@ -35896,7 +36269,7 @@ The variable `url-queue-timeout' sets a timeout.
 
 \(fn URL CALLBACK &optional CBARGS SILENT INHIBIT-COOKIES)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-queue" '("url-queue")))
+(register-definition-prefixes "url-queue" '("url-queue"))
 
 ;;;***
 
@@ -35916,7 +36289,7 @@ would have been passed to OPERATION.
 
 \(fn OPERATION &rest ARGS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-tramp" '("url-tramp-convert-")))
+(register-definition-prefixes "url-tramp" '("url-tramp-convert-"))
 
 ;;;***
 
@@ -36096,14 +36469,14 @@ is \"www.fsf.co.uk\".
 
 \(fn URL)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-util" '("url-")))
+(register-definition-prefixes "url-util" '("url-"))
 
 ;;;***
 
 ;;;### (autoloads nil "url-vars" "url/url-vars.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-vars.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"url-vars" '("url-")))
+(register-definition-prefixes "url-vars" '("url-"))
 
 ;;;***
 
@@ -36140,7 +36513,7 @@ The buffer in question is current when this function is 
called.
 
 \(fn FILENAME)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"userlock" '("ask-user-about-" "file-" "userlock--check-content-unchanged")))
+(register-definition-prefixes "userlock" '("ask-user-about-" "file-" 
"userlock--check-content-unchanged"))
 
 ;;;***
 
@@ -36167,7 +36540,7 @@ The buffer in question is current when this function is 
called.
 
 \(fn FROM TO)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"utf-7" '("utf-7-")))
+(register-definition-prefixes "utf-7" '("utf-7-"))
 
 ;;;***
 
@@ -36179,7 +36552,7 @@ Encode UTF-7 STRING.  Use IMAP modification if FOR-IMAP 
is non-nil.
 
 \(fn STRING &optional FOR-IMAP)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"utf7" '("utf7-")))
+(register-definition-prefixes "utf7" '("utf7-"))
 
 ;;;***
 
@@ -36205,7 +36578,7 @@ If FILE-NAME is non-nil, save the result to FILE-NAME.
 
 \(fn START END &optional FILE-NAME)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"uudecode" '("uudecode-")))
+(register-definition-prefixes "uudecode" '("uudecode-"))
 
 ;;;***
 
@@ -36489,8 +36862,6 @@ Revert working copies of the selected fileset to their 
repository contents.
 This asks for confirmation if the buffer contents are not identical
 to the working revision (except for keyword expansion)." t nil)
 
-(define-obsolete-function-alias 'vc-revert-buffer 'vc-revert "23.1")
-
 (autoload 'vc-pull "vc" "\
 Update the current fileset or branch.
 You must be visiting a version controlled file, or in a `vc-dir' buffer.
@@ -36579,7 +36950,7 @@ Return the branch part of a revision number REV.
 
 \(fn REV)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc" 
'("vc-" "with-vc-properties")))
+(register-definition-prefixes "vc" '("vc-" "with-vc-properties"))
 
 ;;;***
 
@@ -36620,7 +36991,7 @@ should be applied to the background or to the 
foreground.
 
 \(fn FILE REV &optional DISPLAY-MODE BUF MOVE-POINT-TO VC-BK)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-annotate" '("vc-")))
+(register-definition-prefixes "vc-annotate" '("vc-"))
 
 ;;;***
 
@@ -36638,7 +37009,7 @@ Name of the format file in a .bzr directory.")
         (load "vc-bzr" nil t)
         (vc-bzr-registered file))))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-bzr" '("vc-bzr-")))
+(register-definition-prefixes "vc-bzr" '("vc-bzr-"))
 
 ;;;***
 
@@ -36651,14 +37022,14 @@ Name of the format file in a .bzr directory.")
       (load "vc-cvs" nil t)
       (vc-cvs-registered f)))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-cvs" '("vc-cvs-")))
+(register-definition-prefixes "vc-cvs" '("vc-cvs-"))
 
 ;;;***
 
 ;;;### (autoloads nil "vc-dav" "vc/vc-dav.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-dav.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-dav" '("vc-dav-")))
+(register-definition-prefixes "vc-dav" '("vc-dav-"))
 
 ;;;***
 
@@ -36696,7 +37067,7 @@ type returned by `vc-dir-bookmark-make-record'.
 
 \(fn BMK)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-dir" '("vc-")))
+(register-definition-prefixes "vc-dir" '("vc-"))
 
 ;;;***
 
@@ -36722,14 +37093,14 @@ case, and the process object in the asynchronous case.
 
 \(fn BUFFER OKSTATUS COMMAND FILE-OR-LIST &rest FLAGS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-dispatcher" '("vc-")))
+(register-definition-prefixes "vc-dispatcher" '("vc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "vc-filewise" "vc/vc-filewise.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-filewise.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-filewise" '("vc-")))
+(register-definition-prefixes "vc-filewise" '("vc-"))
 
 ;;;***
 
@@ -36742,7 +37113,7 @@ case, and the process object in the asynchronous case.
         (load "vc-git" nil t)
         (vc-git-registered file))))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-git" '("vc-git-")))
+(register-definition-prefixes "vc-git" '("vc-git-"))
 
 ;;;***
 
@@ -36755,7 +37126,7 @@ case, and the process object in the asynchronous case.
         (load "vc-hg" nil t)
         (vc-hg-registered file))))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-hg" '("vc-hg-")))
+(register-definition-prefixes "vc-hg" '("vc-hg-"))
 
 ;;;***
 
@@ -36773,7 +37144,7 @@ Name of the monotone directory's format file.")
         (load "vc-mtn" nil t)
         (vc-mtn-registered file))))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-mtn" '("vc-mtn-")))
+(register-definition-prefixes "vc-mtn" '("vc-mtn-"))
 
 ;;;***
 
@@ -36788,7 +37159,7 @@ For a description of possible values, see 
`vc-check-master-templates'.")
 
 (defun vc-rcs-registered (f) (vc-default-registered 'RCS f))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-rcs" '("vc-r")))
+(register-definition-prefixes "vc-rcs" '("vc-r"))
 
 ;;;***
 
@@ -36808,7 +37179,7 @@ Return the name of a master file in the SCCS project 
directory.
 Does not check whether the file exists but returns nil if it does not
 find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs 
dir) (when project-dir (if (file-name-absolute-p project-dir) (setq dirs 
'("SCCS" "")) (setq dirs '("src/SCCS" "src" "source/SCCS" "source")) (setq 
project-dir (expand-file-name (concat "~" project-dir)))) (while (and (not dir) 
dirs) (setq dir (expand-file-name (car dirs) project-dir)) (unless 
(file-directory-p dir) (setq dir nil) (setq dirs (cdr dirs)))) (and dir 
(expand-file-name (concat "s." basename) dir)))))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-sccs" '("vc-sccs-")))
+(register-definition-prefixes "vc-sccs" '("vc-sccs-"))
 
 ;;;***
 
@@ -36823,7 +37194,7 @@ For a description of possible values, see 
`vc-check-master-templates'.")
 
 (defun vc-src-registered (f) (vc-default-registered 'src f))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-src" '("vc-src-")))
+(register-definition-prefixes "vc-src" '("vc-src-"))
 
 ;;;***
 
@@ -36838,14 +37209,14 @@ For a description of possible values, see 
`vc-check-master-templates'.")
       (load "vc-svn" nil t)
       (vc-svn-registered f))))
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vc-svn" '("vc-svn-")))
+(register-definition-prefixes "vc-svn" '("vc-svn-"))
 
 ;;;***
 
 ;;;### (autoloads nil "vcursor" "vcursor.el" (0 0 0 0))
 ;;; Generated autoloads from vcursor.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vcursor" '("vcursor-")))
+(register-definition-prefixes "vcursor" '("vcursor-"))
 
 ;;;***
 
@@ -36906,7 +37277,7 @@ Key bindings:
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vera-mode" '("vera-")))
+(register-definition-prefixes "vera-mode" '("vera-"))
 
 ;;;***
 
@@ -37049,7 +37420,7 @@ Key bindings specific to `verilog-mode-map' are:
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"verilog-mode" '("electric-verilog-" "verilog-" "vl-")))
+(register-definition-prefixes "verilog-mode" '("electric-verilog-" "verilog-" 
"vl-"))
 
 ;;;***
 
@@ -37606,7 +37977,7 @@ Key bindings:
 
 \(fn)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vhdl-mode" '("vhdl-")))
+(register-definition-prefixes "vhdl-mode" '("vhdl-"))
 
 ;;;***
 
@@ -37649,7 +38020,7 @@ Convert Vietnamese characters of the current buffer to 
`VIQR' mnemonics." t nil)
 
 \(fn FROM TO)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"viet-util" '("viet-viqr-alist" "viqr-regexp")))
+(register-definition-prefixes "viet-util" '("viet-viqr-alist" "viqr-regexp"))
 
 ;;;***
 
@@ -37794,6 +38165,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 When View mode is enabled, commands that do not change the buffer
 contents are available as usual.  Kill commands save text but
 do not delete it from the buffer.  Most other commands beep and
@@ -37907,7 +38281,7 @@ This function runs the normal hook `view-mode-hook'.
 (autoload 'View-exit-and-edit "view" "\
 Exit View mode and make the current buffer editable." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"view" '("View-" "view-")))
+(register-definition-prefixes "view" '("View-" "view-"))
 
 ;;;***
 
@@ -37922,7 +38296,7 @@ If Viper is enabled, turn it off.  Otherwise, turn it 
on." t nil)
 (autoload 'viper-mode "viper" "\
 Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"viper" '("set-viper-state-in-major-mode" "this-major-mode-requires-vi-state" 
"viper-")))
+(register-definition-prefixes "viper" '("set-viper-state-in-major-mode" 
"this-major-mode-requires-vi-state" "viper-"))
 
 ;;;***
 
@@ -37930,14 +38304,14 @@ Turn on Viper emulation of Vi in Emacs. See Info node 
`(viper)Top'." t nil)
 ;;;;;;  0))
 ;;; Generated autoloads from emulation/viper-cmd.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"viper-cmd" '("viper-")))
+(register-definition-prefixes "viper-cmd" '("viper-"))
 
 ;;;***
 
 ;;;### (autoloads nil "viper-ex" "emulation/viper-ex.el" (0 0 0 0))
 ;;; Generated autoloads from emulation/viper-ex.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"viper-ex" '("ex-" "viper-")))
+(register-definition-prefixes "viper-ex" '("ex-" "viper-"))
 
 ;;;***
 
@@ -37945,7 +38319,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node 
`(viper)Top'." t nil)
 ;;;;;;  0 0))
 ;;; Generated autoloads from emulation/viper-init.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"viper-init" '("viper-")))
+(register-definition-prefixes "viper-init" '("viper-"))
 
 ;;;***
 
@@ -37953,7 +38327,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node 
`(viper)Top'." t nil)
 ;;;;;;  0 0))
 ;;; Generated autoloads from emulation/viper-keym.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"viper-keym" '("ex-read-filename-map" "viper-")))
+(register-definition-prefixes "viper-keym" '("ex-read-filename-map" "viper-"))
 
 ;;;***
 
@@ -37961,7 +38335,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node 
`(viper)Top'." t nil)
 ;;;;;;  0 0))
 ;;; Generated autoloads from emulation/viper-macs.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"viper-macs" '("ex-" "viper-")))
+(register-definition-prefixes "viper-macs" '("ex-" "viper-"))
 
 ;;;***
 
@@ -37969,7 +38343,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node 
`(viper)Top'." t nil)
 ;;;;;;  0 0))
 ;;; Generated autoloads from emulation/viper-mous.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"viper-mous" '("viper-")))
+(register-definition-prefixes "viper-mous" '("viper-"))
 
 ;;;***
 
@@ -37977,35 +38351,35 @@ Turn on Viper emulation of Vi in Emacs. See Info node 
`(viper)Top'." t nil)
 ;;;;;;  0 0))
 ;;; Generated autoloads from emulation/viper-util.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"viper-util" '("viper")))
+(register-definition-prefixes "viper-util" '("viper"))
 
 ;;;***
 
 ;;;### (autoloads nil "vt-control" "vt-control.el" (0 0 0 0))
 ;;; Generated autoloads from vt-control.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vt-control" '("vt-")))
+(register-definition-prefixes "vt-control" '("vt-"))
 
 ;;;***
 
 ;;;### (autoloads nil "vt100-led" "vt100-led.el" (0 0 0 0))
 ;;; Generated autoloads from vt100-led.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"vt100-led" '("led-")))
+(register-definition-prefixes "vt100-led" '("led-"))
 
 ;;;***
 
 ;;;### (autoloads nil "w32-fns" "w32-fns.el" (0 0 0 0))
 ;;; Generated autoloads from w32-fns.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"w32-fns" '("w32-")))
+(register-definition-prefixes "w32-fns" '("w32-"))
 
 ;;;***
 
 ;;;### (autoloads nil "w32-vars" "w32-vars.el" (0 0 0 0))
 ;;; Generated autoloads from w32-vars.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"w32-vars" '("w32-")))
+(register-definition-prefixes "w32-vars" '("w32-"))
 
 ;;;***
 
@@ -38099,7 +38473,7 @@ this is equivalent to `display-warning', using
 
 \(fn MESSAGE &rest ARGS)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"warnings" '("display-warning-minimum-level" "log-warning-minimum-level" 
"warning-")))
+(register-definition-prefixes "warnings" '("warning-"))
 
 ;;;***
 
@@ -38116,7 +38490,7 @@ directories to reflect your edits.
 
 See `wdired-mode'." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"wdired" '("wdired-")))
+(register-definition-prefixes "wdired" '("wdired-"))
 
 ;;;***
 
@@ -38132,7 +38506,7 @@ hotlist.
 Please submit bug reports and other feedback to the author, Neil W. Van Dyke
 <nwv@acm.org>." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"webjump" '("webjump-")))
+(register-definition-prefixes "webjump" '("webjump-"))
 
 ;;;***
 
@@ -38162,13 +38536,16 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Which Function mode is a global minor mode.  When enabled, the
 current function name is continuously displayed in the mode line,
 in certain major modes.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"which-func" '("which-func")))
+(register-definition-prefixes "which-func" '("which-func"))
 
 ;;;***
 
@@ -38184,6 +38561,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 See also `whitespace-style', `whitespace-newline' and
 `whitespace-display-mappings'.
 
@@ -38197,6 +38577,9 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Use `whitespace-newline-mode' only for NEWLINE visualization
 exclusively.  For other visualizations, including NEWLINE
 visualization together with (HARD) SPACEs and/or TABs, please,
@@ -38224,6 +38607,9 @@ positive, and disable it if ARG is zero or negative.  
If called from
 Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
 ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 See also `whitespace-style', `whitespace-newline' and
 `whitespace-display-mappings'.
 
@@ -38247,6 +38633,9 @@ is positive, and disable it if ARG is zero or negative. 
 If called
 from Lisp, also enable the mode if ARG is omitted or nil, and toggle
 it if ARG is `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Use `global-whitespace-newline-mode' only for NEWLINE
 visualization exclusively.  For other visualizations, including
 NEWLINE visualization together with (HARD) SPACEs and/or TABs,
@@ -38541,7 +38930,7 @@ cleaning up these problems.
 
 \(fn START END &optional FORCE REPORT-IF-BOGUS)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"whitespace" '("whitespace-")))
+(register-definition-prefixes "whitespace" '("whitespace-"))
 
 ;;;***
 
@@ -38571,9 +38960,12 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"wid-browse" '("widget-")))
+(register-definition-prefixes "wid-browse" '("widget-"))
 
 ;;;***
 
@@ -38615,7 +39007,7 @@ Note that such modes will need to require wid-edit.")
 (autoload 'widget-setup "wid-edit" "\
 Setup current buffer so editing string widgets works." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"wid-edit" '("widget-")))
+(register-definition-prefixes "wid-edit" '("widget-"))
 
 ;;;***
 
@@ -38780,7 +39172,7 @@ or a single modifier.  Default value of MODIFIERS is 
`shift-super'.
 
 \(fn &optional MODIFIERS)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"windmove" '("windmove-")))
+(register-definition-prefixes "windmove" '("windmove-"))
 
 ;;;***
 
@@ -38805,6 +39197,9 @@ disable it if ARG is zero or negative.  If called from 
Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Winner mode is a global minor mode that records the changes in
 the window configuration (i.e. how the frames are partitioned
 into windows) so that the changes can be \"undone\" using the
@@ -38814,7 +39209,7 @@ you can press `C-c <right>' (calling `winner-redo').
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"winner" '("winner-")))
+(register-definition-prefixes "winner" '("winner-"))
 
 ;;;***
 
@@ -38862,21 +39257,21 @@ Default bookmark handler for Woman buffers.
 
 \(fn BOOKMARK)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"woman" '("WoMan-" "menu-bar-manuals-menu" "set-woman-file-regexp" "woman")))
+(register-definition-prefixes "woman" '("WoMan-" "menu-bar-manuals-menu" 
"set-woman-file-regexp" "woman"))
 
 ;;;***
 
 ;;;### (autoloads nil "x-dnd" "x-dnd.el" (0 0 0 0))
 ;;; Generated autoloads from x-dnd.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"x-dnd" '("x-dnd-")))
+(register-definition-prefixes "x-dnd" '("x-dnd-"))
 
 ;;;***
 
 ;;;### (autoloads nil "xdg" "xdg.el" (0 0 0 0))
 ;;; Generated autoloads from xdg.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"xdg" '("xdg-")))
+(register-definition-prefixes "xdg" '("xdg-"))
 
 ;;;***
 
@@ -38940,7 +39335,7 @@ All text between the <!-- ... --> markers will be 
removed.
 
 \(fn BEG END)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"xml" '("xml-")))
+(register-definition-prefixes "xml" '("xml-"))
 
 ;;;***
 
@@ -38960,13 +39355,13 @@ If LIMIT is non-nil, then do not consider characters 
beyond LIMIT.
 
 \(fn &optional LIMIT)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"xmltok" '("xmltok-")))
+(register-definition-prefixes "xmltok" '("xmltok-"))
 
 ;;;***
 
 ;;;### (autoloads nil "xref" "progmodes/xref.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/xref.el
-(push (purecopy '(xref 1 0 1)) package--builtin-versions)
+(push (purecopy '(xref 1 0 3)) package--builtin-versions)
 
 (autoload 'xref-find-backend "xref" nil nil nil)
 
@@ -39052,21 +39447,21 @@ FILES must be a list of absolute file names.
 
 \(fn REGEXP FILES)" nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"xref" '("xref-")))
+(register-definition-prefixes "xref" '("xref-"))
 
 ;;;***
 
 ;;;### (autoloads nil "xscheme" "progmodes/xscheme.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/xscheme.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"xscheme" '("default-xscheme-runlight" "exit-scheme-interaction-mode" 
"global-set-scheme-interaction-buffer" "local-" "reset-scheme" "run-scheme" 
"scheme-" "start-scheme" "verify-xscheme-buffer" "xscheme-")))
+(register-definition-prefixes "xscheme" '("default-xscheme-runlight" 
"exit-scheme-interaction-mode" "global-set-scheme-interaction-buffer" "local-" 
"reset-scheme" "run-scheme" "scheme-" "start-scheme" "verify-xscheme-buffer" 
"xscheme-"))
 
 ;;;***
 
 ;;;### (autoloads nil "xsd-regexp" "nxml/xsd-regexp.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/xsd-regexp.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"xsd-regexp" '("xsdre-")))
+(register-definition-prefixes "xsd-regexp" '("xsdre-"))
 
 ;;;***
 
@@ -39091,6 +39486,9 @@ and disable it if ARG is zero or negative.  If called 
from Lisp, also
 enable the mode if ARG is omitted or nil, and toggle it if ARG is
 `toggle'; disable the mode otherwise.
 
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
 Turn it on to use Emacs mouse commands, and off to use xterm mouse commands.
 This works in terminal emulators compatible with xterm.  It only
 works for simple uses of the mouse.  Basically, only non-modified
@@ -39100,7 +39498,7 @@ down the SHIFT key while pressing the mouse button.
 
 \(fn &optional ARG)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"xt-mouse" '("turn-o" "xt-mouse-epoch" "xterm-mouse-")))
+(register-definition-prefixes "xt-mouse" '("turn-o" "xt-mouse-epoch" 
"xterm-mouse-"))
 
 ;;;***
 
@@ -39114,7 +39512,7 @@ Interactively, URL defaults to the string looking like 
a url around point.
 
 \(fn URL &optional NEW-SESSION)" t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"xwidget" '("xwidget-")))
+(register-definition-prefixes "xwidget" '("xwidget-"))
 
 ;;;***
 
@@ -39129,14 +39527,14 @@ Yenc decode region between START and END using an 
internal decoder.
 (autoload 'yenc-extract-filename "yenc" "\
 Extract file name from an yenc header." nil nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"yenc" '("yenc-")))
+(register-definition-prefixes "yenc" '("yenc-"))
 
 ;;;***
 
 ;;;### (autoloads nil "zeroconf" "net/zeroconf.el" (0 0 0 0))
 ;;; Generated autoloads from net/zeroconf.el
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"zeroconf" '("zeroconf-")))
+(register-definition-prefixes "zeroconf" '("zeroconf-"))
 
 ;;;***
 
@@ -39146,7 +39544,7 @@ Extract file name from an yenc header." nil nil)
 (autoload 'zone "zone" "\
 Zone out, completely." t nil)
 
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"zone" '("zone-")))
+(register-definition-prefixes "zone" '("zone-"))
 
 ;;;***
 
@@ -39196,7 +39594,7 @@ Zone out, completely." t nil)
 ;;;;;;  "emacs-lisp/lisp.el" "emacs-lisp/macroexp.el" "emacs-lisp/map-ynp.el"
 ;;;;;;  "emacs-lisp/nadvice.el" "emacs-lisp/syntax.el" "emacs-lisp/timer.el"
 ;;;;;;  "env.el" "epa-hook.el" "erc/erc-autoaway.el" "erc/erc-button.el"
-;;;;;;  "erc/erc-capab.el" "erc/erc-compat.el" "erc/erc-dcc.el" 
"erc/erc-desktop-notifications.el"
+;;;;;;  "erc/erc-capab.el" "erc/erc-dcc.el" "erc/erc-desktop-notifications.el"
 ;;;;;;  "erc/erc-ezbounce.el" "erc/erc-fill.el" "erc/erc-identd.el"
 ;;;;;;  "erc/erc-imenu.el" "erc/erc-join.el" "erc/erc-list.el" "erc/erc-log.el"
 ;;;;;;  "erc/erc-match.el" "erc/erc-menu.el" "erc/erc-netsplit.el"
diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el
index 94b0886..ab2649f 100644
--- a/lisp/mail/mspools.el
+++ b/lisp/mail/mspools.el
@@ -1,4 +1,4 @@
-;;; mspools.el --- show mail spools waiting to be read
+;;; mspools.el --- show mail spools waiting to be read  -*- lexical-binding: 
t; -*-
 
 ;; Copyright (C) 1997, 2001-2020 Free Software Foundation, Inc.
 
@@ -125,18 +125,15 @@
 
 (defcustom mspools-update nil
   "Non-nil means update *spools* buffer after visiting any folder."
-  :type 'boolean
-  :group 'mspools)
+  :type 'boolean)
 
 (defcustom mspools-suffix "spool"
   "Extension used for spool files (not including full stop)."
-  :type 'string
-  :group 'mspools)
+  :type 'string)
 
 (defcustom mspools-using-vm  (fboundp 'vm)
   "Non-nil if VM is used as mail reader, otherwise RMAIL is used."
-  :type 'boolean
-  :group 'mspools)
+  :type 'boolean)
 
 (defcustom mspools-folder-directory
   (if (boundp 'vm-folder-directory)
@@ -144,8 +141,7 @@
     "~/MAIL/")
   "Directory where mail folders are kept.  Ensure it has a trailing /.
 Defaults to `vm-folder-directory' if bound else to ~/MAIL/."
-  :type 'directory
-  :group 'mspools)
+  :type 'directory)
 
 (defcustom mspools-vm-system-mail (or (getenv "MAIL")
                                      (concat rmail-spool-directory
@@ -156,8 +152,7 @@ without it.  By default this will be set to the environment 
variable
 $MAIL.  Otherwise it will use `rmail-spool-directory' to guess where
 your primary spool is.  If this fails, set it to something like
 /usr/spool/mail/login-name."
-  :type 'file
-  :group 'mspools)
+  :type 'file)
 
 ;;; Internal Variables
 
@@ -175,11 +170,8 @@ your primary spool is.  If this fails, set it to something 
like
     (define-key map "\C-c\C-c" 'mspools-visit-spool)
     (define-key map "\C-m" 'mspools-visit-spool)
     (define-key map " " 'mspools-visit-spool)
-    (define-key map "?" 'mspools-help)
-    (define-key map "q" 'mspools-quit)
     (define-key map "n" 'next-line)
     (define-key map "p" 'previous-line)
-    (define-key map "g" 'revert-buffer)
     map)
   "Keymap for the *spools* buffer.")
 
@@ -221,14 +213,15 @@ your primary spool is.  If this fails, set it to 
something like
                (concat mspools-folder-directory s "." mspools-suffix)
                (concat mspools-folder-directory s ".crash")))
            ;; So I create a vm-spool-files entry for each of those mail drops
-           (mapcar 'file-name-sans-extension
+           (mapcar #'file-name-sans-extension
                    (directory-files mspools-folder-directory nil
                                     (format "\\`[^.]+\\.%s" mspools-suffix)))
            ))
    ))
 
 ;;; MSPOOLS-SHOW -- the main function
-(defun mspools-show ( &optional noshow)
+;;;###autoload
+(defun mspools-show (&optional noshow)
   "Show the list of non-empty spool files in the *spools* buffer.
 Buffer is not displayed if SHOW is non-nil."
   (interactive)
@@ -237,7 +230,7 @@ Buffer is not displayed if SHOW is non-nil."
       (progn
        (set-buffer mspools-buffer)
        (setq buffer-read-only nil)
-       (delete-region (point-min) (point-max)))
+       (erase-buffer))
     ;; else buffer doesn't exist so create it
     (get-buffer-create mspools-buffer))
 
@@ -260,8 +253,8 @@ Buffer is not displayed if SHOW is non-nil."
 (defun mspools-visit-spool ()
   "Visit the folder on the current line of the *spools* buffer."
   (interactive)
-  (let ( spool-name folder-name)
-    (setq spool-name (mspools-get-spool-name))
+  (let ((spool-name (mspools-get-spool-name))
+        folder-name)
     (if (null spool-name)
        (message "No spool on current line")
 
@@ -270,19 +263,20 @@ Buffer is not displayed if SHOW is non-nil."
       ;; put in a little "*" to indicate spool file has been read.
       (if (not mspools-update)
          (save-excursion
-           (setq buffer-read-only nil)
            (beginning-of-line)
-           (insert "*")
-           (delete-char 1)
-           (setq buffer-read-only t)
-           ))
+           (let ((inhibit-read-only t))
+             (insert "*")
+             (delete-char 1))))
 
       (message "folder %s spool %s" folder-name spool-name)
-      (if (eq (count-lines (point-min) (point-at-eol))
-             mspools-files-len)
-         (forward-line (- 1 mspools-files-len)) ;back to top of list
-       ;; else just on to next line
-       (forward-line 1))
+      (forward-line (if (eq (count-lines (point-min) (point-at-eol))
+                           mspools-files-len)
+                       ;; FIXME: Why use `mspools-files-len' instead
+                        ;; of looking if we're on the last line and
+                        ;; jumping to the first one if so?
+                       (- 1 mspools-files-len) ;back to top of list
+                     ;; else just on to next line
+                     1))
 
       ;; Choose whether to use VM or RMAIL for reading folder.
       (if mspools-using-vm
@@ -296,8 +290,8 @@ Buffer is not displayed if SHOW is non-nil."
 
       (if mspools-update
          ;; generate new list of spools.
-         (save-excursion
-           (mspools-show-again 'noshow))))))
+         (save-excursion ;;FIXME: Why?
+           (mspools-revert-buffer))))))
 
 (defun mspools-get-folder-from-spool (name)
   "Return folder name corresponding to the spool file NAME."
@@ -319,27 +313,31 @@ Buffer is not displayed if SHOW is non-nil."
 (defun mspools-get-spool-name ()
   "Return the name of the spool on the current line."
   (let ((line-num (1- (count-lines (point-min) (point-at-eol)))))
+    ;; FIXME: Why not extract the name directly from the current line's text?
     (car (nth line-num mspools-files))))
 
 ;;; Spools mode functions
 
-(defun mspools-revert-buffer (ignore noconfirm)
-  "Re-run mspools-show to revert the *spools* buffer."
+(defun mspools-revert-buffer (&optional _ignore _noconfirm)
+  "Re-run `mspools-show' to revert the *spools* buffer."
   (mspools-show 'noshow))
 
 (defun mspools-show-again (&optional noshow)
-  "Update the *spools* buffer.  This is useful if mspools-update is
-nil."
+  "Update the *spools* buffer.
+This is useful if `mspools-update' is nil."
+  (declare (obsolete revert-buffer "28.1"))
   (interactive)
   (mspools-show noshow))
 
 (defun mspools-help ()
   "Show help for `mspools-mode'."
+  (declare (obsolete describe-mode "28.1"))
   (interactive)
   (describe-function 'mspools-mode))
 
 (defun mspools-quit ()
   "Quit the *spools* buffer."
+  (declare (obsolete quit-window "28.1"))
   (interactive)
   (kill-buffer mspools-buffer))
 
@@ -353,32 +351,26 @@ nil."
 
 (defun mspools-get-spool-files ()
   "Find the list of spool files and display them in *spools* buffer."
-  (let (folders head spool len beg end any)
-    (if (null mspools-folder-directory)
-       (error "Set `mspools-folder-directory' to where the spool files are"))
-    (setq folders (directory-files mspools-folder-directory nil
+  (if (null mspools-folder-directory)
+      (error "Set `mspools-folder-directory' to where the spool files are"))
+  (let* ((folders (directory-files mspools-folder-directory nil
                                   (format "\\`[^.]+\\.%s\\'" mspools-suffix)))
-    (setq folders (mapcar 'mspools-size-folder folders))
-    (setq folders (delq nil folders))
+        (folders (delq nil (mapcar #'mspools-size-folder folders)))
+        ;; beg end
+        )
     (setq mspools-files folders)
     (setq mspools-files-len (length mspools-files))
-    (set-buffer mspools-buffer)
-    (while folders
-      (setq any t)
-      (setq head (car folders))
-      (setq spool (car head))
-      (setq len (cdr head))
-      (setq folders (cdr folders))
-      (setq beg (point))
-      (insert (format " %10d %s" len spool))
-      (setq end (point))
-      (insert "\n")
-      ;;(put-text-property beg end 'mouse-face 'highlight)
-      )
-    (if any
-       (delete-char -1))                       ;delete last RET
-    (goto-char (point-min))
-    ))
+    (with-current-buffer mspools-buffer
+      (pcase-dolist (`(,spool . ,len) folders)
+        ;; (setq beg (point))
+        (insert (format " %10d %s" len spool))
+        ;; (setq end (point))
+        (insert "\n")
+        ;;(put-text-property beg end 'mouse-face 'highlight)
+        )
+      (if (not (bolp))
+         (delete-char -1))                     ;delete last RET
+      (goto-char (point-min)))))
 
 (defun mspools-size-folder (spool)
   "Return (SPOOL . SIZE ), if SIZE of spool file is non-zero."
diff --git a/lisp/mail/qp.el b/lisp/mail/qp.el
index 35ff47f..10ac696 100644
--- a/lisp/mail/qp.el
+++ b/lisp/mail/qp.el
@@ -125,7 +125,7 @@ encode lines starting with \"From\"."
                  (not (eobp)))
        (insert
         (prog1
-            (format "=%02X" (char-after))
+            (format "=%02X" (get-byte))
           (delete-char 1))))
       ;; Encode white space at the end of lines.
       (goto-char (point-min))
@@ -134,7 +134,7 @@ encode lines starting with \"From\"."
        (while (not (eolp))
          (insert
           (prog1
-              (format "=%02X" (char-after))
+              (format "=%02X" (get-byte))
             (delete-char 1)))))
       (let ((ultra
             (and (boundp 'mm-use-ultra-safe-encoding)
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 47f28d0..864726e 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -3863,12 +3863,16 @@ the minibuffer was activated, and execute the forms."
 If FORMAT-ARGS is nil, PROMPT is used as a plain string.  If
 FORMAT-ARGS is non-nil, PROMPT is used as a format control
 string, and FORMAT-ARGS are the arguments to be substituted into
-it.  See `format' for details."
+it.  See `format' for details.
+
+If DEFAULT is nil, no \"default value\" string is included in the
+return value."
   (concat
    (if (null format-args)
        prompt
      (apply #'format prompt format-args))
-   (format minibuffer-default-prompt-format default)
+   (and default
+        (format minibuffer-default-prompt-format default))
    ": "))
 
 (provide 'minibuffer)
diff --git a/lisp/mwheel.el b/lisp/mwheel.el
index d5172ba..3b93bd1 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -1,4 +1,4 @@
-;;; mwheel.el --- Wheel mouse support
+;;; mwheel.el --- Mouse wheel support  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1998, 2000-2020 Free Software Foundation, Inc.
 ;; Keywords: mouse
@@ -344,16 +344,24 @@ non-Windows systems."
                (text-scale-decrease 1)))
       (select-window selected-window))))
 
-(defvar mwheel-installed-bindings nil)
-(defvar mwheel-installed-text-scale-bindings nil)
+(defvar mouse-wheel--installed-bindings-alist nil
+  "Alist of all installed mouse wheel key bindings.")
 
-(defun mouse-wheel--remove-bindings (bindings funs)
-  "Remove key BINDINGS if they're bound to any function in FUNS.
-BINDINGS is a list of key bindings, FUNS is a list of functions.
+(defun mouse-wheel--add-binding (key fun)
+  "Bind mouse wheel button KEY to function FUN.
+Save it for later removal by `mouse-wheel--remove-bindings'."
+  (global-set-key key fun)
+  (push (cons key fun) mouse-wheel--installed-bindings-alist))
+
+(defun mouse-wheel--remove-bindings ()
+  "Remove all mouse wheel key bindings.
 This is a helper function for `mouse-wheel-mode'."
-  (dolist (key bindings)
-    (when (memq (lookup-key (current-global-map) key) funs)
-      (global-unset-key key))))
+  (dolist (binding mouse-wheel--installed-bindings-alist)
+    (let ((key (car binding))
+          (fun (cdr binding)))
+     (when (eq (lookup-key (current-global-map) key) fun)
+       (global-unset-key key))))
+  (setq mouse-wheel--installed-bindings-alist nil))
 
 (defun mouse-wheel--create-scroll-keys (binding event)
   "Return list of key vectors for BINDING and EVENT.
@@ -363,8 +371,11 @@ an event used for scrolling, such as 
`mouse-wheel-down-event'."
                         'left-fringe 'right-fringe
                         'vertical-scroll-bar 'horizontal-scroll-bar
                         'mode-line 'header-line)))
-    (cons (vector event)                  ; default case: no prefix.
-          (when (not (consp binding))
+    (if (consp binding)
+        ;; With modifiers, bind only the buffer area (no prefix).
+        (list `[(,@(car binding) ,event)])
+      ;; No modifier: bind also some non-buffer areas of the screen.
+      (cons (vector event)
             (mapcar (lambda (prefix) (vector prefix event)) prefixes)))))
 
 (define-minor-mode mouse-wheel-mode
@@ -378,12 +389,7 @@ an event used for scrolling, such as 
`mouse-wheel-down-event'."
   :global t
   :group 'mouse
   ;; Remove previous bindings, if any.
-  (mouse-wheel--remove-bindings mwheel-installed-bindings
-                                '(mwheel-scroll))
-  (mouse-wheel--remove-bindings mwheel-installed-text-scale-bindings
-                                '(mouse-wheel-text-scale))
-  (setq mwheel-installed-bindings nil)
-  (setq mwheel-installed-text-scale-bindings nil)
+  (mouse-wheel--remove-bindings)
   ;; Setup bindings as needed.
   (when mouse-wheel-mode
     (dolist (binding mouse-wheel-scroll-amount)
@@ -391,18 +397,16 @@ an event used for scrolling, such as 
`mouse-wheel-down-event'."
        ;; Bindings for changing font size.
        ((and (consp binding) (eq (cdr binding) 'text-scale))
         (dolist (event (list mouse-wheel-down-event mouse-wheel-up-event))
-          ;; Add binding.
-          (let ((key `[,(list (caar binding) event)]))
-            (global-set-key key 'mouse-wheel-text-scale)
-            (push key mwheel-installed-text-scale-bindings))))
+          (mouse-wheel--add-binding `[,(list (caar binding) event)]
+                                    'mouse-wheel-text-scale)))
        ;; Bindings for scrolling.
        (t
         (dolist (event (list mouse-wheel-down-event mouse-wheel-up-event
                              mouse-wheel-left-event mouse-wheel-right-event))
           (dolist (key (mouse-wheel--create-scroll-keys binding event))
-            ;; Add binding.
-            (global-set-key key 'mwheel-scroll)
-            (push key mwheel-installed-bindings))))))))
+            (mouse-wheel--add-binding key 'mwheel-scroll))))))))
+
+;;; Obsolete.
 
 ;;; Compatibility entry point
 ;; preloaded ;;;###autoload
@@ -411,6 +415,12 @@ an event used for scrolling, such as 
`mouse-wheel-down-event'."
   (declare (obsolete mouse-wheel-mode "27.1"))
   (mouse-wheel-mode (if uninstall -1 1)))
 
+(defvar mwheel-installed-bindings nil)
+(make-obsolete-variable 'mwheel-installed-bindings nil "28.1")
+
+(defvar mwheel-installed-text-scale-bindings nil)
+(make-obsolete-variable 'mwheel-installed-text-scale-bindings nil "28.1")
+
 (provide 'mwheel)
 
 ;;; mwheel.el ends here
diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el
index fdd726f..639b766 100644
--- a/lisp/net/dbus.el
+++ b/lisp/net/dbus.el
@@ -53,6 +53,8 @@
 
 (require 'xml)
 
+;;; D-Bus constants.
+
 (defconst dbus-service-dbus "org.freedesktop.DBus"
   "The bus name used to talk to the bus itself.")
 
@@ -62,7 +64,8 @@
 (defconst dbus-path-local (concat dbus-path-dbus "/Local")
   "The object path used in local/in-process-generated messages.")
 
-;; Default D-Bus interfaces.
+
+;;; Default D-Bus interfaces.
 
 (defconst dbus-interface-dbus "org.freedesktop.DBus"
   "The interface exported by the service `dbus-service-dbus'.")
@@ -145,7 +148,28 @@ See URL 
`https://dbus.freedesktop.org/doc/dbus-specification.html#standard-inter
 ;;   </signal>
 ;; </interface>
 
-;; Emacs defaults.
+
+;;; Default D-Bus errors.
+
+(defconst dbus-error-dbus "org.freedesktop.DBus.Error"
+  "The namespace for default error names.
+See /usr/include/dbus-1.0/dbus/dbus-protocol.h.")
+
+(defconst dbus-error-failed (concat dbus-error-dbus ".Failed")
+  "A generic error; \"something went wrong\" - see the error message for 
more.")
+
+(defconst dbus-error-access-denied (concat dbus-error-dbus ".AccessDenied")
+  "Security restrictions don't allow doing what you're trying to do.")
+
+(defconst dbus-error-invalid-args (concat dbus-error-dbus ".InvalidArgs")
+  "Invalid arguments passed to a method call.")
+
+(defconst dbus-error-property-read-only
+  (concat dbus-error-dbus ".PropertyReadOnly")
+  "Property you tried to set is read-only.")
+
+
+;;; Emacs defaults.
 (defconst dbus-service-emacs "org.gnu.Emacs"
   "The well known service name of Emacs.")
 
@@ -157,7 +181,8 @@ shall be subdirectories of this path.")
 (defconst dbus-interface-emacs "org.gnu.Emacs"
   "The interface namespace used by Emacs.")
 
-;; D-Bus constants.
+
+;;; Basic D-Bus message functions.
 
 (defmacro dbus-ignore-errors (&rest body)
   "Execute BODY; signal D-Bus error when `dbus-debug' is non-nil.
@@ -172,9 +197,6 @@ Otherwise, return result of last form in BODY, or all other 
errors."
 Every function must accept two arguments, the event and the error variable
 caught in `condition-case' by `dbus-error'.")
 
-
-;;; Basic D-Bus message functions.
-
 (defvar dbus-return-values-table (make-hash-table :test #'equal)
   "Hash table for temporarily storing arguments of reply messages.
 A key in this hash table is a list (:serial BUS SERIAL), like in
@@ -463,8 +485,9 @@ This is an internal function, it shall not be used outside 
dbus.el."
   (apply #'dbus-message-internal dbus-message-type-method-return
         bus service serial args))
 
-(defun dbus-method-error-internal (bus service serial &rest args)
+(defun dbus-method-error-internal (bus service serial error-name &rest args)
   "Return error message for message SERIAL on the D-Bus BUS.
+ERROR-NAME must belong to the \"org.freedesktop.DBus.Error\" namespace.
 This is an internal function, it shall not be used outside dbus.el."
 
   (or (featurep 'dbusbind)
@@ -477,7 +500,7 @@ This is an internal function, it shall not be used outside 
dbus.el."
       (signal 'wrong-type-argument (list 'natnump serial)))
 
   (apply #'dbus-message-internal dbus-message-type-error
-        bus service serial args))
+        bus service serial error-name args))
 
 
 ;;; Hash table of registered functions.
@@ -587,7 +610,7 @@ queue of this service."
 
   (maphash
    (lambda (key value)
-     (unless (equal :serial (car key))
+     (unless (eq :serial (car key))
        (dolist (elt value)
         (ignore-errors
           (when (and (equal bus (cadr key)) (string-equal service (cadr elt)))
@@ -775,10 +798,18 @@ discussion of DONT-REGISTER-SERVICE below).  INTERFACE is 
the
 interface offered by SERVICE.  It must provide METHOD.
 
 HANDLER is a Lisp function to be called when a method call is
-received.  It must accept the input arguments of METHOD.  The return
-value of HANDLER is used for composing the returning D-Bus message.
-If HANDLER returns a reply message with an empty argument list,
-HANDLER must return the symbol `:ignore'.
+received.  It must accept the input arguments of METHOD.  The
+return value of HANDLER is used for composing the returning D-Bus
+message.  If HANDLER returns a reply message with an empty
+argument list, HANDLER must return the symbol `:ignore' in order
+to distinguish it from `nil' (the boolean false).
+
+If HANDLER detects an error, it shall return the list `(:error
+ERROR-NAME ERROR-MESSAGE)'.  ERROR-NAME is a namespaced string
+which characterizes the error type, and ERROR-MESSAGE is a free
+text string.  Alternatively, any Emacs signal `dbus-error' in
+HANDLER raises a D-Bus error message with the error name
+\"org.freedesktop.DBus.Error.Failed\".
 
 When DONT-REGISTER-SERVICE is non-nil, the known name SERVICE is not
 registered.  This means that other D-Bus clients have no way of
@@ -996,22 +1027,26 @@ If the HANDLER returns a `dbus-error', it is propagated 
as return message."
          (signal 'dbus-error (nthcdr 9 event)))
        ;; Apply the handler.
        (setq result (apply (nth 8 event) (nthcdr 9 event)))
-       ;; Return a message when it is a message call.
+       ;; Return an (error) message when it is a message call.
        (when (= dbus-message-type-method-call (nth 2 event))
          (dbus-ignore-errors
-           (if (eq result :ignore)
-               (dbus-method-return-internal
-                (nth 1 event) (nth 4 event) (nth 3 event))
-              (apply #'dbus-method-return-internal
-                    (nth 1 event) (nth 4 event) (nth 3 event)
-                    (if (consp result) result (list result)))))))
+            (if (eq (car-safe result) :error)
+                (apply #'dbus-method-error-internal
+                      (nth 1 event) (nth 4 event) (nth 3 event) (cdr result))
+             (if (eq result :ignore)
+                 (dbus-method-return-internal
+                  (nth 1 event) (nth 4 event) (nth 3 event))
+                (apply #'dbus-method-return-internal
+                      (nth 1 event) (nth 4 event) (nth 3 event)
+                      (if (consp result) result (list result))))))))
     ;; Error handling.
     (dbus-error
      ;; Return an error message when it is a message call.
      (when (= dbus-message-type-method-call (nth 2 event))
        (dbus-ignore-errors
         (dbus-method-error-internal
-         (nth 1 event) (nth 4 event) (nth 3 event) (cadr err))))
+         (nth 1 event) (nth 4 event) (nth 3 event) dbus-error-failed
+          (error-message-string err))))
      ;; Propagate D-Bus error messages.
      (run-hook-with-args 'dbus-event-error-functions event err)
      (when dbus-debug
@@ -1420,6 +1455,26 @@ nil is returned."
             (dbus-call-method bus service path dbus-interface-properties
                               "GetAll" :timeout 500 interface))))
 
+(defun dbus-get-this-registered-property (bus _service path interface property)
+  "Return PROPERTY entry of `dbus-registered-objects-table'.
+Filter out not matching PATH."
+  ;; Remove entries not belonging to this case.
+  (seq-remove
+   (lambda (item)
+     (not (string-equal path (nth 2 item))))
+   (gethash (list :property bus interface property)
+            dbus-registered-objects-table)))
+
+(defun dbus-get-other-registered-property (bus _service path interface 
property)
+  "Return PROPERTY entry of `dbus-registered-objects-table'.
+Filter out matching PATH."
+  ;; Remove matching entries.
+  (seq-remove
+   (lambda (item)
+     (string-equal path (nth 2 item)))
+   (gethash (list :property bus interface property)
+            dbus-registered-objects-table)))
+
 (defun dbus-register-property
   (bus service path interface property access value
    &optional emits-signal dont-register-service)
@@ -1436,14 +1491,14 @@ discussion of DONT-REGISTER-SERVICE below).  INTERFACE 
is the
 name of the interface used at PATH, PROPERTY is the name of the
 property of INTERFACE.  ACCESS indicates, whether the property
 can be changed by other services via D-Bus.  It must be either
-the symbol `:read' or `:readwrite'.  VALUE is the initial value
-of the property, it can be of any valid type (see
+the symbol `:read', `:write' or `:readwrite'.  VALUE is the
+initial value of the property, it can be of any valid type (see
 `dbus-call-method' for details).
 
 If PROPERTY already exists on PATH, it will be overwritten.  For
 properties with access type `:read' this is the only way to
-change their values.  Properties with access type `:readwrite'
-can be changed by `dbus-set-property'.
+change their values.  Properties with access type `:write' or
+`:readwrite' can be changed by `dbus-set-property'.
 
 The interface \"org.freedesktop.DBus.Properties\" is added to
 PATH, including a default handler for the \"Get\", \"GetAll\" and
@@ -1457,7 +1512,7 @@ of noticing the newly registered property.  When 
interfaces are
 constructed incrementally by adding single methods or properties
 at a time, DONT-REGISTER-SERVICE can be used to prevent other
 clients from discovering the still incomplete interface."
-  (unless (member access '(:read :readwrite))
+  (unless (member access '(:read :write :readwrite))
     (signal 'wrong-type-argument (list "Access type invalid" access)))
 
   ;; Add handlers for the three property-related methods.
@@ -1479,19 +1534,25 @@ clients from discovering the still incomplete 
interface."
   (when emits-signal
     (dbus-send-signal
      bus service path dbus-interface-properties "PropertiesChanged"
-     `((:dict-entry ,property (:variant ,value)))
-     '(:array)))
+     (if (member access '(:read :readwrite))
+         `(:array (:dict-entry ,property (:variant ,value)))
+       '(:array: :signature "{sv}"))
+     (if (eq access :write)
+         `(:array ,property)
+       '(:array))))
 
   ;; Create a hash table entry.  We use nil for the unique name,
   ;; because the property might be accessed from anybody.
   (let ((key (list :property bus interface property))
        (val
-        (list
+         (cons
          (list
           nil service path
           (cons
            (if emits-signal (list access :emits-signal) (list access))
-           value)))))
+           value))
+          (dbus-get-other-registered-property
+           bus service path interface property))))
     (puthash key val dbus-registered-objects-table)
 
     ;; Return the object.
@@ -1509,55 +1570,70 @@ It will be registered for all objects created by 
`dbus-register-property'."
     (cond
      ;; "Get" returns a variant.
      ((string-equal method "Get")
-      (let ((entry (gethash (list :property bus interface property)
-                           dbus-registered-objects-table)))
-       (when (string-equal path (nth 2 (car entry)))
-         `((:variant ,(cdar (last (car entry))))))))
+      (let* ((entry (dbus-get-this-registered-property
+                     bus service path interface property))
+             (object (car (last (car entry)))))
+        (cond
+         ((not (consp object))
+          `(:error ,dbus-error-invalid-args
+            ,(format-message
+              "No such property \"%s\" at path \"%s\"" property path)))
+         ((eq (car object) :write)
+          `(:error ,dbus-error-access-denied
+            ,(format-message
+              "Property \"%s\" at path \"%s\" is not readable" property path)))
+        ;; Return the result.
+         (t `((:variant ,(cdar (last (car entry)))))))))
 
      ;; "Set" expects a variant.
      ((string-equal method "Set")
       (let* ((value (caar (cddr args)))
-            (entry (gethash (list :property bus interface property)
-                            dbus-registered-objects-table))
-            ;; The value of the hash table is a list; in case of
-            ;; properties it contains just one element (UNAME SERVICE
-            ;; PATH OBJECT).  OBJECT is a cons cell of a list, which
-            ;; contains a list of annotations (like :read,
-            ;; :read-write, :emits-signal), and the value of the
-            ;; property.
+            (entry (dbus-get-this-registered-property
+                     bus service path interface property))
             (object (car (last (car entry)))))
-       (unless (consp object)
-         (signal 'dbus-error
-                 (list "Property not registered at path" property path)))
-       (unless (member :readwrite (car object))
-         (signal 'dbus-error
-                 (list "Property not writable at path" property path)))
-       (puthash (list :property bus interface property)
-                (list (append (butlast (car entry))
-                              (list (cons (car object) value))))
-                dbus-registered-objects-table)
-       ;; Send the "PropertiesChanged" signal.
-       (when (member :emits-signal (car object))
-         (dbus-send-signal
-          bus service path dbus-interface-properties "PropertiesChanged"
-          `((:dict-entry ,property (:variant ,value)))
-          '(:array)))
-       ;; Return empty reply.
-       :ignore))
+        (cond
+         ((not (consp object))
+          `(:error ,dbus-error-invalid-args
+            ,(format-message
+              "No such property \"%s\" at path \"%s\"" property path)))
+         ((eq (car object) :read)
+          `(:error ,dbus-error-property-read-only
+            ,(format-message
+              "Property \"%s\" at path \"%s\" is not writable" property path)))
+         (t (puthash (list :property bus interface property)
+                    (cons (append (butlast (car entry))
+                                  (list (cons (car object) value)))
+                           (dbus-get-other-registered-property
+                            bus service path interface property))
+                    dbus-registered-objects-table)
+           ;; Send the "PropertiesChanged" signal.
+           (when (member :emits-signal (car object))
+             (dbus-send-signal
+              bus service path dbus-interface-properties "PropertiesChanged"
+              (if (or (member :read (car object))
+                       (member :readwrite (car object)))
+                   `(:array (:dict-entry ,property (:variant ,value)))
+                 '(:array: :signature "{sv}"))
+               (if (eq (car object) :write)
+                   `(:array ,property)
+                 '(:array))))
+            ;; Return empty reply.
+           :ignore))))
 
      ;; "GetAll" returns "a{sv}".
      ((string-equal method "GetAll")
       (let (result)
        (maphash
         (lambda (key val)
-          (when (and (equal (butlast key) (list :property bus interface))
-                     (string-equal path (nth 2 (car val)))
-                     (not (functionp (car (last (car val))))))
-            (push
-             (list :dict-entry
-                   (car (last key))
-                   (list :variant (cdar (last (car val)))))
-              result)))
+           (dolist (item val)
+            (when (and (equal (butlast key) (list :property bus interface))
+                       (string-equal path (nth 2 item))
+                       (not (functionp (car (last item)))))
+              (push
+               (list :dict-entry
+                     (car (last key))
+                     (list :variant (cdar (last item))))
+                result))))
         dbus-registered-objects-table)
        ;; Return the result, or an empty array.
        (list :array (or result '(:signature "{sv}"))))))))
@@ -1765,5 +1841,7 @@ this connection to those buses."
 
 ;; * Implement org.freedesktop.DBus.ObjectManager.InterfacesAdded and
 ;;   org.freedesktop.DBus.ObjectManager.InterfacesRemoved.
+;;
+;; * Run handlers in own threads.
 
 ;;; dbus.el ends here
diff --git a/lisp/net/eudcb-macos-contacts.el b/lisp/net/eudcb-macos-contacts.el
index e2d10e3..3c0d88f 100644
--- a/lisp/net/eudcb-macos-contacts.el
+++ b/lisp/net/eudcb-macos-contacts.el
@@ -96,7 +96,8 @@ RETURN-ATTRS is a list of attributes to return, defaulting to
                   (name (nth 0 args))
                   (email (nth 1 args)))
              (setq result (cons `((name . ,name)
-                                  (email . ,email)) result))))
+                                  (email . ,email))
+                                result))))
        (forward-line))
       result)))
 
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 04deb5b..4b897fa3 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -1402,16 +1402,15 @@ See URL 
`https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
        (options nil)
        (start (point))
        (max 0))
-    (dolist (elem (dom-non-text-children dom))
-      (when (eq (dom-tag elem) 'option)
-       (when (dom-attr elem 'selected)
-         (nconc menu (list :value (dom-attr elem 'value))))
-       (let ((display (dom-text elem)))
-         (setq max (max max (length display)))
-         (push (list 'item
-                     :value (dom-attr elem 'value)
-                     :display display)
-               options))))
+    (dolist (elem (dom-by-tag dom 'option))
+      (when (dom-attr elem 'selected)
+       (nconc menu (list :value (dom-attr elem 'value))))
+      (let ((display (dom-text elem)))
+       (setq max (max max (length display)))
+       (push (list 'item
+                   :value (dom-attr elem 'value)
+                   :display display)
+             options)))
     (when options
       (setq options (nreverse options))
       ;; If we have no selected values, default to the first value.
@@ -1451,12 +1450,13 @@ See URL 
`https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
                               (cons (plist-get (cdr elem) :display)
                                     (plist-get (cdr elem) :value))))
                        input)))
-        (display
-         (completing-read "Change value: " options nil 'require-match))
+        (display (completing-read "Change value: " options nil 'require-match))
         (inhibit-read-only t))
-    (plist-put input :value (cdr (assoc-string display options t)))
-    (goto-char
-     (eww-update-field display))))
+    ;; If the user doesn't enter anything, don't change anything.
+    (when (> (length display) 0)
+      (plist-put input :value (cdr (assoc-string display options t)))
+      (goto-char
+       (eww-update-field display)))))
 
 (defun eww-update-field (string &optional offset)
   (unless offset
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index 8fdc758..6517596 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -751,10 +751,10 @@ size, and full-buffer size."
               (face (get-text-property (point) 'face)))
           ;; Extend the background to the end of the line.
           (insert ?\n)
+         (shr-indent)
           (when face
-            (put-text-property (1- (point)) (point)
+            (put-text-property gap-start (point)
                                'face (shr-face-background face)))
-         (shr-indent)
           (when (and (> (1- gap-start) (point-min))
                      (get-text-property (point) 'shr-url)
                      ;; The link on both sides of the newline are the
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
index 52cc186..827d5f6 100644
--- a/lisp/net/tramp-cmds.el
+++ b/lisp/net/tramp-cmds.el
@@ -482,9 +482,7 @@ For details, see `tramp-rename-files'."
 (defun tramp-bug ()
   "Submit a bug report to the Tramp developers."
   (interactive)
-  (let ((reporter-prompt-for-summary-p t)
-       ;; In rare cases, it could contain the password.  So we make it nil.
-       tramp-password-save-function)
+  (let ((reporter-prompt-for-summary-p t))
     (reporter-submit-bug-report
      tramp-bug-report-address    ; to-address
      (format "tramp (%s %s/%s)" ; package name and version
@@ -492,10 +490,11 @@ For details, see `tramp-rename-files'."
      (sort
       (delq nil (mapcar
        (lambda (x)
-         (and x (boundp x) (cons x 'tramp-reporter-dump-variable)))
+         (and x (boundp x) (not (get x 'tramp-suppress-trace))
+              (cons x 'tramp-reporter-dump-variable)))
        (append
         (mapcar #'intern (all-completions "tramp-" obarray #'boundp))
-        ;; Non-tramp variables of interest.
+        ;; Non-Tramp variables of interest.
         '(shell-prompt-pattern
           backup-by-copying
           backup-by-copying-when-linked
@@ -552,11 +551,11 @@ buffer in your bug report.
                 (string-match-p
                  (concat "[^" (bound-and-true-p mm-7bit-chars) "]") val))
        (with-current-buffer reporter-eval-buffer
-         (set
-          varsym
-          (format
-           "(decode-coding-string (base64-decode-string \"%s\") 'raw-text)"
-           (base64-encode-string (encode-coding-string val 'raw-text)))))))
+         (set varsym
+              `(decode-coding-string
+                (base64-decode-string
+                 ,(base64-encode-string (encode-coding-string val 'raw-text)))
+                'raw-text)))))
 
     ;; Dump variable.
     (reporter-dump-variable varsym mailbuf)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 28067fa..9644639 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -80,6 +80,7 @@
 (eval-and-compile ;; So it's also available in tramp-loaddefs.el!
   (defvar tramp--startup-hook nil
     "Forms to be executed at the end of tramp.el.")
+  (put 'tramp--startup-hook 'tramp-suppress-trace t)
 
   (defmacro tramp--with-startup (&rest body)
     "Schedule BODY to be executed at the end of tramp.el."
@@ -1241,6 +1242,7 @@ the (optional) timestamp of last activity on this 
connection.")
   "Password save function.
 Will be called once the password has been verified by successful
 authentication.")
+(put 'tramp-password-save-function 'tramp-suppress-trace t)
 
 (defconst tramp-completion-file-name-handler-alist
   '((file-name-all-completions
diff --git a/lisp/pcmpl-linux.el b/lisp/pcmpl-linux.el
index 6e03643..df9d245 100644
--- a/lisp/pcmpl-linux.el
+++ b/lisp/pcmpl-linux.el
@@ -1,4 +1,4 @@
-;;; pcmpl-linux.el --- functions for dealing with GNU/Linux completions
+;;; pcmpl-linux.el --- functions for dealing with GNU/Linux completions  -*- 
lexical-binding: t -*-
 
 ;; Copyright (C) 1999-2020 Free Software Foundation, Inc.
 
@@ -65,18 +65,22 @@
   (pcomplete-opt "hVanfFrsvwt(pcmpl-linux-fs-types)o?L?U?")
   (while (pcomplete-here (pcomplete-entries) nil 'identity)))
 
+(defconst pcmpl-linux-fs-modules-path-format "/lib/modules/%s/kernel/fs/")
+
 (defun pcmpl-linux-fs-types ()
   "Return a list of available fs modules on GNU/Linux systems."
   (let ((kernel-ver (pcomplete-process-result "uname" "-r")))
     (directory-files
-     (concat "/lib/modules/" kernel-ver "/kernel/fs/"))))
+     (format pcmpl-linux-fs-modules-path-format kernel-ver))))
+
+(defconst pcmpl-linux-mtab-file "/etc/mtab")
 
 (defun pcmpl-linux-mounted-directories ()
   "Return a list of mounted directory names."
   (let (points)
-    (when (file-readable-p "/etc/mtab")
+    (when (file-readable-p pcmpl-linux-mtab-file)
       (with-temp-buffer
-       (insert-file-contents-literally "/etc/mtab")
+        (insert-file-contents-literally pcmpl-linux-mtab-file)
        (while (not (eobp))
          (let* ((line (buffer-substring (point) (line-end-position)))
                 (args (split-string line " ")))
diff --git a/lisp/pcmpl-unix.el b/lisp/pcmpl-unix.el
index f1c8725..822f6f3 100644
--- a/lisp/pcmpl-unix.el
+++ b/lisp/pcmpl-unix.el
@@ -1,4 +1,4 @@
-;;; pcmpl-unix.el --- standard UNIX completions
+;;; pcmpl-unix.el --- standard UNIX completions  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1999-2020 Free Software Foundation, Inc.
 
@@ -155,12 +155,14 @@ documentation), this function returns nil."
       (let ((host-re 
"\\(?:\\([-.[:alnum:]]+\\)\\|\\[\\([-.[:alnum:]]+\\)\\]:[0-9]+\\)[, ]")
             ssh-hosts-list)
         (while (re-search-forward (concat "^ *" host-re) nil t)
-          (add-to-list 'ssh-hosts-list (concat (match-string 1)
-                                               (match-string 2)))
+          (push (concat (match-string 1)
+                        (match-string 2))
+                ssh-hosts-list)
           (while (and (eq (char-before) ?,)
                       (re-search-forward host-re (line-end-position) t))
-            (add-to-list 'ssh-hosts-list (concat (match-string 1)
-                                                 (match-string 2)))))
+            (push  (concat (match-string 1)
+                           (match-string 2))
+                   ssh-hosts-list)))
         ssh-hosts-list))))
 
 (defun pcmpl-ssh-config-hosts ()
@@ -173,7 +175,7 @@ documentation), this function returns nil."
             (case-fold-search t))
         (while (re-search-forward "^ *host\\(name\\)? +\\([-.[:alnum:]]+\\)"
                                   nil t)
-          (add-to-list 'ssh-hosts-list (match-string 2)))
+          (push (match-string 2) ssh-hosts-list))
         ssh-hosts-list))))
 
 (defun pcmpl-ssh-hosts ()
@@ -181,7 +183,7 @@ documentation), this function returns nil."
 Uses both `pcmpl-ssh-config-file' and `pcmpl-ssh-known-hosts-file'."
   (let ((hosts (pcmpl-ssh-known-hosts)))
     (dolist (h (pcmpl-ssh-config-hosts))
-      (add-to-list 'hosts h))
+      (push h hosts))
     hosts))
 
 ;;;###autoload
diff --git a/lisp/play/gamegrid.el b/lisp/play/gamegrid.el
index f013213..9b74eb9 100644
--- a/lisp/play/gamegrid.el
+++ b/lisp/play/gamegrid.el
@@ -265,12 +265,7 @@ format."
   (set-face-foreground face color)
   (set-face-background face color)
   (gamegrid-set-font face)
-  (condition-case nil
-      (set-face-background-pixmap face [nothing]);; XEmacs
-    (error nil))
-  (condition-case nil
-      (set-face-background-pixmap face nil);; Emacs
-    (error nil)))
+  (set-face-background-pixmap face nil))
 
 (defun gamegrid-make-mono-tty-face ()
   (let ((face (make-face 'gamegrid-mono-tty-face)))
diff --git a/lisp/play/life.el b/lisp/play/life.el
index 06d5b40..56ecc52 100644
--- a/lisp/play/life.el
+++ b/lisp/play/life.el
@@ -1,4 +1,4 @@
-;;; life.el --- John Horton Conway's `Life' game for GNU Emacs
+;;; life.el --- John Horton Conway's Game of Life  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1988, 2001-2020 Free Software Foundation, Inc.
 
@@ -29,6 +29,15 @@
 
 ;;; Code:
 
+(defgroup life nil
+  "Conway's Game of Life."
+  :group 'games)
+
+(defcustom life-step-time 0.5
+  "Time to sleep between steps (generations)."
+  :type 'number
+  :version "28.1")
+
 (defvar life-patterns
   [("@@@" " @@" "@@@")
    ("@@@ @@@" "@@  @@ " "@@@ @@@")
@@ -54,6 +63,7 @@
     "               @@")
    ("@@@@@@@@@" "@   @   @" "@ @@@@@ @" "@ @   @ @" "@@@   @@@"
     "@ @   @ @" "@ @@@@@ @" "@   @   @" "@@@@@@@@@")
+   ;; Glider Gun (infinite, Bill Gosper, 1970)
    ("                        @           "
     "                      @ @           "
     "            @@      @@            @@"
@@ -74,7 +84,26 @@
     "   @@"
     " @@ @"
     "@ @ @")
-   ("@@@@@@@@ @@@@@   @@@      @@@@@@@ @@@@@")]
+   ("@@@@@@@@ @@@@@   @@@      @@@@@@@ @@@@@")
+   ;; Pentadecathlon (period 15, John Conway, 1970)
+   ("  @    @  "
+    "@@ @@@@ @@"
+    "  @    @  ")
+   ;; Queen Bee Shuttle (period 30, Bill Gosper, 1970)
+   ("         @            "
+    "       @ @            "
+    "      @ @             "
+    "@@   @  @           @@"
+    "@@    @ @           @@"
+    "       @ @            "
+    "         @            ")
+   ;; 2x Figure eight (period 8, Simon Norton, 1970)
+   ("@@@            @@@   "
+    "@@@            @@@   "
+    "@@@            @@@   "
+    "   @@@            @@@"
+    "   @@@            @@@"
+    "   @@@            @@@")]
   "Vector of rectangles containing some Life startup patterns.")
 
 ;; Macros are used macros for manifest constants instead of variables
@@ -106,28 +135,45 @@
 ;; (scroll-up) and (scroll-down) when trying to center the display.
 (defvar life-window-start nil)
 
+(defvar life--max-width nil
+  "If non-nil, restrict width to this positive integer. ")
+
+(defvar life--max-height nil
+  "If non-nil, restrict height to this positive integer. ")
+
 ;; For mode line
 (defvar life-current-generation nil)
 ;; Sadly, mode-line-format won't display numbers.
 (defvar life-generation-string nil)
 
+(defun life--tick ()
+  "Game tick for `life'."
+  (let ((inhibit-quit t)
+        (inhibit-read-only t))
+    (life-grim-reaper)
+    (life-expand-plane-if-needed)
+    (life-increment-generation)))
+
 ;;;###autoload
-(defun life (&optional sleeptime)
+(defun life (&optional step-time)
   "Run Conway's Life simulation.
-The starting pattern is randomly selected.  Prefix arg (optional first
-arg non-nil from a program) is the number of seconds to sleep between
-generations (this defaults to 1)."
-  (interactive "p")
-  (or sleeptime (setq sleeptime 1))
+The starting pattern is randomly selected from `life-patterns'.
+
+Prefix arg is the number of tenths of a second to sleep between
+generations (the default is `life-step-time').
+
+When called from Lisp, optional argument STEP-TIME is the time to
+sleep in seconds."
+  (interactive "P")
+  (setq step-time (or (and step-time (/ (if (consp step-time)
+                                            (car step-time)
+                                          step-time) 10.0))
+                      life-step-time))
   (life-setup)
   (catch 'life-exit
     (while t
-      (let ((inhibit-quit t)
-           (inhibit-read-only t))
-       (life-display-generation sleeptime)
-       (life-grim-reaper)
-       (life-expand-plane-if-needed)
-       (life-increment-generation)))))
+      (life-display-generation step-time)
+      (life--tick))))
 
 (define-derived-mode life-mode special-mode "Life"
   "Major mode for the buffer of `life'."
@@ -138,16 +184,17 @@ generations (this defaults to 1)."
   (setq-local life-generation-string "0")
   (setq-local mode-line-buffer-identification '("Life: generation "
                                                 life-generation-string))
-  (setq-local fill-column (1- (window-width)))
+  (setq-local fill-column (min (or life--max-width most-positive-fixnum)
+                               (1- (window-width))))
   (setq-local life-window-start 1)
   (buffer-disable-undo))
 
 (defun life-setup ()
   (switch-to-buffer (get-buffer-create "*Life*") t)
-  (erase-buffer)
-  (life-mode)
   ;; stuff in the random pattern
   (let ((inhibit-read-only t))
+    (erase-buffer)
+    (life-mode)
     (life-insert-random-pattern)
     ;; make sure (life-life-char) is used throughout
     (goto-char (point-min))
@@ -160,7 +207,8 @@ generations (this defaults to 1)."
        (indent-to n)
        (forward-line)))
     ;; center the pattern vertically
-    (let ((n (/ (- (1- (window-height))
+    (let ((n (/ (- (min (or life--max-height most-positive-fixnum)
+                        (1- (window-height)))
                   (count-lines (point-min) (point-max)))
                2)))
       (goto-char (point-min))
@@ -276,12 +324,12 @@ generations (this defaults to 1)."
         (insert ?\n)
         (setq life-window-start (+ life-window-start fill-column 1)))))
 
-(defun life-display-generation (sleeptime)
+(defun life-display-generation (step-time)
   (goto-char life-window-start)
   (recenter 0)
 
   ;; Redisplay; if the user has hit a key, exit the loop.
-  (or (and (sit-for sleeptime) (< 0 sleeptime))
+  (or (and (sit-for step-time) (< 0 step-time))
       (not (input-pending-p))
       (throw 'life-exit nil)))
 
diff --git a/lisp/play/pong.el b/lisp/play/pong.el
index d572334..4e6d73b 100644
--- a/lisp/play/pong.el
+++ b/lisp/play/pong.el
@@ -1,4 +1,4 @@
-;;; pong.el --- classical implementation of pong
+;;; pong.el --- classical implementation of pong  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1999-2020 Free Software Foundation, Inc.
 
@@ -33,88 +33,72 @@
 ;;; Customization
 
 (defgroup pong nil
-  "Emacs-Lisp implementation of the classical game pong."
+  "Emacs Lisp implementation of the classical game pong."
   :tag "Pong"
   :group 'games)
 
 (defcustom pong-buffer-name "*Pong*"
   "Name of the buffer used to play."
-  :group 'pong
   :type '(string))
 
 (defcustom pong-width 50
   "Width of the playfield."
-  :group 'pong
   :type '(integer))
 
 (defcustom pong-height (min 30 (- (frame-height) 6))
   "Height of the playfield."
-  :group 'pong
   :type '(integer))
 
 (defcustom pong-bat-width 3
   "Width of the bats for pong."
-  :group 'pong
   :type '(integer))
 
 (defcustom pong-blank-color "black"
   "Color used for background."
-  :group 'pong
   :type 'color)
 
 (defcustom pong-bat-color "yellow"
   "Color used for bats."
-  :group 'pong
   :type 'color)
 
 (defcustom pong-ball-color "red"
   "Color used for the ball."
-  :group 'pong
   :type 'color)
 
 (defcustom pong-border-color "white"
   "Color used for pong borders."
-  :group 'pong
   :type 'color)
 
 (defcustom pong-left-key "4"
   "Alternate key to press for bat 1 to go up (primary one is [left])."
-  :group 'pong
   :type '(restricted-sexp :match-alternatives (stringp vectorp)))
 
 (defcustom pong-right-key "6"
   "Alternate key to press for bat 1 to go down (primary one is [right])."
-  :group 'pong
   :type '(restricted-sexp :match-alternatives (stringp vectorp)))
 
 (defcustom pong-up-key "8"
   "Alternate key to press for bat 2 to go up (primary one is [up])."
-  :group 'pong
   :type '(restricted-sexp :match-alternatives (stringp vectorp)))
 
 (defcustom pong-down-key "2"
   "Alternate key to press for bat 2 to go down (primary one is [down])."
-  :group 'pong
   :type '(restricted-sexp :match-alternatives (stringp vectorp)))
 
 (defcustom pong-quit-key "q"
   "Key to press to quit pong."
-  :group 'pong
   :type '(restricted-sexp :match-alternatives (stringp vectorp)))
 
 (defcustom pong-pause-key "p"
   "Key to press to pause pong."
-  :group 'pong
   :type '(restricted-sexp :match-alternatives (stringp vectorp)))
 
 (defcustom pong-resume-key "p"
   "Key to press to resume pong."
-  :group 'pong
   :type '(restricted-sexp :match-alternatives (stringp vectorp)))
 
 (defcustom pong-timer-delay 0.1
   "Time to wait between every cycle."
-  :group 'pong
   :type 'number)
 
 
diff --git a/lisp/play/snake.el b/lisp/play/snake.el
index 70d80c4..8ea214d 100644
--- a/lisp/play/snake.el
+++ b/lisp/play/snake.el
@@ -1,4 +1,4 @@
-;;; snake.el --- implementation of Snake for Emacs
+;;; snake.el --- implementation of Snake for Emacs  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1997, 2001-2020 Free Software Foundation, Inc.
 
@@ -279,7 +279,7 @@ and then start moving it leftwards.")
        snake-velocity-queue    nil)
   (let ((x snake-initial-x)
        (y snake-initial-y))
-    (dotimes (i snake-length)
+    (dotimes (_ snake-length)
       (gamegrid-set-cell x y snake-snake)
       (setq snake-positions (cons (vector x y) snake-positions))
       (cl-incf x snake-velocity-x)
diff --git a/lisp/play/tetris.el b/lisp/play/tetris.el
index 97979b5..e25cacb 100644
--- a/lisp/play/tetris.el
+++ b/lisp/play/tetris.el
@@ -1,4 +1,4 @@
-;;; tetris.el --- implementation of Tetris for Emacs
+;;; tetris.el --- implementation of Tetris for Emacs  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1997, 2001-2020 Free Software Foundation, Inc.
 
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 81bcd10..2ffbde9 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -1204,7 +1204,7 @@ Note that the style variables are always made local to 
the buffer."
     (while (progn
             (parse-partial-sexp (point) end nil nil st-s 'syntax-table)
             (unless (bobp)
-              (c-clear-char-property (1- (point)) 'syntax-table))
+              (c-clear-syn-tab (1- (point))))
             (setq st-pos (point))
             (and (< (point) end)
                  (not (eq (char-before) ?\")))))
@@ -1237,7 +1237,7 @@ Note that the style variables are always made local to 
the buffer."
             t)
            (t
             ;; At a significant "
-            (c-clear-char-property (1- (point)) 'syntax-table)
+            (c-clear-syn-tab (1- (point)))
             (setq pos-ll (c-literal-limits)
                   pos-lt (c-literal-type pos-ll))
             nil)))
@@ -1245,7 +1245,7 @@ Note that the style variables are always made local to 
the buffer."
       (cond
        ((bobp))
        ((eq pos-lt 'string)
-       (c-put-char-property (1- (point)) 'syntax-table '(15)))
+       (c-put-syn-tab (1- (point)) '(15)))
        (t nil)))))
 
 (defun c-put-syn-tab (pos value)
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 731db0f..1b1920b 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1148,12 +1148,13 @@ POS and RES.")
            (setcdr l1 (cons (list ,key) l2)))))))
 
 (defun compilation-auto-jump (buffer pos)
-  (with-current-buffer buffer
-    (goto-char pos)
-    (let ((win (get-buffer-window buffer 0)))
-      (if win (set-window-point win pos)))
-    (if compilation-auto-jump-to-first-error
-       (compile-goto-error))))
+  (when (buffer-live-p buffer)
+    (with-current-buffer buffer
+      (goto-char pos)
+      (let ((win (get-buffer-window buffer 0)))
+        (if win (set-window-point win pos)))
+      (if compilation-auto-jump-to-first-error
+         (compile-goto-error)))))
 
 ;; This function is the central driver, called when font-locking to gather
 ;; all information needed to later jump to corresponding source code.
@@ -2064,6 +2065,8 @@ Returns the compilation buffer created."
     (define-key map "\M-p" 'compilation-previous-error)
     (define-key map "\M-{" 'compilation-previous-file)
     (define-key map "\M-}" 'compilation-next-file)
+    (define-key map "n" 'next-error-no-select)
+    (define-key map "p" 'previous-error-no-select)
     (define-key map "\t" 'compilation-next-error)
     (define-key map [backtab] 'compilation-previous-error)
     (define-key map "g" 'recompile) ; revert
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index 44579cf..7a1c2e4 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -3241,8 +3241,8 @@ Return the error message (if any).  Does not work if 
delimiter is `)'.
 Works before syntax recognition is done."
   ;; Works *before* syntax recognition is done
   (or st-l (setq st-l (list nil)))     ; Avoid overwriting '()
-  (let (st b reset-st)
-    (condition-case b
+  (let (st result reset-st)
+    (condition-case err
        (progn
          (setq st (cperl-cached-syntax-table st-l))
          (modify-syntax-entry ?\( "()" st)
@@ -3250,8 +3250,7 @@ Works before syntax recognition is done."
          (setq reset-st (syntax-table))
          (set-syntax-table st)
          (forward-sexp 1))
-      (error (message
-             "cperl-forward-group-in-re: error %s" b)))
+      (error (setq result err)))
     ;; now restore the initial state
     (if st
        (progn
@@ -3259,7 +3258,7 @@ Works before syntax recognition is done."
          (modify-syntax-entry ?\) "." st)))
     (if reset-st
        (set-syntax-table reset-st))
-    b))
+    result))
 
 
 (defvar font-lock-string-face)
@@ -4820,9 +4819,10 @@ conditional/loop constructs."
          (while (< (point) tmp-end)
            (parse-partial-sexp (point) tmp-end nil t) ; To start-sexp or eol
            (or (eolp) (forward-sexp 1)))
-         (if (> (point) tmp-end)       ; Yes, there an unfinished block
+         (if (> (point) tmp-end)       ; Check for an unfinished block
              nil
            (if (eq ?\) (preceding-char))
+               ;; closing parens can be preceded by up to three sexps
                (progn ;; Plan B: find by REGEXP block followup this line
                  (setq top (point))
                  (condition-case nil
@@ -4843,7 +4843,9 @@ conditional/loop constructs."
                            (progn
                              (goto-char top)
                              (forward-sexp 1)
-                             (setq top (point)))))
+                             (setq top (point)))
+                         ;; no block to be processed: expression ends here
+                         (setq done t)))
                    (error (setq done t)))
                  (goto-char top))
              (if (looking-at           ; Try Plan C: continuation block
@@ -5774,8 +5776,8 @@ indentation and initial hashes.  Behaves usually outside 
of comment."
                  t-font-lock-keywords)
                cperl-font-lock-keywords cperl-font-lock-keywords-1
                cperl-font-lock-keywords-2 (append
-                                          cperl-font-lock-keywords-1
-                                          t-font-lock-keywords-1)))
+                                          t-font-lock-keywords-1
+                                          cperl-font-lock-keywords-1)))
        (if (fboundp 'ps-print-buffer) (cperl-ps-print-init))
        (if (or (featurep 'choose-color) (featurep 'font-lock-extra))
            (eval                       ; Avoid a warning
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 21ba42a..72b94a5 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -1421,7 +1421,7 @@ Intended for `eldoc-documentation-functions' (which see)."
   "Document variable at point.
 Intended for `eldoc-documentation-functions' (which see)."
   (let* ((sym (elisp--current-symbol))
-        (docstring (and sym (elisp-get-var-docstring sym))))
+         (docstring (and sym (elisp-get-var-docstring sym))))
     (when docstring
       (funcall callback docstring
                :thing sym
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 37e7324..bdb7757 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -1002,7 +1002,7 @@ special *Flymake log* buffer."  :group 'flymake :lighter
     (add-hook 'after-change-functions 'flymake-after-change-function nil t)
     (add-hook 'after-save-hook 'flymake-after-save-hook nil t)
     (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook nil t)
-    (add-hook 'eldoc-documentation-functions 'flymake-eldoc-function nil t)
+    (add-hook 'eldoc-documentation-functions 'flymake-eldoc-function t t)
 
     ;; If Flymake happened to be alrady already ON, we must cleanup
     ;; existing diagnostic overlays, lest we forget them by blindly
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 4fae3e9..7180ba3 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1,7 +1,7 @@
 ;;; project.el --- Operations on the current project  -*- lexical-binding: t; 
-*-
 
 ;; Copyright (C) 2015-2020 Free Software Foundation, Inc.
-;; Version: 0.5.1
+;; Version: 0.5.2
 ;; Package-Requires: ((emacs "26.3") (xref "1.0.2"))
 
 ;; This is a GNU ELPA :core package.  Avoid using functionality that
@@ -667,7 +667,9 @@ The following commands are available:
   (interactive)
   (project--other-place-command '((display-buffer-in-new-tab))))
 
-;;;###autoload (define-key tab-prefix-map "p" #'project-other-tab-command)
+;;;###autoload
+(when (bound-and-true-p tab-prefix-map)
+  (define-key tab-prefix-map "p" #'project-other-tab-command))
 
 (declare-function grep-read-files "grep")
 (declare-function xref--show-xrefs "xref")
diff --git a/lisp/svg.el b/lisp/svg.el
index 7aadbc2..eeb945f 100644
--- a/lisp/svg.el
+++ b/lisp/svg.el
@@ -5,7 +5,7 @@
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;         Felix E. Klee <felix.klee@inka.de>
 ;; Keywords: image
-;; Version: 1.0
+;; Version: 1.1
 ;; Package-Requires: ((emacs "25"))
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 9805928..6889d7e 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -1904,7 +1904,7 @@ before point that's highlighted as misspelled."
          (while (and (setq pos (previous-overlay-change pos))
                      (not (= pos pos1)))
            (setq pos1 pos)
-           (if (> pos (point-min))
+           (if (>= pos (point-min))
                (progn
                  (setq ovs (overlays-at pos))
                  (while (consp ovs)
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 1672dce..04f1ddd 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -46,7 +46,8 @@
 
 (defcustom sgml-basic-offset 2
   "Specifies the basic indentation level for `sgml-indent-line'."
-  :type 'integer)
+  :type 'integer
+  :safe #'integerp)
 
 (defcustom sgml-attribute-offset 0
   "Specifies a delta for attribute indentation in `sgml-indent-line'.
diff --git a/lisp/time.el b/lisp/time.el
index 1ab992a..534f128 100644
--- a/lisp/time.el
+++ b/lisp/time.el
@@ -29,6 +29,8 @@
 
 ;;; Code:
 
+(eval-when-compile (require 'subr-x))
+
 (defgroup display-time nil
   "Display time and load in mode line of Emacs."
   :group 'mode-line
@@ -559,26 +561,31 @@ See `world-clock'."
 The variable `world-clock-list' specifies which time zones to use.
 To turn off the world time display, go to the window and type 
`\\[quit-window]'."
   (interactive)
-  (when (and world-clock-timer-enable
-             (not (get-buffer world-clock-buffer-name)))
-    (run-at-time t world-clock-timer-second #'world-clock-update))
-  (pop-to-buffer world-clock-buffer-name)
+  (if-let ((buffer (get-buffer world-clock-buffer-name)))
+      (pop-to-buffer buffer)
+    (pop-to-buffer world-clock-buffer-name)
+    (when world-clock-timer-enable
+      (run-at-time t world-clock-timer-second #'world-clock-update)
+      (add-hook 'kill-buffer-hook #'world-clock-cancel-timer nil t)))
   (world-clock-display (time--display-world-list))
   (world-clock-mode)
   (fit-window-to-buffer))
 
+(defun world-clock-cancel-timer ()
+  "Cancel the world clock timer."
+  (let ((list timer-list))
+    (while list
+      (let ((elt (pop list)))
+        (when (equal (symbol-name (timer--function elt))
+                     "world-clock-update")
+          (cancel-timer elt))))))
+
 (defun world-clock-update (&optional _arg _noconfirm)
   "Update the `world-clock' buffer."
   (if (get-buffer world-clock-buffer-name)
       (with-current-buffer (get-buffer world-clock-buffer-name)
         (world-clock-display (time--display-world-list)))
-    ;; cancel timer
-    (let ((list timer-list))
-      (while list
-        (let ((elt (pop list)))
-          (when (equal (symbol-name (timer--function elt))
-                      "world-clock-update")
-            (cancel-timer elt)))))))
+    (world-clock-cancel-timer)))
 
 ;;;###autoload
 (defun emacs-uptime (&optional format)
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index cdf8ab9..6c21900 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -451,7 +451,11 @@ If NOINSERT, ignore elements on ENTRIES which are not in 
the ewoc."
                      (setf (vc-dir-fileinfo->state (ewoc-data node)) (nth 1 
entry))
                      (setf (vc-dir-fileinfo->extra (ewoc-data node)) (nth 2 
entry))
                      (setf (vc-dir-fileinfo->needs-update (ewoc-data node)) 
nil)
-                     (ewoc-invalidate vc-ewoc node))
+                      ;; `ewoc-invalidate' will kill line and insert new text,
+                      ;; let's keep point column.
+                      (let ((p (point)))
+                       (ewoc-invalidate vc-ewoc node)
+                        (goto-char p)))
                  ;; If the state is nil, the file does not exist
                  ;; anymore, so remember the entry so we can remove
                  ;; it after we are done inserting all ENTRIES.
diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el
index 4a04c93..99bf5bf 100644
--- a/lisp/vc/vc-dispatcher.el
+++ b/lisp/vc/vc-dispatcher.el
@@ -691,7 +691,6 @@ BACKEND, if non-nil, specifies a VC backend for the Log 
Edit buffer."
        (message "%s  Type C-c C-c when done" msg)
       (vc-finish-logentry (eq comment t)))))
 
-(declare-function vc-dir-move-to-goal-column "vc-dir" ())
 ;; vc-finish-logentry is typically called from a log-edit buffer (see
 ;; vc-start-logentry).
 (defun vc-finish-logentry (&optional nocomment)
@@ -740,8 +739,6 @@ the buffer contents as a comment."
       (mapc
        (lambda (file) (vc-resynch-buffer file t t))
        log-fileset))
-    (when (vc-dispatcher-browsing)
-      (vc-dir-move-to-goal-column))
     (run-hooks after-hook 'vc-finish-logentry-hook)))
 
 (defun vc-dispatcher-browsing ()
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 5561292..f0a0804 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -1346,8 +1346,6 @@ For old-style locking-based version control systems, like 
RCS:
        nil t)))))
   (vc-call-backend backend 'create-repo))
 
-(declare-function vc-dir-move-to-goal-column "vc-dir" ())
-
 ;;;###autoload
 (defun vc-register (&optional vc-fileset comment)
   "Register into a version control system.
@@ -1398,8 +1396,6 @@ first backend that could register the file is used."
 
        (vc-resynch-buffer file t t))
      files)
-    (when (derived-mode-p 'vc-dir-mode)
-      (vc-dir-move-to-goal-column))
     (message "Registering %s... done" files)))
 
 (defun vc-register-with (backend)
diff --git a/lisp/wdired.el b/lisp/wdired.el
index b98becf..6defbf8 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -461,10 +461,12 @@ non-nil means return old filename."
 
 (defun wdired-do-renames (renames)
   "Perform RENAMES in parallel."
-  (let ((residue ())
-        (progress nil)
-        (errors 0)
-        (overwrite (or (not wdired-confirm-overwrite) 1)))
+  (let* ((residue ())
+         (progress nil)
+         (errors 0)
+         (total (1- (length renames)))
+         (prep (make-progress-reporter "Renaming" 0 total))
+         (overwrite (or (not wdired-confirm-overwrite) 1)))
     (while (or renames
                ;; We've done one round through the renames, we have found
                ;; some residue, but we also made some progress, so maybe
@@ -472,6 +474,7 @@ non-nil means return old filename."
                (prog1 (setq renames residue)
                  (setq progress nil)
                  (setq residue nil)))
+      (progress-reporter-update prep (- total (length renames)))
       (let* ((rename (pop renames))
              (file-new (cdr rename)))
         (cond
@@ -519,6 +522,7 @@ non-nil means return old filename."
                  (dired-log "Rename `%s' to `%s' failed:\n%s\n"
                             file-ori file-new
                             err)))))))))
+    (progress-reporter-done prep)
     errors))
 
 (defun wdired-create-parentdirs (file-new)
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index ea7e266..f58a0fb 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -3161,6 +3161,15 @@ It reads a file name from an editable text field."
   :completions (completion-table-case-fold
                 #'completion-file-name-table
                 (not read-file-name-completion-ignore-case))
+  :match (lambda (widget value)
+           (or (not (widget-get widget :must-match))
+               (file-exists-p value)))
+  :validate (lambda (widget)
+              (let ((value (widget-value widget)))
+                (unless (widget-apply widget :match value)
+                  (widget-put widget
+                              :error (format "File %s does not exist" value))
+                  widget)))
   :prompt-value 'widget-file-prompt-value
   :format "%{%t%}: %v"
   ;; Doesn't work well with terminating newline.
diff --git a/m4/include_next.m4 b/m4/include_next.m4
index 33601aa..9221d9f 100644
--- a/m4/include_next.m4
+++ b/m4/include_next.m4
@@ -1,4 +1,4 @@
-# include_next.m4 serial 25
+# include_next.m4 serial 26
 dnl Copyright (C) 2006-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -106,19 +106,21 @@ dnl We intentionally avoid using AC_LANG_SOURCE here.
   AC_SUBST([INCLUDE_NEXT])
   AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
   AC_SUBST([PRAGMA_SYSTEM_HEADER])
-  AC_CACHE_CHECK([whether system header files limit the line length],
-    [gl_cv_pragma_columns],
-    [dnl HP NonStop systems, which define __TANDEM, have this misfeature.
-     AC_EGREP_CPP([choke me],
+
+  dnl HP NonStop systems, which define __TANDEM, limit the line length
+  dnl after including some system header files.
+  AC_CACHE_CHECK([whether source code line length is unlimited],
+    [gl_cv_source_line_length_unlimited],
+    [AC_EGREP_CPP([choke me],
        [
 #ifdef __TANDEM
 choke me
 #endif
        ],
-       [gl_cv_pragma_columns=yes],
-       [gl_cv_pragma_columns=no])
+       [gl_cv_source_line_length_unlimited=no],
+       [gl_cv_source_line_length_unlimited=yes])
     ])
-  if test $gl_cv_pragma_columns = yes; then
+  if test $gl_cv_source_line_length_unlimited = no; then
     PRAGMA_COLUMNS="#pragma COLUMNS 10000"
   else
     PRAGMA_COLUMNS=
diff --git a/m4/stdint.m4 b/m4/stdint.m4
index e0fa8a5..d5f5d61 100644
--- a/m4/stdint.m4
+++ b/m4/stdint.m4
@@ -1,4 +1,4 @@
-# stdint.m4 serial 55
+# stdint.m4 serial 56
 dnl Copyright (C) 2001-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -302,9 +302,10 @@ static const char *macro_values[] =
       HAVE_C99_STDINT_H=1
       dnl Now see whether the system <stdint.h> works without
       dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined.
-      AC_CACHE_CHECK([whether stdint.h predates C++11],
-        [gl_cv_header_stdint_predates_cxx11_h],
-        [gl_cv_header_stdint_predates_cxx11_h=yes
+      dnl If not, there would be problems when stdint.h is included from C++.
+      AC_CACHE_CHECK([whether stdint.h works without ISO C predefines],
+        [gl_cv_header_stdint_without_STDC_macros],
+        [gl_cv_header_stdint_without_STDC_macros=no
          AC_COMPILE_IFELSE([
            AC_LANG_PROGRAM([[
 #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
@@ -315,13 +316,14 @@ gl_STDINT_INCLUDES
 intmax_t im = INTMAX_MAX;
 int32_t i32 = INT32_C (0x7fffffff);
            ]])],
-           [gl_cv_header_stdint_predates_cxx11_h=no])])
+           [gl_cv_header_stdint_without_STDC_macros=yes])
+        ])
 
-      if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then
+      if test $gl_cv_header_stdint_without_STDC_macros = no; then
         AC_DEFINE([__STDC_CONSTANT_MACROS], [1],
-                  [Define to 1 if the system <stdint.h> predates C++11.])
+          [Define to 1 if the system <stdint.h> predates C++11.])
         AC_DEFINE([__STDC_LIMIT_MACROS], [1],
-                  [Define to 1 if the system <stdint.h> predates C++11.])
+          [Define to 1 if the system <stdint.h> predates C++11.])
       fi
       AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.],
         [gl_cv_header_stdint_width],
diff --git a/m4/string_h.m4 b/m4/string_h.m4
index d7c12aa..29796b8 100644
--- a/m4/string_h.m4
+++ b/m4/string_h.m4
@@ -5,7 +5,7 @@
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 26
+# serial 27
 
 # Written by Paul Eggert.
 
@@ -28,7 +28,7 @@ AC_DEFUN([gl_HEADER_STRING_H_BODY],
     ]],
     [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul
      strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r
-     strerror_r sigabbrev_np sigdescr_np strsignal strverscmp])
+     strerror_r strerrorname_np sigabbrev_np sigdescr_np strsignal strverscmp])
 
   AC_REQUIRE([AC_C_RESTRICT])
 ])
@@ -44,47 +44,48 @@ AC_DEFUN([gl_STRING_MODULE_INDICATOR],
 
 AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
 [
-  GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO])
-  GNULIB_FFSL=0;        AC_SUBST([GNULIB_FFSL])
-  GNULIB_FFSLL=0;       AC_SUBST([GNULIB_FFSLL])
-  GNULIB_MEMCHR=0;      AC_SUBST([GNULIB_MEMCHR])
-  GNULIB_MEMMEM=0;      AC_SUBST([GNULIB_MEMMEM])
-  GNULIB_MEMPCPY=0;     AC_SUBST([GNULIB_MEMPCPY])
-  GNULIB_MEMRCHR=0;     AC_SUBST([GNULIB_MEMRCHR])
-  GNULIB_RAWMEMCHR=0;   AC_SUBST([GNULIB_RAWMEMCHR])
-  GNULIB_STPCPY=0;      AC_SUBST([GNULIB_STPCPY])
-  GNULIB_STPNCPY=0;     AC_SUBST([GNULIB_STPNCPY])
-  GNULIB_STRCHRNUL=0;   AC_SUBST([GNULIB_STRCHRNUL])
-  GNULIB_STRDUP=0;      AC_SUBST([GNULIB_STRDUP])
-  GNULIB_STRNCAT=0;     AC_SUBST([GNULIB_STRNCAT])
-  GNULIB_STRNDUP=0;     AC_SUBST([GNULIB_STRNDUP])
-  GNULIB_STRNLEN=0;     AC_SUBST([GNULIB_STRNLEN])
-  GNULIB_STRPBRK=0;     AC_SUBST([GNULIB_STRPBRK])
-  GNULIB_STRSEP=0;      AC_SUBST([GNULIB_STRSEP])
-  GNULIB_STRSTR=0;      AC_SUBST([GNULIB_STRSTR])
-  GNULIB_STRCASESTR=0;  AC_SUBST([GNULIB_STRCASESTR])
-  GNULIB_STRTOK_R=0;    AC_SUBST([GNULIB_STRTOK_R])
-  GNULIB_MBSLEN=0;      AC_SUBST([GNULIB_MBSLEN])
-  GNULIB_MBSNLEN=0;     AC_SUBST([GNULIB_MBSNLEN])
-  GNULIB_MBSCHR=0;      AC_SUBST([GNULIB_MBSCHR])
-  GNULIB_MBSRCHR=0;     AC_SUBST([GNULIB_MBSRCHR])
-  GNULIB_MBSSTR=0;      AC_SUBST([GNULIB_MBSSTR])
-  GNULIB_MBSCASECMP=0;  AC_SUBST([GNULIB_MBSCASECMP])
-  GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP])
-  GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP])
-  GNULIB_MBSCASESTR=0;  AC_SUBST([GNULIB_MBSCASESTR])
-  GNULIB_MBSCSPN=0;     AC_SUBST([GNULIB_MBSCSPN])
-  GNULIB_MBSPBRK=0;     AC_SUBST([GNULIB_MBSPBRK])
-  GNULIB_MBSSPN=0;      AC_SUBST([GNULIB_MBSSPN])
-  GNULIB_MBSSEP=0;      AC_SUBST([GNULIB_MBSSEP])
-  GNULIB_MBSTOK_R=0;    AC_SUBST([GNULIB_MBSTOK_R])
-  GNULIB_STRERROR=0;    AC_SUBST([GNULIB_STRERROR])
-  GNULIB_STRERROR_R=0;  AC_SUBST([GNULIB_STRERROR_R])
-  GNULIB_SIGABBREV_NP=0;AC_SUBST([GNULIB_SIGABBREV_NP])
-  GNULIB_SIGDESCR_NP=0; AC_SUBST([GNULIB_SIGDESCR_NP])
-  GNULIB_STRSIGNAL=0;   AC_SUBST([GNULIB_STRSIGNAL])
-  GNULIB_STRVERSCMP=0;  AC_SUBST([GNULIB_STRVERSCMP])
-  HAVE_MBSLEN=0;        AC_SUBST([HAVE_MBSLEN])
+  GNULIB_EXPLICIT_BZERO=0;   AC_SUBST([GNULIB_EXPLICIT_BZERO])
+  GNULIB_FFSL=0;             AC_SUBST([GNULIB_FFSL])
+  GNULIB_FFSLL=0;            AC_SUBST([GNULIB_FFSLL])
+  GNULIB_MEMCHR=0;           AC_SUBST([GNULIB_MEMCHR])
+  GNULIB_MEMMEM=0;           AC_SUBST([GNULIB_MEMMEM])
+  GNULIB_MEMPCPY=0;          AC_SUBST([GNULIB_MEMPCPY])
+  GNULIB_MEMRCHR=0;          AC_SUBST([GNULIB_MEMRCHR])
+  GNULIB_RAWMEMCHR=0;        AC_SUBST([GNULIB_RAWMEMCHR])
+  GNULIB_STPCPY=0;           AC_SUBST([GNULIB_STPCPY])
+  GNULIB_STPNCPY=0;          AC_SUBST([GNULIB_STPNCPY])
+  GNULIB_STRCHRNUL=0;        AC_SUBST([GNULIB_STRCHRNUL])
+  GNULIB_STRDUP=0;           AC_SUBST([GNULIB_STRDUP])
+  GNULIB_STRNCAT=0;          AC_SUBST([GNULIB_STRNCAT])
+  GNULIB_STRNDUP=0;          AC_SUBST([GNULIB_STRNDUP])
+  GNULIB_STRNLEN=0;          AC_SUBST([GNULIB_STRNLEN])
+  GNULIB_STRPBRK=0;          AC_SUBST([GNULIB_STRPBRK])
+  GNULIB_STRSEP=0;           AC_SUBST([GNULIB_STRSEP])
+  GNULIB_STRSTR=0;           AC_SUBST([GNULIB_STRSTR])
+  GNULIB_STRCASESTR=0;       AC_SUBST([GNULIB_STRCASESTR])
+  GNULIB_STRTOK_R=0;         AC_SUBST([GNULIB_STRTOK_R])
+  GNULIB_MBSLEN=0;           AC_SUBST([GNULIB_MBSLEN])
+  GNULIB_MBSNLEN=0;          AC_SUBST([GNULIB_MBSNLEN])
+  GNULIB_MBSCHR=0;           AC_SUBST([GNULIB_MBSCHR])
+  GNULIB_MBSRCHR=0;          AC_SUBST([GNULIB_MBSRCHR])
+  GNULIB_MBSSTR=0;           AC_SUBST([GNULIB_MBSSTR])
+  GNULIB_MBSCASECMP=0;       AC_SUBST([GNULIB_MBSCASECMP])
+  GNULIB_MBSNCASECMP=0;      AC_SUBST([GNULIB_MBSNCASECMP])
+  GNULIB_MBSPCASECMP=0;      AC_SUBST([GNULIB_MBSPCASECMP])
+  GNULIB_MBSCASESTR=0;       AC_SUBST([GNULIB_MBSCASESTR])
+  GNULIB_MBSCSPN=0;          AC_SUBST([GNULIB_MBSCSPN])
+  GNULIB_MBSPBRK=0;          AC_SUBST([GNULIB_MBSPBRK])
+  GNULIB_MBSSPN=0;           AC_SUBST([GNULIB_MBSSPN])
+  GNULIB_MBSSEP=0;           AC_SUBST([GNULIB_MBSSEP])
+  GNULIB_MBSTOK_R=0;         AC_SUBST([GNULIB_MBSTOK_R])
+  GNULIB_STRERROR=0;         AC_SUBST([GNULIB_STRERROR])
+  GNULIB_STRERROR_R=0;       AC_SUBST([GNULIB_STRERROR_R])
+  GNULIB_STRERRORNAME_NP=0;  AC_SUBST([GNULIB_STRERRORNAME_NP])
+  GNULIB_SIGABBREV_NP=0;     AC_SUBST([GNULIB_SIGABBREV_NP])
+  GNULIB_SIGDESCR_NP=0;      AC_SUBST([GNULIB_SIGDESCR_NP])
+  GNULIB_STRSIGNAL=0;        AC_SUBST([GNULIB_STRSIGNAL])
+  GNULIB_STRVERSCMP=0;       AC_SUBST([GNULIB_STRVERSCMP])
+  HAVE_MBSLEN=0;             AC_SUBST([HAVE_MBSLEN])
   dnl Assume proper GNU behavior unless another module says otherwise.
   HAVE_EXPLICIT_BZERO=1;        AC_SUBST([HAVE_EXPLICIT_BZERO])
   HAVE_FFSL=1;                  AC_SUBST([HAVE_FFSL])
@@ -104,6 +105,7 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
   HAVE_STRCASESTR=1;            AC_SUBST([HAVE_STRCASESTR])
   HAVE_DECL_STRTOK_R=1;         AC_SUBST([HAVE_DECL_STRTOK_R])
   HAVE_DECL_STRERROR_R=1;       AC_SUBST([HAVE_DECL_STRERROR_R])
+  HAVE_STRERRORNAME_NP=1;       AC_SUBST([HAVE_STRERRORNAME_NP])
   HAVE_SIGABBREV_NP=1;          AC_SUBST([HAVE_SIGABBREV_NP])
   HAVE_SIGDESCR_NP=1;           AC_SUBST([HAVE_SIGDESCR_NP])
   HAVE_DECL_STRSIGNAL=1;        AC_SUBST([HAVE_DECL_STRSIGNAL])
@@ -121,6 +123,7 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
   REPLACE_STRTOK_R=0;           AC_SUBST([REPLACE_STRTOK_R])
   REPLACE_STRERROR=0;           AC_SUBST([REPLACE_STRERROR])
   REPLACE_STRERROR_R=0;         AC_SUBST([REPLACE_STRERROR_R])
+  REPLACE_STRERRORNAME_NP=0;    AC_SUBST([REPLACE_STRERRORNAME_NP])
   REPLACE_STRSIGNAL=0;          AC_SUBST([REPLACE_STRSIGNAL])
   UNDEFINE_STRTOK_R=0;          AC_SUBST([UNDEFINE_STRTOK_R])
 ])
diff --git a/m4/time_rz.m4 b/m4/time_rz.m4
index 2dd64b2..30161c0 100644
--- a/m4/time_rz.m4
+++ b/m4/time_rz.m4
@@ -13,12 +13,12 @@ AC_DEFUN([gl_TIME_RZ],
   AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
   AC_REQUIRE([AC_STRUCT_TIMEZONE])
 
-  # Mac OS X 10.6 loops forever with some time_t values.
+  # On Mac OS X 10.6, localtime loops forever with some time_t values.
   # See Bug#27706, Bug#27736, and
   # https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html
-  AC_CACHE_CHECK([whether localtime loops forever near extrema],
-    [gl_cv_func_localtime_infloop_bug],
-    [gl_cv_func_localtime_infloop_bug=no
+  AC_CACHE_CHECK([whether localtime works even near extrema],
+    [gl_cv_func_localtime_works],
+    [gl_cv_func_localtime_works=yes
      AC_RUN_IFELSE(
        [AC_LANG_PROGRAM(
           [[#include <stdlib.h>
@@ -37,10 +37,10 @@ AC_DEFUN([gl_TIME_RZ],
             return tm && tm->tm_isdst;
           ]])],
        [(TZ=QQQ0 ./conftest$EXEEXT) >/dev/null 2>&1 ||
-           gl_cv_func_localtime_infloop_bug=yes],
+           gl_cv_func_localtime_works=no],
        [],
-       [gl_cv_func_localtime_infloop_bug="guessing no"])])
-  if test "$gl_cv_func_localtime_infloop_bug" = yes; then
+       [gl_cv_func_localtime_works="guessing yes"])])
+  if test "$gl_cv_func_localtime_works" = no; then
       AC_DEFINE([HAVE_LOCALTIME_INFLOOP_BUG], 1,
         [Define if localtime-like functions can loop forever on
          extreme arguments.])
diff --git a/src/alloc.c b/src/alloc.c
index 738a35c..6701bf0 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -4477,9 +4477,17 @@ live_string_holding (struct mem_node *m, void *p)
      must not be on the free-list.  */
   if (0 <= offset && offset < sizeof b->strings)
     {
-      struct Lisp_String *s = p = cp -= offset % sizeof b->strings[0];
-      if (s->u.s.data)
-       return s;
+      ptrdiff_t off = offset % sizeof b->strings[0];
+      if (off == Lisp_String
+         || off == 0
+         || off == offsetof (struct Lisp_String, u.s.size_byte)
+         || off == offsetof (struct Lisp_String, u.s.intervals)
+         || off == offsetof (struct Lisp_String, u.s.data))
+       {
+         struct Lisp_String *s = p = cp -= off;
+         if (s->u.s.data)
+           return s;
+       }
     }
   return NULL;
 }
@@ -4509,9 +4517,15 @@ live_cons_holding (struct mem_node *m, void *p)
       && (b != cons_block
          || offset / sizeof b->conses[0] < cons_block_index))
     {
-      struct Lisp_Cons *s = p = cp -= offset % sizeof b->conses[0];
-      if (!deadp (s->u.s.car))
-       return s;
+      ptrdiff_t off = offset % sizeof b->conses[0];
+      if (off == Lisp_Cons
+         || off == 0
+         || off == offsetof (struct Lisp_Cons, u.s.u.cdr))
+       {
+         struct Lisp_Cons *s = p = cp -= off;
+         if (!deadp (s->u.s.car))
+           return s;
+       }
     }
   return NULL;
 }
@@ -4542,9 +4556,23 @@ live_symbol_holding (struct mem_node *m, void *p)
       && (b != symbol_block
          || offset / sizeof b->symbols[0] < symbol_block_index))
     {
-      struct Lisp_Symbol *s = p = cp -= offset % sizeof b->symbols[0];
-      if (!deadp (s->u.s.function))
-       return s;
+      ptrdiff_t off = offset % sizeof b->symbols[0];
+      if (off == Lisp_Symbol
+
+         /* Plain '|| off == 0' would run afoul of GCC 10.2
+            -Wlogical-op, as Lisp_Symbol happens to be zero.  */
+         || (Lisp_Symbol != 0 && off == 0)
+
+         || off == offsetof (struct Lisp_Symbol, u.s.name)
+         || off == offsetof (struct Lisp_Symbol, u.s.val)
+         || off == offsetof (struct Lisp_Symbol, u.s.function)
+         || off == offsetof (struct Lisp_Symbol, u.s.plist)
+         || off == offsetof (struct Lisp_Symbol, u.s.next))
+       {
+         struct Lisp_Symbol *s = p = cp -= off;
+         if (!deadp (s->u.s.function))
+           return s;
+       }
     }
   return NULL;
 }
@@ -4556,23 +4584,70 @@ live_symbol_p (struct mem_node *m, void *p)
 }
 
 
-/* Return true if P is a pointer to a live Lisp float on
-   the heap.  M is a pointer to the mem_block for P.  */
+/* If P is a (possibly-tagged) pointer to a live Lisp_Float on the
+   heap, return the address of the Lisp_Float.  Otherwise, return NULL.
+   M is a pointer to the mem_block for P.  */
 
-static bool
-live_float_p (struct mem_node *m, void *p)
+static struct Lisp_Float *
+live_float_holding (struct mem_node *m, void *p)
 {
   eassert (m->type == MEM_TYPE_FLOAT);
   struct float_block *b = m->start;
   char *cp = p;
   ptrdiff_t offset = cp - (char *) &b->floats[0];
 
-  /* P must point to the start of a Lisp_Float and not be
-     one of the unused cells in the current float block.  */
-  return (0 <= offset && offset < sizeof b->floats
-         && offset % sizeof b->floats[0] == 0
+  /* P must point to (or be a tagged pointer to) the start of a
+     Lisp_Float and not be one of the unused cells in the current
+     float block.  */
+  if (0 <= offset && offset < sizeof b->floats)
+    {
+      int off = offset % sizeof b->floats[0];
+      if ((off == Lisp_Float || off == 0)
          && (b != float_block
-             || offset / sizeof b->floats[0] < float_block_index));
+             || offset / sizeof b->floats[0] < float_block_index))
+       {
+         p = cp - off;
+         return p;
+       }
+    }
+  return NULL;
+}
+
+static bool
+live_float_p (struct mem_node *m, void *p)
+{
+  return live_float_holding (m, p) == p;
+}
+
+/* Return VECTOR if P points within it, NULL otherwise.  */
+
+static struct Lisp_Vector *
+live_vector_pointer (struct Lisp_Vector *vector, void *p)
+{
+  void *vvector = vector;
+  char *cvector = vvector;
+  char *cp = p;
+  ptrdiff_t offset = cp - cvector;
+  return ((offset == Lisp_Vectorlike
+          || offset == 0
+          || (sizeof vector->header <= offset
+              && offset < vector_nbytes (vector)
+              && (! (vector->header.size & PSEUDOVECTOR_FLAG)
+                  ? (offsetof (struct Lisp_Vector, contents) <= offset
+                     && (((offset - offsetof (struct Lisp_Vector, contents))
+                          % word_size)
+                         == 0))
+                  /* For non-bool-vector pseudovectors, treat any pointer
+                     past the header as valid since it's too much of a pain
+                     to write special-case code for every pseudovector.  */
+                  : (! PSEUDOVECTOR_TYPEP (&vector->header, PVEC_BOOL_VECTOR)
+                     || offset == offsetof (struct Lisp_Bool_Vector, size)
+                     || (offsetof (struct Lisp_Bool_Vector, data) <= offset
+                         && (((offset
+                               - offsetof (struct Lisp_Bool_Vector, data))
+                              % sizeof (bits_word))
+                             == 0))))))
+         ? vector : NULL);
 }
 
 /* If P is a pointer to a live, large vector-like object, return the object.
@@ -4583,10 +4658,7 @@ static struct Lisp_Vector *
 live_large_vector_holding (struct mem_node *m, void *p)
 {
   eassert (m->type == MEM_TYPE_VECTORLIKE);
-  struct Lisp_Vector *vp = p;
-  struct Lisp_Vector *vector = large_vector_vec (m->start);
-  struct Lisp_Vector *next = ADVANCE (vector, vector_nbytes (vector));
-  return vector <= vp && vp < next ? vector : NULL;
+  return live_vector_pointer (large_vector_vec (m->start), p);
 }
 
 static bool
@@ -4616,7 +4688,7 @@ live_small_vector_holding (struct mem_node *m, void *p)
     {
       struct Lisp_Vector *next = ADVANCE (vector, vector_nbytes (vector));
       if (vp < next && !PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FREE))
-       return vector;
+       return live_vector_pointer (vector, vp);
       vector = next;
     }
   return NULL;
@@ -4628,117 +4700,33 @@ live_small_vector_p (struct mem_node *m, void *p)
   return live_small_vector_holding (m, p) == p;
 }
 
-/* Mark OBJ if we can prove it's a Lisp_Object.  */
+/* If P points to Lisp data, mark that as live if it isn't already
+   marked.  */
 
 static void
-mark_maybe_object (Lisp_Object obj)
+mark_maybe_pointer (void *p)
 {
+  struct mem_node *m;
+
 #if USE_VALGRIND
-  VALGRIND_MAKE_MEM_DEFINED (&obj, sizeof (obj));
+  VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p));
 #endif
 
-  int type_tag = XTYPE (obj);
-  intptr_t pointer_word_tag = LISP_WORD_TAG (type_tag), offset, ipo;
-
-  switch (type_tag)
-    {
-    case_Lisp_Int: case Lisp_Type_Unused0:
-      return;
-
-    case Lisp_Symbol:
-      offset = (intptr_t) lispsym;
-      break;
-
-    default:
-      offset = 0;
-      break;
-    }
-
-  INT_ADD_WRAPV ((intptr_t) XLP (obj), offset - pointer_word_tag, &ipo);
-  void *po = (void *) ipo;
-
   /* If the pointer is in the dump image and the dump has a record
      of the object starting at the place where the pointer points, we
      definitely have an object.  If the pointer is in the dump image
      and the dump has no idea what the pointer is pointing at, we
      definitely _don't_ have an object.  */
-  if (pdumper_object_p (po))
+  if (pdumper_object_p (p))
     {
       /* Don't use pdumper_object_p_precise here! It doesn't check the
          tag bits. OBJ here might be complete garbage, so we need to
          verify both the pointer and the tag.  */
-      if (pdumper_find_object_type (po) == type_tag)
-        mark_object (obj);
-      return;
-    }
-
-  struct mem_node *m = mem_find (po);
-
-  if (m != MEM_NIL)
-    {
-      bool mark_p = false;
-
-      switch (type_tag)
-       {
-       case Lisp_String:
-         mark_p = m->type == MEM_TYPE_STRING && live_string_p (m, po);
-         break;
-
-       case Lisp_Cons:
-         mark_p = m->type == MEM_TYPE_CONS && live_cons_p (m, po);
-         break;
-
-       case Lisp_Symbol:
-         mark_p = m->type == MEM_TYPE_SYMBOL && live_symbol_p (m, po);
-         break;
-
-       case Lisp_Float:
-         mark_p = m->type == MEM_TYPE_FLOAT && live_float_p (m, po);
-         break;
-
-       case Lisp_Vectorlike:
-         mark_p = (m->type == MEM_TYPE_VECTOR_BLOCK
-                   ? live_small_vector_p (m, po)
-                   : (m->type == MEM_TYPE_VECTORLIKE
-                      && live_large_vector_p (m, po)));
-         break;
-
-       default:
-         eassume (false);
-       }
-
-      if (mark_p)
-       mark_object (obj);
-    }
-}
-
-void
-mark_maybe_objects (Lisp_Object const *array, ptrdiff_t nelts)
-{
-  for (Lisp_Object const *lim = array + nelts; array < lim; array++)
-    mark_maybe_object (*array);
-}
-
-/* If P points to Lisp data, mark that as live if it isn't already
-   marked.  */
-
-static void
-mark_maybe_pointer (void *p)
-{
-  struct mem_node *m;
-
-#if USE_VALGRIND
-  VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p));
-#endif
-
-  if (pdumper_object_p (p))
-    {
       int type = pdumper_find_object_type (p);
       if (pdumper_valid_object_type_p (type))
         mark_object (type == Lisp_Symbol
                      ? make_lisp_symbol (p)
                      : make_lisp_ptr (p, type));
-      /* See mark_maybe_object for why we can confidently return.  */
       return;
     }
 
@@ -4782,9 +4770,12 @@ mark_maybe_pointer (void *p)
          break;
 
        case MEM_TYPE_FLOAT:
-         if (! live_float_p (m, p))
-           return;
-         obj = make_lisp_ptr (p, Lisp_Float);
+         {
+           struct Lisp_Float *h = live_float_holding (m, p);
+           if (!h)
+             return;
+           obj = make_lisp_ptr (h, Lisp_Float);
+         }
          break;
 
        case MEM_TYPE_VECTORLIKE:
@@ -4869,11 +4860,6 @@ mark_memory (void const *start, void const *end)
       intptr_t ip;
       INT_ADD_WRAPV ((intptr_t) p, (intptr_t) lispsym, &ip);
       mark_maybe_pointer ((void *) ip);
-
-      verify (alignof (Lisp_Object) % GC_POINTER_ALIGNMENT == 0);
-      if (alignof (Lisp_Object) == GC_POINTER_ALIGNMENT
-         || (uintptr_t) pp % alignof (Lisp_Object) == 0)
-       mark_maybe_object (*(Lisp_Object const *) pp);
     }
 }
 
@@ -6281,7 +6267,6 @@ mark_vectorlike (union vectorlike_header *header)
 {
   struct Lisp_Vector *ptr = (struct Lisp_Vector *) header;
   ptrdiff_t size = ptr->header.size;
-  ptrdiff_t i;
 
   eassert (!vector_marked_p (ptr));
 
@@ -6296,8 +6281,7 @@ mark_vectorlike (union vectorlike_header *header)
      the number of Lisp_Object fields that we should trace.
      The distinction is used e.g. by Lisp_Process which places extra
      non-Lisp_Object fields at the end of the structure...  */
-  for (i = 0; i < size; i++) /* ...and then mark its elements.  */
-    mark_object (ptr->contents[i]);
+  mark_objects (ptr->contents, size);
 }
 
 /* Like mark_vectorlike but optimized for char-tables (and
@@ -6396,8 +6380,7 @@ mark_face_cache (struct face_cache *c)
 {
   if (c)
     {
-      int i, j;
-      for (i = 0; i < c->used; ++i)
+      for (int i = 0; i < c->used; i++)
        {
          struct face *face = FACE_FROM_ID_OR_NULL (c->f, i);
 
@@ -6406,8 +6389,7 @@ mark_face_cache (struct face_cache *c)
              if (face->font && !vectorlike_marked_p (&face->font->header))
                mark_vectorlike (&face->font->header);
 
-             for (j = 0; j < LFACE_VECTOR_SIZE; ++j)
-               mark_object (face->lface[j]);
+             mark_objects (face->lface, LFACE_VECTOR_SIZE);
            }
        }
     }
@@ -6520,6 +6502,13 @@ mark_hash_table (struct Lisp_Vector *ptr)
     }
 }
 
+void
+mark_objects (Lisp_Object *obj, ptrdiff_t n)
+{
+  for (ptrdiff_t i = 0; i < n; i++)
+    mark_object (obj[i]);
+}
+
 /* Determine type of generic Lisp_Object and mark it accordingly.
 
    This function implements a straightforward depth-first marking
diff --git a/src/dbusbind.c b/src/dbusbind.c
index f6a0879..4fce925 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -1261,6 +1261,7 @@ usage: (dbus-message-internal &rest REST)  */)
   Lisp_Object path = Qnil;
   Lisp_Object interface = Qnil;
   Lisp_Object member = Qnil;
+  Lisp_Object error_name = Qnil;
   Lisp_Object result;
   DBusConnection *connection;
   DBusMessage *dmessage;
@@ -1298,7 +1299,9 @@ usage: (dbus-message-internal &rest REST)  */)
   else /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR  */
     {
       serial = xd_extract_unsigned (args[3], TYPE_MAXIMUM (dbus_uint32_t));
-      count = 4;
+      if (mtype == DBUS_MESSAGE_TYPE_ERROR)
+       error_name = args[4];
+      count = (mtype == DBUS_MESSAGE_TYPE_ERROR) ? 5 : 4;
     }
 
   /* Check parameters.  */
@@ -1341,13 +1344,22 @@ usage: (dbus-message-internal &rest REST)  */)
                        XD_OBJECT_TO_STRING (interface),
                        XD_OBJECT_TO_STRING (member));
       break;
-    default: /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR  */
+    case DBUS_MESSAGE_TYPE_METHOD_RETURN:
       ui_serial = serial;
       XD_DEBUG_MESSAGE ("%s %s %s %u",
                        XD_MESSAGE_TYPE_TO_STRING (mtype),
                        XD_OBJECT_TO_STRING (bus),
                        XD_OBJECT_TO_STRING (service),
                        ui_serial);
+       break;
+    default: /* DBUS_MESSAGE_TYPE_ERROR  */
+      ui_serial = serial;
+      XD_DEBUG_MESSAGE ("%s %s %s %u %s",
+                       XD_MESSAGE_TYPE_TO_STRING (mtype),
+                       XD_OBJECT_TO_STRING (bus),
+                       XD_OBJECT_TO_STRING (service),
+                       ui_serial,
+                       XD_OBJECT_TO_STRING (error_name));
     }
 
   /* Retrieve bus address.  */
@@ -1406,7 +1418,7 @@ usage: (dbus-message-internal &rest REST)  */)
        XD_SIGNAL1 (build_string ("Unable to create a return message"));
 
       if ((mtype == DBUS_MESSAGE_TYPE_ERROR)
-         && (!dbus_message_set_error_name (dmessage, DBUS_ERROR_FAILED)))
+         && (!dbus_message_set_error_name (dmessage, SSDATA (error_name))))
        XD_SIGNAL1 (build_string ("Unable to create an error message"));
     }
 
diff --git a/src/eval.c b/src/eval.c
index f9a1a28..71b7ac8 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -4040,7 +4040,7 @@ mark_specpdl (union specbinding *first, union specbinding 
*ptr)
          break;
 
        case SPECPDL_UNWIND_ARRAY:
-         mark_maybe_objects (pdl->unwind_array.array, pdl->unwind_array.nelts);
+         mark_objects (pdl->unwind_array.array, pdl->unwind_array.nelts);
          break;
 
        case SPECPDL_UNWIND_EXCURSION:
@@ -4054,8 +4054,7 @@ mark_specpdl (union specbinding *first, union specbinding 
*ptr)
            mark_object (backtrace_function (pdl));
            if (nargs == UNEVALLED)
              nargs = 1;
-           while (nargs--)
-             mark_object (backtrace_args (pdl)[nargs]);
+           mark_objects (backtrace_args (pdl), nargs);
          }
          break;
 
diff --git a/src/fileio.c b/src/fileio.c
index c91af36..1e4ca82 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -827,9 +827,9 @@ the root directory.  */)
   ptrdiff_t tlen;
 #ifdef DOS_NT
   int drive = 0;
+  bool collapse_newdir = true;
   bool is_escaped = 0;
 #endif /* DOS_NT */
-  bool collapse_newdir = true;
   ptrdiff_t length, nbytes;
   Lisp_Object handler, result, handled_name;
   bool multibyte;
@@ -947,6 +947,22 @@ the root directory.  */)
        )
       {
        default_directory = Fexpand_file_name (default_directory, Qnil);
+
+       /* The above expansion might have produced a remote file name,
+          so give the handlers one last chance to DTRT.  This can
+          happen when both NAME and DEFAULT-DIRECTORY arguments are
+          relative file names, and the buffer's default-directory is
+          remote.  */
+       handler = Ffind_file_name_handler (default_directory,
+                                          Qexpand_file_name);
+       if (!NILP (handler))
+         {
+           handled_name = call3 (handler, Qexpand_file_name,
+                                 name, default_directory);
+           if (STRINGP (handled_name))
+             return handled_name;
+           error ("Invalid handler in `file-name-handler-alist'");
+         }
       }
   }
   multibyte = STRING_MULTIBYTE (name);
@@ -1065,7 +1081,7 @@ the root directory.  */)
 #endif /* WINDOWSNT */
 #endif /* DOS_NT */
 
-  /* If nm is absolute, look for "/./" or "/../" or "//" sequences; if
+  /* If nm is absolute, look for `/./' or `/../' or `//''sequences; if
      none are found, we can probably return right away.  We will avoid
      allocating a new string if name is already fully expanded.  */
   if (
@@ -1183,7 +1199,9 @@ the root directory.  */)
              newdir = SSDATA (hdir);
              newdirlim = newdir + SBYTES (hdir);
            }
+#ifdef DOS_NT
          collapse_newdir = false;
+#endif
        }
       else                     /* ~user/filename */
        {
@@ -1203,7 +1221,9 @@ the root directory.  */)
 
              while (*++nm && !IS_DIRECTORY_SEP (*nm))
                continue;
+#ifdef DOS_NT
              collapse_newdir = false;
+#endif
            }
 
          /* If we don't find a user of that name, leave the name
@@ -1370,15 +1390,12 @@ the root directory.  */)
     }
 #endif /* DOS_NT */
 
-  length = newdirlim - newdir;
-
-#ifdef DOS_NT
   /* Ignore any slash at the end of newdir, unless newdir is
      just "/" or "//".  */
+  length = newdirlim - newdir;
   while (length > 1 && IS_DIRECTORY_SEP (newdir[length - 1])
         && ! (length == 2 && IS_DIRECTORY_SEP (newdir[0])))
     length--;
-#endif
 
   /* Now concatenate the directory and name to new space in the stack frame.  
*/
   tlen = length + file_name_as_directory_slop + (nmlim - nm) + 1;
@@ -1392,16 +1409,12 @@ the root directory.  */)
 #else  /* not DOS_NT */
   target = SAFE_ALLOCA (tlen);
 #endif /* not DOS_NT */
+  *target = 0;
   nbytes = 0;
 
   if (newdir)
     {
-#ifndef DOS_NT
-      bool treat_as_absolute = !collapse_newdir;
-#else
-      bool treat_as_absolute = !nm[0] || IS_DIRECTORY_SEP (nm[0]);
-#endif
-      if (treat_as_absolute)
+      if (nm[0] == 0 || IS_DIRECTORY_SEP (nm[0]))
        {
 #ifdef DOS_NT
          /* If newdir is effectively "C:/", then the drive letter will have
@@ -1413,23 +1426,13 @@ the root directory.  */)
                && newdir[1] == '\0'))
 #endif
            {
-             /* With ~ or ~user, leave NEWDIR as-is to avoid transforming
-                it from a symlink (or a regular file!) into a directory.  */
              memcpy (target, newdir, length);
+             target[length] = 0;
              nbytes = length;
            }
        }
       else
        nbytes = file_name_as_directory (target, newdir, length, multibyte);
-
-#ifndef DOS_NT
-      /* If TARGET ends in a directory separator, omit leading
-        directory separators from NM so that concatenating a TARGET "/"
-        to an NM "/foo" does not result in the incorrect "//foo".  */
-      if (nbytes && IS_DIRECTORY_SEP (target[nbytes - 1]))
-       while (IS_DIRECTORY_SEP (nm[0]))
-         nm++;
-#endif
     }
 
   memcpy (target + nbytes, nm, nmlim - nm + 1);
@@ -1446,20 +1449,6 @@ the root directory.  */)
          {
            *o++ = *p++;
          }
-#ifndef DOS_NT
-       else if (p[1] == '.' && IS_DIRECTORY_SEP (p[2]))
-         {
-           /* Replace "/./" with "/".  */
-           p += 2;
-         }
-       else if (p[1] == '.' && !p[2])
-         {
-           /* At the end of the file name, replace "/." with "/".
-              The trailing "/" is for symlinks.  */
-           *o++ = *p;
-           p += 2;
-         }
-#else
        else if (p[1] == '.'
                 && (IS_DIRECTORY_SEP (p[2])
                     || p[2] == 0))
@@ -1470,7 +1459,6 @@ the root directory.  */)
              *o++ = *p;
            p += 2;
          }
-#endif
        else if (p[1] == '.' && p[2] == '.'
                 /* `/../' is the "superroot" on certain file systems.
                    Turned off on DOS_NT systems because they have no
@@ -1484,35 +1472,21 @@ the root directory.  */)
 #endif
                 && (IS_DIRECTORY_SEP (p[3]) || p[3] == 0))
          {
-#ifndef DOS_NT
-           while (o != target)
-             {
-               o--;
-               if (IS_DIRECTORY_SEP (*o))
-                 {
-                   /* Keep "/" at the end of the name, for symlinks.  */
-                   o += p[3] == 0;
-
-                   break;
-                 }
-             }
-#else
-# ifdef WINDOWSNT
+#ifdef WINDOWSNT
            char *prev_o = o;
-# endif
+#endif
            while (o != target && (--o, !IS_DIRECTORY_SEP (*o)))
              continue;
-# ifdef WINDOWSNT
+#ifdef WINDOWSNT
            /* Don't go below server level in UNC filenames.  */
            if (o == target + 1 && IS_DIRECTORY_SEP (*o)
                && IS_DIRECTORY_SEP (*target))
              o = prev_o;
            else
-# endif
+#endif
            /* Keep initial / only if this is the whole name.  */
            if (o == target && IS_ANY_SEP (*o) && p[3] == 0)
              ++o;
-#endif
            p += 3;
          }
        else if (IS_DIRECTORY_SEP (p[1])
diff --git a/src/fringe.c b/src/fringe.c
index c3d64fe..7549669 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -1733,11 +1733,7 @@ If nil, also continue lines which are exactly as wide as 
the window.  */);
 void
 mark_fringe_data (void)
 {
-  int i;
-
-  for (i = 0; i < max_fringe_bitmaps; i++)
-    if (!NILP (fringe_faces[i]))
-      mark_object (fringe_faces[i]);
+  mark_objects (fringe_faces, max_fringe_bitmaps);
 }
 
 /* Initialize this module when Emacs starts.  */
diff --git a/src/image.c b/src/image.c
index 35c5946..d8c3466 100644
--- a/src/image.c
+++ b/src/image.c
@@ -9830,7 +9830,7 @@ svg_load_image (struct frame *f, struct image *img, char 
*contents,
         img->background_valid = 1;
       }
 
-    wrapped_contents = malloc (buffer_size);
+    wrapped_contents = xmalloc (buffer_size);
 
     if (!wrapped_contents
         || buffer_size <= snprintf (wrapped_contents, buffer_size, wrapper,
@@ -9889,7 +9889,7 @@ svg_load_image (struct frame *f, struct image *img, char 
*contents,
   pixbuf = rsvg_handle_get_pixbuf (rsvg_handle);
   if (!pixbuf) goto rsvg_error;
   g_object_unref (rsvg_handle);
-  free (wrapped_contents);
+  xfree (wrapped_contents);
 
   /* Extract some meta data from the svg handle.  */
   width     = gdk_pixbuf_get_width (pixbuf);
@@ -9960,7 +9960,7 @@ svg_load_image (struct frame *f, struct image *img, char 
*contents,
   if (rsvg_handle)
     g_object_unref (rsvg_handle);
   if (wrapped_contents)
-    free (wrapped_contents);
+    xfree (wrapped_contents);
   /* FIXME: Use error->message so the user knows what is the actual
      problem with the image.  */
   image_error ("Error parsing SVG image `%s'", img->spec);
diff --git a/src/keyboard.c b/src/keyboard.c
index 5fa58ab..590d183 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -12475,13 +12475,11 @@ keys_of_keyboard (void)
 void
 mark_kboards (void)
 {
-  KBOARD *kb;
-  Lisp_Object *p;
-  for (kb = all_kboards; kb; kb = kb->next_kboard)
+  for (KBOARD *kb = all_kboards; kb; kb = kb->next_kboard)
     {
       if (kb->kbd_macro_buffer)
-        for (p = kb->kbd_macro_buffer; p < kb->kbd_macro_ptr; p++)
-          mark_object (*p);
+       mark_objects (kb->kbd_macro_buffer,
+                     kb->kbd_macro_ptr - kb->kbd_macro_buffer);
       mark_object (KVAR (kb, Voverriding_terminal_local_map));
       mark_object (KVAR (kb, Vlast_command));
       mark_object (KVAR (kb, Vreal_last_command));
diff --git a/src/lisp.h b/src/lisp.h
index ddaeb0c..bb68684 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -339,24 +339,20 @@ typedef EMACS_INT Lisp_Word;
 #  define lisp_h_XLI(o) ((EMACS_INT) (o))
 #  define lisp_h_XIL(i) ((Lisp_Object) (i))
 #  define lisp_h_XLP(o) ((void *) (o))
-#  define lisp_h_XPL(p) ((Lisp_Object) (p))
 # else
 #  define lisp_h_XLI(o) (o)
 #  define lisp_h_XIL(i) (i)
 #  define lisp_h_XLP(o) ((void *) (uintptr_t) (o))
-#  define lisp_h_XPL(p) ((Lisp_Object) (uintptr_t) (p))
 # endif
 #else
 # if LISP_WORDS_ARE_POINTERS
 #  define lisp_h_XLI(o) ((EMACS_INT) (o).i)
 #  define lisp_h_XIL(i) ((Lisp_Object) {(Lisp_Word) (i)})
 #  define lisp_h_XLP(o) ((void *) (o).i)
-#  define lisp_h_XPL(p) lisp_h_XIL (p)
 # else
 #  define lisp_h_XLI(o) ((o).i)
 #  define lisp_h_XIL(i) ((Lisp_Object) {i})
 #  define lisp_h_XLP(o) ((void *) (uintptr_t) (o).i)
-#  define lisp_h_XPL(p) ((Lisp_Object) {(uintptr_t) (p)})
 # endif
 #endif
 
@@ -425,7 +421,6 @@ typedef EMACS_INT Lisp_Word;
 # define XLI(o) lisp_h_XLI (o)
 # define XIL(i) lisp_h_XIL (i)
 # define XLP(o) lisp_h_XLP (o)
-# define XPL(p) lisp_h_XPL (p)
 # define CHECK_FIXNUM(x) lisp_h_CHECK_FIXNUM (x)
 # define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)
 # define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK_TYPE (ok, predicate, x)
@@ -736,12 +731,6 @@ INLINE void *
   return lisp_h_XLP (o);
 }
 
-INLINE Lisp_Object
-(XPL) (void *p)
-{
-  return lisp_h_XPL (p);
-}
-
 /* Extract A's type.  */
 
 INLINE enum Lisp_Type
@@ -3778,12 +3767,12 @@ extern AVOID memory_full (size_t);
 extern AVOID buffer_memory_full (ptrdiff_t);
 extern bool survives_gc_p (Lisp_Object);
 extern void mark_object (Lisp_Object);
+extern void mark_objects (Lisp_Object *, ptrdiff_t);
 #if defined REL_ALLOC && !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
 extern void refill_memory_reserve (void);
 #endif
 extern void alloc_unexec_pre (void);
 extern void alloc_unexec_post (void);
-extern void mark_maybe_objects (Lisp_Object const *, ptrdiff_t);
 extern void mark_stack (char const *, char const *);
 extern void flush_stack_call_func1 (void (*func) (void *arg), void *arg);
 
@@ -4932,7 +4921,10 @@ safe_free_unbind_to (ptrdiff_t count, ptrdiff_t 
sa_count, Lisp_Object val)
       (buf) = AVAIL_ALLOCA (alloca_nbytes);                   \
     else                                                      \
       {                                                               \
-       (buf) = xmalloc (alloca_nbytes);                       \
+       /* Although only the first nelt words need clearing,   \
+          typically EXTRA is 0 or small so just use xzalloc;  \
+          this is simpler and often faster.  */               \
+       (buf) = xzalloc (alloca_nbytes);                       \
        record_unwind_protect_array (buf, nelt);               \
       }                                                               \
   } while (false)
diff --git a/src/xdisp.c b/src/xdisp.c
index dd73758..406b2d7 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -9532,7 +9532,7 @@ move_it_in_display_line_to (struct it *it,
                         we can't wrap here.  Therefore, wrap_it
                         (previously found wrap-point) _is_ relevant
                         in that case.  */
-                     && !(moved_forward && char_can_wrap_before (it)))
+                     && (!moved_forward || char_can_wrap_before (it)))
                    {
                      /* If we've found TO_X, go back there, as we now
                         know the last word fits on this screen line.  */
diff --git a/test/lib-src/emacsclient-tests.el 
b/test/lib-src/emacsclient-tests.el
index 901922c..a502bb7 100644
--- a/test/lib-src/emacsclient-tests.el
+++ b/test/lib-src/emacsclient-tests.el
@@ -1,4 +1,4 @@
-;;; emacsclient-tests.el --- Test emacsclient
+;;; emacsclient-tests.el --- Test emacsclient  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2016-2020 Free Software Foundation, Inc.
 
diff --git a/test/lisp/calendar/icalendar-tests.el 
b/test/lisp/calendar/icalendar-tests.el
index d496878..bce7de7 100644
--- a/test/lisp/calendar/icalendar-tests.el
+++ b/test/lisp/calendar/icalendar-tests.el
@@ -183,6 +183,7 @@
 (ert-deftest icalendar--parse-vtimezone ()
   "Test method for `icalendar--parse-vtimezone'."
   (let (vtimezone result)
+    ;; testcase: valid timezone with rrule
     (setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
 TZID:thename
 BEGIN:STANDARD
@@ -204,6 +205,8 @@ END:VTIMEZONE
     (message (cdr result))
     (should (string= "STD-02:00DST-03:00,M3.5.0/03:00:00,M10.5.0/04:00:00"
                      (cdr result)))
+
+    ;; testcase: name of tz contains comma
     (setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
 TZID:anothername, with a comma
 BEGIN:STANDARD
@@ -225,7 +228,8 @@ END:VTIMEZONE
     (message (cdr result))
     (should (string= "STD-02:00DST-03:00,M3.2.1/03:00:00,M10.2.1/04:00:00"
                      (cdr result)))
-    ;; offsetfrom = offsetto
+
+    ;; testcase: offsetfrom = offsetto
     (setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
 TZID:Kolkata, Chennai, Mumbai, New Delhi
 X-MICROSOFT-CDO-TZID:23
@@ -245,7 +249,10 @@ END:VTIMEZONE
     (should (string= "Kolkata, Chennai, Mumbai, New Delhi" (car result)))
     (message (cdr result))
     (should (string= "STD-05:30DST-05:30,M1.1.1/00:00:00,M1.1.1/00:00:00"
-                     (cdr result)))))
+                     (cdr result)))
+
+    ;; FIXME: add testcase that covers changes for fix of bug#34315
+    ))
 
 (ert-deftest icalendar--convert-ordinary-to-ical ()
   "Test method for `icalendar--convert-ordinary-to-ical'."
@@ -482,17 +489,132 @@ END:VEVENT
           (should (equal '(0 0 10 1 8 2013 4 t 10800)
                          (icalendar--decode-isodatetime "20130801T100000")))
 
+          ;; testcase: no time zone in input, shift by -1 days
+          ;; 1 Jan 2013 10:00 -> 31 Dec 2012
+          (should (equal '(0 0 10 31 12 2012 1 nil 7200)
+                         (icalendar--decode-isodatetime "20130101T100000" -1)))
+          ;; 1 Aug 2013 10:00 (DST) -> 31 Jul 2012 (DST)
+          (should (equal '(0 0 10 31 7 2013 3 t 10800)
+                         (icalendar--decode-isodatetime "20130801T100000" -1)))
+
+
           ;; testcase: UTC time zone specifier in input -> convert to local 
time
-          ;; 31 Dec 2013 23:00 UTC -> 1 Jan 2013 01:00 EET
+          ;; 31 Dec 2013 23:00 UTC -> 1 Jan 2014 01:00 EET
           (should (equal '(0 0 1 1 1 2014 3 nil 7200)
                          (icalendar--decode-isodatetime "20131231T230000Z")))
           ;; 1 Aug 2013 10:00 UTC -> 1 Aug 2013 13:00 EEST
           (should (equal '(0 0 13 1 8 2013 4 t 10800)
                          (icalendar--decode-isodatetime "20130801T100000Z")))
 
+          ;; testcase: override timezone with Central European Time, 1 Jan 
2013 10:00 -> 1 Jan 2013 11:00
+          (should (equal '(0 0 11 1 1 2013 2 nil 7200)
+                         (icalendar--decode-isodatetime "20130101T100000" nil
+                                                        '(3600 "CET"))))
+          ;; testcase: override timezone (UTC-02:00), 1 Jan 2013 10:00 -> 1 
Jan 2013 14:00
+          (should (equal '(0 0 14 1 1 2013 2 nil 7200)
+                         (icalendar--decode-isodatetime "20130101T100000" nil 
-7200)))
+
+          ;; FIXME: add testcase that covers changes for fix of bug#34315
+
+          )
+      ;; restore time-zone even if something went terribly wrong
+      (setenv "TZ" tz))))
+
+(ert-deftest icalendar--convert-tz-offset ()
+  "Test `icalendar--convert-tz-offset'."
+  (let ((tz (getenv "TZ")))
+    (unwind-protect
+       (progn
+         ;; Use Eastern European Time (UTC+2, UTC+3 daylight saving)
+         (setenv "TZ" "EET-2EEST,M3.5.0/3,M10.5.0/4")
+
+          ;; testcase: artificial input
+          (should (equal '("DST-03:00" . "M5.1.1/01:23:45")
+                         (icalendar--convert-tz-offset
+                          '((DTSTART nil "________T012345") ;
+                            (TZOFFSETFROM nil "+0200")
+                            (TZOFFSETTO nil "+0300")
+                            (RRULE nil 
"FREQ=YEARLY;INTERVAL=1;BYDAY=1MO;BYMONTH=5"))
+                          t)))
+
+          ;; testcase: Europe/Berlin Standard
+          (should (equal '("STD-01:00" . "M10.5.0/03:00:00")
+                         (icalendar--convert-tz-offset
+                          '((TZOFFSETFROM nil "+0200")
+                            (TZOFFSETTO nil "+0100")
+                            (TZNAME nil CET)
+                            (DTSTART nil "19701025T030000")
+                            (RRULE nil "FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU"))
+                          nil)))
+
+          ;; testcase: Europe/Berlin DST
+          (should (equal '("DST-02:00" . "M3.5.0/02:00:00")
+                         (icalendar--convert-tz-offset
+                          '((TZOFFSETFROM nil "+0100")
+                            (TZOFFSETTO nil "+0200")
+                            (TZNAME nil CEST)
+                            (DTSTART nil "19700329T020000")
+                            (RRULE nil "FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU"))
+                          t)))
+
+          ;; testcase: dtstart is mandatory
+          (should (null (icalendar--convert-tz-offset
+                          '((TZOFFSETFROM nil "+0100")
+                            (TZOFFSETTO nil "+0200")
+                            (RRULE nil "FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU"))
+                          t)))
+
+          ;; FIXME: rrule and rdate are NOT mandatory!  Must fix code
+          ;; before activating these testcases
+          ;; ;; testcase: no rrule and no rdate => no result
+          ;; (should (null (icalendar--convert-tz-offset
+          ;;                 '((TZOFFSETFROM nil "+0100")
+          ;;                   (TZOFFSETTO nil "+0200")
+          ;;                   (DTSTART nil "19700329T020000"))
+          ;;                 t)))
+          ;; ;; testcase: no rrule with rdate => no result
+          ;; (should (null (icalendar--convert-tz-offset
+          ;;                 '((TZOFFSETFROM nil "+0100")
+          ;;                   (TZOFFSETTO nil "+0200")
+          ;;                   (DTSTART nil "18840101T000000")
+          ;;                   (RDATE nil "18840101T000000"))
+          ;;                 t)))
           )
       ;; restore time-zone even if something went terribly wrong
-      (setenv "TZ" tz)))  )
+      (setenv "TZ" tz))))
+
+(ert-deftest icalendar--decode-isoduration ()
+  "Test `icalendar--decode-isoduration'."
+
+  ;; testcase: 7 days
+  (should (equal '(0 0 0 7 0 0)
+                 (icalendar--decode-isoduration "P7D")))
+
+  ;; testcase: 7 days, one second -- see bug#34315
+  (should (equal '(1 0 0 7 0 0)
+                 (icalendar--decode-isoduration "P7DT1S")))
+
+  ;; testcase: 3 hours, 2 minutes, one second
+  (should (equal '(1 2 3 0 0 0)
+                 (icalendar--decode-isoduration "PT3H2M1S")))
+
+  ;; testcase: 99 days, 3 hours, 2 minutes, one second  -- see bug#34315
+  (should (equal '(1 2 3 99 0 0)
+                 (icalendar--decode-isoduration "P99DT3H2M1S")))
+
+  ;; testcase: 2 weeks
+  (should (equal '(0 0 0 14 0 0)
+                 (icalendar--decode-isoduration "P2W")))
+
+  ;; testcase: rfc2445, section 4.3.6: 15 days, 5 hours and 20 seconds  -- see 
bug#34315
+  (should (equal '(20 0 5 15 0 0)
+                 (icalendar--decode-isoduration "P15DT5H0M20S")))
+
+  ;; testcase: rfc2445, section 4.3.6: 7 weeks
+  (should (equal '(0 0 0 49 0 0)
+                 (icalendar--decode-isoduration "P7W")))
+  )
+
 
 ;; ======================================================================
 ;; Export tests
diff --git a/test/lisp/custom-tests.el b/test/lisp/custom-tests.el
index 766e484..7853c84 100644
--- a/test/lisp/custom-tests.el
+++ b/test/lisp/custom-tests.el
@@ -99,7 +99,6 @@
 ;; This is demonstrating bug#34027.
 (ert-deftest custom--test-theme-variables ()
   "Test variables setting with enabling / disabling a custom theme."
-  :expected-result :failed
   ;; We load custom-resources/custom--test-theme.el.
   (let ((custom-theme-load-path
          `(,(expand-file-name "custom-resources" (file-name-directory #$)))))
@@ -115,15 +114,10 @@
     (should (equal custom--test-user-option 'baz))
     (should (equal custom--test-variable 'baz))
 
+    ;; Enable and then disable.
     (enable-theme 'custom--test)
-    ;; The variables have the theme values.
-    (should (equal custom--test-user-option 'bar))
-    (should (equal custom--test-variable 'bar))
-
     (disable-theme 'custom--test)
     ;; The variables should have the changed values, by reverting.
-    ;; This doesn't work as expected.  Instead, they have their
-    ;; initial values `foo'.
     (should (equal custom--test-user-option 'baz))
     (should (equal custom--test-variable 'baz))))
 
diff --git a/test/lisp/emacs-lisp/hierarchy-tests.el 
b/test/lisp/emacs-lisp/hierarchy-tests.el
index 23cfc79..41d3f2f 100644
--- a/test/lisp/emacs-lisp/hierarchy-tests.el
+++ b/test/lisp/emacs-lisp/hierarchy-tests.el
@@ -1,4 +1,4 @@
-;;; hierarchy-tests.el --- Tests for hierarchy.el
+;;; hierarchy-tests.el --- Tests for hierarchy.el  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2017-2019 Damien Cassou
 
@@ -274,7 +274,7 @@
                    '(dove pigeon dolphin cow)))))
 
 (ert-deftest hierarchy-leafs-includes-lonely-roots ()
-  (let ((parentfn (lambda (item) nil))
+  (let ((parentfn (lambda (_) nil))
         (hierarchy (hierarchy-new)))
     (hierarchy-add-tree hierarchy 'foo parentfn)
     (should (equal (hierarchy-leafs hierarchy)
diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el
index 0e6f278..3b01d89 100644
--- a/test/lisp/emacs-lisp/rx-tests.el
+++ b/test/lisp/emacs-lisp/rx-tests.el
@@ -56,9 +56,12 @@
 (ert-deftest rx-def-in-or ()
   (rx-let ((a b)
            (b (or "abc" c))
-           (c ?a))
+           (c ?a)
+           (d (any "a-z")))
     (should (equal (rx (or a (| "ab" "abcde") "abcd"))
-                   "\\(?:a\\(?:b\\(?:c\\(?:de?\\)?\\)?\\)?\\)"))))
+                   "\\(?:a\\(?:b\\(?:c\\(?:de?\\)?\\)?\\)?\\)"))
+    (should (equal (rx (or ?m (not d)))
+                   "[^a-ln-z]"))))
 
 (ert-deftest rx-char-any ()
   "Test character alternatives with `]' and `-' (Bug#25123)."
@@ -132,8 +135,8 @@
   ;; relint suppression: Single-character range .f-f
   ;; relint suppression: Range .--/. overlaps previous .-
   ;; relint suppression: Range .\*--. overlaps previous .--/
-  (should (equal (rx (any "-a" "c-" "f-f" "--/*--"))
-                 "[*-/acf]"))
+  (should (equal (rx (any "-a" "c-" "f-f" "--/*--") (any "," "-" "A"))
+                 "[*-/acf][,A-]"))
   (should (equal (rx (any "]-a" ?-) (not (any "]-a" ?-)))
                  "[]-a-][^]-a-]"))
   (should (equal (rx (any "--]") (not (any "--]"))
@@ -394,6 +397,8 @@
                  "ab")))
 
 (ert-deftest rx-literal ()
+  (should (equal (rx (literal "$a"))
+                 "\\$a"))
   (should (equal (rx (literal (char-to-string 42)) nonl)
                  "\\*."))
   (let ((x "a+b"))
diff --git a/lisp/emacs-lisp/tcover-unsafep.el 
b/test/lisp/emacs-lisp/unsafep-tests.el
similarity index 76%
rename from lisp/emacs-lisp/tcover-unsafep.el
rename to test/lisp/emacs-lisp/unsafep-tests.el
index 108dee3..2b920a0 100644
--- a/lisp/emacs-lisp/tcover-unsafep.el
+++ b/test/lisp/emacs-lisp/unsafep-tests.el
@@ -1,10 +1,8 @@
-;;;; testcover-unsafep.el -- Use testcover to test unsafep's code coverage
-
-;; Copyright (C) 2002-2020 Free Software Foundation, Inc.
+;;; unsafep-tests.el --- tests for unsafep.el  -*- lexical-binding: t; -*-
 
 ;; Author: Jonathan Yavner <jyavner@member.fsf.org>
-;; Keywords: safety lisp utility
-;; Package: testcover
+
+;; Copyright (C) 2002-2020 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -21,18 +19,19 @@
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
-(require 'testcover)
+;;; Code:
+
+(require 'ert)
+(require 'unsafep)
 
 (defvar safe-functions)
 
-;;;These forms are all considered safe
+;;; These forms are all considered safe
 (defconst testcover-unsafep-safe
   '(((lambda (x) (* x 2)) 14)
     (apply 'cdr (mapcar (lambda (x) (car x)) y))
     (cond ((= x 4) 5) (t 27))
     (condition-case x (car y) (error (car x)))
-    (dolist (x y) (message "here: %s" x))
-    (dotimes (x 14 (* x 2)) (message "here: %d" x))
     (let (x) (dolist (y '(1 2 3) (1+ y)) (push y x)))
     (let (x) (apply (lambda (x) (* x 2)) 14))
     (let ((x '(2))) (push 1 x) (pop x) (add-to-list 'x 2))
@@ -47,7 +46,7 @@
     (propertize "x" 'display '(height (progn (delete-file "x") 1))))
   "List of forms that `unsafep' should decide are safe.")
 
-;;;These forms are considered unsafe
+;;; These forms are considered unsafe
 (defconst testcover-unsafep-unsafe
   '(( (add-to-list x y)
       . (unquoted x))
@@ -109,32 +108,37 @@
     )
   "A-list of (FORM . REASON)... that`unsafep' should decide are unsafe.")
 
-(declare-function unsafep-function "unsafep" (fun))
-
-;;;#########################################################################
-(defun testcover-unsafep ()
+(ert-deftest test-unsafep/safe ()
   "Executes all unsafep tests and displays the coverage results."
-  (interactive)
-  (testcover-unmark-all "unsafep.el")
-  (testcover-start "unsafep.el")
-  (let (save-functions)
+  (let (safe-functions)
     (dolist (x testcover-unsafep-safe)
-      (if (unsafep x)
-         (error "%S should be safe" x)))
+      (should-not (unsafep x)))))
+
+(ert-deftest test-unsafep/message ()
+  ;; FIXME: This failed after converting these tests from testcover to
+  ;; ert.
+  :expected-result :failed
+  (should-not '(dolist (x y) (message "here: %s" x)))
+  (should-not '(dotimes (x 14 (* x 2)) (message "here: %d" x))))
+
+(ert-deftest test-unsafep/unsafe ()
+  "Executes all unsafep tests and displays the coverage results."
+  (let (safe-functions)
     (dolist (x testcover-unsafep-unsafe)
-      (if (not (equal (unsafep (car x)) (cdr x)))
-         (error "%S should be unsafe: %s" (car x) (cdr x))))
-    (setq safe-functions t)
-    (if (or (unsafep '(delete-file "x"))
-           (unsafep-function 'delete-file))
-       (error "safe-functions=t should allow delete-file"))
-    (setq safe-functions '(setcar))
-    (if (unsafep '(setcar x 1))
-       (error "safe-functions=(setcar) should allow setcar"))
-    (if (not (unsafep '(setcdr x 1)))
-       (error "safe-functions=(setcar) should not allow setcdr")))
-  (testcover-mark-all "unsafep.el")
-  (testcover-end "unsafep.el")
-  (message "Done"))
-
-;; testcover-unsafep.el ends here.
+      (should (equal (unsafep (car x)) (cdr x))))))
+
+(ert-deftest test-unsafep/safe-functions-t ()
+  "safe-functions=t should allow delete-file"
+  (let ((safe-functions t))
+    (should-not (unsafep '(delete-file "x")))
+    (should-not (unsafep-function 'delete-file))))
+
+(ert-deftest test-unsafep/safe-functions-setcar ()
+  "safe-functions=(setcar) should allow setcar but not setcdr"
+  (let ((safe-functions '(setcar)))
+    (should-not (unsafep '(setcar x 1)))
+    (should (unsafep '(setcdr x 1)))))
+
+(provide 'unsafep-tests)
+
+;;; unsafep-tests.el ends here
diff --git a/test/lisp/eshell/eshell-tests.el b/test/lisp/eshell/eshell-tests.el
index 16a0464..1b93fb0 100644
--- a/test/lisp/eshell/eshell-tests.el
+++ b/test/lisp/eshell/eshell-tests.el
@@ -1,4 +1,4 @@
-;;; tests/eshell-tests.el --- Eshell test suite
+;;; tests/eshell-tests.el --- Eshell test suite  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1999-2020 Free Software Foundation, Inc.
 
@@ -61,6 +61,8 @@
   (eshell-insert-command text func)
   (eshell-match-result regexp))
 
+(defvar eshell-history-file-name)
+
 (defun eshell-test-command-result (command)
   "Like `eshell-command-result', but not using HOME."
   (let ((eshell-directory-name (make-temp-file "eshell" t))
diff --git a/test/lisp/gnus/gnus-util-tests.el 
b/test/lisp/gnus/gnus-util-tests.el
index b01e2fc..7eadb0d 100644
--- a/test/lisp/gnus/gnus-util-tests.el
+++ b/test/lisp/gnus/gnus-util-tests.el
@@ -1,4 +1,4 @@
-;;; gnus-util-tests.el --- Selectived tests only.
+;;; gnus-util-tests.el --- Selectived tests only.  -*- lexical-binding:t -*-
 ;; Copyright (C) 2015-2020 Free Software Foundation, Inc.
 
 ;; Author: Jens Lechtenbörger <jens.lechtenboerger@fsfe.org>
diff --git a/test/manual/rmailmm.el b/test/lisp/mail/rmailmm-tests.el
similarity index 68%
rename from test/manual/rmailmm.el
rename to test/lisp/mail/rmailmm-tests.el
index d6e29a8..645bb96 100644
--- a/test/manual/rmailmm.el
+++ b/test/lisp/mail/rmailmm-tests.el
@@ -1,4 +1,4 @@
-;;; rmailmm.el --- tests for mail/rmailmm.el
+;;; rmailmm-tests.el --- Tests for rmailmm.el  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2006-2020 Free Software Foundation, Inc.
 
@@ -19,27 +19,42 @@
 
 ;;; Commentary:
 
+;; Converted to ert from previous manual tests.
+
+;; FIXME: Some of these still lack a condition for success.
+
 ;;; Code:
 
+(require 'ert)
 (require 'rmailmm)
 
-(defun rmailmm-test-handler ()
+(ert-deftest rmailmm-test-handler ()
   "Test of a mail using no MIME parts at all."
   (let ((mail "To: alex@gnu.org
 Content-Type: text/plain; charset=koi8-r
 Content-Transfer-Encoding: 8bit
 MIME-Version: 1.0
 
-\372\304\322\301\327\323\324\327\325\312\324\305\41"))
-    (switch-to-buffer (get-buffer-create "*test*"))
-    (erase-buffer)
-    (set-buffer-multibyte nil)
-    (insert mail)
-    (rmail-mime-show t)
-    (set-buffer-multibyte t)))
+\372\304\322\301\327\323\324\327\325\312\324\305\41")
+        (correct "To: alex@gnu.org
+Content-Type: text/plain; charset=koi8-r
+Content-Transfer-Encoding: 8bit
+MIME-Version: 1.0
 
-(defun rmailmm-test-bulk-handler ()
+Здравствуйте!
+"))
+    (with-temp-buffer
+      (erase-buffer)
+      (set-buffer-multibyte nil)
+      (insert mail)
+      (rmail-mime-show t)
+      (set-buffer-multibyte t)
+      (should (equal (buffer-string) correct)))))
+
+;;;; FIXME: This doesn't seem to be working.
+(ert-deftest rmailmm-test-bulk-handler ()
   "Test of a mail used as an example in RFC 2183."
+  :tags '(:unstable)
   (let ((mail "Content-Type: image/jpeg
 Content-Disposition: attachment; filename=genome.jpeg;
   modification-date=\"Wed, 12 Feb 1997 16:29:51 -0500\";
@@ -54,13 +69,17 @@ 
WATQdRUvAK0Bnmshmtn79PpaLBbbOZkjKvRnjRZoRswOkG1wFchKew2g9wXVJVZL/m4+B+vv
 UDwbgUEAUmk2Zyg101d6PhCDySgAvTvDgKiuOrc4dLxUb7UMnhGIexyI+d6U+ABuNAP4Simx
 lgAAAABJRU5ErkJggg==
 "))
-    (switch-to-buffer (get-buffer-create "*test*"))
-    (erase-buffer)
-    (insert mail)
-    (rmail-mime-show)))
-
-(defun rmailmm-test-multipart-handler ()
+    (with-temp-buffer
+      (erase-buffer)
+      (insert mail)
+      (rmail-mime-show)
+      ;; FIXME: What is the condition for success?
+      )))
+
+;; FIXME: Has no condition for success -- see below.
+(ert-deftest rmailmm-test-multipart-handler ()
   "Test of a mail used as an example in RFC 2046."
+  :tags '(:unstable)
   (let ((mail "From: Nathaniel Borenstein <nsb@bellcore.com>
 To: Ned Freed <ned@innosoft.com>
 Date: Sun, 21 Mar 1993 23:56:48 -0800 (PST)
@@ -88,6 +107,11 @@ This is the epilogue.  It is also to be ignored."))
     (switch-to-buffer (get-buffer-create "*test*"))
     (erase-buffer)
     (insert mail)
-    (rmail-mime-show t)))
+    (rmail-mime-show t)
+    ;; FIXME: What is the condition for success?
+    (should nil) ; expected fail for now
+    ))
+
+(provide 'rmailmm-tests)
 
-;;; rmailmm.el ends here
+;; rmailmm-tests.el ends here
diff --git a/test/lisp/mwheel-tests.el b/test/lisp/mwheel-tests.el
index f2989d6..fd998fd 100644
--- a/test/lisp/mwheel-tests.el
+++ b/test/lisp/mwheel-tests.el
@@ -22,17 +22,25 @@
 (require 'ert)
 (require 'mwheel)
 
+(ert-deftest mwheel-test-enable/disable ()
+  (mouse-wheel-mode 1)
+  (should (eq (lookup-key (current-global-map) '[mouse-4]) 'mwheel-scroll))
+  (mouse-wheel-mode -1)
+  (should (eq (lookup-key (current-global-map) '[mouse-4]) nil)))
+
 (ert-deftest mwheel-test--create-scroll-keys ()
-  (should (equal (mouse-wheel--create-scroll-keys 10 'mouse-1)
-                 '([mouse-1]
-                   [left-margin mouse-1] [right-margin mouse-1]
-                   [left-fringe mouse-1] [right-fringe mouse-1]
-                   [vertical-scroll-bar mouse-1] [horizontal-scroll-bar 
mouse-1]
-                   [mode-line mouse-1] [header-line mouse-1])))
+  (should (equal (mouse-wheel--create-scroll-keys 10 'mouse-4)
+                 '([mouse-4]
+                   [left-margin mouse-4] [right-margin mouse-4]
+                   [left-fringe mouse-4] [right-fringe mouse-4]
+                   [vertical-scroll-bar mouse-4] [horizontal-scroll-bar 
mouse-4]
+                   [mode-line mouse-4] [header-line mouse-4])))
   ;; Don't bind modifiers outside of buffer area (e.g. for fringes).
-  (should (equal (mouse-wheel--create-scroll-keys '((shift) . 1) 'mouse-1)
-                 '([mouse-1])))
+  (should (equal (mouse-wheel--create-scroll-keys '((shift) . 1) 'mouse-4)
+                 '([(shift mouse-4)])))
   (should (equal (mouse-wheel--create-scroll-keys '((control) . 9) 'mouse-7)
-                 '([mouse-7]))))
+                 '([(control mouse-7)])))
+  (should (equal (mouse-wheel--create-scroll-keys '((meta) . 5) 'mouse-5)
+                 '([(meta mouse-5)]))))
 
 ;;; mwheel-tests.el ends here
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 71c6302..3914f9a 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -57,9 +57,7 @@
 (declare-function tramp-get-remote-perl "tramp-sh")
 (declare-function tramp-get-remote-stat "tramp-sh")
 (declare-function tramp-list-tramp-buffers "tramp-cmds")
-(declare-function tramp-method-out-of-band-p "tramp-sh")
 (declare-function tramp-smb-get-localname "tramp-smb")
-(declare-function tramp-time-diff "tramp")
 (defvar ange-ftp-make-backup-files)
 (defvar auto-save-file-name-transforms)
 (defvar tramp-connection-properties)
@@ -2139,19 +2137,16 @@ is greater than 10.
       (expand-file-name "/method:host:/path/../file") "/method:host:/file"))
     (should
      (string-equal
-      (expand-file-name "/method:host:/path/.")
-      (if (tramp--test-emacs28-p) "/method:host:/path/" "/method:host:/path")))
+      (expand-file-name "/method:host:/path/.") "/method:host:/path"))
     (should
      (string-equal
       (expand-file-name "/method:host:/path/..") "/method:host:/"))
     (should
      (string-equal
-      (expand-file-name "." "/method:host:/path/")
-      (if (tramp--test-emacs28-p) "/method:host:/path/" "/method:host:/path")))
+      (expand-file-name "." "/method:host:/path/") "/method:host:/path"))
     (should
      (string-equal
-      (expand-file-name "" "/method:host:/path/")
-      (if (tramp--test-emacs28-p) "/method:host:/path/" "/method:host:/path")))
+      (expand-file-name "" "/method:host:/path/") "/method:host:/path"))
     ;; Quoting local part.
     (should
      (string-equal
@@ -4501,11 +4496,8 @@ If UNSTABLE is non-nil, the test is tagged as 
`:unstable'."
            ;; Read output.
            (with-timeout (10 (tramp--test-timeout-handler))
              (while (accept-process-output proc 0 nil t)))
-           (should
-            (string-match
-             (if (eq system-type 'windows-nt)
-                 "unknown signal\n\\'" "killed.*\n\\'")
-             (buffer-string))))
+           ;; On some MS Windows systems, it returns "unknown signal".
+           (should (string-match "unknown signal\\|killed" (buffer-string))))
 
        ;; Cleanup.
        (ignore-errors (delete-process proc)))
diff --git a/test/lisp/pcmpl-linux-resources/fs/ext4/.keep 
b/test/lisp/pcmpl-linux-resources/fs/ext4/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/lisp/pcmpl-linux-resources/mtab 
b/test/lisp/pcmpl-linux-resources/mtab
new file mode 100644
index 0000000..ea33abd
--- /dev/null
+++ b/test/lisp/pcmpl-linux-resources/mtab
@@ -0,0 +1,11 @@
+/dev/sdb1 / ext3 rw,relatime,errors=remount-ro 0 0
+proc /proc proc rw,noexec,nosuid,nodev 0 0
+/sys /sys sysfs rw,noexec,nosuid,nodev 0 0
+varrun /var/run tmpfs rw,noexec,nosuid,nodev,mode=0755 0 0
+varlock /var/lock tmpfs rw,noexec,nosuid,nodev,mode=1777 0 0
+udev /dev tmpfs rw,mode=0755 0 0
+devshm /dev/shm tmpfs rw 0 0
+devpts /dev/pts devpts rw,gid=5,mode=620 0 0
+lrm /lib/modules/2.6.24-16-generic/volatile tmpfs rw 0 0
+securityfs /sys/kernel/security securityfs rw 0 0
+gvfs-fuse-daemon /home/alice/.gvfs fuse.gvfs-fuse-daemon 
rw,nosuid,nodev,user=alice 0 0
diff --git a/test/lisp/pcmpl-linux-tests.el b/test/lisp/pcmpl-linux-tests.el
new file mode 100644
index 0000000..cf7e628
--- /dev/null
+++ b/test/lisp/pcmpl-linux-tests.el
@@ -0,0 +1,51 @@
+;;; pcmpl-linux-tests.el --- Tests for pcmpl-linux.el  -*- lexical-binding: t 
-*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'ert)
+(require 'pcmpl-linux)
+
+(defvar pcmpl-linux-tests-data-dir
+  (file-truename
+   (expand-file-name "pcmpl-linux-resources/"
+                     (file-name-directory (or load-file-name
+                                              buffer-file-name))))
+  "Base directory of pcmpl-linux-tests.el data files.")
+
+(ert-deftest pcmpl-linux-test-fs-types ()
+  (let ((pcmpl-linux-fs-modules-path-format (expand-file-name "fs"
+                                                   
pcmpl-linux-tests-data-dir)))
+    ;; FIXME: Shouldn't return "." and ".."
+    (should (equal (pcmpl-linux-fs-types)
+                   '("." ".." "ext4")))))
+
+(ert-deftest pcmpl-linux-test-mounted-directories ()
+  (let ((pcmpl-linux-mtab-file (expand-file-name "mtab"
+                                      pcmpl-linux-tests-data-dir)))
+    (should (equal (pcmpl-linux-mounted-directories)
+                   '("/" "/dev" "/dev/pts" "/dev/shm" "/home/alice/.gvfs"
+                     "/lib/modules/2.6.24-16-generic/volatile" "/proc" "/sys"
+                     "/sys/kernel/security" "/var/lock" "/var/run")))))
+
+(provide 'pcmpl-linux-tests)
+
+;;; pcmpl-linux-tests.el ends here
diff --git a/test/lisp/play/life-tests.el b/test/lisp/play/life-tests.el
new file mode 100644
index 0000000..38726bb
--- /dev/null
+++ b/test/lisp/play/life-tests.el
@@ -0,0 +1,80 @@
+;;; life-tests.el --- Tests for life.el  -*- lexical-binding:t -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Stefan Kangas <stefankangas@gmail.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'life)
+
+(ert-deftest test-life ()
+  (let ((life--max-width 5)
+        (life--max-height 3)
+        (life-patterns [(" @ "
+                     "  @"
+                     "@@@")])
+        (generations '("
+
+  @
+   @
+ @@@
+" "
+
+
+ @ @
+  @@
+  @
+" "
+
+
+   @
+ @ @
+  @@
+" "
+
+
+  @
+   @@
+  @@
+" "
+
+
+   @
+    @
+  @@@
+"
+)))
+    (life-setup)
+    ;; Test initial state.
+    (goto-char (point-min))
+    (dolist (generation generations)
+      ;; Hack to test buffer contents without trailing whitespace,
+      ;; while also not modifying the "*Life*" buffer.
+      (let ((str (buffer-string))
+            (delete-trailing-lines t))
+        (with-temp-buffer
+          (insert str)
+          (delete-trailing-whitespace)
+          (should (equal (buffer-string) generation))))
+      (life--tick))))
+
+(provide 'life-tests)
+
+;;; life-tests.el ends here
diff --git a/test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl 
b/test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl
new file mode 100644
index 0000000..4a9842f
--- /dev/null
+++ b/test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl
@@ -0,0 +1,52 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use 5.020;
+
+# This file contains test input and expected output for the tests in
+# cperl-mode-tests.el, cperl-mode-test-indent-exp.  The code is
+# syntactically valid, but doesn't make much sense.
+
+# -------- for loop: input --------
+for my $foo (@ARGV)
+{
+...;
+}
+# -------- for loop: expected output --------
+for my $foo (@ARGV) {
+  ...;
+}
+# -------- for loop: end --------
+
+# -------- while loop: input --------
+{
+while (1)
+{
+say "boring loop";
+}
+continue
+{
+last; # no endless loop, though
+}
+}
+# -------- while loop: expected output --------
+{
+  while (1) {
+    say "boring loop";
+  } continue {
+    last; # no endless loop, though
+  }
+}
+# -------- while loop: end --------
+
+# -------- if-then-else: input --------
+if (my $foo) { bar() } elsif (quux()) { baz() } else { quuux }
+# -------- if-then-else: expected output --------
+if (my $foo) {
+  bar();
+} elsif (quux()) {
+  baz();
+} else {
+  quuux;
+}
+# -------- if-then-else: end --------
diff --git a/test/lisp/progmodes/cperl-mode-tests.el 
b/test/lisp/progmodes/cperl-mode-tests.el
index be8b42d..b549b92 100644
--- a/test/lisp/progmodes/cperl-mode-tests.el
+++ b/test/lisp/progmodes/cperl-mode-tests.el
@@ -7,17 +7,39 @@
 ;; Keywords: internal
 ;; Homepage: https://github.com/HaraldJoerg/cperl-mode
 
-;;; Commentary:
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
 
-;; This is a collection of tests for the fontification of CPerl-mode.
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
-;; Run these tests interactively:
-;; (ert-run-tests-interactively '(tag :fontification))
+;;; Commentary:
+
+;; This is a collection of tests for CPerl-mode.
 
 ;;; Code:
 
 (defvar cperl-test-mode #'cperl-mode)
 
+(require 'cperl-mode)
+
+(defvar cperl-mode-tests-data-directory
+  (expand-file-name "lisp/progmodes/cperl-mode-resources"
+                    (or (getenv "EMACS_TEST_DIRECTORY")
+                        (expand-file-name "../../../"
+                                          (or load-file-name
+                                              buffer-file-name))))
+  "Directory containing cperl-mode test data.")
+
 (defun cperl-test-ppss (text regexp)
   "Return the `syntax-ppss' of the first character matched by REGEXP in TEXT."
   (interactive)
@@ -48,4 +70,103 @@ have a face property."
   (let ((code "{ $a- / $b } # /"))
     (should (equal (nth 8 (cperl-test-ppss code "/")) 7))))
 
+(ert-deftest cperl-mode-test-bug-16368 ()
+  "Verify that `cperl-forward-group-in-re' doesn't hide errors."
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
+  (let ((code "/(\\d{4})(?{2}/;")     ; the regex from the bug report
+        (result))
+    (with-temp-buffer
+      (insert code)
+      (goto-char 9)
+      (setq result (cperl-forward-group-in-re))
+      (should (equal (car result) 'scan-error))
+      (should (equal (nth 1 result) "Unbalanced parentheses"))
+      (should (= (point) 9))))        ; point remains unchanged on error
+  (let ((code "/(\\d{4})(?{2})/;")    ; here all parens are balanced
+        (result))
+    (with-temp-buffer
+      (insert code)
+      (goto-char 9)
+      (setq result (cperl-forward-group-in-re))
+      (should (equal result nil))
+      (should (= (point) 15)))))      ; point has skipped the group
+
+(defun cperl-mode-test--run-bug-10483 ()
+  "Runs a short program, intended to be under timer scrutiny.
+This function is intended to be used by an Emacs subprocess in
+batch mode.  The message buffer is used to report the result of
+running `cperl-indent-exp' for a very simple input.  The result
+is expected to be different from the input, to verify that
+indentation actually takes place.."
+  (let ((code "poop ('foo', \n'bar')")) ; see the bug report
+    (message "Test Bug#10483 started")
+    (with-temp-buffer
+      (insert code)
+      (funcall cperl-test-mode)
+      (goto-char (point-min))
+      (search-forward "poop")
+      (cperl-indent-exp)
+      (message "%s" (buffer-string)))))
+
+(ert-deftest cperl-mode-test-bug-10483 ()
+  "Verifies that a piece of code which ends in a paren without a
+statement terminato ron tne same line does not loop forever.  The
+test starts an asynchronous Emacs batch process under timeout
+control."
+  (interactive)
+  (let* ((emacs (concat invocation-directory invocation-name))
+         (test-function 'cperl-mode-test--run-bug-10483)
+         (test-function-name (symbol-name test-function))
+         (test-file (symbol-file test-function 'defun))
+         (ran-out-of-time nil)
+         (process-connection-type nil)
+         runner)
+    (with-temp-buffer
+      (with-timeout (1
+                     (delete-process runner)
+                     (setq ran-out-of-time t))
+        (setq runner (start-process "speedy"
+                                    (current-buffer)
+                                    emacs
+                                    "-batch"
+                                    "--quick"
+                                    "--load" test-file
+                                    "--funcall" test-function-name))
+        (while (accept-process-output runner)))
+      (should (equal ran-out-of-time nil))
+      (goto-char (point-min))
+      ;; just a very simple test for indentation: This should
+      ;; be rather robust with regard to indentation defaults
+      (should (string-match
+               "poop ('foo', \n      'bar')" (buffer-string))))))
+
+(ert-deftest cperl-mode-test-indent-exp ()
+  "Run various tests for `cperl-indent-exp' edge cases.
+These exercise some standard blocks and also the special
+treatment for Perl expressions where a closing paren isn't the
+end of the statement."
+  (let ((file (expand-file-name "cperl-indent-exp.pl"
+                                cperl-mode-tests-data-directory)))
+    (with-temp-buffer
+      (insert-file-contents file)
+      (goto-char (point-min))
+      (while (re-search-forward
+              (concat "^# ?-+ \\_<\\(?1:.+?\\)\\_>: input ?-+\n"
+                      "\\(?2:\\(?:.*\n\\)+?\\)"
+                      "# ?-+ \\1: expected output ?-+\n"
+                      "\\(?3:\\(?:.*\n\\)+?\\)"
+                      "# ?-+ \\1: end ?-+")
+              nil t)
+        (let ((name (match-string 1))
+              (code (match-string 2))
+              (expected (match-string 3))
+              got)
+          (with-temp-buffer
+            (insert code)
+            (goto-char (point-min))
+            (cperl-indent-exp) ; here we go!
+            (setq expected (concat "test case " name ":\n" expected))
+            (setq got (concat "test case " name ":\n" (buffer-string)))
+            (should (equal got expected))))))))
+
 ;;; cperl-mode-tests.el ends here
diff --git a/test/lisp/progmodes/js-tests.el b/test/lisp/progmodes/js-tests.el
index 0d53c06..681e51d 100644
--- a/test/lisp/progmodes/js-tests.el
+++ b/test/lisp/progmodes/js-tests.el
@@ -1,4 +1,4 @@
-;;; js-tests.el --- Test suite for js-mode
+;;; js-tests.el --- Test suite for js-mode  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2017-2020 Free Software Foundation, Inc.
 
diff --git a/test/lisp/textmodes/bibtex-tests.el 
b/test/lisp/textmodes/bibtex-tests.el
index b3858de..c12722f 100644
--- a/test/lisp/textmodes/bibtex-tests.el
+++ b/test/lisp/textmodes/bibtex-tests.el
@@ -1,4 +1,4 @@
-;;; bibtex-tests.el --- Test suite for bibtex.
+;;; bibtex-tests.el --- Test suite for bibtex.  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2013-2020 Free Software Foundation, Inc.
 
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index d7c7aec..de0aeab 100644
--- a/test/src/editfns-tests.el
+++ b/test/src/editfns-tests.el
@@ -1,4 +1,4 @@
-;;; editfns-tests.el -- tests for editfns.c
+;;; editfns-tests.el -- tests for editfns.c  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2016-2020 Free Software Foundation, Inc.
 
@@ -124,8 +124,8 @@
   "Validate character position to byte position translation."
   (let ((bytes '()))
     (dotimes (pos len)
-      (setq bytes (add-to-list 'bytes (position-bytes (1+ pos)) t)))
-    bytes))
+      (push (position-bytes (1+ pos)) bytes))
+    (nreverse bytes)))
 
 (ert-deftest transpose-ascii-regions-test ()
   (with-temp-buffer
diff --git a/test/src/fileio-tests.el b/test/src/fileio-tests.el
index 7baa4c7..ed381d1 100644
--- a/test/src/fileio-tests.el
+++ b/test/src/fileio-tests.el
@@ -107,40 +107,6 @@ Also check that an encoding error can appear in a symlink."
       (setenv "HOME" "x:foo")
       (should (equal (expand-file-name "~/bar") "x:/foo/bar")))))
 
-(ert-deftest fileio-tests--HOME-trailing-slash ()
-  "Test that expand-file-name of \"~\" respects trailing slash."
-  (let ((process-environment (copy-sequence process-environment)))
-    (dolist (home
-             (if (memq system-type '(windows-nt ms-dos))
-                 '("c:/a/b/c" "c:/a/b/c/")
-               '("/a/b/c" "/a/b/c/")))
-      (setenv "HOME" home)
-      (should (equal (expand-file-name "~") (expand-file-name home))))))
-
-(ert-deftest fileio-tests--expand-file-name-trailing-slash ()
-  (dolist (fooslashalias '("foo/" "foo//" "foo/." "foo//." "foo///././."
-                           "foo/a/.."))
-    (if (memq system-type '(windows-nt ms-dos))
-        (progn
-          (should (equal (expand-file-name fooslashalias "c:/") "c:/foo/"))
-          (should (equal (expand-file-name (concat "c:/" fooslashalias))
-                         "c:/foo/"))
-          (should (equal (expand-file-name "." "c:/usr/spool/")
-                         "c:/usr/spool/"))
-          (should (equal (expand-file-name "" "c:/usr/spool/")
-                         "c:/usr/spool/")))
-      (should (equal (expand-file-name fooslashalias "/") "/foo/"))
-      (should (equal (expand-file-name (concat "/" fooslashalias)) "/foo/"))
-      (should (equal (expand-file-name "." "/usr/spool/") "/usr/spool/"))
-      (should (equal (expand-file-name "" "/usr/spool/") "/usr/spool/"))))
-  ;; Trailing "B/C/.." means B must be a directory.
-  (if (memq system-type '(windows-nt ms-dos))
-      (progn
-        (should (equal (expand-file-name "c:/a/b/c/..") "c:/a/b/"))
-        (should (equal (expand-file-name "c:/a/b/c/../") "c:/a/b/")))
-    (should (equal (expand-file-name "/a/b/c/..") "/a/b/"))
-    (should (equal (expand-file-name "/a/b/c/../") "/a/b/"))))
-
 (ert-deftest fileio-tests--insert-file-interrupt ()
   (let ((text "-*- coding: binary -*-\n\xc3\xc3help")
         f)
diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el
index 400e912..b9a7d29 100644
--- a/test/src/fns-tests.el
+++ b/test/src/fns-tests.el
@@ -1,4 +1,4 @@
-;;; fns-tests.el --- tests for src/fns.c
+;;; fns-tests.el --- tests for src/fns.c  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
 
@@ -229,8 +229,8 @@
   (require 'info)
   (should (equal (func-arity 'Info-goto-node) '(1 . 3)))
   (should (equal (func-arity (lambda (&rest x))) '(0 . many)))
-  (should (equal (func-arity (eval (lambda (x &optional y)) nil)) '(1 . 2)))
-  (should (equal (func-arity (eval (lambda (x &optional y)) t)) '(1 . 2)))
+  (should (equal (func-arity (eval '(lambda (x &optional y)) nil)) '(1 . 2)))
+  (should (equal (func-arity (eval '(lambda (x &optional y)) t)) '(1 . 2)))
   (should (equal (func-arity 'let) '(1 . unevalled))))
 
 (defun fns-tests--string-repeat (s o)



reply via email to

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