emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs-25 ed19f20 2/3: Merge branch 'emacs-25' of /home/acm


From: Alan Mackenzie
Subject: [Emacs-diffs] emacs-25 ed19f20 2/3: Merge branch 'emacs-25' of /home/acm/emacs/emacs.git/emacs-25 into emacs-25
Date: Wed, 30 Mar 2016 17:14:06 +0000

branch: emacs-25
commit ed19f207449c43f7f08285ada87ae7a46c61c8d1
Merge: eabd667 7c1802f
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>

    Merge branch 'emacs-25' of /home/acm/emacs/emacs.git/emacs-25 into emacs-25
---
 ChangeLog.2                       |  125 +++---
 admin/release-process             |    4 +-
 build-aux/gitlog-to-changelog     |   19 +-
 build-aux/gitlog-to-emacslog      |    2 +-
 configure.ac                      |   18 +-
 doc/emacs/abbrevs.texi            |    9 +-
 doc/emacs/anti.texi               |    6 +-
 doc/emacs/display.texi            |   10 +-
 doc/emacs/emacs.texi              |    1 +
 doc/emacs/files.texi              |    2 +-
 doc/emacs/maintaining.texi        |   18 +-
 doc/emacs/windows.texi            |   86 +++-
 doc/lispref/abbrevs.texi          |    9 +-
 doc/lispref/text.texi             |   80 ---
 doc/man/emacsclient.1             |   12 +-
 doc/misc/eshell.texi              |    4 +-
 doc/misc/gnus-coding.texi         |   10 +-
 doc/misc/texinfo.tex              |  133 +++--
 etc/GNUS-NEWS                     |  292 ++++++++++-
 etc/NEWS                          |  984 +++++++++++++++++++------------------
 etc/themes/tsdh-light-theme.el    |    7 +-
 lib/sys_select.in.h               |   19 +-
 lib/time_rz.c                     |    6 +-
 lisp/Makefile.in                  |    8 +-
 lisp/calendar/todo-mode.el        |   25 +-
 lisp/comint.el                    |    7 +
 lisp/dired-x.el                   |    7 +-
 lisp/dired.el                     |   17 +-
 lisp/doc-view.el                  |    2 +-
 lisp/emacs-lisp/cursor-sensor.el  |    2 +-
 lisp/emacs-lisp/map.el            |   36 +-
 lisp/emacs-lisp/smie.el           |    5 +-
 lisp/forms.el                     |    2 +-
 lisp/gnus/mm-decode.el            |    1 +
 lisp/gnus/mml-sec.el              |   16 +-
 lisp/gnus/mml-smime.el            |    4 -
 lisp/gnus/mml1991.el              |    5 -
 lisp/gnus/mml2015.el              |    5 -
 lisp/isearch.el                   |   34 +-
 lisp/loadup.el                    |    4 +
 lisp/mail/rmail.el                |    2 +
 lisp/menu-bar.el                  |    2 +-
 lisp/midnight.el                  |    8 +-
 lisp/minibuffer.el                |    2 +-
 lisp/net/shr.el                   |   22 +-
 lisp/net/soap-client.el           |   10 +-
 lisp/net/tramp-sh.el              |    1 +
 lisp/progmodes/cc-defs.el         |    2 +-
 lisp/progmodes/compile.el         |    8 +
 lisp/progmodes/elisp-mode.el      |    2 +-
 lisp/progmodes/idlw-toolbar.el    |    4 +-
 lisp/progmodes/prog-mode.el       |   68 ---
 lisp/progmodes/python.el          |   36 +-
 lisp/progmodes/ruby-mode.el       |   49 +-
 lisp/progmodes/xref.el            |   11 +-
 lisp/replace.el                   |   36 +-
 lisp/simple.el                    |   36 +-
 lisp/startup.el                   |   14 +-
 lisp/term.el                      |    7 +
 lisp/xml.el                       |    2 +-
 lisp/xt-mouse.el                  |  129 ++++--
 nextstep/README                   |   28 +-
 src/alloc.c                       |    2 -
 src/bidi.c                        |    2 +-
 src/editfns.c                     |    6 +-
 src/emacsgtkfixed.c               |    3 +-
 src/emacsgtkfixed.h               |    1 -
 src/floatfns.c                    |    3 +-
 src/font.c                        |    2 +-
 src/frame.c                       |    2 +-
 src/ftfont.c                      |    7 +-
 src/gtkutil.c                     |  112 ++---
 src/image.c                       |    3 +
 src/keyboard.c                    |   19 +-
 src/lisp.h                        |    3 +-
 src/nsterm.m                      |  172 ++++++-
 src/term.c                        |    7 +-
 src/w32font.c                     |    3 +-
 src/xdisp.c                       |   90 +++-
 src/xfns.c                        |    2 +-
 src/xwidget.c                     |    4 +-
 test/automated/map-tests.el       |    9 +-
 test/automated/package-test.el    |    2 +-
 test/automated/ruby-mode-tests.el |    8 +
 test/automated/tramp-tests.el     |   13 +-
 test/automated/xt-mouse-tests.el  |  110 ++++
 test/indent/ruby.rb               |   47 ++-
 87 files changed, 1925 insertions(+), 1222 deletions(-)

diff --git a/ChangeLog.2 b/ChangeLog.2
index 1771269..b2dc6c5 100644
--- a/ChangeLog.2
+++ b/ChangeLog.2
@@ -9560,8 +9560,8 @@
        (xref-backend-identifier-completion-table):
        New generic functions.
 
-       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode): Add
-       `elisp--xref-backend' to the beginning of
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
+       Add `elisp--xref-backend' to the beginning of
        `xref-backend-functions', locally.  Delete references to
        removed functions and vars.
        (elisp-xref-find): Remove.
@@ -9579,7 +9579,8 @@
 
        Support rectangular regions for more commands
 
-       * lisp/simple.el (region-extract-function): Handle the arg value 
‘bounds’.
+       * lisp/simple.el (region-extract-function): Handle the arg
+       value ‘bounds’.
        (region-insert-function): New function.
        (shell-command-on-region): Add arg ‘region-noncontiguous-p’.
        If non-nil, operate on multiple chunks.
@@ -9605,7 +9606,7 @@
        If non-nil, operate on multiple chunks.
 
        * src/casefiddle.c (Fdowncase_region): Add arg ‘region-noncontiguous-p’.
-       If non-nil, operate on multiple chunks. (Bug#19829)
+       If non-nil, operate on multiple chunks.  (Bug#19829)
 
 2015-11-14  Dmitry Gutov  <address@hidden>
 
@@ -9837,7 +9838,6 @@
 2015-11-13  Juanma Barranquero  <address@hidden>
 
        * test/automated/simple-test.el: Add test for bug#20698 (bug#21885)
-
        (simple-test--transpositions): New macro.
        (simple-transpose-subr): New test.
 
@@ -9848,7 +9848,6 @@
 2015-11-13  Juanma Barranquero  <address@hidden>
 
        * src/undo.c: Small fixes for previous change
-
        (run_undoable_change): Mark void argument list.
        (record_property_change): Remove unused variable `boundary'.
 
@@ -9909,7 +9908,7 @@
        shr: don't invoke unbound function (Bug#21895)
 
        * lisp/net/shr.el (have-fringes-p): New function.
-         (shr-insert-document, shr-fill-text): Use it.
+       (shr-insert-document, shr-fill-text): Use it.
 
 2015-11-12  Juanma Barranquero  <address@hidden>
 
@@ -9966,8 +9965,8 @@
 
        Enable sorting of JSON object keys when encoding
 
-       * lisp/json.el (json-encoding-object-sort-predicate): New variable for
-       specifying a sorting predicate for JSON objects during encoding.
+       * lisp/json.el (json-encoding-object-sort-predicate): New variable
+       for specifying a sorting predicate for JSON objects during encoding.
        (json--plist-to-alist): New utility function.
        (json-encode-hash-table): Re-use `json-encode-alist' when object keys
        are to be sorted.
@@ -9977,8 +9976,8 @@
        to be sorted.
        (json-pretty-print-buffer-ordered): New command to pretty print the
        buffer with object keys sorted alphabetically.
-       (json-pretty-print-ordered): New command to pretty print the region with
-       object keys sorted alphabetically.
+       (json-pretty-print-ordered): New command to pretty print the region
+       with object keys sorted alphabetically.
 
        * test/automated/json-tests.el (test-json-plist-to-alist)
        (test-json-encode-plist, test-json-encode-hash-table)
@@ -9989,7 +9988,7 @@
 
 2015-11-12  Juanma Barranquero  <address@hidden>
 
-       * test/automated/keymap-tests.el: New test file
+       * test/automated/keymap-tests.el: New test file.
 
 2015-11-12  Ken Raeburn  <address@hidden>
 
@@ -10036,9 +10035,9 @@
 
        Use color cache for creating bitmap
 
-       * src/image.c (x_create_bitmap_from_xpm_data) [ALLOC_XPM_COLORS]: Set
-       attributes to use the caching color allocator.  Initialize and free
-       the cache.
+       * src/image.c (x_create_bitmap_from_xpm_data) [ALLOC_XPM_COLORS]:
+       Set attributes to use the caching color allocator.  Initialize and
+       free the cache.
 
 2015-11-12  Eli Barzilay  <address@hidden>
 
@@ -10065,32 +10064,32 @@
 
        * lisp/net/soap-inspect.el: Remove version header.
 
-       * lisp/net/soap-client.el, lisp/net/soap-inspect.el: Fix first line 
header
+       * soap-client.el, soap-inspect.el, jira2.el: Fix first line header
        format.
 
 2015-11-11  Alan Mackenzie  <address@hidden>
 
        CC Mode: Respect users' settings of 
open-paren-in-column-0-is-defun-start.
 
-       lisp/progmodes/cc-engine.el (c-backward-single-comment, 
c-backward-comments)
-       (c-invalidate-state-cache-1, c-parse-state-1, c-guess-basic-syntax):
-       remove bindings of open-paren-in-column-0-is-defun-start to nil.
+       * lisp/progmodes/cc-engine.el (c-backward-single-comment)
+       (c-backward-comments, c-invalidate-state-cache-1, c-parse-state-1)
+       (c-guess-basic-syntax):
+       Remove bindings of open-paren-in-column-0-is-defun-start to nil.
        (c-get-fallback-scan-pos): "New" function (existed several years ago).
        (c-parse-state-get-strategy): Reintroduce the 'BOD strategy, using
        c-get-fallback-scan-pos.
        (c-parse-state-1): Handle 'BOD strategy.
 
-       lisp/progmodes/cc-mode.el (c-before-change, c-after-change)
-       c-font-lock-fontify-region): remove bindings of
+       * lisp/progmodes/cc-mode.el (c-before-change, c-after-change)
+       (c-font-lock-fontify-region): Remove bindings of
        open-paren-in-column-0-is-defun-start to nil.
 
-       cc-mode.texi (Performance Issues, Limitations and Known Bugs): Fix mix 
up
-       between @chapter and @appendix.
+       * doc/misc/cc-mode.texi (Performance Issues)
+       (Limitations and Known Bugs): Fix mix up between @chapter and @appendix.
 
 2015-11-11  Artur Malabarba  <address@hidden>
 
-       * lisp/obarray.el: Fix shadowed variables
-
+       * lisp/obarray.el: Fix shadowed variables.
        (obarray-map, obarray-remove, obarray-put, obarray-get):
        Change OBARRAY arg to OB to avoid shadowing ‘obarray’.
 
@@ -10128,8 +10127,8 @@
 
        New file with obarray functions.
 
-       * lisp/obarray.el: basic obarray functions extracted from abbrev.el
-       * test/automated/obarray-tests.el: new file
+       * lisp/obarray.el: Basic obarray functions extracted from abbrev.el.
+       * test/automated/obarray-tests.el: New file.
 
 2015-11-11  Eli Zaretskii  <address@hidden>
 
@@ -10217,7 +10216,7 @@
 
        * lisp/net/tramp.el (tramp-handle-file-equal-p)
        (tramp-handle-file-in-directory-p): New defuns.  Suggested by
-       Harvey Chapman <address@hidden>
+       Harvey Chapman <address@hidden>.
 
        * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist):
        * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist):
@@ -10244,11 +10243,11 @@
 
        Avoid creating notification objects when possible
 
-       * src/nsterm.m (windowWillEnterFullScreen, windowWillExitFullScreen:,
-       windowDidEnterFullScreen, windowDidExitFullScreen): provide
-       convenience functions that do not require a notification object.  When
-       needed, define NSWindowDidEnterFullScreenNotification to allow for
-       compilation on OS X 10.6.8.
+       * src/nsterm.m (windowWillEnterFullScreen, windowWillExitFullScreen:)
+       (windowDidEnterFullScreen, windowDidExitFullScreen): Provide convenience
+       functions that do not require a notification object.  When needed,
+       define NSWindowDidEnterFullScreenNotification to allow for compilation
+       on OS X 10.6.8.
 
 2015-11-10  Paul Eggert  <address@hidden>
 
@@ -10281,8 +10280,7 @@
 2015-11-10  Artur Malabarba  <address@hidden>
 
        * doc/lispref/variables.texi (Directory Local Variables):
-
-       Document dir-locals wildcards
+       Document dir-locals wildcards.
 
        * lisp/files.el (dir-locals-file): Point to Info node.
 
@@ -10293,14 +10291,12 @@
 
 2015-11-10  Artur Malabarba  <address@hidden>
 
-       * lisp/files.el: Don't allow customization of dir-locals sorting
-
+       * lisp/files.el: Don't allow customization of dir-locals sorting.
        In retrospect, this is not a good idea for the same reason that
        `dir-locals-file' is a defconst, because it is important that this
        behaviour be "uniform across different environments and users".
        Sure, the user can still change the sorting with a hack, but we
        shouldn't encourage them to change it.
-
        (dir-locals--all-files): Return list in the order returned by
        `file-expand-wildcards'.
        (file-expand-wildcards): Document the sorting predicate used.
@@ -10308,54 +10304,52 @@
 
 2015-11-10  Artur Malabarba  <address@hidden>
 
-       * lisp/files.el (dir-locals-read-from-file): Better handle errors
+       * lisp/files.el (dir-locals-read-from-file): Better handle errors.
 
-       * lisp/isearch.el (search-default-regexp-mode): change default value
+       * lisp/isearch.el (search-default-regexp-mode): Change default value.
 
 2015-11-10  Artur Malabarba  <address@hidden>
 
-       * lisp/files.el (dir-locals-find-file): Don't stop at unreadable files
-
+       * lisp/files.el (dir-locals-find-file): Don't stop at unreadable files.
        `locate-dominating-file' will now keep looking if the files it finds in
        a given directory are unreadable (or not files).
 
 2015-11-10  Artur Malabarba  <address@hidden>
 
-       * lisp/files.el (dir-locals-file): Allow wildcards
-
+       * lisp/files.el (dir-locals-file): Allow wildcards.
        (dir-locals-find-file, dir-locals-collect-variables)
        (dir-locals-read-from-file): Update accordingly.
        (hack-dir-local-variables): Rename a local variable.
 
-       * lisp/files-x.el (modify-dir-local-variable): Update accordingly
+       * lisp/files-x.el (modify-dir-local-variable): Update accordingly.
 
-       * lisp/help-fns.el (describe-variable): Update accordingly
+       * lisp/help-fns.el (describe-variable): Update accordingly.
 
-       * .gitignore: Add .dir-locals?.el
+       * .gitignore: Add .dir-locals?.el.
 
 2015-11-10  Artur Malabarba  <address@hidden>
 
-       * lisp/emacs-lisp/map.el (map-merge-with): New function
+       * lisp/emacs-lisp/map.el (map-merge-with): New function.
 
-       * test/automated/map-tests.el (test-map-merge-with): New test
+       * test/automated/map-tests.el (test-map-merge-with): New test.
 
 2015-11-10  Karl Fogel  <address@hidden>
 
        Fix some recently-perturbed bookmark autoloads
 
        * lisp/bookmark.el (bookmark-set-internal): Remove unnecessary autoload.
-         (bookmark-set): Restore autoload.
-         (bookmark-set-no-overwrite): Add autoload.
+       (bookmark-set): Restore autoload.
+       (bookmark-set-no-overwrite): Add autoload.
 
        Thanks to Juanma Barranquero for noticing the autoload problems
        introduced by my recent commit adding/changing the above functions
        (Sun Nov 8 14:16:43 2015 -0500, git commit 3812e17978).
 
-2015-11-10  Noah Friedman  <address@hidden>
+2015-11-09  Noah Friedman  <address@hidden>
 
-       (ydump-buffer): Handle case where gap is at the start of buffer.
-       I don't recall if older versions of gdb were less strict but you
-       cannot dump a 0-length range in gdb 7.9.1.
+       * etc/emacs-buffer.gdb (ydump-buffer): Handle case where gap is at
+       the start of buffer.  I don't recall if older versions of gdb were
+       less strict but you cannot dump a 0-length range in gdb 7.9.1.
 
 2015-11-10  Dmitry Gutov  <address@hidden>
 
@@ -10503,13 +10497,13 @@
        Offer non-overwrite bookmark setter (Bug#15746)
 
        * lisp/bookmark.el (bookmark-set-internal): New helper function to do
-         what `bookmark-set' used to do, but with more choices for overwrite
-         vs push, and with minor changes to the interactive prompt format.
-         (bookmark-set): Rewrite as wrapper around above.
-         If overwriting, inform the user of that in the prompt.
-         (bookmark-set-no-overwrite): New function, also done as wrapper.
-         Bind to "M" in `ctl-x-r-map' autoloads.
-         (bookmark-map): Similarly bind "M" here.
+       what `bookmark-set' used to do, but with more choices for overwrite
+       vs push, and with minor changes to the interactive prompt format.
+       (bookmark-set): Rewrite as wrapper around above.
+       If overwriting, inform the user of that in the prompt.
+       (bookmark-set-no-overwrite): New function, also done as wrapper.
+       Bind to "M" in `ctl-x-r-map' autoloads.
+       (bookmark-map): Similarly bind "M" here.
 
 2015-11-08  Paul Eggert  <address@hidden>
 
@@ -10595,7 +10589,8 @@
        unchanged, in which case no clearing is needed (and sh_offset isn't
        necessarily valid, which can lead to a wild memset).
 
-       * src/unexelf.c (unexec): Properly handle _OBJC_ symbols in bss 
sections.
+       * src/unexelf.c (unexec): Properly handle _OBJC_ symbols in
+       bss sections.
 
 2015-11-08  Alan Modra  <address@hidden>
 
@@ -10656,8 +10651,8 @@
 
        Remove dirs in vc project roots from the the vc project library roots
 
-       * lisp/progmodes/project.el (project-library-roots): Remove
-       directories inside the project roots from the result.
+       * lisp/progmodes/project.el (project-library-roots):
+       Remove directories inside the project roots from the result.
        (http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg00536.html)
 
 2015-11-08  Dmitry Gutov  <address@hidden>
diff --git a/admin/release-process b/admin/release-process
index 2f23dac..3f75ff5 100644
--- a/admin/release-process
+++ b/admin/release-process
@@ -237,7 +237,7 @@ TUTORIAL.zh
 
 ** Check the manual.
 
-abbrevs.texi
+abbrevs.texi           Steve Byrne
 ack.texi
 anti.texi
 arevert-xtra.texi
@@ -292,7 +292,7 @@ xresources.texi
 
 ** Check the Lisp manual.
 
-abbrevs.texi
+abbrevs.texi           Steve Byrne
 anti.texi
 back.texi
 backups.texi
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index a2513d0..83bafdf 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS "$0" "$@"'
     if 0;
 # Convert git log output to ChangeLog format.
 
-my $VERSION = '2016-01-12 23:09'; # UTC
+my $VERSION = '2016-03-22 21:49'; # UTC
 # The definition above must lie within the first 8 lines in order
 # for the Emacs time-stamp write hook (at end) to update it.
 # If you change this file with Emacs, please let the write hook
@@ -298,9 +298,7 @@ sub git_dir_option($)
             {
               if ($sha =~ /^$_/)
                 {
-                  $skipflag = 1;
-                  ## Perhaps only warn if a pattern matches more than once?
-                  warn "$ME: warning: skipping $sha due to $_\n";
+                  $skipflag = $_;
                   last;
                 }
             }
@@ -386,8 +384,17 @@ sub git_dir_option($)
       }
 
       # Ignore commits that match the --ignore-matching pattern, if specified.
-      if (! ($skipflag || (defined $ignore_matching
-             && @line && $line[0] =~ /$ignore_matching/)))
+      if (defined $ignore_matching && @line && $line[0] =~ /$ignore_matching/)
+        {
+          $skipflag = 1;
+        }
+      elsif ($skipflag)
+        {
+          ## Perhaps only warn if a pattern matches more than once?
+          warn "$ME: warning: skipping $sha due to $skipflag\n";
+        }
+
+      if (! $skipflag)
         {
           if (defined $ignore_line && @line)
             {
diff --git a/build-aux/gitlog-to-emacslog b/build-aux/gitlog-to-emacslog
index bcc47b1..5c187f5 100755
--- a/build-aux/gitlog-to-emacslog
+++ b/build-aux/gitlog-to-emacslog
@@ -77,7 +77,7 @@ test -d .git || {
 # Maybe we should skip all "Merge branch 'master'" messages.
 # See eg the cairo-related ones.
 ./build-aux/gitlog-to-changelog \
-    --ignore-matching="^; |^Merge branch '(master|emacs-[0-9][0-9])' of 
git\.(savannah|sv)\.gnu\.org:/srv/git/emacs$|^Merge remote-tracking branch 
'.*'$" \
+    --ignore-matching="^; |^Merge branch '[^']*' of 
git\.(savannah|sv)\.gnu\.org:/srv/git/emacs|^Merge remote-tracking branch 
'.*'$" \
   --ignore-line='^; ' --format='%B' \
   "$gen_origin..$new_origin" >"ChangeLog.tmp" || exit
 
diff --git a/configure.ac b/configure.ac
index 075f611..d31b8df 100644
--- a/configure.ac
+++ b/configure.ac
@@ -877,18 +877,19 @@ AC_CACHE_CHECK([whether the compiler is clang], 
[emacs_cv_clang],
 
 # When compiling with GCC, prefer -isystem to -I when including system
 # include files, to avoid generating useless diagnostics for the files.
-if test "$gl_gcc_warnings" != yes; then
+AS_IF([test "$gl_gcc_warnings" != yes],
+ [
   isystem='-I'
-  if test "$emacs_cv_clang" = yes
-  then
+  AS_IF([test "$emacs_cv_clang" = yes],
+   [
      # Turn off some warnings if supported.
      gl_WARN_ADD([-Wno-switch])
      gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare])
      gl_WARN_ADD([-Wno-pointer-sign])
      gl_WARN_ADD([-Wno-string-plus-int])
      gl_WARN_ADD([-Wno-unknown-attributes])
-  fi
-else
+   ])
+ ],[
   isystem='-isystem '
 
   # This, $nw, is the list of warnings we disable.
@@ -899,10 +900,9 @@ else
        # Old toolkits mishandle 'const'.
        nw="$nw -Wwrite-strings"
        ;;
-    *)
-       gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
-       ;;
   esac
+  AS_IF([test -z "$nw"],
+    [gl_WARN_ADD([-Werror], [WERROR_CFLAGS])])
   AC_SUBST([WERROR_CFLAGS])
 
   nw="$nw -Wsystem-headers"         # Don't let system headers trigger warnings
@@ -985,7 +985,7 @@ else
 
   gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
   AC_SUBST([GNULIB_WARN_CFLAGS])
-fi
+ ])
 
 edit_cflags="
   s,///*,/,g
diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi
index e0441a1..a1db34c 100644
--- a/doc/emacs/abbrevs.texi
+++ b/doc/emacs/abbrevs.texi
@@ -435,9 +435,9 @@ copies the expansion verbatim including its case pattern.
 controls which characters are considered part of a word, for dynamic expansion
 purposes.  The regular expression must match just one character, never
 two or more.  The same regular expression also determines which
-characters are part of an expansion.  The value @code{nil} has a special
-meaning: dynamic abbrevs are made of word characters, but expansions are
-made of word and symbol characters.
+characters are part of an expansion.  The (default) value @code{nil}
+has a special meaning: dynamic abbrevs are made of word characters,
+but expansions are made of word and symbol characters.
 
 @vindex dabbrev-abbrev-skip-leading-regexp
   In shell scripts and makefiles, a variable name is sometimes prefixed
@@ -445,4 +445,5 @@ with @samp{$} and sometimes not.  Major modes for this kind 
of text can
 customize dynamic abbrev expansion to handle optional prefixes by setting
 the variable @code{dabbrev-abbrev-skip-leading-regexp}.  Its value
 should be a regular expression that matches the optional prefix that
-dynamic abbrev expression should ignore.
+dynamic abbrev expression should ignore.  The default is @code{nil},
+which means no characters should be skipped.
diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi
index aadc85a..68a65a7 100644
--- a/doc/emacs/anti.texi
+++ b/doc/emacs/anti.texi
@@ -75,9 +75,9 @@ benefit, this removes many useless entries at the beginning 
of the
 @kbd{C-h b} output.  The @code{electric-quote-mode} has been deleted,
 so there's only the one true quoting method now---using the
 address@hidden quote characters.  And if that's not enough, the
-doc strings and other messages show text quoted `like this' and "like
-this" as they were written, instead of arbitrarily replacing them
-with Unicode ``curved quote'' characters.  The
+doc strings and other messages show text quoted @t{`like this'}
+as they were written, instead of arbitrarily replacing them
+with Unicode ``curved quote'' characters @t{‘like this’}.  The
 @code{text-quoting-style} variable becomes therefore unneeded and was
 removed.  As result, text produced by Emacs can be sent to those
 venerable teletypes again, yeah!
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index e3b2403..01f899f 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -1476,15 +1476,18 @@ elisp, The Emacs Lisp Reference Manual}.
 
 @cindex glyphless characters
 @cindex characters with no font glyphs
address@hidden glyphless-char face
   On graphical displays, some characters may have no glyphs in any of
 the fonts available to Emacs.  These @dfn{glyphless characters} are
 normally displayed as boxes containing the hexadecimal character code.
 Similarly, on text terminals, characters that cannot be displayed
 using the terminal encoding (@pxref{Terminal Coding}) are normally
 displayed as question signs.  You can control the display method by
-customizing the variable @code{glyphless-char-display-control}.
address@hidden Chars,, Glyphless Character Display, elisp, The Emacs
-Lisp Reference Manual}, for details.
+customizing the variable @code{glyphless-char-display-control}.  You
+can also customize the @code{glyphless-char} face to make these
+characters more prominent on display.  @xref{Glyphless Chars,,
+Glyphless Character Display, elisp, The Emacs Lisp Reference Manual},
+for details.
 
 @cindex curly quotes
 @cindex curved quotes
@@ -1598,7 +1601,6 @@ screen lines.  Setting the variable @code{truncate-lines} 
in any way
 makes it local to the current buffer; until that time, the default
 value, which is normally @code{nil}, is in effect.
 
address@hidden truncate-partial-width-windows
   If a split window becomes too narrow, Emacs may automatically enable
 line truncation.  @xref{Split Window}, for the variable
 @code{truncate-partial-width-windows} which controls this.
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index dc99d49..c23c96f 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -519,6 +519,7 @@ Multiple Windows
 * Pop Up Window::       Finding a file or buffer in another window.
 * Change Window::       Deleting windows and changing their sizes.
 * Displaying Buffers::  How Emacs picks a window for displaying a buffer.
+* Temporary Displays::  Displaying non-editable buffers.
 * Window Convenience::  Convenience functions for window handling.
 
 Displaying a Buffer in a Window
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index c482b90..ab20d4a 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -288,7 +288,7 @@ see @ref{Drag and Drop}, and @ref{Misc Dired Features}.
 
   On text-mode terminals and on graphical displays when Emacs was
 built without a GUI toolkit, you can visit files via the menu-bar
address@hidden menu, which has a @samp{New File} item.
address@hidden menu, which has a @samp{Visit New File} item.
 
   Each time you visit a file, Emacs automatically scans its contents
 to detect what character encoding and end-of-line convention it uses,
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 887960e..797b53f 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -1289,15 +1289,15 @@ whose state is that of the item at point.
 @findex vc-dir-mark
 @findex vc-dir-mark-all-files
   While in the VC Directory buffer, all the files that you mark with
address@hidden (@code{vc-dir-mark}) or @kbd{M} (@code{vc-dir-mark}) are in
-the current VC fileset.  If you mark a directory entry with @kbd{m},
-all the listed files in that directory tree are in the current VC
-fileset.  The files and directories that belong to the current VC
-fileset are indicated with a @samp{*} character in the VC Directory
-buffer, next to their VC status.  In this way, you can set up a
-multi-file VC fileset to be acted on by VC commands like @address@hidden v
-v}} (@pxref{Basic VC Editing}), @address@hidden v =}} (@pxref{Old
-Revisions}), and @address@hidden v u}} (@pxref{VC Undo}).
address@hidden (@code{vc-dir-mark}) or @kbd{M} (@code{vc-dir-mark-all-files})
+are in the current VC fileset.  If you mark a directory entry with
address@hidden, all the listed files in that directory tree are in the
+current VC fileset.  The files and directories that belong to the
+current VC fileset are indicated with a @samp{*} character in the VC
+Directory buffer, next to their VC status.  In this way, you can set
+up a multi-file VC fileset to be acted on by VC commands like
address@hidden@kbd{C-x v v}} (@pxref{Basic VC Editing}), @address@hidden v =}}
+(@pxref{Old Revisions}), and @address@hidden v u}} (@pxref{VC Undo}).
 
   The VC Directory buffer also defines some single-key shortcuts for
 VC commands with the @kbd{C-x v} prefix: @kbd{=}, @kbd{+}, @kbd{l},
diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi
index f99234b..702963f 100644
--- a/doc/emacs/windows.texi
+++ b/doc/emacs/windows.texi
@@ -117,10 +117,14 @@ variable @code{truncate-lines} (@pxref{Line Truncation}); 
it is
 instead controlled by the variable
 @code{truncate-partial-width-windows}.  If the value of this variable
 is a positive integer (the default is 50), that specifies the minimum
-width for a partial-width window before automatic line truncation
-occurs; if the value is @code{nil}, automatic line truncation is
-disabled; and for any other address@hidden value, Emacs truncates
-lines in every partial-width window regardless of its width.
+total width for a partial-width window before automatic line
+truncation occurs; if the value is @code{nil}, automatic line
+truncation is disabled; and for any other address@hidden value, Emacs
+truncates lines in every partial-width window regardless of its width.
+The total width of a window is in column units as reported by
address@hidden (@pxref{Window Sizes,,, elisp, The Emacs
+Lisp Reference Manual}), it includes the fringes, the continuation and
+truncation glyphs, the margins, and the scroll bar.
 
   On text terminals, side-by-side windows are separated by a vertical
 divider which is drawn using the @code{vertical-border} face.
@@ -206,7 +210,7 @@ Choice}, for how Emacs picks or creates the window to use.
 Select buffer @var{bufname} in another window
 (@code{switch-to-buffer-other-window}).
 
address@hidden display-buffer
address@hidden display-buffer @r{(command)}
 @item C-x 4 C-o @var{bufname} @key{RET}
 @kindex C-x 4 C-o
 Display buffer @var{bufname} in some window, without trying to select
@@ -345,7 +349,6 @@ user's attention will be diverted to that buffer.  These 
commands
 usually work by calling @code{switch-to-buffer} internally
 (@pxref{Select Buffer}).
 
address@hidden display-buffer
   Some commands try to display intelligently, trying not to take
 over the selected window, e.g., by splitting off a new window and
 displaying the desired buffer there.  Such commands, which include the
@@ -374,11 +377,12 @@ Several of these commands are bound in the @kbd{C-x 5} 
prefix key.
 
 @menu
 * Window Choice::   How @code{display-buffer} works.
+* Temporary Displays::   Displaying non-editable buffers.
 @end menu
 
 @node Window Choice
 @subsection How @code{display-buffer} works
address@hidden display-buffer
address@hidden display-buffer, detailed description
 
 The @code{display-buffer} command (as well as commands that call it
 internally) chooses a window to display by following the steps given
@@ -411,15 +415,15 @@ By default, this step is skipped.  To enable it, change 
the variable
 @code{graphic-only} means to do this only on graphical displays.
 
 @item
-Otherwise, try to create a new window by splitting the selected
-window, and display the buffer in that new window.
+Otherwise, try to create a new window by splitting a window on the
+selected frame, and display the buffer in that new window.
 
 @vindex split-height-threshold
 @vindex split-width-threshold
 The split can be either vertical or horizontal, depending on the
 variables @code{split-height-threshold} and
 @code{split-width-threshold}.  These variables should have integer
-values.  If @code{split-height-threshold} is smaller than the selected
+values.  If @code{split-height-threshold} is smaller than the chosen
 window's height, the split puts the new window below.  Otherwise, if
 @code{split-width-threshold} is smaller than the window's width, the
 split puts the new window on the right.  If neither condition holds,
@@ -427,6 +431,12 @@ Emacs tries to split so that the new window is below---but 
only if the
 window was not split before (to avoid excessive splitting).
 
 @item
+Otherwise, display the buffer in a window previously showing it.
+Normally, only windows on the selected frame are considered, but if
address@hidden is address@hidden the window may be also on another
+frame.
+
address@hidden
 Otherwise, display the buffer in an existing window on the selected
 frame.
 
@@ -435,6 +445,62 @@ If all the above methods fail for whatever reason, create 
a new frame
 and display the buffer there.
 @end itemize
 
+A more advanced and flexible way to customize the behavior of
address@hidden is by using the option @code{display-buffer-alist}
+mentioned in the next section.
+
+
address@hidden Temporary Displays
address@hidden Displaying non-editable buffers.
address@hidden pop-up windows
address@hidden temporary windows
+
+Some buffers are shown in windows for perusal rather than for editing.
+Help commands (@pxref{Help}) typically use a buffer called @file{*Help*}
+for that purpose, minibuffer completion (@pxref{Completion}) uses a
+buffer called @file{*Completions*} instead.  Such buffers are usually
+displayed only for a short period of time.
+
+  Normally, Emacs chooses the window for such temporary displays via
address@hidden as described above.  The @file{*Completions*}
+buffer, on the other hand, is normally displayed in a window at the
+bottom of the selected frame, regardless of the number of windows
+already shown on that frame.
+
+  If you prefer Emacs to display a temporary buffer in a different
+fashion, we recommend to customize the variable
address@hidden (@pxref{Choosing Window,,Choosing a Window
+for Display, elisp, The Emacs Lisp Reference Manual}).  For example,
+to display @file{*Completions*} by splitting a window as described in
+the previous section, use the following form in your initialization
+file (@pxref{Init File}):
+
address@hidden
address@hidden
+(customize-set-variable
+ 'display-buffer-alist
+ '(("\\*Completions\\*" display-buffer-pop-up-window)))
address@hidden group
address@hidden example
+
address@hidden temp-buffer-resize-mode
+  The @file{*Completions*} buffer is also special in the sense that
+Emacs usually tries to make its window just as large as necessary to
+display all of its contents.  To resize windows showing other
+temporary displays like, for example, the @file{*Help*} buffer
+accordingly, turn on the minor mode (@pxref{Minor Modes})
address@hidden (@pxref{Temporary Displays,,Temporary
+Displays, elisp, The Emacs Lisp Reference Manual}).
+
address@hidden temp-buffer-max-height
address@hidden temp-buffer-max-width
+  The maximum size of windows resized by @code{temp-buffer-resize-mode}
+can be controlled by customizing the options
address@hidden and @code{temp-buffer-max-width}
+(@pxref{Temporary Displays,,Temporary Displays, elisp, The Emacs Lisp
+Reference Manual}) and cannot exceed the size of the containing frame.
+
+
 @node Window Convenience
 @section Convenience Features for Window Handling
 
diff --git a/doc/lispref/abbrevs.texi b/doc/lispref/abbrevs.texi
index 5f5a395..cdea2a8 100644
--- a/doc/lispref/abbrevs.texi
+++ b/doc/lispref/abbrevs.texi
@@ -198,7 +198,10 @@ abbrevs in a file automatically, under the control of 
variables
 described here.
 
 @defopt abbrev-file-name
-This is the default file name for reading and saving abbrevs.
+This is the default file name for reading and saving abbrevs.  By
+default, Emacs will look for @file{~/.emacs.d/abbrev_defs}, and, if
+not found, for @file{~/.abbrev_defs}; if neither file exists, Emacs
+will create @file{~/.emacs.d/abbrev_defs}.
 @end defopt
 
 @defun quietly-read-abbrev-file &optional filename
@@ -216,7 +219,7 @@ A address@hidden value for @code{save-abbrevs} means that 
Emacs should
 offer to save abbrevs (if any have changed) when files are saved.  If
 the value is @code{silently}, Emacs saves the abbrevs without asking
 the user.  @code{abbrev-file-name} specifies the file to save the
-abbrevs in.
+abbrevs in.  The default value is @code{t}.
 @end defopt
 
 @defvar abbrevs-changed
@@ -282,7 +285,7 @@ omitted, it defaults to point.  @code{name}, if 
address@hidden, should
 be the name by which this abbrev was found (a string); it is used to
 figure out whether to adjust the capitalization of the expansion.  The
 function returns @code{abbrev} if the abbrev was successfully
-inserted.
+inserted, otherwise it returns @code{nil}.
 @end defun
 
 @deffn Command abbrev-prefix-mark &optional arg
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 4c3a1a0..3749292 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -2191,9 +2191,6 @@ This function returns the horizontal position of point, 
measured in
 columns, counting from 0 at the left margin.  The column position is the
 sum of the widths of all the displayed representations of the characters
 between the start of the current line and point.
-
-For an example of using @code{current-column}, see the description of
address@hidden in @ref{Text Lines}.
 @end defun
 
 @deffn Command move-to-column column &optional force
@@ -2365,83 +2362,6 @@ already indented, it calls @code{completion-at-point} to 
complete the
 text at point (@pxref{Completion in Buffers}).
 @end defopt
 
address@hidden literate programming
address@hidden multi-mode indentation
-  Some major modes need to support embedded regions of text whose
-syntax belongs to a different major mode.  Examples include
address@hidden programming} source files that combine documentation and
-snippets of source code, Yacc/Bison programs that include snippets of
-plain C code, etc.  To correctly indent the embedded chunks, the major
-mode needs to delegate the indentation to another mode's indentation
-engine (e.g., call @code{c-indent-defun} for C code or
address@hidden for Python), while providing it with some
-context to guide the indentation.  The following facilities support
-such multi-mode indentation.
-
address@hidden prog-indentation-context
-This variable, when address@hidden, holds the indentation context for
-the sub-mode's indentation engine provided by the superior major mode.
-The value should be a list of the form @code{(@var{first-column}
address@hidden(@var{start} . @var{end})} @code{prev-chunk})}.  The members of 
the
-list have the following meaning:
-
address@hidden @var
address@hidden first-column
-The column to be used for top-level constructs.  This replaces the
-default value of the top-level column used by the sub-mode, usually
-zero.
address@hidden start
address@hidden end
-The region of the code chunk to be indented by the sub-mode.  The
-value of @var{end} can be @code{nil}, which stands for the value of
address@hidden
address@hidden prev-chunk
-If this is address@hidden, it should provide the sub-mode's
-indentation engine with a virtual context of the code chunk.  Valid
-values include:
-
address@hidden @minus
address@hidden
-A string whose contents is the text the sub-mode's indentation engine
-should consider to precede the code chunk.  The sub-mode's indentation
-engine can add text properties to that string, to be reused in
-repeated calls with the same string, thus using it as a cache.  An
-example where this is useful is code chunks that need to be indented
-as function bodies, but lack the function's preamble---the string
-could then include that missing preamble.
address@hidden
-A function.  It is expected to be called with the start position of
-the current chunk, and should return a cons cell
address@hidden@code{(@var{prev-start} . @var{prev-end})}} that specifies the
-region of the previous code chunk, or @code{nil} if there is no previous
-chunk.  This is useful in literate-programming sources, where code is
-split into chunks, and correct indentation needs to access previous
-chunks.
address@hidden itemize
address@hidden table
address@hidden defvar
-
-The following convenience functions should be used by major mode's
-indentation engine in support of invocations as sub-modes of another
-major mode.
-
address@hidden prog-first-column
-Call this function instead of using a literal value (usually, zero) of
-the column number for indenting top-level program constructs.  The
-function's value is the column number to use for top-level constructs.
-When no superior mode is in effect, this function returns zero.
address@hidden defun
-
address@hidden prog-widen
-Call this function instead of @code{widen} to remove any restrictions
-imposed by the mode's indentation engine and restore the restrictions
-recorded in @code{prog-indentation-context}.  This prevents the
-indentation engine of a sub-mode from inadvertently operating on text
-outside of the chunk it was supposed to indent, and preserves the
-restriction imposed by the superior mode.  When no superior mode is in
-effect, this function just calls @code{widen}.
address@hidden defun
-
 
 @node Region Indent
 @subsection Indenting an Entire Region
diff --git a/doc/man/emacsclient.1 b/doc/man/emacsclient.1
index e62fe93..010eeba 100644
--- a/doc/man/emacsclient.1
+++ b/doc/man/emacsclient.1
@@ -49,9 +49,19 @@ If you set the variable "server-window" to a window or a 
frame, "C-x
 #" displays the server buffer in that window or in that frame.
 
 .SH OPTIONS
-The programs follow the usual GNU command line syntax, with long
+Most options follow the usual GNU command line syntax, with long
 options starting with two dashes ("\-").
 .TP
+.BI + line\fR[\fP\fB:\fPcolumn\fR]\fP
+Go to the specified
+.I line
+and
+.IR column .
+A missing
+.I column
+is treated as column 1.
+This option applies only to the next file specified.
+.TP
 .B \-a, \-\-alternate-editor=EDITOR
 if the Emacs server is not running, run the specified editor instead.
 This can also be specified via the ALTERNATE_EDITOR environment variable.
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index f90c7d3..a7a3840 100644
--- a/doc/misc/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -252,7 +252,9 @@ need to use a function that takes some other data type, you 
will need to
 call it in an Elisp expression (which can also be used with
 @ref{Expansion, expansions}).  As with other shells, you can
 escape special characters and spaces with the backslash (@code{\}) and
-apostrophes (@code{''}) and double quotes (@code{""}).
+apostrophes (@code{''}) and double quotes (@code{""}).  This is needed
+especially for file names with special characters like pipe
+(@code{|}), which could be part of remote file names.
 
 @node Built-ins
 
diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi
index 3b2c4af..661e705 100644
--- a/doc/misc/gnus-coding.texi
+++ b/doc/misc/gnus-coding.texi
@@ -364,11 +364,11 @@ such multiple commits, like whitespace differences, and 
unify those ;-).
 
 @heading @file{GNUS-NEWS}
 
-Starting from No Gnus, the @file{GNUS-NEWS} is created from
address@hidden/gnus-news.texi}.  Don't edit @file{GNUS-NEWS}.  Edit
address@hidden/gnus-news.texi}, type @command{make GNUS-NEWS} in the
address@hidden directory and commit @file{GNUS-NEWS} and
address@hidden/gnus-news.texi}.
+The @file{etc/GNUS-NEWS} is created from
address@hidden/misc/gnus-news.texi}.  Don't edit @file{etc/GNUS-NEWS}.
+Edit @file{doc/misc/gnus-news.texi}, type @command{make
+update-gnus-news} in the @file{lisp} directory and commit
address@hidden/GNUS-NEWS} and @file{doc/misc/gnus-news.texi}.
 
 @heading Conventions for version information in defcustoms
 
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index d04e2dd..9437a4d 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -3,7 +3,7 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2016-03-06.18}
+\def\texinfoversion{2016-03-22.15}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -1513,10 +1513,27 @@ output) for that.)}
 \fi  % \ifx\pdfoutput
 
 %
-% PDF outline support for XeTeX
+% For XeTeX
 %
+\newif\iftxiuseunicodedestname
 \ifx\XeTeXrevision\thisisundefined
 \else
+  %
+  % XeTeX version check
+  %
+  \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99995}>-1
+    % XeTeX 0.99995+ contains xdvipdfmx 20160307+.
+    % It can handle Unicode destination name for PDF.
+    \txiuseunicodedestnametrue
+  \else
+    % XeTeX < 0.99995 can not handle Unicode destination name for PDF
+    % because xdvipdfmx 20150315 has UTF-16 convert issue.
+    % It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+    \txiuseunicodedestnamefalse
+  \fi
+  %
+  % PDF outline support
+  %
   \pdfmakepagedesttrue \relax
   % Emulate the primitive of pdfTeX
   \def\pdfdest name#1 xyz{%
@@ -1525,15 +1542,25 @@ output) for that.)}
   \def\pdfmkdest#1{{%
     % We have to set dummies so commands such as @code, and characters
     % such as \, aren't expanded when present in a section title.
-    \indexnofonts  % For avoiding UTF-16 convert issue of xdvipdfmx 20150315.
+    \indexnofonts
+    \iftxiuseunicodedestname
+      \def\pdfdestname{#1}% Pass through Unicode characters.
+    \else
+      \edef\pdfdestname{#1}% Replace Unicode characters to ASCII.
+    \fi
+    \turnoffactive
     \makevalueexpandable
     % In the case of XeTeX, xdvipdfmx converts strings to UTF-16.
     % Therefore \txiescapepdf is not necessary.
-    \safewhatsit{\pdfdest name{#1} xyz}%
+    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
   }}
   %
   \def\dopdfoutline#1#2#3#4{%
-    \edef\pdfoutlinedest{#3}%
+    \iftxiuseunicodedestname
+      \def\pdfoutlinedest{#3}% Pass through Unicode characters.
+    \else
+      \edef\pdfoutlinedest{#3}% Replace Unicode characters to ASCII.
+    \fi
     \ifx\pdfoutlinedest\empty
       \def\pdfoutlinedest{#4}%
     \fi
@@ -1574,7 +1601,7 @@ output) for that.)}
       % In the case of XeTeX, xdvipdfmx converts strings to UTF-16.
       % Therefore, the encoding and the language may not be considered.
       %
-      \indexnofonts % For avoiding UTF-16 convert issue of xdvipdfmx 20150315.
+      \indexnofonts
       \setupdatafile
       % We can have normal brace characters in the PDF outlines, unlike
       % Texinfo index files.  So set that up.
@@ -1596,14 +1623,31 @@ output) for that.)}
   % However, due to UTF-16 convert issue of xdvipdfmx 20150315,
   % ``\special{pdf:dest ...}'' can not handle non-ASCII strings.
   % It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
-\fi
-
 %
-% @image support for XeTeX
+  % make a live url in pdf output.
+  \def\pdfurl#1{%
+    \begingroup
+      % it seems we really need yet another set of dummies; have not
+      % tried to figure out what each command should do in the context
+      % of @url.  for now, just make @/ a no-op, that's the only one
+      % people have actually reported a problem with.
+      %
+      \normalturnoffactive
+      address@hidden@}%
+      \let\/=\empty
+      \makevalueexpandable
+      % do we want to go so far as to use \indexnofonts instead of just
+      % special-casing \var here?
+      \def\var##1{##1}%
+      %
+      \leavevmode\setcolor{\urlcolor}%
+      \special{pdf:bann << /Border [0 0 0]
+        /Subtype /Link /A << /S /URI /URI (#1) >> >>}%
+    \endgroup}
+  \def\endlink{\setcolor{\maincolor}\special{pdf:eann}}
 %
-\newif\ifxeteximgpdf
-\ifx\XeTeXrevision\thisisundefined
-\else
+  %
+  % @image support
   %
   % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
   \def\doxeteximage#1#2#3{%
@@ -1615,7 +1659,6 @@ output) for that.)}
     % someone has a scalable image, presumably better to use that than a
     % bitmap.
     \let\xeteximgext=\empty
-    \xeteximgpdffalse
     \begingroup
       \openin 1 #1.pdf \ifeof 1
         \openin 1 #1.PDF \ifeof 1
@@ -1632,17 +1675,23 @@ output) for that.)}
             \fi
           \else \gdef\xeteximgext{png}%
           \fi
-        \else \gdef\xeteximgext{PDF} \global\xeteximgpdftrue%
+        \else \gdef\xeteximgext{PDF}%
         \fi
-      \else \gdef\xeteximgext{pdf} \global\xeteximgpdftrue%
+      \else \gdef\xeteximgext{pdf}%
       \fi
       \closein 1
     \endgroup
     %
-    \ifxeteximgpdf
+    \def\xetexpdfext{pdf}%
+    \ifx\xeteximgext\xetexpdfext
       \XeTeXpdffile "#1".\xeteximgext ""
     \else
-      \XeTeXpicfile "#1".\xeteximgext ""
+      \def\xetexpdfext{PDF}%
+      \ifx\xeteximgext\xetexpdfext
+        \XeTeXpdffile "#1".\xeteximgext ""
+      \else
+        \XeTeXpicfile "#1".\xeteximgext ""
+      \fi
     \fi
     \ifdim \wd0 >0pt width \xeteximagewidth \fi
     \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
@@ -7804,7 +7853,7 @@ end
   % Process the macro body under the current catcode regime.
   \scantokens{#1\texinfoc}\aftermacro%
   %
-  % The \c is to remove the \newlinechar added by \scantokens, and
+  % The \texinfoc is to remove the \newlinechar added by \scantokens, and
   % can be noticed by \parsearg.
   %   The \aftermacro allows a \comment at the end of the macro definition
   % to duplicate itself past the final \newlinechar added by \scantokens:
@@ -7817,15 +7866,7 @@ end
 
 % Used for copying and captions
 \def\scanexp#1{%
-  \bgroup
-  % Undo catcode changes of \startcontents and \printindex
-  % When called from @insertcopying or (short)caption, we need active
-  % backslash to get it printed correctly.
-  % FIXME: This may not be needed.
-  address@hidden \catcode`\\=\active \escapechar=`\@
-  \edef\temp{\noexpand\scanmacro{#1}}%
-  \temp
-  \egroup
+  \expandafter\scanmacro\expandafter{#1}%
 }
 
 \newcount\paramno   % Count of parameters
@@ -9371,7 +9412,7 @@ end
     %
     \ifx\thiscaption\empty \else
       \ifx\floatident\empty \else
-       \appendtomacro\captionline{: }% had ident, so need a colon between
+        \appendtomacro\captionline{: }% had ident, so need a colon between
       \fi
       %
       % caption text.
@@ -9398,30 +9439,17 @@ end
         \requireauxfile
         \atdummies
         %
-        % since we read the caption text in the macro world, where ^^M
-        % is turned into a normal character, we have to scan it back, so
-        % we don't write the literal three characters "^^M" into the aux file.
-       \scanexp{%
-         \xdef\noexpand\gtemp{%
-           \ifx\thisshortcaption\empty
-             \thiscaption
-           \else
-             \thisshortcaption
-           \fi
-         }%
-       }%
+        \ifx\thisshortcaption\empty
+          \def\gtemp{\thiscaption}%
+        \else
+          \def\gtemp{\thisshortcaption}%
+        \fi
         address@hidden
-         \ifx\gtemp\empty \else : \gtemp \fi}}%
+          \ifx\gtemp\empty \else : \gtemp \fi}}%
       }%
     \fi
   \egroup  % end of \vtop
   %
-  % place the captured inserts
-  %
-  % BEWARE: when the floats start floating, we have to issue warning
-  % whenever an insert appears inside a float which could possibly
-  % float. --kasal, 26may04
-  %
   \checkinserts
 }
 
@@ -10865,6 +10893,10 @@ directory should work if nowhere else does.}
   \unicodechardefs
 }
 
+% Whether the active definitions of non-ASCII characters expand to
+% non-active tokens with the same character code.  This is used to
+% write characters literally, instead of using active definitions for
+% printing the correct glyphs.
 \newif\ifpassthroughchars
 \passthroughcharsfalse
 
@@ -10917,13 +10949,6 @@ directory should work if nowhere else does.}
    \relax
 }
 
-% Whether the active definitions of non-ASCII characters expand to
-% non-active tokens with the same character code.  This is used to
-% write characters literally, instead of using active definitions for
-% printing the correct glyphs.
-\newif\ifpassthroughchars
-\passthroughcharsfalse
-
 % define all the unicode characters we know about, for the sake of @U.
 \iftxinativeunicodecapable
   \nativeunicodechardefsatu
diff --git a/etc/GNUS-NEWS b/etc/GNUS-NEWS
index 4efb53e..06badc1 100644
--- a/etc/GNUS-NEWS
+++ b/etc/GNUS-NEWS
@@ -7,40 +7,286 @@ Please send Gnus bug reports to address@hidden
 For older news, see Gnus info node "New Features".
 
 
-* New features
+* Supported Emacs versions The following Emacs versions are supported by No
+Gnus:
 
-** nnimap can request and use the Gmail "X-GM-LABELS".
+** Emacs 22 and up
+** XEmacs 21.4
+** XEmacs 21.5
+** SXEmacs
 
-** New package `gnus-notifications.el' can send notifications when you
-   receive new messages.
+
+* Installation changes
+
+** Upgrading from previous (stable) version if you have used No Gnus.
+
+If you have tried No Gnus (the unstable Gnus branch leading to this
+release) but went back to a stable version, be careful when upgrading to
+this version.  In particular, you will probably want to remove the
+'~/News/marks' directory (perhaps selectively), so that flags are read
+from your '~/.newsrc.eld' instead of from the stale marks file, where
+this release will store flags for nntp.  See a later entry for more
+information about nntp marks.  Note that downgrading isn't safe in
+general.
+
+** Incompatibility when switching from Emacs 23 to Emacs 22 In Emacs 23,
+Gnus uses Emacs's new internal coding system 'utf-8-emacs' for saving
+articles drafts and '~/.newsrc.eld'.  These files may not be read
+correctly in Emacs 22 and below.  If you want to use Gnus across
+different Emacs versions, you may set 'mm-auto-save-coding-system' to
+'emacs-mule'.
+
+** Lisp files are now installed in '.../site-lisp/gnus/' by default.  It
+defaulted to '.../site-lisp/' formerly.  In addition to this, the new
+installer issues a warning if other Gnus installations which will shadow
+the latest one are detected.  You can then remove those shadows manually
+or remove them using 'make remove-installed-shadows'.
+
+** The installation directory name is allowed to have spaces and/or tabs.
+
+
+* New packages and libraries within Gnus
+
+** New version of 'nnimap'
+
+'nnimap' has been reimplemented in a mostly-compatible way.  See the Gnus
+manual for a description of the new interface.  In particular,
+'nnimap-inbox' and the client side split method has changed.
+
+** Gnus includes the Emacs Lisp SASL library.
+
+This provides a clean API to SASL mechanisms from within Emacs.  The user
+visible aspects of this, compared to the earlier situation, include
+support for DIGEST-MD5 and NTLM.  *Note Emacs SASL: (sasl)Top.
+
+** ManageSieve connections uses the SASL library by default.
+
+The primary change this brings is support for DIGEST-MD5 and NTLM, when
+the server supports it.
+
+** Gnus includes a password cache mechanism in password.el.
+
+It is enabled by default (see 'password-cache'), with a short timeout of
+16 seconds (see 'password-cache-expiry').  If PGG is used as the PGP back
+end, the PGP passphrase is managed by this mechanism.  Passwords for
+ManageSieve connections are managed by this mechanism, after querying the
+user about whether to do so.
+
+** Using EasyPG with Gnus When EasyPG, is available, Gnus will use it
+instead of PGG.  EasyPG is an Emacs user interface to GNU Privacy Guard.
+ *Note EasyPG Assistant user's manual: (epa)Top.  EasyPG is included in
+Emacs 23 and available separately as well.
+
+
+* Changes in group mode
+
+** Symbols like 'gcc-self' now have the same precedence rules in
+'gnus-parameters' as other "real" variables: The last match wins instead
+of the first match.
+
+** Old intermediate incoming mail files ('Incoming*') are deleted after a
+couple of days, not immediately.  *Note Mail Source Customization::.
+(New in Gnus 5.10.10 / No Gnus 0.8)
+
+
+* Changes in summary and article mode
+
+** There's now only one variable that determines how HTML is rendered:
+'mm-text-html-renderer'.
+
+** Gnus now supports sticky article buffers.  Those are article buffers that
+are not reused when you select another article.  *Note Sticky Articles::.
+
+** Gnus can selectively display 'text/html' articles with a WWW browser with
+'K H'.  *Note MIME Commands::.
+
+** International host names (IDNA) can now be decoded inside article bodies
+using 'W i' ('gnus-summary-idna-message').  This requires that GNU Libidn
+(<http://www.gnu.org/software/libidn/>) has been installed.
+
+** The non-ASCII group names handling has been much improved.  The back ends
+that fully support non-ASCII group names are now 'nntp', 'nnml', and
+'nnrss'.  Also the agent, the cache, and the marks features work with
+those back ends.  *Note Non-ASCII Group Names::.
+
+** Gnus now displays DNS master files sent as text/dns using dns-mode.
+
+** Gnus supports new limiting commands in the Summary buffer: '/ r'
+('gnus-summary-limit-to-replied') and '/ R'
+('gnus-summary-limit-to-recipient').  *Note Limiting::.
+
+** You can now fetch all ticked articles from the server using 'Y t'
+('gnus-summary-insert-ticked-articles').  *Note Summary Generation
+Commands::.
+
+** Gnus supports a new sort command in the Summary buffer: 'C-c C-s C-t'
+('gnus-summary-sort-by-recipient').  *Note Summary Sorting::.
+
+** S/MIME now features LDAP user certificate searches.  You need to
+configure the server in 'smime-ldap-host-list'.
+
+** URLs inside OpenPGP headers are retrieved and imported to your PGP key
+ring when you click on them.
+
+** Picons can be displayed right from the textual address, see
+'gnus-picon-style'.  *Note Picons::.
+
+** ANSI SGR control sequences can be transformed using 'W A'.
+
+ANSI sequences are used in some Chinese hierarchies for highlighting
+articles ('gnus-article-treat-ansi-sequences').
 
-** If you have the "tnef" program installed, Gnus will display ms-tnef
-   files, aka "winmail.dat".
+** Gnus now MIME decodes articles even when they lack "MIME-Version" header.
+This changes the default of 'gnus-article-loose-mime'.
 
-** Archives (like tar and zip files) will be automatically unpacked,
-   and the files inside the packages will be displayed as MIME parts.
+** 'gnus-decay-scores' can be a regexp matching score files.  For example,
+set it to '\\.ADAPT\\'' and only adaptive score files will be decayed.
+ *Note Score Decays::.
 
-** shr has a new command `z' that cycles through image sizes.
+** Strings prefixing to the 'To' and 'Newsgroup' headers in summary lines
+when using 'gnus-ignored-from-addresses' can be customized with
+'gnus-summary-to-prefix' and 'gnus-summary-newsgroup-prefix'.  *Note To
+From Newsgroups::.
 
-** `backtab' in the summary buffer now selects the previous link in
-   the article buffer.
+** You can replace MIME parts with external bodies.  See
+'gnus-mime-replace-part' and 'gnus-article-replace-part'.  *Note MIME
+Commands::, *note Using MIME::.
 
-** Using the "X-Message-SMTP-Method" header in Message buffers now
-   allows specifying how messages are to be sent.  For example:
+** The option 'mm-fill-flowed' can be used to disable treatment of
+format=flowed messages.  Also, flowed text is disabled when sending
+inline PGP signed messages.  *Note Flowed text: (emacs-mime)Flowed text.
+(New in Gnus 5.10.7)
 
-   X-Message-SMTP-Method: smtp smtp.fsf.org 587
+** Now the new command 'S W' ('gnus-article-wide-reply-with-original') for a
+wide reply in the article buffer yanks a text that is in the active
+region, if it is set, as well as the 'R'
+('gnus-article-reply-with-original') command.  Note that the 'R' command
+in the article buffer no longer accepts a prefix argument, which was used
+to make it do a wide reply.  *Note Article Keymap::.
 
-** Gnus keeps track of non-existent articles for nnimap groups, so
-   that sparse IMAP folders now list a correct number of messages in
-   them.
+** The new command 'C-h b' ('gnus-article-describe-bindings') used in the
+article buffer now shows not only the article commands but also the real
+summary commands that are accessible from the article buffer.
 
-** Gnus will guess the real type of MIME parts of type
-   application/octet-stream based on the file suffix.  So an
-   application/octet-stream with a name of "rms.jpg" will be displayed
-   as an image/jpeg type by default, for instance.
+
+* Changes in Message mode
+
+** Gnus now defaults to saving all outgoing messages in per-month nnfolder
+archives.
+
+** Gnus now supports the "hashcash" client puzzle anti-spam mechanism.  Use
+'(setq message-generate-hashcash t)' to enable.  *Note Hashcash::.
+
+** You can now drag and drop attachments to the Message buffer.  See
+'mml-dnd-protocol-alist' and 'mml-dnd-attach-options'.  *Note MIME:
+(message)MIME.
+
+** The option 'message-yank-empty-prefix' now controls how empty lines are
+prefixed in cited text.  *Note Insertion Variables: (message)Insertion
+Variables.
+
+** Gnus uses narrowing to hide headers in Message buffers.  The 'References'
+header is hidden by default.  To make all headers visible, use '(setq
+message-hidden-headers nil)'.  *Note Message Headers: (message)Message
+Headers.
+
+** You can highlight different levels of citations like in the article
+buffer.  See 'gnus-message-highlight-citation'.
+
+** 'auto-fill-mode' is enabled by default in Message mode.  See
+'message-fill-column'.  *Note Message Headers: (message)Various Message
+Variables.
+
+** You can now store signature files in a special directory named
+'message-signature-directory'.
+
+** The option 'message-citation-line-format' controls the format of the
+"Whomever writes:" line.  You need to set
+'message-citation-line-function' to
+'message-insert-formatted-citation-line' as well.
+
+
+* Changes in Browse Server mode
+
+** Gnus' sophisticated subscription methods are now available in Browse
+Server buffers as well using the variable
+'gnus-browse-subscribe-newsgroup-method'.
+
+
+* Changes in back ends
+
+** The nntp back end stores article marks in '~/News/marks'.
+
+The directory can be changed using the (customizable) variable
+'nntp-marks-directory', and marks can be disabled using the (back end)
+variable 'nntp-marks-is-evil'.  The advantage of this is that you can
+copy '~/News/marks' (using rsync, scp or whatever) to another Gnus
+installation, and it will realize what articles you have read and marked.
+The data in '~/News/marks' has priority over the same data in
+'~/.newsrc.eld'.
+
+** You can import and export your RSS subscriptions from OPML files.  *Note
+RSS::.
+
+** IMAP identity (RFC 2971) is supported.
 
-** `nnimap-inbox' can now be a list of mail box names.
-   
+By default, Gnus does not send any information about itself, but you can
+customize it using the variable 'nnimap-id'.
+
+** The 'nnrss' back end now supports multilingual text.  Non-ASCII group
+names for the 'nnrss' groups are also supported.  *Note RSS::.
+
+** Retrieving mail with POP3 is supported over SSL/TLS and with StartTLS.
+
+** The nnml back end allows other compression programs beside 'gzip' for
+compressed message files.  *Note Mail Spool::.
+
+** The nnml back end supports group compaction.
+
+This feature, accessible via the functions 'gnus-group-compact-group' ('G
+z' in the group buffer) and 'gnus-server-compact-server' ('z' in the
+server buffer) renumbers all articles in a group, starting from 1 and
+removing gaps.  As a consequence, you get a correct total article count
+(until messages are deleted again).
+
+
+* Appearance
+
+** The tool bar has been updated to use GNOME icons.  You can also customize
+the tool bars: 'M-x customize-apropos RET -tool-bar$' should get you
+started.  (Only for Emacs, not in XEmacs.)
+
+** The tool bar icons are now (de)activated correctly in the group buffer,
+see the variable 'gnus-group-update-tool-bar'.  Its default value depends
+on your Emacs version.
+
+** You can change the location of XEmacs's toolbars in Gnus buffers.  See
+'gnus-use-toolbar' and 'message-use-toolbar'.
+
+
+* Miscellaneous changes
+
+** Having edited the select-method for the foreign server in the server
+buffer is immediately reflected to the subscription of the groups which
+use the server in question.  For instance, if you change
+'nntp-via-address' into 'bar.example.com' from 'foo.example.com', Gnus
+will connect to the news host by way of the intermediate host
+'bar.example.com' from next time.
+
+** The 'all.SCORE' file can be edited from the group buffer using 'W e'.
+
+** You can set 'gnus-mark-copied-or-moved-articles-as-expirable' to a
+non-'nil' value so that articles that have been read may be marked as
+expirable automatically when copying or moving them to a group that has
+auto-expire turned on.  The default is 'nil' and copying and moving of
+articles behave as before; i.e., the expirable marks will be unchanged
+except that the marks will be removed when copying or moving articles to
+a group that has not turned auto-expire on.  *Note Expiring Mail::.
+
+** NoCeM support has been removed.
+
+** Carpal mode has been removed.
+
 * For older news, see Gnus info node "New Features".
 
 ----------------------------------------------------------------------
diff --git a/etc/NEWS b/etc/NEWS
index ffeeaa8..5599bd9 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -12,7 +12,7 @@ See file HISTORY for a list of GNU Emacs versions and release 
dates.
 See files NEWS.24, NEWS.23, NEWS.22, NEWS.21, NEWS.20, NEWS.19, NEWS.18,
 and NEWS.1-17 for changes in older Emacs versions.
 
-You can narrow news to a specific version by calling `view-emacs-news'
+You can narrow news to a specific version by calling 'view-emacs-news'
 with a prefix argument or by typing C-u C-h C-n.
 
 Temporary note:
@@ -94,17 +94,17 @@ to be owned by that group, and the helper program for 
updating them to
 be installed setgid.  The option now defaults to the 'games' group.
 
 ---
-** The `grep-changelog' script (and its manual page) are no longer included.
+** The 'grep-changelog' script (and its manual page) are no longer included.
 It has no particular connection to Emacs and has not changed in years,
 so if you want to use it, you can always take a copy from an older Emacs.
 
 ---
 ** Emacs 25 comes with a new set of icons.
 Various resolutions are available as etc/images/icons/hicolor/*/apps/emacs.png.
-The old Emacs logo icons are available as `emacs23.png' in the same location.
+The old Emacs logo icons are available as 'emacs23.png' in the same location.
 
 ---
-** New make target `check-expensive' to run additional tests.
+** New make target 'check-expensive' to run additional tests.
 This includes all tests which run via "make check", plus additional
 tests which take more time to perform.
 
@@ -113,77 +113,83 @@ tests which take more time to perform.
 
 +++
 ** When Emacs is given a file as a command line argument and
-`initial-buffer-choice' is non-nil, display both the file and
-`initial-buffer-choice'.  When Emacs is given more than one file and
-`initial-buffer-choice' is non-nil, show `initial-buffer-choice'
+'initial-buffer-choice' is non-nil, display both the file and
+'initial-buffer-choice'.  When Emacs is given more than one file and
+'initial-buffer-choice' is non-nil, show 'initial-buffer-choice'
 and *Buffer List*.  This makes Emacs convenient to use from the
-command line when `initial-buffer-choice' is non-nil.
+command line when 'initial-buffer-choice' is non-nil.
 
 +++
-** The value of ‘initial-scratch-message’ is now treated as a doc string
+** The value of 'initial-scratch-message' is now treated as a doc string
 and can contain escape sequences for command keys, quotes, and the like.
 
+---
+** The default height of GUI frames was enlarged.
+This is so there's enough space in the initial window to display the
+optional text about recovering crashes sessions, without losing the
+splash image display.
+
 
 * Changes in Emacs 25.1
 
 +++
 ** Xwidgets: a new feature for embedding native widgets inside Emacs buffers.
 If you have gtk3 and webkitgtk3 installed, and Emacs was built with
-xwidget support, you can access the embedded webkit browser with `M-x
+xwidget support, you can access the embedded webkit browser with 'M-x
 xwidget-webkit-browse-url'.  This opens a new buffer with the embedded
-browser.  The buffer will have a new mode, `xwidget-webkit-mode'
-(similar to `image-mode'), which supports the webkit widget.
+browser.  The buffer will have a new mode, 'xwidget-webkit-mode'
+(similar to 'image-mode'), which supports the webkit widget.
 
 +++
-*** New functions for xwidget-webkit mode `xwidget-webkit-insert-string',
-`xwidget-webkit-adjust-size-dispatch', `xwidget-webkit-back',
-`xwidget-webkit-browse-url', `xwidget-webkit-reload',
-`xwidget-webkit-current-url', `xwidget-webkit-scroll-backward',
-`xwidget-webkit-scroll-forward', `xwidget-webkit-scroll-down',
-`xwidget-webkit-scroll-up'.
+*** New functions for xwidget-webkit mode 'xwidget-webkit-insert-string',
+'xwidget-webkit-adjust-size-dispatch', 'xwidget-webkit-back',
+'xwidget-webkit-browse-url', 'xwidget-webkit-reload',
+'xwidget-webkit-current-url', 'xwidget-webkit-scroll-backward',
+'xwidget-webkit-scroll-forward', 'xwidget-webkit-scroll-down',
+'xwidget-webkit-scroll-up'.
 
 +++
 ** Emacs can now load shared/dynamic libraries (modules).
 A dynamic Emacs module is a shared library that provides additional
 functionality for use in Emacs Lisp programs, just like a package
-written in Emacs Lisp would.  The functions `load', `require',
-`load-file', etc. were extended to load such modules, as they do with
-Emacs Lisp packages.  The new variable `module-file-suffix' holds the
-system-dependent value of the file-name extension (`.so' on Posix
+written in Emacs Lisp would.  The functions 'load', 'require',
+'load-file', etc. were extended to load such modules, as they do with
+Emacs Lisp packages.  The new variable 'module-file-suffix' holds the
+system-dependent value of the file-name extension ('.so' on Posix
 hosts) of the module files.
 
 A module should export a C-callable function named
-`emacs_module_init', which Emacs will call as part of the call to
-`load' or `require' which loads the module.  It should also export a
-symbol named `plugin_is_GPL_compatible' to indicate that its code is
+'emacs_module_init', which Emacs will call as part of the call to
+'load' or 'require' which loads the module.  It should also export a
+symbol named 'plugin_is_GPL_compatible' to indicate that its code is
 released under the GPL or compatible license; Emacs will refuse to
 load modules that don't export such a symbol.
 
 If a module needs to call Emacs functions, it should do so through the
-API defined and documented in the header file `emacs-module.h'.  Note
+API defined and documented in the header file 'emacs-module.h'.  Note
 that any module that provides Lisp-callable functions will have to use
-Emacs functions such as `fset' and `funcall', in order to register its
+Emacs functions such as 'fset' and 'funcall', in order to register its
 functions with the Emacs Lisp interpreter.
 
-Modules can create `user-ptr' Lisp objects that embed pointers to C
-struct's defined by the module.  This is useful for keeping around
+Modules can create 'user-ptr' Lisp objects that embed pointers to C
+structs defined by the module.  This is useful for keeping around
 complex data structures created by a module, to be passed back to the
 module's functions.  User-ptr objects can also have associated
 "finalizers" -- functions to be run when the object is GC'ed; this is
 useful for freeing any resources allocated for the underlying data
 structure, such as memory, open file descriptors, etc.  A new
-predicate `user-ptrp' returns non-nil if its argument is a `user-ptr'
+predicate 'user-ptrp' returns non-nil if its argument is a 'user-ptr'
 object.
 
 Loadable modules in Emacs are an experimental feature, and subject to
 change in future releases.  For that reason, their support is disabled
-by default, and must be enabled by using the `--with-modules' option
+by default, and must be enabled by using the '--with-modules' option
 at configure time.
 
 +++
 ** Network security (TLS/SSL certificate validity and the like) is
 added via the new Network Security Manager (NSM) and controlled via
-the `network-security-level' variable.
+the 'network-security-level' variable.
 
 +++
 ** C-h l now also lists the commands that were run.
@@ -197,46 +203,46 @@ select-enable-primary is ineffective since the system 
doesn't
 have the equivalent of a primary selection.
 
 +++
-** New option `switch-to-buffer-in-dedicated-window' allows you to
-customize how `switch-to-buffer' proceeds interactively when the
+** New option 'switch-to-buffer-in-dedicated-window' allows you to
+customize how 'switch-to-buffer' proceeds interactively when the
 selected window is strongly dedicated to its buffer.
 
 +++
-** The option `even-window-heights' has been renamed to
-`even-window-sizes' and now handles window widths as well.
+** The option 'even-window-heights' has been renamed to
+'even-window-sizes' and now handles window widths as well.
 
 +++
 ** terpri gets an optional arg ENSURE to conditionally output a newline.
 
 +++
-** `insert-register' now leaves point after the inserted text
+** 'insert-register' now leaves point after the inserted text
 when called interactively.  A prefix argument toggles this behavior.
 
 +++
-** The new variable `term-file-aliases' replaces some files from lisp/term.
-The function `tty-run-terminal-initialization' consults this variable
+** The new variable 'term-file-aliases' replaces some files from lisp/term.
+The function 'tty-run-terminal-initialization' consults this variable
 when deciding what terminal-specific initialization code to run.
 
 ---
-** New variable `system-configuration-features', listing some of the
+** New variable 'system-configuration-features', listing some of the
 main features that Emacs was compiled with.  This is mainly intended
 for use in Emacs bug reports.
 
 +++
 ** A password is now hidden also when typed in batch mode.  Another
-hiding character but the default `.' can be used by let-binding the
-variable `read-hide-char'.
+hiding character but the default '.' can be used by let-binding the
+variable 'read-hide-char'.
 
 +++
 ** The Emacs pseudo-random number generator can be securely seeded.
 On system where Emacs can access the system entropy or some other
-cryptographically secure random stream, it now uses that when `random'
-is called with its argument `t'.  This allows cryptographically strong
+cryptographically secure random stream, it now uses that when 'random'
+is called with its argument 't'.  This allows cryptographically strong
 random values; in particular, the Emacs server now uses this facility
 to produce its authentication key.
 
 ---
-** New input methods: `tamil-dvorak' and `programmer-dvorak'.
+** New input methods: 'tamil-dvorak' and 'programmer-dvorak'.
 
 
 * Editing Changes in Emacs 25.1
@@ -249,17 +255,17 @@ to produce its authentication key.
 +++
 *** Successive single-char deletions are collapsed in the undo-log just like
 successive char insertions.  Which commands invoke this behavior is
-controlled by the new `undo-auto-amalgamate' function.  See the node
+controlled by the new 'undo-auto-amalgamate' function.  See the node
 "Undo" in the ELisp manual for more details.
 
 +++
-*** The heuristic used to insert `undo-boundary' after each command
+*** The heuristic used to insert 'undo-boundary' after each command
 has changed, so that if a command causes changes in more than just the
-current buffer, Emacs now calls `undo-boundary' in every buffer
+current buffer, Emacs now calls 'undo-boundary' in every buffer
 affected by the command.
 
 +++
-** New command `comment-line' bound to `C-x C-;'.
+** New command 'comment-line' bound to 'C-x C-;'.
 
 ** New and improved facilities for inserting Unicode characters
 
@@ -267,12 +273,13 @@ affected by the command.
 *** Unicode names entered via C-x 8 RET now use substring completion by 
default.
 
 +++
-*** C-x 8 now has shorthands for these chars: ‐ ‑ ‒ – — ― ‘ ’ “ ” † ‡ • ′ ″
-€ № ← → ↔ − ≈ ≠ ≤ ≥.  As before, you can type C-x 8 C-h to list shorthands.
+*** C-x 8 now has shorthands for several chars, such as U+2010
+(HYPHEN), U+2011 (NON-BREAKING HYPHEN), and U+2012 (FIGURE DASH).  As
+before, you can type C-x 8 C-h to list shorthands.
 
 +++
-*** New minor mode electric-quote-mode for quoting ‘like this’ and “like this”
-as you type.  See also the new variable ‘text-quoting-style’.
+*** New minor mode electric-quote-mode for using curved quotes as you
+type.  See also the new variable 'text-quoting-style'.
 
 ---
 ** New minor mode global-eldoc-mode is enabled by default.
@@ -300,30 +307,30 @@ Bidirectional Parentheses Algorithm (BPA) specified by 
these Unicode
 standards.
 
 +++
-** You can access `mouse-buffer-menu' (C-down-mouse-1) using C-f10.
+** You can access 'mouse-buffer-menu' (C-down-mouse-1) using C-f10.
 
 +++
-** New buffer-local `electric-pair-local-mode'.
+** New buffer-local 'electric-pair-local-mode'.
 
 +++
-** New variable `fast-but-imprecise-scrolling' inhibits
+** New variable 'fast-but-imprecise-scrolling' inhibits
 fontification during full screen scrolling operations, giving less
 hesitant operation during auto-repeat of C-v, M-v at the cost of
 possible inaccuracies in the end position.
 
 +++
-** New documentation command `describe-symbol'.
-Works for functions, variables, faces, etc.  It is bound to `C-h o' by
+** New documentation command 'describe-symbol'.
+Works for functions, variables, faces, etc.  It is bound to 'C-h o' by
 default.
 
 +++
-** New function `custom-prompt-customize-unsaved-options' checks for
+** New function 'custom-prompt-customize-unsaved-options' checks for
 unsaved customizations and prompts user to customize (if found).  It
 is intended for adding to 'kill-emacs-query-functions'.
 
 +++
-** The old `C-x w' bindings in hi-lock-mode are officially deprecated
-in favor of the global `M-s h' bindings introduced in Emacs-23.1.
+** The old 'C-x w' bindings in hi-lock-mode are officially deprecated
+in favor of the global 'M-s h' bindings introduced in Emacs-23.1.
 They'll disappear soon.
 
 
@@ -332,14 +339,14 @@ They'll disappear soon.
 ** Checkdoc
 
 +++
-*** New command `checkdoc-package-keywords' checks if the
+*** New command 'checkdoc-package-keywords' checks if the
 current package keywords are recognized.  Set the new option
-`checkdoc-package-keywords-flag' to non-nil to make
-`checkdoc-current-buffer' call this function automatically.
+'checkdoc-package-keywords-flag' to non-nil to make
+'checkdoc-current-buffer' call this function automatically.
 
 +++
-*** New function `checkdoc-file' checks for style errors.
-It's meant for use together with `compile':
+*** New function 'checkdoc-file' checks for style errors.
+It's meant for use together with 'compile':
 emacs -batch --eval "(checkdoc-file \"subr.el\")"
 
 ** Desktop
@@ -354,71 +361,59 @@ recommended to do this as soon as you have firmly 
upgraded to Emacs
 to version 206, you can do this with C-u C-u M-x desktop-save.
 
 +++
-** New function `bookmark-set-no-overwrite' bound to C-x r M.
+** New function 'bookmark-set-no-overwrite' bound to C-x r M.
 It raises an error if a bookmark of that name already exists,
-unlike `bookmark-set' which silently updates an existing bookmark.
+unlike 'bookmark-set' which silently updates an existing bookmark.
 
 ** Gnus
 
 +++
-*** New user options `mm-html-inhibit-images' and `mm-html-blocked-images'
+*** New user options 'mm-html-inhibit-images' and 'mm-html-blocked-images'
 now control how mm-* functions fetch and display images in an HTML
-message.  Gnus still uses `gnus-inhibit-images' and `gnus-blocked-images'
+message.  Gnus still uses 'gnus-inhibit-images' and 'gnus-blocked-images'
 for that purpose, i.e., binds mm-html- variables with those gnus-
 variables, but other packages do not have to bind gnus- variables now.
 
 ---
-*** `mm-inline-text-html-with-images' has been removed.
-Use `mm-html-inhibit-images' instead.  Note that the value is opposite
+*** 'mm-inline-text-html-with-images' has been removed.
+Use 'mm-html-inhibit-images' instead.  Note that the value is opposite
 in meaning.
 
 ** IMAP
 
 ---
-*** `imap-ssl-program' has been removed, and imap.el uses the internal
+*** 'imap-ssl-program' has been removed, and imap.el uses the internal
 GnuTLS encryption functions if possible.
 
 ** JSON
 
 ---
-*** `json-pretty-print' and `json-pretty-print-buffer' now maintain
+*** 'json-pretty-print' and 'json-pretty-print-buffer' now maintain
 the ordering of object keys by default.
 
 ---
-*** New commands `json-pretty-print-ordered' and
-`json-pretty-print-buffer-ordered' pretty prints JSON objects with
+*** New commands 'json-pretty-print-ordered' and
+'json-pretty-print-buffer-ordered' pretty prints JSON objects with
 object keys sorted alphabetically.
 
-+++
-** Prog mode has some support for multi-mode indentation.
-This allows better indentation support in modes that support multiple
-programming languages in the same buffer, like literate programming
-environments or ANTLR programs with embedded Python code.
-
-A major mode can provide indentation context for a sub-mode through
-the `prog-indentation-context' variable.  To support this, modes that
-provide indentation should use `prog-widen' instead of `widen' and
-`prog-first-column' instead of a literal zero.  See the node
-"Mode-Specific Indent" in the ELisp manual for more details.
-
 ** Prettify Symbols mode
 
 +++
 *** Prettify Symbols mode supports custom composition predicates.  By
-overriding the default `prettify-symbols-compose-predicate', modes can
+overriding the default 'prettify-symbols-compose-predicate', modes can
 specify in which contexts a symbol may be displayed as some Unicode
-character.  `prettify-symbols-default-compose-p' is the default which
+character.  'prettify-symbols-default-compose-p' is the default which
 is suitable for most programming languages such as C or Lisp (but not
 (La)TeX).
 
 +++
 *** Symbols can be unprettified while point is inside them.
-New variable `prettify-symbols-unprettify-at-point' configures this.
+New variable 'prettify-symbols-unprettify-at-point' configures this.
 
 ** Enhanced xterm support
 
 ---
-*** The new variable `xterm-screen-extra-capabilities' for configuring xterm.
+*** The new variable 'xterm-screen-extra-capabilities' for configuring xterm.
 This variable tells Emacs which advanced capabilities are available in
 the xterm terminal emulator used to display Emacs text-mode frames.
 The default is to check each capability, and use it if available.
@@ -428,32 +423,32 @@ its NEWS.)
 ---
 *** Killing text now also sets the CLIPBOARD/PRIMARY selection
 in the surrounding GUI (using the OSC-52 escape sequence).  This only works
-if your xterm supports it and enables the `allowWindowOps' options (disabled
+if your xterm supports it and enables the 'allowWindowOps' options (disabled
 by default at least in Debian, for security reasons).
 
 Similarly, you can yank the CLIPBOARD/PRIMARY selection (using the OSC-52
 escape sequence) if your xterm has the feature enabled but for that you
-additionally need to add `getSelection' to `xterm-extra-capabilities'.
+additionally need to add 'getSelection' to 'xterm-extra-capabilities'.
 
 +++
-*** `xterm-mouse-mode' now supports mouse-tracking (if your xterm supports it).
+*** 'xterm-mouse-mode' now supports mouse-tracking (if your xterm supports it).
 
 ---
-** The way to turn on and off `save-place' mode has changed.
+** The way to turn on and off 'save-place' mode has changed.
 It is no longer sufficient to load the saveplace library and set
-`save-place' non-nil.  Instead, use the two new minor modes:
-`save-place-mode' turns on saving last place in every file, and
-`save-place-local-mode' does that only for the file in whose buffer it
-is invoked.  The `save-place' variable is now an obsolete alias for
-`save-place-mode', which replaces it, and `toggle-save-place' is an
-obsolete alias for the new `save-place-local-mode' command.
+'save-place' non-nil.  Instead, use the two new minor modes:
+'save-place-mode' turns on saving last place in every file, and
+'save-place-local-mode' does that only for the file in whose buffer it
+is invoked.  The 'save-place' variable is now an obsolete alias for
+'save-place-mode', which replaces it, and 'toggle-save-place' is an
+obsolete alias for the new 'save-place-local-mode' command.
 
 ** ERC
 
 +++
 *** ERC can now hide message types by network or channel.
-`erc-hide-list' will hide all messages of the specified type, while
-`erc-network-hide-list' and `erc-channel-hide-list' will only hide the
+'erc-hide-list' will hide all messages of the specified type, while
+'erc-network-hide-list' and 'erc-channel-hide-list' will only hide the
 specified message types for the respective specified targets.
 
 ---
@@ -468,14 +463,14 @@ being made case-sensitive in Emacs 24.2.
 ---
 *** New commands, key binds, and menu items.
 
-**** `<' and `>' for navigating previous and next tracks in playlist
+**** '<' and '>' for navigating previous and next tracks in playlist
 
-**** New play/pause command `mpc-toggle-play' bound to `s'
+**** New play/pause command 'mpc-toggle-play' bound to 's'
 
-**** `g' bound to new command `mpc-seek-current' will navigate current
+**** 'g' bound to new command 'mpc-seek-current' will navigate current
      track.
 
-**** New commands `mpc-toggle-{consume,repeat,single,shuffle}' for
+**** New commands 'mpc-toggle-{consume,repeat,single,shuffle}' for
      toggling playback modes.
 
 ---
@@ -493,7 +488,7 @@ MPD supports the XDG base directory specification since 
version 0.17.6.
 ** Midnight-mode
 
 ---
-*** `midnight-mode' is now a proper minor mode.
+*** 'midnight-mode' is now a proper minor mode.
 
 ---
 *** clean-buffer-*-regexps can now specify buffers via predicate functions.
@@ -503,22 +498,22 @@ MPD supports the XDG base directory specification since 
version 0.17.6.
 +++
 *** New "external" package status.
 An external package is any installed package that's not built-in and
-not from `package-user-dir', which usually means it's from an entry in
-`package-directory-list'.  They are treated much like built-in
+not from 'package-user-dir', which usually means it's from an entry in
+'package-directory-list'.  They are treated much like built-in
 packages, in that they cannot be deleted through the package menu and
 are not considered for upgrades.
 
 The effect is that a user can manually place a specific version of a
-package inside `package-directory-list' and the package menu will
+package inside 'package-directory-list' and the package menu will
 always respect that.
 
 +++
 *** If a package is available on multiple archives and one has higher
-priority (as per `package-archive-priorities') only that one is
-listed.  This can be configured with `package-menu-hide-low-priority'.
+priority (as per 'package-archive-priorities') only that one is
+listed.  This can be configured with 'package-menu-hide-low-priority'.
 
 +++
-*** `package-menu-toggle-hiding' now toggles the hiding of packages.
+*** 'package-menu-toggle-hiding' now toggles the hiding of packages.
 This includes the above-mentioned low-priority packages, as well as
 available packages whose version is lower than the currently installed
 version (which were previously impossible to display).
@@ -536,52 +531,52 @@ ASYNC argument.  If it is non-nil, package.el performs 
the download(s)
 asynchronously.
 
 ---
-*** New variable `package-menu-async' controls whether the
+*** New variable 'package-menu-async' controls whether the
 package-menu uses asynchronous downloads.
 
 ---
-*** `package-install-from-buffer' and `package-install-file' work on 
directories.
+*** 'package-install-from-buffer' and 'package-install-file' work on 
directories.
 This follows the same rules as installing from a .tar file, except the
 -pkg file is optional.
 
 ---
 *** Packages which are dependencies of other packages cannot be deleted.
-The FORCE argument to `package-delete' overrides this.
+The FORCE argument to 'package-delete' overrides this.
 
 ---
-*** New custom variable `package-selected-packages' tracks packages
+*** New custom variable 'package-selected-packages' tracks packages
 which were installed by the user (as opposed to installed as
 dependencies).  This variable can also be manually customized.
 
 ---
-*** New command `package-install-selected-packages' installs all
-packages from `package-selected-packages' which are currently missing.
+*** New command 'package-install-selected-packages' installs all
+packages from 'package-selected-packages' which are currently missing.
 
 ---
-*** `package-install' function now takes a DONT-SELECT argument.  If
+*** 'package-install' function now takes a DONT-SELECT argument.  If
 this function is called interactively or if DONT-SELECT is nil, add the
-package being installed to `package-selected-packages'.
+package being installed to 'package-selected-packages'.
 
 ---
-*** New command `package-autoremove' removes all packages which were
+*** New command 'package-autoremove' removes all packages which were
 installed strictly as dependencies but are no longer needed.
 
 +++
 ** Shell
 
-When you invoke `shell' interactively, the *shell* buffer will now
+When you invoke 'shell' interactively, the *shell* buffer will now
 display in a new window.  However, you can customize this behavior via
-the `display-buffer-alist' variable.  For example, to get
+the 'display-buffer-alist' variable.  For example, to get
 the old behavior -- *shell* buffer displays in current window -- use
 (add-to-list 'display-buffer-alist
      '("^\\*shell\\*$" . (display-buffer-same-window))).
 
 ** EIEIO
 +++
-*** The `:protection' slot option is not obeyed any more.
+*** The ':protection' slot option is not obeyed any more.
 +++
-*** The `newname' argument to constructors is optional&deprecated.
-If you need your objects to be named, do it by inheriting from `eieio-named'.
+*** The 'newname' argument to constructors is optional&deprecated.
+If you need your objects to be named, do it by inheriting from 'eieio-named'.
 +++
 *** The <class>-list-p and <class>-child-p functions are declared obsolete.
 +++
@@ -592,18 +587,18 @@ If you need your objects to be named, do it by inheriting 
from `eieio-named'.
 *** defgeneric and defmethod are declared obsolete.
 Use the equivalent facilities from cl-generic.el instead.
 +++
-*** `constructor' is now an obsolete alias for `make-instance'.
---- `pcase' accepts a new UPattern `eieio'.
+*** 'constructor' is now an obsolete alias for 'make-instance'.
+--- 'pcase' accepts a new UPattern 'eieio'.
 
 ** ido
 
 +++
-*** New command `ido-bury-buffer-at-head' bound to C-S-b
-Bury the buffer at the head of `ido-matches', analogous to how C-k
+*** New command 'ido-bury-buffer-at-head' bound to C-S-b
+Bury the buffer at the head of 'ido-matches', analogous to how C-k
 kills the buffer at head.
 
 ---
-*** A prefix argument to `ido-restrict-to-matches' will reverse its
+*** A prefix argument to 'ido-restrict-to-matches' will reverse its
 meaning, and the list is restricted to those elements that do not
 match the current input.
 
@@ -611,18 +606,18 @@ match the current input.
 
 +++
 *** You can use <UP> and <DOWN> arrow keys to move through history by lines.
-The new commands `next-line-or-history-element' and
-`previous-line-or-history-element', bound to <UP> and <DOWN> in the
+The new commands 'next-line-or-history-element' and
+'previous-line-or-history-element', bound to <UP> and <DOWN> in the
 minibuffer, allow by-line movement through minibuffer history,
 similarly to an ordinary buffer.  Only when point moves over
 the bottom/top of the minibuffer it goes to the next/previous history
-element.  `M-p' and `M-n' still move directly to previous/next history
+element.  'M-p' and 'M-n' still move directly to previous/next history
 item as before.
 
 ** Search and Replace
 
 +++
-*** `isearch' and `query-replace' can now perform character folding in matches.
+*** 'isearch' and 'query-replace' can now perform character folding in matches.
 This is analogous to case folding, but instead of disregarding case
 variants, it disregards wider classes of distinctions between similar
 characters.  (Case folding is a special case of character folding.)
@@ -630,47 +625,48 @@ This means many characters in the search string will 
match entire
 groups of characters instead of just themselves.
 
 For instance, the ASCII double quote character " will match all
-variants of double quotes (like “ and ”), and the letter a will match
-all of its accented cousins, even those composed of multiple
-characters, as well as many other symbols like ℀, ℁, ⒜, and ⓐ.
+variants of double quotes, and the letter 'a' will match all of its
+accented cousins, even those composed of multiple characters, as well
+as many other symbols like U+249C (PARENTHESIZED LATIN SMALL LETTER
+A).
 
-Character folding is enabled by customizing `search-default-mode' to
-the value `character-fold-to-regexp'.  You can also toggle character
-folding in the middle of a search by typing `M-s ''.
+Character folding is enabled by customizing 'search-default-mode' to
+the value 'character-fold-to-regexp'.  You can also toggle character
+folding in the middle of a search by typing 'M-s ''.
 
-`query-replace' honors character folding if the new variable
-`replace-character-fold' is customized to a non-nil value.
+'query-replace' honors character folding if the new variable
+'replace-character-fold' is customized to a non-nil value.
 
 +++
-*** New user option `search-default-mode'.
+*** New user option 'search-default-mode'.
 This option specifies the default mode for Isearch.  The default
 value, nil specifies that Isearch does literal searches (however,
-`case-fold-search' and `isearch-lax-whitespace' may still be applied,
+'case-fold-search' and 'isearch-lax-whitespace' may still be applied,
 as in previous Emacs versions).
 
 +++
-*** New function `character-fold-to-regexp' can be used
+*** New function 'character-fold-to-regexp' can be used
 by searching commands to produce a regexp matching anything that
 character-folds into STRING.
 
 +++
 *** The new M-s M-w key binding uses eww to search the web for the
 text in the region.  The search engine to use for this is specified by
-the customizable variable `eww-search-prefix'.
+the customizable variable 'eww-search-prefix'.
 
 +++
 *** Query-replace history is enhanced.
 When query-replace reads the FROM string from the minibuffer, typing
-`M-p' will now show previous replacements as "FROM SEP TO", where FROM
+'M-p' will now show previous replacements as "FROM SEP TO", where FROM
 and TO are the original text and its replacement, and SEP is an arrow
-string defined by the new variable `query-replace-from-to-separator'.
-To select a prior replacement, type `M-p' until the desired
+string defined by the new variable 'query-replace-from-to-separator'.
+To select a prior replacement, type 'M-p' until the desired
 replacement appears in the minibuffer, and then exit the minibuffer by
 typing RET.
 
 ** Calc
 +++
-*** If `quick-calc' is called with a prefix argument, insert the
+*** If 'quick-calc' is called with a prefix argument, insert the
 result of the calculation into the current buffer.
 
 +++
@@ -681,18 +677,19 @@ instrumented function.
 ** ElDoc
 
 +++
-*** New minor mode `global-eldoc-mode'
-It is turned on by default, and affects `*scratch*' and other buffers
+*** New minor mode 'global-eldoc-mode'
+It is turned on by default, and affects '*scratch*' and other buffers
 whose major mode supports Emacs Lisp.
 
 ---
-*** `eldoc-documentation-function' now defaults to `ignore'
+*** 'eldoc-documentation-function' now defaults to 'ignore'
 
 ---
-*** `describe-char-eldoc' displays information about character at point,
-and can be used as a default value of `eldoc-documentation-function'.  It is
-useful when, for example, one needs to distinguish various spaces (e.g. ] [,
-] [, ] [, etc.) while using mono-spaced font.
+*** 'describe-char-eldoc' displays information about character at point,
+and can be used as a default value of 'eldoc-documentation-function'.  It is
+useful when, for example, one needs to distinguish various spaces - e.g.,
+U+00A0 (NO-BREAK SPACE), U+2002 (EN SPACE), and U+2009 (THIN SPACE) - while
+using mono-spaced font.
 
 ** eww
 
@@ -700,17 +697,17 @@ useful when, for example, one needs to distinguish 
various spaces (e.g. ] [,
 *** HTML can now be rendered using variable-width fonts.
 
 +++
-*** A new command `F' (`eww-toggle-fonts') can be used to toggle
+*** A new command 'F' ('eww-toggle-fonts') can be used to toggle
 whether to use variable-pitch fonts or not.  The user can also
-customize the `shr-use-fonts' variable.
+customize the 'shr-use-fonts' variable.
 
 +++
-*** A new command `R' (`eww-readable') will try do identify the main
+*** A new command 'R' ('eww-readable') will try do identify the main
 textual parts of a web page and display only that, leaving menus and
 the like off the page.
 
 +++
-*** A new command `D' (`eww-toggle-paragraph-direction') allows you to
+*** A new command 'D' ('eww-toggle-paragraph-direction') allows you to
 toggle the paragraph direction between left-to-right and right-to-left.
 
 ---
@@ -722,11 +719,11 @@ buffers you want to keep separate.
 pages visited) is now preserved in the desktop file.
 
 +++
-*** `eww-after-render-hook' is now called after eww has rendered
+*** 'eww-after-render-hook' is now called after eww has rendered
 the data in the buffer.
 
 ---
-*** The `eww-reload' command now takes a prefix to not reload via
+*** The 'eww-reload' command now takes a prefix to not reload via
 the net, but just use the local copy of the HTML.
 
 +++
@@ -736,10 +733,10 @@ interact with this DOM.  See the Emacs Lisp manual for 
interface
 details.
 
 +++
-*** `mailcap-mime-data' is now consulted when displaying PDF files.
+*** 'mailcap-mime-data' is now consulted when displaying PDF files.
 
 +++
-*** The new `S' command will list all eww buffers, and allow managing
+*** The new 'S' command will list all eww buffers, and allow managing
 them.
 
 ---
@@ -756,19 +753,19 @@ transformed into multipart/related messages before 
sending.
 ** In Show Paren Mode, a parenthesis can be highlighted when point
 stands inside it, and certain parens can be highlighted when point is
 at BOL or EOL, or in whitespace there.  To enable these, customize,
-respectively, `show-paren-when-point-inside-paren' or
-`show-paren-when-point-in-periphery'.
+respectively, 'show-paren-when-point-inside-paren' or
+'show-paren-when-point-in-periphery'.
 
 ---
 ** If gpg2 exists on the system, it is now used as the default value
-of `epg-gpg-program' (instead of gpg).
+of 'epg-gpg-program' (instead of gpg).
 
 ** Lisp mode
 
 ---
-*** Strings after `:documentation' are highlighted as docstrings.
+*** Strings after ':documentation' are highlighted as docstrings.
 This enhances Lisp mode fontification to handle documentation of the
-form `(:documentation "the doc string")' used in Common Lisp code for
+form '(:documentation "the doc string")' used in Common Lisp code for
 CLOS class and slot documentation.
 
 ** Rectangle editing
@@ -778,91 +775,91 @@ CLOS class and slot documentation.
 
 +++
 *** C-x C-x in rectangle-mark-mode now cycles through the four corners.
-*** `string-rectangle' provides on-the-fly preview of the result.
+*** 'string-rectangle' provides on-the-fly preview of the result.
 
 +++
-** New font-lock functions `font-lock-ensure' and `font-lock-flush'.
-These should be used in preference to `font-lock-fontify-buffer' when
+** New font-lock functions 'font-lock-ensure' and 'font-lock-flush'.
+These should be used in preference to 'font-lock-fontify-buffer' when
 called from Lisp.
 
 ---
-** Macro `minibuffer-with-setup-hook' can optionally append a function
-to `minibuffer-setup-hook'.
+** Macro 'minibuffer-with-setup-hook' can optionally append a function
+to 'minibuffer-setup-hook'.
 
-If the first argument of the macro is of the form `(:append FUN)',
-then FUN will be appended to `minibuffer-setup-hook', instead of
+If the first argument of the macro is of the form '(:append FUN)',
+then FUN will be appended to 'minibuffer-setup-hook', instead of
 prepending it.
 
 ** cl-lib
 +++
-*** New functions `cl-fresh-line', `cl-digit-char-p', and `cl-parse-integer'.
+*** New functions 'cl-fresh-line', 'cl-digit-char-p', and 'cl-parse-integer'.
 
 ---
-*** `pcase' accepts the new UPattern `cl-struct'.
+*** 'pcase' accepts the new UPattern 'cl-struct'.
 
 ** Calendar and diary
 
 +++
-*** The default `diary-file' is now located in .emacs.d.
+*** The default 'diary-file' is now located in .emacs.d.
 
 +++
 *** New commands to insert diary entries with Chinese dates:
-`diary-chinese-insert-anniversary-entry' `diary-chinese-insert-entry'
-`diary-chinese-insert-monthly-entry', `diary-chinese-insert-yearly-entry'.
+'diary-chinese-insert-anniversary-entry' 'diary-chinese-insert-entry'
+'diary-chinese-insert-monthly-entry', 'diary-chinese-insert-yearly-entry'.
 
 +++
 *** The calendar can now list and mark diary entries with Chinese dates.
-See `diary-chinese-list-entries' and `diary-chinese-mark-entries'.
+See 'diary-chinese-list-entries' and 'diary-chinese-mark-entries'.
 
 ---
-*** The option `calendar-mode-line-format' can now be nil,
+*** The option 'calendar-mode-line-format' can now be nil,
 which means to do nothing special with the mode line in calendars.
 
 +++
-*** New option `calendar-weekend-days'.
+*** New option 'calendar-weekend-days'.
 The option customizes which day headers receive the
-`calendar-weekend-header' face.
+'calendar-weekend-header' face.
 
 ---
-*** New optional args N and STRING for ‘holiday-greek-orthodox-easter’.
+*** New optional args N and STRING for 'holiday-greek-orthodox-easter'.
 
 ---
 *** Many items obsolete since at least version 23.1 have been removed.
 The majority were function/variable/face aliases, too numerous to list here.
 The remainder were:
 
-**** Functions `calendar-one-frame-setup', `calendar-only-one-frame-setup',
-`calendar-two-frame-setup', `european-calendar', `american-calendar'.
+**** Functions 'calendar-one-frame-setup', 'calendar-only-one-frame-setup',
+'calendar-two-frame-setup', 'european-calendar', 'american-calendar'.
 
-**** Hooks `cal-menu-load-hook', `cal-x-load-hook'.
+**** Hooks 'cal-menu-load-hook', 'cal-x-load-hook'.
 
-**** Macro `calendar-for-loop'.
+**** Macro 'calendar-for-loop'.
 
-**** Variables `european-calendar-style', `diary-face', 
`hebrew-holidays-{1,4}'.
+**** Variables 'european-calendar-style', 'diary-face', 
'hebrew-holidays-{1,4}'.
 
-**** The nil and list forms of `diary-display-function'.
+**** The nil and list forms of 'diary-display-function'.
 
 +++
-** New ERT function `ert-summarize-tests-batch-and-exit'.
+** New ERT function 'ert-summarize-tests-batch-and-exit'.
 If the output of ERT tests in batch mode execution can be saved to a
 log file, then it can be passed as an argument to the above function
 to produce a neat summary.
 
 ---
-** New js.el option `js-indent-first-init'.
+** New js.el option 'js-indent-first-init'.
 
 ** Info
 
 ---
 ** Info mode now displays symbol names in fixed-pitch font.
-If you want to get the old behavior back, customize the `Info-quoted'
+If you want to get the old behavior back, customize the 'Info-quoted'
 face to use the same definitions as the default face.
 
 ---
-*** `Info-fontify-maximum-menu-size' can be t for no limit.
+*** 'Info-fontify-maximum-menu-size' can be t for no limit.
 
 +++
-*** `info-display-manual' can now be given a prefix argument which (any
+*** 'info-display-manual' can now be given a prefix argument which (any
 non-nil value) directs the command to limit the completion
 alternatives to currently visited manuals.
 
@@ -872,7 +869,7 @@ alternatives to currently visited manuals.
 ** Rmail
 
 +++
-*** The Rmail commands `d', `C-d' and `u' take optional repeat counts
+*** The Rmail commands 'd', 'C-d' and 'u' take optional repeat counts
 to delete or undelete multiple messages.
 
 +++
@@ -880,24 +877,24 @@ to delete or undelete multiple messages.
 libxml2 or if you have the Lynx browser installed.  By default, Rmail
 will display the HTML version of a mail message that has both HTML and
 plain text parts, if display of HTML email is possible; customize the
-`rmail-mime-prefer-html' option to `nil' if you don't want that.
+'rmail-mime-prefer-html' option to 'nil' if you don't want that.
 
 +++
 *** In the commands that make summaries by subject, recipients, or senders,
 you can no longer use commas to separate regular expressions.
 
 +++
-** SES now supports local printer functions; see `ses-define-local-printer'.
+** SES now supports local printer functions; see 'ses-define-local-printer'.
 
 ** Shell-script Mode
 ---
-*** In sh-mode you can now use `sh-shell' as a file-local variable to
+*** In sh-mode you can now use 'sh-shell' as a file-local variable to
 specify the type of shell in use (bash, csh, etc).
 
 ---
-*** New value `always' for `sh-indent-after-continuation'.
+*** New value 'always' for 'sh-indent-after-continuation'.
 This provides old-style ("dumb") indentation of continued lines.
-See the doc string of `sh-indent-after-continuation' for details.
+See the doc string of 'sh-indent-after-continuation' for details.
 
 ** TLS
 ---
@@ -908,33 +905,33 @@ See the doc string of `sh-indent-after-continuation' for 
details.
 program is used instead.  This program used to be run in --insecure
 mode by default, but has now changed to be secure instead, and will
 fail if you try to connect to non-verifiable hosts.  This is
-controlled by the `tls-program' variable.
+controlled by the 'tls-program' variable.
 
 ** URL
 
 +++
 *** The URL package accepts now the protocols "ssh", "scp" and "rsync".
-When `url-handler-mode' is enabled, file operations for these
+When 'url-handler-mode' is enabled, file operations for these
 protocols as well as for "telnet" and "ftp" are passed to Tramp.
 
 +++
-*** The URL package allows customizing the `url-user-agent' string.
-The new `url-user-agent' variable can be customized to be a string or
+*** The URL package allows customizing the 'url-user-agent' string.
+The new 'url-user-agent' variable can be customized to be a string or
 a function.
 
 ---
-*** The new interface variable `url-request-noninteractive' can be used
+*** The new interface variable 'url-request-noninteractive' can be used
 to specify that we're running in a noninteractive context, and that
 we should not be queried about things like TLS certificate validity.
 
 ---
-*** `url-mime-accept-string' can now be used as in "interface"
-variable, meaning you can bind it around an `url-retrieve' call.
+*** 'url-mime-accept-string' can now be used as in "interface"
+variable, meaning you can bind it around an 'url-retrieve' call.
 
 ---
 *** If URL is used with a https connection, the first callback argument
 plist will contain a :peer element that has the output of
-`gnutls-peer-status' (if Emacs is built with GnuTLS support).
+'gnutls-peer-status' (if Emacs is built with GnuTLS support).
 
 ** Tramp
 
@@ -948,21 +945,21 @@ busyboxes.
 
 +++
 *** Method-specific parameters can be overwritten now with variable
-`tramp-connection-properties'.
+'tramp-connection-properties'.
 
 ---
-*** Handler for `file-notify-valid-p' for remote machines that support
+*** Handler for 'file-notify-valid-p' for remote machines that support
 filesystem notifications.
 
 ** SQL mode
 
 ---
-*** New user variable `sql-default-directory' enables remote
+*** New user variable 'sql-default-directory' enables remote
 connections using Tramp.
 
 ---
-*** New command `sql-send-line-and-next'.
-This command, bound to `C-c C-n' by default, sends the current line to
+*** New command 'sql-send-line-and-next'.
+This command, bound to 'C-c C-n' by default, sends the current line to
 the SQL process and advances to the next line, skipping whitespace and
 comments.
 
@@ -972,7 +969,7 @@ comments.
 ** VC and related modes
 
 +++
-*** Basic push support, via `vc-push', bound to `C-x v P'.
+*** Basic push support, via 'vc-push', bound to 'C-x v P'.
 Implemented for Bzr, Git, Hg.  As part of this change, the pre-existing
 (undocumented) command vc-hg-push now behaves slightly differently.
 
@@ -980,36 +977,36 @@ Implemented for Bzr, Git, Hg.  As part of this change, 
the pre-existing
 *** The new command vc-region-history shows the log+diff of the active region.
 
 +++
-*** You can refresh the VC state of a file buffer with `M-x vc-refresh-state'.
+*** You can refresh the VC state of a file buffer with 'M-x vc-refresh-state'.
 This command is useful when you perform version control commands
 outside Emacs (e.g., from the shell prompt), or if you switch the VC
 back-end for the buffer's file, or remove it from version control.
 
 +++
-*** New option `vc-annotate-background-mode' controls whether
-the color range from `vc-annotate-color-map' is applied to the
+*** New option 'vc-annotate-background-mode' controls whether
+the color range from 'vc-annotate-color-map' is applied to the
 background or to the foreground.
 
 +++
-*** `compare-windows' now compares text with the most recently selected window
+*** 'compare-windows' now compares text with the most recently selected window
 instead of the next window.  If you want the previous behavior of
 comparing with the next window, customize the new option
-`compare-windows-get-window-function' to the value
-`compare-windows-get-next-window'.
+'compare-windows-get-window-function' to the value
+'compare-windows-get-next-window'.
 
 ---
-*** Two new faces `compare-windows-removed' and `compare-windows-added'
-replace the face `compare-windows', which is now an obsolete alias for
-`compare-windows-added'.
+*** Two new faces 'compare-windows-removed' and 'compare-windows-added'
+replace the face 'compare-windows', which is now an obsolete alias for
+'compare-windows-added'.
 
 ---
 *** The VC state indicator in the mode line now has different faces
-corresponding to each of the possible states.  See the `vc-faces'
+corresponding to each of the possible states.  See the 'vc-faces'
 customization group.
 
 ---
-*** `log-edit-insert-changelog' converts "(tiny change)" to
-"Copyright-paperwork-exempt: yes".  Set `log-edit-rewrite-tiny-change'
+*** 'log-edit-insert-changelog' converts "(tiny change)" to
+"Copyright-paperwork-exempt: yes".  Set 'log-edit-rewrite-tiny-change'
 nil to disable this.
 
 ---
@@ -1032,52 +1029,52 @@ macro argument expansion, interactive macro evaluation 
and automatic
 scanning of #define'd symbols.
 
 ---
-*** New command `hif-evaluate-macro', bound to `C-c @ e', displays the
+*** New command 'hif-evaluate-macro', bound to 'C-c @ e', displays the
 result of evaluating a macro.
 
 ---
-*** New command `hif-clear-all-ifdef-define', bound to `C-c @ C', clears
-all defined symbols in `hide-ifdef-env'.
+*** New command 'hif-clear-all-ifdef-define', bound to 'C-c @ C', clears
+all defined symbols in 'hide-ifdef-env'.
 
 ---
-*** New custom variable `hide-ifdef-header-regexp' to define C/C++ header
-file name patterns.  Defaults to files whose extension is one of `.h',
-`.hh', `.hpp', `.hxx', or `.h++', matched case-insensitively.
+*** New custom variable 'hide-ifdef-header-regexp' to define C/C++ header
+file name patterns.  Defaults to files whose extension is one of '.h',
+'.hh', '.hpp', '.hxx', or '.h++', matched case-insensitively.
 
 ---
-*** New custom variable `hide-ifdef-expand-reinclusion-protection' to prevent
+*** New custom variable 'hide-ifdef-expand-reinclusion-protection' to prevent
 reinclusion protected (a.k.a. "idempotent") header files from being hidden.
 (This could happen when an idempotent header file is visited again,
-when its guard symbol is already defined.)  Defaults to `t'.
+when its guard symbol is already defined.)  Defaults to 't'.
 
 ---
-*** New custom variable `hide-ifdef-exclude-define-regexp' to define symbol
+*** New custom variable 'hide-ifdef-exclude-define-regexp' to define symbol
 name patterns (e.g. all "FOR_DOXYGEN_ONLY_*") to be ignored when
 looking for macro definitions.  By default, no symbols are ignored.
 
 ** TeX mode
 
 +++
-*** New custom variable `tex-print-file-extension' to help users who
+*** New custom variable 'tex-print-file-extension' to help users who
 use PDF instead of DVI.
 
 +++
 *** TeX mode now supports Prettify Symbols mode.  When enabling
-`prettify-symbols-mode' in a tex-mode buffer, \alpha ... \omega, and
+'prettify-symbols-mode' in a tex-mode buffer, \alpha ... \omega, and
 many other math macros are displayed using unicode characters.
 
 +++
-** New `big-indent' style in `whitespace-mode' highlights deep indentation.
+** New 'big-indent' style in 'whitespace-mode' highlights deep indentation.
 By default, 32 consecutive spaces or four consecutive TABs are
 considered to be too deep, but the new variable
-`whitespace-big-indent-regexp' can be customized to change that.
+'whitespace-big-indent-regexp' can be customized to change that.
 
 ---
-** New options in `tildify-mode'.
-New options `tildify-space-string', `tildify-pattern', and
-`tildify-foreach-region-function' variables make
-`tildify-string-alist', `tildify-pattern-alist', and
-`tildify-ignored-environments-alist' variables (as well as a few
+** New options in 'tildify-mode'.
+New options 'tildify-space-string', 'tildify-pattern', and
+'tildify-foreach-region-function' variables make
+'tildify-string-alist', 'tildify-pattern-alist', and
+'tildify-ignored-environments-alist' variables (as well as a few
 helper functions) obsolete.
 
 +++
@@ -1090,41 +1087,41 @@ to a definition.  It supersedes and obsoletes many 
Etags commands,
 while still using the etags.el code that reads the TAGS tables as one
 of its back-ends.
 
-The command `xref-find-definitions' replaces `find-tag' and provides
+The command 'xref-find-definitions' replaces 'find-tag' and provides
 an interface to pick one definition among several.
-`tags-loop-continue' is now unbound.  `xref-pop-marker-stack' replaces
-`pop-tag-mark', but has a keybinding (`M-,') different from the one
-`pop-tag-mark' used.
+'tags-loop-continue' is now unbound.  'xref-pop-marker-stack' replaces
+'pop-tag-mark', but has a keybinding ('M-,') different from the one
+'pop-tag-mark' used.
 
-`xref-find-definitions-other-window' replaces `find-tag-other-window'.
-`xref-find-definitions-other-frame' replaces `find-tag-other-frame'.
-`xref-find-apropos' replaces `find-tag-regexp'.
+'xref-find-definitions-other-window' replaces 'find-tag-other-window'.
+'xref-find-definitions-other-frame' replaces 'find-tag-other-frame'.
+'xref-find-apropos' replaces 'find-tag-regexp'.
 
 As a result of this, the following commands are now obsolete:
-`find-tag-other-window', `find-tag-other-frame', `find-tag-regexp',
-`tags-apropos'.
+'find-tag-other-window', 'find-tag-other-frame', 'find-tag-regexp',
+'tags-apropos'.
 
-`tags-loop-continue' is not obsolete because it's still useful in
-`tags-search' and `tags-query-replace', for which there are no direct
+'tags-loop-continue' is not obsolete because it's still useful in
+'tags-search' and 'tags-query-replace', for which there are no direct
 replacements yet.
 
 +++
-*** Variants of `tags-search' and `tags-query-replace' in Dired were also
+*** Variants of 'tags-search' and 'tags-query-replace' in Dired were also
 replaced by xref-style commands, see the "Dired" section below.
 
 +++
 *** New variables
 
-`find-tag-marker-ring-length' is now an obsolete alias for
-`xref-marker-ring-length'.  `find-tag-marker-ring' is now an obsolete
-alias for a private variable.  `xref-push-marker-stack' and
-`xref-pop-marker-stack' should be used instead to manipulate the stack
+'find-tag-marker-ring-length' is now an obsolete alias for
+'xref-marker-ring-length'.  'find-tag-marker-ring' is now an obsolete
+alias for a private variable.  'xref-push-marker-stack' and
+'xref-pop-marker-stack' should be used instead to manipulate the stack
 of searches for definitions.
 
 ---
-*** `xref-find-definitions' and `describe-function' now display
+*** 'xref-find-definitions' and 'describe-function' now display
 information about mode local overrides (defined by cedet/mode-local.el
-`define-overloadable-function' `define-mode-local-overrides').
+'define-overloadable-function' 'define-mode-local-overrides').
 
 The framework's Lisp API is still experimental and can change in major,
 backward-incompatible ways.
@@ -1134,7 +1131,7 @@ backward-incompatible ways.
 
 The new package Project provides generic infrastructure for dealing
 with projects.  The main commands included in it are
-`project-find-file' and `project-find-regexp'.
+'project-find-file' and 'project-find-regexp'.
 
 The Lisp API of this package is still experimental.
 
@@ -1159,27 +1156,27 @@ rewritten.
 There have also been customization changes.
 
 +++
-*** New custom variable `eudc-server-hotlist' to allow specifying
+*** New custom variable 'eudc-server-hotlist' to allow specifying
 multiple EUDC servers in init file.
 
 +++
-*** Custom variable `eudc-inline-query-format' defaults to completing
+*** Custom variable 'eudc-inline-query-format' defaults to completing
 on email and firstname instead of surname.
 
 ---
-*** Custom variable `eudc-expansion-overwrites-query' defaults to nil
+*** Custom variable 'eudc-expansion-overwrites-query' defaults to nil
 to avoid interfering with the kill ring.
 
 +++
-*** Custom variable `eudc-inline-expansion-format' defaults to
+*** Custom variable 'eudc-inline-expansion-format' defaults to
 "Firstname Surname <mail-address>".
 
 +++
-*** Custom variable `eudc-options-file' defaults to
+*** Custom variable 'eudc-options-file' defaults to
 "~/.emacs.d/eudc-options".
 
 ---
-*** New custom variable `ldap-ldapsearch-password-prompt-regexp' to
+*** New custom variable 'ldap-ldapsearch-password-prompt-regexp' to
 allow overriding the regular expression that recognizes the ldapsearch
 command line's password prompt.
 
@@ -1192,24 +1189,24 @@ EUDC's PH backend (eudcb-ph.el) is obsolete.
 ** Eshell
 
 +++
-*** The new built-in command `clear' can scroll window contents out of sight.
+*** The new built-in command 'clear' can scroll window contents out of sight.
 If provided with an optional non-nil argument, the scrollback contents will be 
cleared.
 
 +++
 *** New buffer syntax '#<buffer-name>', which is equivalent to
 '#<buffer buffer-name>'.  This shorthand makes interacting with
 buffers from eshell more convenient.  Custom variable
-`eshell-buffer-shorthand', which has been broken for a while, has been
+'eshell-buffer-shorthand', which has been broken for a while, has been
 removed.
 
 +++
 *** By default, eshell "visual" program buffers (created by
-`eshell-visual-commands' and similar custom vars) are no longer killed
+'eshell-visual-commands' and similar custom vars) are no longer killed
 when their processes die.  This fixes issues with short-lived commands
 and makes visual programs more useful in general.  For example, if
 "git log" is a visual command, it will always show the visual command
 buffer, even if the "git log" process dies.  For the old behavior,
-make the new option `eshell-destroy-buffer-when-process-dies' non-nil.
+make the new option 'eshell-destroy-buffer-when-process-dies' non-nil.
 
 ** Browse-url
 
@@ -1223,7 +1220,7 @@ make the new option 
`eshell-destroy-buffer-when-process-dies' non-nil.
 *** Support for several ancient browsers is now officially obsolete.
 
 +++
-** tar-mode: new `tar-new-entry' command, allowing for new members to
+** tar-mode: new 'tar-new-entry' command, allowing for new members to
 be added to the archive.
 
 ** Autorevert
@@ -1233,7 +1230,7 @@ be added to the archive.
 Emacs is compiled with file notification support.
 
 ---
-*** `auto-revert-use-notify' is set to nil in `global-auto-revert-mode'.
+*** 'auto-revert-use-notify' is set to nil in 'global-auto-revert-mode'.
 See <http://debbugs.gnu.org/22814>.
 
 ** File Notifications
@@ -1242,46 +1239,46 @@ See <http://debbugs.gnu.org/22814>.
 *** The kqueue library is integrated for *BSD and Mac OS X machines.
 
 +++
-*** The new event `stopped' signals, that a file notification watch is
+*** The new event 'stopped' signals, that a file notification watch is
 not active any longer.
 
 +++
-*** The new function `file-notify-valid-p' checks, whether a file
+*** The new function 'file-notify-valid-p' checks, whether a file
 notification descriptor still corresponds to an activate watch.
 
 ** Dired
 
 +++
-*** The command `dired-do-compress' bound to `Z' now can compress
+*** The command 'dired-do-compress' bound to 'Z' now can compress
 directories and decompress zip files.
 
 +++
-*** New command `dired-do-compress-to' bound to `c' can be used to
+*** New command 'dired-do-compress-to' bound to 'c' can be used to
 compress many marked files into a single named archive.  The
 compression command is determined from the new
-`dired-compress-files-alist' variable.
-
-+++
-*** New user interface for the `A' and `Q' commands.
-These keys, now bound to `dired-do-find-regexp' and
-`dired-do-find-regexp-and-replace', work similarly to `xref-find-apropos'
-and `xref-query-replace-in-results': they present the matches
-in the `*xref*' buffer and let you move through the matches.  No need
-to use `tags-loop-continue' to resume the search or replace loop.  The
-previous commands, `dired-do-search' and
-`dired-do-query-replace-regexp', are still available, but not bound to
-keys; rebind `A' and `Q' to invoke them if you want the old behavior
+'dired-compress-files-alist' variable.
+
++++
+*** New user interface for the 'A' and 'Q' commands.
+These keys, now bound to 'dired-do-find-regexp' and
+'dired-do-find-regexp-and-replace', work similarly to 'xref-find-apropos'
+and 'xref-query-replace-in-results': they present the matches
+in the '*xref*' buffer and let you move through the matches.  No need
+to use 'tags-loop-continue' to resume the search or replace loop.  The
+previous commands, 'dired-do-search' and
+'dired-do-query-replace-regexp', are still available, but not bound to
+keys; rebind 'A' and 'Q' to invoke them if you want the old behavior
 back.  We intend to obsolete the old commands in a future release.
 
 ** Tabulated List Mode
 
 +++
-*** It is now safe for a mode that derives `tabulated-list-mode' to not
-call `tabulated-list-init-header', in which case it will have no
+*** It is now safe for a mode that derives 'tabulated-list-mode' to not
+call 'tabulated-list-init-header', in which case it will have no
 header.
 
 +++
-*** `tabulated-list-print' takes a second optional argument, update,
+*** 'tabulated-list-print' takes a second optional argument, update,
 which specifies an alternative printing method which is faster when
 few or no entries have changed.
 
@@ -1307,7 +1304,7 @@ configuration with "gpgconf --reload gpg-agent".
 
 +++
 ** cl-generic.el provides CLOS-style multiple-dispatch generic functions.
-The main entry points are `cl-defgeneric' and `cl-defmethod'.  See the
+The main entry points are 'cl-defgeneric' and 'cl-defmethod'.  See the
 node "Generic Functions" in the Emacs Lisp manual for more details.
 
 ---
@@ -1319,25 +1316,25 @@ SCSS (Sassy CSS) files.
 let-bind the values stored in an alist.
 
 ---
-** `tildify-mode' allows automatic insertion of hard spaces as one
+** 'tildify-mode' allows automatic insertion of hard spaces as one
 types the text.  Breaking line after a single-character words is
 forbidden by Czech and Polish typography (and may be discouraged in
-other languages), so `auto-tildify-mode' makes it easier to create
+other languages), so 'auto-tildify-mode' makes it easier to create
 a typographically-correct documents.
 
 ---
-** The `seq' library adds sequence manipulation functions and macros
+** The 'seq' library adds sequence manipulation functions and macros
 that complement basic functions provided by subr.el.  All functions
-are prefixed with `seq-' and work on lists, strings and vectors.
-`pcase' accepts a new Upattern `seq'.
+are prefixed with 'seq-' and work on lists, strings and vectors.
+'pcase' accepts a new Upattern 'seq'.
 
 ---
-** The `map' library provides map-manipulation functions that work on
+** The 'map' library provides map-manipulation functions that work on
 alists, hash-table and arrays.  All functions are prefixed with
-`map-'.  `pcase' accepts a new UPattern `map'.
+'map-'.  'pcase' accepts a new UPattern 'map'.
 
 ---
-** The `thunk' library provides functions and macros to control the
+** The 'thunk' library provides functions and macros to control the
 evaluation of forms.
 
 ---
@@ -1348,76 +1345,77 @@ support for JSX, an XML-like syntax extension to 
ECMAScript.
 * Incompatible Lisp Changes in Emacs 25.1
 
 ---
-** `setq' and `setf' must now be called with an even number of
+** 'setq' and 'setf' must now be called with an even number of
 arguments.  The earlier behavior of silently supplying a nil to the
 last variable when there was an odd number of arguments has been
 eliminated.
 
 +++
-** `syntax-begin-function' is declared obsolete.
+** 'syntax-begin-function' is declared obsolete.
 Removed font-lock-beginning-of-syntax-function and the SYNTAX-BEGIN
 slot in font-lock-defaults.
 
 +++
 ** The new implementation of Subword mode affects word movement everywhere.
-When Subword mode is turned on, `forward-word', `backward-word', and
+When Subword mode is turned on, 'forward-word', 'backward-word', and
 everything that uses them will move by sub-words, effectively
 overriding the buffer's syntax table.  Lisp programs that shouldn't be
 affected by Subword mode should call the new functions
-`forward-word-strictly' and `backward-word-strictly' instead.
+'forward-word-strictly' and 'backward-word-strictly' instead.
 
 +++
-** `package-initialize' now sets `package-enable-at-startup' to nil if
+** 'package-initialize' now sets 'package-enable-at-startup' to nil if
 called during startup.  Users who call this function in their init
 file and still expect it to be run after startup should set
-`package-enable-at-startup' to t after the call to
-`package-initialize'.
+'package-enable-at-startup' to t after the call to
+'package-initialize'.
 
 ---
-** `:global' minor mode use `setq-default' rather than `setq'.
-This means that you can't use `make-local-variable' and expect them to
+** ':global' minor mode use 'setq-default' rather than 'setq'.
+This means that you can't use 'make-local-variable' and expect them to
 "magically" become buffer-local.
 
 +++
-** `track-mouse' no longer freezes the shape of the mouse pointer.
-The `track-mouse' form no longer refrains from changing the shape of
+** 'track-mouse' no longer freezes the shape of the mouse pointer.
+The 'track-mouse' form no longer refrains from changing the shape of
 the mouse pointer for the entire time the body of that form is
-executed.  Lisp programs that use `track-mouse' for dragging across
+executed.  Lisp programs that use 'track-mouse' for dragging across
 large portions of the Emacs display, and want to avoid changes in the
-pointer shape during dragging, should bind the variable `track-mouse'
-to the special value `dragging' in the body of the form.
+pointer shape during dragging, should bind the variable 'track-mouse'
+to the special value 'dragging' in the body of the form.
 
 ---
-** The optional `predicate' argument of `lisp-complete-symbol' no longer
+** The optional 'predicate' argument of 'lisp-complete-symbol' no longer
 has any effect.  (This change was made in Emacs 24.4 but was not
 advertised at the time.)
 
 +++
-** `indirect-function' does not signal `void-function' any more.
+** 'indirect-function' does not signal 'void-function' any more.
 This is mostly a bug-fix, since this change was missed back in 24.4 when
-symbol-function was changed not to signal `void-function' any more.
+symbol-function was changed not to signal 'void-function' any more.
 
 +++
-*** As a consequence, the second arg of `indirect-function' is now obsolete.
+*** As a consequence, the second arg of 'indirect-function' is now obsolete.
 
 +++
-** Comint, term, and compile do not set the EMACS env var any more.
+** Although comint, term, and compile still set the EMACS variable,
+this is now considered deprecated and will be removed in a future release.
 Use the INSIDE_EMACS environment variable instead.
 
 +++
-** `save-excursion' does not save&restore the mark any more.
-Use `save-mark-and-excursion' if you want the old behavior.
+** 'save-excursion' does not save&restore the mark any more.
+Use 'save-mark-and-excursion' if you want the old behavior.
 
 +++
-** `read-buffer' and `read-buffer-function' can now be called with a 4th
-argument (`predicate').
+** 'read-buffer' and 'read-buffer-function' can now be called with a 4th
+argument ('predicate').
 
 +++
-** `completion-table-dynamic' by default stays in the minibuffer.
+** 'completion-table-dynamic' by default stays in the minibuffer.
 The minibuffer will be the current buffer when the function is called.
 If you want the old behavior of calling the function in the buffer
 from which the minibuffer was entered, use the new argument
-`switch-buffer' to `completion-table-dynamic'.
+'switch-buffer' to 'completion-table-dynamic'.
 
 ---
 ** window-configurations no longer record the buffers' marks.
@@ -1430,11 +1428,11 @@ active region handling.
 ** deactivate-mark is now buffer-local.
 
 +++
-** `cl-the' now asserts that its argument is of the given type.
+** 'cl-the' now asserts that its argument is of the given type.
 
 +++
-** `process-running-child-p' may now return a numeric process
-group ID instead of `t'.
+** 'process-running-child-p' may now return a numeric process
+group ID instead of 't'.
 
 +++
 ** Mouse click events on mode line or header line no longer include
@@ -1453,24 +1451,24 @@ denied" instead of "permission denied".  The old 
behavior was problematic
 in languages like German where downcasing rules depend on grammar.
 
 +++
-** New variable ‘text-quoting-style’ to control how Emacs translates quotes.
-Set it to ‘curve’ for curved single quotes ‘like this’, to ‘straight’
-for straight apostrophes 'like this', and to ‘grave’ for grave accent
-and apostrophe `like this'.  The default value nil acts like ‘curve’
-if curved single quotes are displayable, and like ‘grave’ otherwise.
-The new variable affects display of diagnostics and help, but not of info.
+** New variable 'text-quoting-style' to control how Emacs translates quotes.
+Set it to 'curve' for curved single quotes, to 'straight' for straight
+apostrophes, and to 'grave' for grave accent and apostrophe.  The
+default value nil acts like 'curve' if curved single quotes are
+displayable, and like 'grave' otherwise.  The new variable affects
+display of diagnostics and help, but not of info.
 
 +++
 ** substitute-command-keys now replaces quotes.
-That is, it converts documentation strings’ quoting style as per the
-value of ‘text-quoting-style’.  Doc strings in source code can use
+That is, it converts documentation strings' quoting style as per the
+value of 'text-quoting-style'.  Doc strings in source code can use
 either curved single quotes or grave accents and apostrophes.  As
 before, characters preceded by \= are output as-is.
 
 +++
-** Message-issuing functions ‘error’, ‘message’, etc. now convert quotes.
-They use the new ‘format-message’ function instead of plain ‘format’,
-so that they now follow user preference as per ‘text-quoting-style’
+** Message-issuing functions 'error', 'message', etc. now convert quotes.
+They use the new 'format-message' function instead of plain 'format',
+so that they now follow user preference as per 'text-quoting-style'
 when processing curved single quotes, grave accents, and apostrophes
 in their format argument.
 
@@ -1478,7 +1476,7 @@ in their format argument.
 ** The character classes [:alpha:] and [:alnum:] in regular expressions
 now match multibyte characters using Unicode character properties.
 If you want the old behavior where they matched any character with
-word syntax, use `\sw' instead.
+word syntax, use '\sw' instead.
 
 +++
 ** The character classes [:graph:] and [:print:] in regular expressions
@@ -1489,105 +1487,105 @@ unassigned codepoints are now rejected.  If you want 
the old behavior,
 use [:multibyte:] instead.
 
 +++
-** The `diff' command uses the unified format now.  To restore the old
-behavior, set `diff-switches' to `-c'.
+** The 'diff' command uses the unified format now.  To restore the old
+behavior, set 'diff-switches' to '-c'.
 
 ---
-** `grep-template' and `grep-find-template' values don't include the
+** 'grep-template' and 'grep-find-template' values don't include the
 --color argument anymore.  It's added at the <C> place holder position
 dynamically.  Any third-party code that changes these templates should
 be updated accordingly.
 
 +++
-** ‘(/ N)’ is now equivalent to ‘(/ 1 N)’ rather than to ‘(/ N 1)’.
+** '(/ N)' is now equivalent to '(/ 1 N)' rather than to '(/ N 1)'.
 The new behavior is compatible with Common Lisp and with XEmacs.
 This change does not affect Lisp code intended to be portable to
-Emacs 24.2 and earlier, which did not support unary ‘/’.
+Emacs 24.2 and earlier, which did not support unary '/'.
 
 +++
-** The `default-directory' value doesn't have to end slash.  To make
-that happen, `unhandled-file-name-directory' now defaults to calling
-`file-name-as-directory'.
+** The 'default-directory' value doesn't have to end slash.  To make
+that happen, 'unhandled-file-name-directory' now defaults to calling
+'file-name-as-directory'.
 
 
 * Lisp Changes in Emacs 25.1
 
 ** pcase
 +++
-*** New UPatterns `quote', `app'.
+*** New UPatterns 'quote', 'app'.
 +++
-*** New UPatterns can be defined with `pcase-defmacro'.
+*** New UPatterns can be defined with 'pcase-defmacro'.
 +++
 *** New vector QPattern.
 
 ---
 ** syntax-propertize is now automatically called on-demand during forward
-parsing functions like `forward-sexp'.
+parsing functions like 'forward-sexp'.
 
 +++
-** New hooks `prefix-command-echo-keystrokes-functions' and
-`prefix-command-preserve-state-hook' allow the definition of prefix
-commands other than the predefined `C-u'.
+** New hooks 'prefix-command-echo-keystrokes-functions' and
+'prefix-command-preserve-state-hook' allow the definition of prefix
+commands other than the predefined 'C-u'.
 
 +++
-** New functions `filepos-to-bufferpos' and `bufferpos-to-filepos'.
+** New functions 'filepos-to-bufferpos' and 'bufferpos-to-filepos'.
 These allow conversion between buffer positions and the corresponding
 file byte offsets, given the file's encoding.
 
 +++
-** The default value of `load-read-function' is now `read'.
-Previously, the default value of `nil' implied using `read'.
+** The default value of 'load-read-function' is now 'read'.
+Previously, the default value of 'nil' implied using 'read'.
 
 +++
-** New hook `pre-redisplay-functions'.
-It is a bit easier to use than `pre-redisplay-function'.
+** New hook 'pre-redisplay-functions'.
+It is a bit easier to use than 'pre-redisplay-function'.
 
 +++
-** The second arg of `looking-back' should always be provided explicitly.
+** The second arg of 'looking-back' should always be provided explicitly.
 Previously, it was an optional argument, now it's mandatory.
 
 +++
-** Text properties `intangible', `point-entered', and `point-left' are 
obsolete.
-Replaced by properties `cursor-intangible' and `cursor-sensor-functions',
-implemented by the new `cursor-intangible-mode' and
-`cursor-sensor-mode' minor modes.
+** Text properties 'intangible', 'point-entered', and 'point-left' are 
obsolete.
+Replaced by properties 'cursor-intangible' and 'cursor-sensor-functions',
+implemented by the new 'cursor-intangible-mode' and
+'cursor-sensor-mode' minor modes.
 
 +++
-** `inhibit-point-motion-hooks' now defaults to `t' and is obsolete.
-Use the new minor modes `cursor-intangible-mode' and
-`cursor-sensor-mode' instead.
+** 'inhibit-point-motion-hooks' now defaults to 't' and is obsolete.
+Use the new minor modes 'cursor-intangible-mode' and
+'cursor-sensor-mode' instead.
 
 +++
-** New process type `pipe', which can be used in combination with the
-`:stderr' keyword of make-process to handle standard error output
+** New process type 'pipe', which can be used in combination with the
+':stderr' keyword of make-process to handle standard error output
 of subprocess.
 
 +++
-** New function `make-process' provides an alternative interface to
-`start-process'.  It allows programs to set process parameters such as
+** New function 'make-process' provides an alternative interface to
+'start-process'.  It allows programs to set process parameters such as
 process filter, sentinel, etc., through keyword arguments (similar to
-`make-network-process').
+'make-network-process').
 
 +++
-** A new function `directory-files-recursively' returns all matching
+** A new function 'directory-files-recursively' returns all matching
 files (recursively) under a directory.
 
 +++
-** New variable `inhibit-message', when bound to non-nil, inhibits
-`message' and related functions from displaying messages in the echo
+** New variable 'inhibit-message', when bound to non-nil, inhibits
+'message' and related functions from displaying messages in the echo
 area.  The output is still logged to the *Messages* buffer.
 
 +++
-** A new text property `inhibit-read-only' can be used in read-only
+** A new text property 'inhibit-read-only' can be used in read-only
 buffers to allow certain parts of the text to be writable.
 
 +++
-** A new variable `comment-end-can-be-escaped' is useful in languages
+** A new variable 'comment-end-can-be-escaped' is useful in languages
    such as C and C++ where line comments with escaped newlines are
    continued to the next line.
 
 +++
-** New macro `define-advice'.
+** New macro 'define-advice'.
 
 +++
 ** Emacs Lisp now supports generators.
@@ -1607,7 +1605,7 @@ evaluated (and should return a string) when the closure 
is built.
 ** define-inline provides a new way to define inlinable functions.
 
 +++
-** New function `macroexpand-1' to perform a single step of macro expansion.
+** New function 'macroexpand-1' to perform a single step of macro expansion.
 
 +++
 ** Some "x-*" functions were obsoleted and/or renamed:
@@ -1619,18 +1617,18 @@ evaluated (and should return a string) when the closure 
is built.
 *** x-set-selection is renamed to gui-set-selection
 
 +++
-** New function `string-greaterp', which return the opposite result of
-`string-lessp'.
+** New function 'string-greaterp', which return the opposite result of
+'string-lessp'.
 
 +++
-** The new functions `string-collate-lessp' and `string-collate-equalp'
+** The new functions 'string-collate-lessp' and 'string-collate-equalp'
 preserve the collation order as defined by the system's locale(1)
 environment.  For the time being this is implemented for modern POSIX
 systems and for MS-Windows, for other systems they fall back to their
-counterparts `string-lessp' and `string-equal'.
+counterparts 'string-lessp' and 'string-equal'.
 
 ---
-*** The ls-lisp package uses `string-collate-lessp' to sort file names.
+*** The ls-lisp package uses 'string-collate-lessp' to sort file names.
 The effect is that, on systems that use ls-lisp for Dired, the default
 sort order of the files in Dired is now different from what it was in
 previous versions of Emacs.  In particular, the file names are sorted
@@ -1638,10 +1636,10 @@ disregarding punctuation, accents, and diacritics, and 
letter case is
 ignored.  For example, files whose name begin with a period will no
 longer appear near the beginning of the directory listing.  If you
 want the old, locale-independent sorting, customize the new option
-`ls-lisp-use-string-collate' to the nil value.
+'ls-lisp-use-string-collate' to the nil value.
 
 +++
-*** The MS-Windows specific variable `w32-collate-ignore-punctuation',
+*** The MS-Windows specific variable 'w32-collate-ignore-punctuation',
 if set to a non-nil value, causes the above 2 functions to ignore
 symbol and punctuation characters when collating strings.  This
 emulates the behavior of modern Posix platforms when the locale's
@@ -1649,111 +1647,111 @@ codeset is "UTF-8" (as in "en_US.UTF-8").  This is 
needed because
 MS-Windows doesn't support UTF-8 as codeset in its locales.
 
 +++
-** New function `alist-get', which is also a valid place (aka lvalue).
+** New function 'alist-get', which is also a valid place (aka lvalue).
 
 +++
-** New function `funcall-interactively', which works like `funcall'
-but makes `called-interactively-p' treat the function as (you guessed it)
+** New function 'funcall-interactively', which works like 'funcall'
+but makes 'called-interactively-p' treat the function as (you guessed it)
 called interactively.
 
 +++
-** New function `function-put' to use instead of `put' for function properties.
+** New function 'function-put' to use instead of 'put' for function properties.
 
 +++
-** The new function `bidi-find-overridden-directionality' allows you to
+** The new function 'bidi-find-overridden-directionality' allows you to
 find characters whose directionality was, perhaps maliciously,
 overridden by directional override control characters.  Lisp programs
 can use this to detect potential phishing of URLs and other links that
 exploits bidirectional display reordering.
 
 +++
-** The new function `buffer-substring-with-bidi-context' allows you to
+** The new function 'buffer-substring-with-bidi-context' allows you to
 copy a portion of a buffer into a different location while preserving
 the visual appearance both of the copied text and the text at
 destination, even when the copied text includes mixed bidirectional
 text and directional control characters.
 
 +++
-** New properties that can be specified with `declare':
+** New properties that can be specified with 'declare':
 *** (interactive-only INSTEAD), says to use INSTEAD for non-interactive use.
 *** (pure VAL), if VAL is non-nil, indicates the function is pure.
 *** (side-effect-free VAL), if VAL is non-nil, indicates the function does not
 have side effects.
 
 +++
-** New macro `with-file-modes', for evaluating expressions with default file
+** New macro 'with-file-modes', for evaluating expressions with default file
 permissions set to temporary values (e.g., for creating private files).
 
 +++
-** You can access the slots of structures using `cl-struct-slot-value'.
+** You can access the slots of structures using 'cl-struct-slot-value'.
 
 +++
-** Function `sort' can deal with vectors.
+** Function 'sort' can deal with vectors.
 
 ---
-** Function `system-name' now returns an updated value if the current
+** Function 'system-name' now returns an updated value if the current
 system's name has changed or if the Emacs process has changed systems,
 and to avoid long waits it no longer consults DNS to canonicalize the
-name.  The variable `system-name' is now obsolete.
+name.  The variable 'system-name' is now obsolete.
 
 +++
-** Function `write-region' no longer outputs "Wrote FILE" in batch mode.
+** Function 'write-region' no longer outputs "Wrote FILE" in batch mode.
 
 ---
-** If `pwd' is called with a prefix argument, insert the current default
+** If 'pwd' is called with a prefix argument, insert the current default
 directory at point.
 
 +++
 ** New functions return extended information about fonts and faces.
 
 +++
-*** The function `font-info' now returns more details about a font.
+*** The function 'font-info' now returns more details about a font.
 In particular, it now returns the average width of the font's
 characters, which can be used for geometry-related calculations.
 
 +++
-*** A new function `default-font-width' returns the average width of a
+*** A new function 'default-font-width' returns the average width of a
 character in the current buffer's default font.  If the default face
-is remapped (see `face-remapping-alist'), the value for the remapped
+is remapped (see 'face-remapping-alist'), the value for the remapped
 face is returned.  This function complements the existing function
-`default-font-height'.
+'default-font-height'.
 
 +++
-*** New functions `window-font-height' and `window-font-width' return
+*** New functions 'window-font-height' and 'window-font-width' return
 the height and average width of characters in a specified face and
-window.  If FACE is remapped (see `face-remapping-alist'), the
+window.  If FACE is remapped (see 'face-remapping-alist'), the
 function returns the information for the remapped face.
 
 +++
-*** A new function `window-max-chars-per-line' returns the maximal
+*** A new function 'window-max-chars-per-line' returns the maximal
 number of characters that can be displayed on one line.  If a face
 and/or window are provided, these values are used for the
-calculation.  This function is different from `window-body-width' in
+calculation.  This function is different from 'window-body-width' in
 that it accounts for (i) continuation glyphs, (ii) the size of the
 font, and (iii) the specified window.
 
 ---
 ** New utilities in subr-x.el:
-*** New macros `if-let' and `when-let' allow defining bindings and to
+*** New macros 'if-let' and 'when-let' allow defining bindings and to
     execute code depending whether all values are true.
-*** New macros `thread-first' and `thread-last' allow threading a form
+*** New macros 'thread-first' and 'thread-last' allow threading a form
     as the first or last argument of subsequent forms.
 
 +++
 ** Documentation strings now support quoting with curved single quotes
-‘like-this’ in addition to the old style with grave accent and
-apostrophe `like-this'.  The new style looks better on today's displays.
-In the new Electric Quote mode, you can enter curved single quotes
-into documentation by typing ` and '.  Outside Electric Quote mode,
-you can enter them by typing ‘C-x 8 [’ and ‘C-x 8 ]’, or (if your Alt
-key works) by typing ‘A-[’ and ‘A-]’.  As described above under
-‘text-quoting-style’, the user can specify how to display doc string
+in addition to the old style with grave accent and apostrophe.  The
+new style looks better on today's displays.  In the new Electric Quote
+mode, you can enter curved single quotes into documentation by typing
+grave accent and apostrophe.  Outside Electric Quote mode, you can
+enter them by typing 'C-x 8 [' and 'C-x 8 ]', or (if your Alt key
+works) by typing 'A-[' and 'A-]'.  As described above under
+'text-quoting-style', the user can specify how to display doc string
 quotes.
 
 +++
-** New function ‘format-message’ is like ‘format’ and also converts
+** New function 'format-message' is like 'format' and also converts
 curved single quotes, grave accents and apostrophes as per
-‘text-quoting-style’.
+'text-quoting-style'.
 
 +++
 ** show-help-function's arg is converted via substitute-command-keys
@@ -1766,36 +1764,36 @@ quotation marks.
 
 *** Time conversion functions now accept an optional ZONE argument
 that specifies the time zone rules for conversion.  ZONE is omitted or
-nil for Emacs local time, t for Universal Time, ‘wall’ for system wall
-clock time, or a string as in ‘set-time-zone-rule’ for a time zone
-rule.  The affected functions are ‘current-time-string’,
-‘current-time-zone’, ‘decode-time’, and ‘format-time-string’.  The
-function ‘encode-time’, which already accepted a simple time zone rule
+nil for Emacs local time, t for Universal Time, 'wall' for system wall
+clock time, or a string as in 'set-time-zone-rule' for a time zone
+rule.  The affected functions are 'current-time-string',
+'current-time-zone', 'decode-time', and 'format-time-string'.  The
+function 'encode-time', which already accepted a simple time zone rule
 argument, has been extended to accept all the new forms.
 
 *** Time-related functions now consistently accept numbers
 (representing seconds since the epoch) and nil (representing the
 current time) as well as the usual list-of-integer representation.
-Affected functions include `current-time-string', `current-time-zone',
-`decode-time', `float-time', `format-time-string', `seconds-to-time',
-`time-add', `time-less-p', `time-subtract', `time-to-day-in-year',
-`time-to-days', and `time-to-seconds'.
+Affected functions include 'current-time-string', 'current-time-zone',
+'decode-time', 'float-time', 'format-time-string', 'seconds-to-time',
+'time-add', 'time-less-p', 'time-subtract', 'time-to-day-in-year',
+'time-to-days', and 'time-to-seconds'.
 
-*** The `encode-time-value' and `with-decoded-time-value' macros have
+*** The 'encode-time-value' and 'with-decoded-time-value' macros have
 been obsoleted.
 
-*** `calendar-next-time-zone-transition', `time-add', and
-`time-subtract' no longer return time values in the obsolete and
+*** 'calendar-next-time-zone-transition', 'time-add', and
+'time-subtract' no longer return time values in the obsolete and
 undocumented integer-pair format.  Instead, they return a list of two
 integers.
 
 +++
-** New function `set-binary-mode' allows switching a standard stream
+** New function 'set-binary-mode' allows switching a standard stream
 of the Emacs process to binary I/O mode.
 
 +++
-** The new function `directory-name-p' can be used to check whether a file
-name (as returned from, for instance, `file-name-all-completions') is
+** The new function 'directory-name-p' can be used to check whether a file
+name (as returned from, for instance, 'file-name-all-completions') is
 a directory file name.  It returns non-nil if the last character in
 the name is a directory separator character (forward slash on GNU and
 Unix systems, forward- or backslash on MS-Windows and MS-DOS).
@@ -1807,22 +1805,22 @@ if the terminal cannot display curved quotes.
 +++
 ** Standard output and error streams now transliterate characters via
 standard-display-table, and encode output using locale-coding-system.
-To force a specific encoding, bind `coding-system-for-write' to the
-coding-system of your choice when invoking functions like `prin1' and
-`message'.
+To force a specific encoding, bind 'coding-system-for-write' to the
+coding-system of your choice when invoking functions like 'prin1' and
+'message'.
 
 +++
-** New var `truncate-string-ellipsis' to choose how to indicate truncation.
+** New var 'truncate-string-ellipsis' to choose how to indicate truncation.
 
 +++
-** New possible value for `system-type': `nacl'.
+** New possible value for 'system-type': 'nacl'.
 This is used by Google's Native Client (NaCl).
 
 ** Miscellaneous name change
 
 ---
 For consistency with the usual Emacs spelling, the Lisp variable
-`hfy-optimisations' has been renamed to `hfy-optimizations'.
+'hfy-optimisations' has been renamed to 'hfy-optimizations'.
 The old name should still work, as an obsolescent alias.
 
 ** Changes in Frame- and Window- Handling
@@ -1832,53 +1830,53 @@ The old name should still work, as an obsolescent alias.
 provide toolkit scroll bars, namely Gtk+, Lucid, Motif and Windows.
 Horizontal scroll bars are turned off by default.
 
-**** New function `horizontal-scroll-bars-available-p' telling whether
+**** New function 'horizontal-scroll-bars-available-p' telling whether
     horizontal scroll bars are available on the underlying system.
 
-**** New mode `horizontal-scroll-bar-mode' to toggle horizontal scroll
+**** New mode 'horizontal-scroll-bar-mode' to toggle horizontal scroll
     bars on all existing and future frames.
 
-**** New function `toggle-horizontal-scroll-bar' to toggle horizontal
+**** New function 'toggle-horizontal-scroll-bar' to toggle horizontal
     scroll bars on the selected frame.
 
-**** New frame parameters `horizontal-scroll-bars' and
-    `scroll-bar-height' to set horizontal scroll bars and their height
-    for individual frames and in `default-frame-alist'.
+**** New frame parameters 'horizontal-scroll-bars' and
+    'scroll-bar-height' to set horizontal scroll bars and their height
+    for individual frames and in 'default-frame-alist'.
 
-**** New functions `frame-scroll-bar-height' and
-    `window-scroll-bar-height' return the height of horizontal scroll
+**** New functions 'frame-scroll-bar-height' and
+    'window-scroll-bar-height' return the height of horizontal scroll
     bars on a specific frame or window.
 
-**** `set-window-scroll-bars' now accepts five parameters where the last
+**** 'set-window-scroll-bars' now accepts five parameters where the last
     two specify height and type of the window's horizontal scroll bar.
 
-**** `window-scroll-bars' now returns type and sizes of horizontal scroll
+**** 'window-scroll-bars' now returns type and sizes of horizontal scroll
     bars too.
 
-**** New buffer-local variables `horizontal-scroll-bar' and
-    `scroll-bar-height'.
+**** New buffer-local variables 'horizontal-scroll-bar' and
+    'scroll-bar-height'.
 
 +++
-*** New functions `frame-geometry' and `frame-edges' give access to a
+*** New functions 'frame-geometry' and 'frame-edges' give access to a
 frame's geometry.
 
 +++
-*** New functions `mouse-absolute-pixel-position' and
-`set-mouse-absolute-pixel-position' get/set screen coordinates of the
+*** New functions 'mouse-absolute-pixel-position' and
+'set-mouse-absolute-pixel-position' get/set screen coordinates of the
 mouse cursor.
 
 +++
-*** The function `window-edges' now accepts three additional arguments to
+*** The function 'window-edges' now accepts three additional arguments to
 retrieve body, absolute and pixel edges of the window.
 
 +++
-*** The functions `window-inside-edges', `window-inside-pixel-edges' and
-`window-inside-absolute-pixel-edges' have been renamed to respectively
-`window-body-edges', `window-body-pixel-edges' and
-`window-absolute-body-pixel-edges'.  The old names are kept as aliases.
+*** The functions 'window-inside-edges', 'window-inside-pixel-edges' and
+'window-inside-absolute-pixel-edges' have been renamed to respectively
+'window-body-edges', 'window-body-pixel-edges' and
+'window-absolute-body-pixel-edges'.  The old names are kept as aliases.
 
 +++
-*** New function `window-absolute-pixel-position' to get the screen
+*** New function 'window-absolute-pixel-position' to get the screen
 coordinates of a visible buffer position.
 
 +++
@@ -1895,26 +1893,36 @@ they display when setting default font, menu bar, 
fringe width, or
 scroll bars.  In particular, maximized and fullscreen frames are
 conceptually never resized if such settings change.  For fullheight and
 fullwidth frames, the behavior may depend on the toolkit used.
-**** New option `frame-inhibit-implied-resize' if non-nil, means that
+**** New option 'frame-inhibit-implied-resize' if non-nil, means that
    setting default font, menu bar, fringe width, or scroll bars of a
    specific frame does not resize that frame in order to preserve the
    number of columns or lines it displays.
 
 +++
-*** New function `window-preserve-size' allows you to preserve the size of
-a window without "fixing" it.  It's supported by `fit-window-to-buffer',
-`temp-buffer-resize-mode' and `display-buffer'.
+*** New function 'window-preserve-size' allows you to preserve the size of
+a window without "fixing" it.  It's supported by 'fit-window-to-buffer',
+'temp-buffer-resize-mode' and 'display-buffer'.
 
 +++
-*** New `display-buffer' action function `display-buffer-use-some-frame'.
+*** New 'display-buffer' action function 'display-buffer-use-some-frame'.
 This displays the buffer in an existing frame other than the current
 frame, and allows the caller to specify a frame predicate to exclude
 frames.
 
 +++
-*** New minor mode `window-divider-mode' and options
-`window-divider-default-places', `window-divider-default-bottom-width'
-and `window-divider-default-right-width'.
+*** New minor mode 'window-divider-mode' and options
+'window-divider-default-places', 'window-divider-default-bottom-width'
+and 'window-divider-default-right-width'.
+
++++
+*** The window displaying the '*Completions*' buffer with minibuffer
+completion candidates is now shown at the bottom of the selected
+frame.  The size of that window is always as large as required to
+display all the candidates, except when limited by the minimum size
+of the other windows on that frame; those other windows are resized
+to provide space for the '*Completions*' display.  The Emacs manual
+describes how to customize 'display-buffer-alist' to get back the old
+behavior, see the node "Temporary Displays" there.
 
 ---
 ** Tearoff menus and detachable toolbars for Gtk+ have been removed.
@@ -1925,17 +1933,17 @@ Those features have been deprecated in Gtk+ for a long 
time.
 +++
 *** etags no longer qualifies class members by default.
 
-By default, `etags' will not qualify class members for Perl and C-like
+By default, 'etags' will not qualify class members for Perl and C-like
 object-oriented languages with their class names and namespaces, and
 will remove qualifications used explicitly in the code from the tag
 names it puts in TAGS files.  This is so the etags.el back-end for
-`xref-find-definitions' is more accurate and produces less false
+'xref-find-definitions' is more accurate and produces less false
 positives.
 
 Use --class-qualify (-Q) if you want the old default behavior of
 qualifying class members in C++, Java, Objective C, and Perl.  Note
-that using -Q might make some class members become "unknown" to `M-.'
-(`xref-find-definitions'); if so, you can use `C-u M-.' to specify the
+that using -Q might make some class members become "unknown" to 'M-.'
+('xref-find-definitions'); if so, you can use 'C-u M-.' to specify the
 qualified names by hand.
 
 +++
@@ -1962,7 +1970,7 @@ whitespace at line beginning.
 This includes the makefile.w32-in files in various subdirectories, and
 the support files.  The file nt/configure.bat now just tells the user
 to use the procedure described in nt/INSTALL, by running the Posix
-`configure' script in the top-level directory.
+'configure' script in the top-level directory.
 
 ---
 ** Building Emacs for MS-Windows requires at least Windows XP
@@ -1987,7 +1995,7 @@ Pass '--without-ns' to configure to create an X11 build, 
the old default.
 ** OS X on PowerPC is no longer supported.
 
 ---
-** New variable `ns-use-fullscreen-animation' controls animation for
+** New variable 'ns-use-fullscreen-animation' controls animation for
 non-native NS fullscreen.  The default is nil.  Set to t to enable
 animation when entering and leaving fullscreen.  For native OSX fullscreen
 this has no effect.
@@ -1996,7 +2004,7 @@ this has no effect.
 ** The new function 'w32-application-type' returns the type of an
 MS-Windows application given the name of its executable program file.
 
-** New variable `w32-pipe-buffer-size'.
+** New variable 'w32-pipe-buffer-size'.
 It can be used to tune the size of the buffer of pipes created for
 communicating with subprocesses, when the program run by a subprocess
 exhibits unusual buffering behavior.  Default is zero, which lets the
@@ -2021,7 +2029,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.
 
 
 Local variables:
-coding: utf-8
+coding: us-ascii
 mode: outline
 paragraph-separate: "[         ]*$"
 end:
diff --git a/etc/themes/tsdh-light-theme.el b/etc/themes/tsdh-light-theme.el
index 422b26c..9d618c5 100644
--- a/etc/themes/tsdh-light-theme.el
+++ b/etc/themes/tsdh-light-theme.el
@@ -25,9 +25,8 @@ Used and created by Tassilo Horn.")
 
 (custom-theme-set-faces
  'tsdh-light
- '(Info-quoted ((t (:weight bold))))
- '(ace-jump-face-foreground ((t (:foreground "DeepPink" :box nil :weight 
bold))))
- '(aw-leading-char-face ((t (:inherit ace-jump-face-foreground))))
+ '(Info-quoted ((t (:underline "gray40" :weight bold))))
+ '(aw-leading-char-face ((t (:background "red" :foreground "white" :weight 
bold))))
  '(default ((t (:background "white" :foreground "black"))))
  '(diff-added ((t (:inherit diff-changed :background "light green"))))
  '(diff-changed ((t (:background "light steel blue"))))
@@ -36,6 +35,8 @@ Used and created by Tassilo Horn.")
  '(diff-indicator-removed ((t (:inherit diff-indicator-changed))))
  '(diff-removed ((t (:inherit diff-changed :background "sandy brown"))))
  '(dired-directory ((t (:inherit font-lock-function-name-face :weight bold))))
+ '(font-lock-regexp-grouping-backslash ((t (:inherit bold :foreground 
"black"))))
+ '(font-lock-regexp-grouping-construct ((t (:inherit bold :foreground 
"black"))))
  '(gnus-button ((t (:inherit button))))
  '(gnus-header-name ((t (:box (:line-width 1 :style released-button) :weight 
bold))))
  '(gnus-group-mail-1 ((t (:inherit gnus-group-mail-1-empty :weight bold))))
diff --git a/lib/sys_select.in.h b/lib/sys_select.in.h
index f7b260d..9a2622f 100644
--- a/lib/sys_select.in.h
+++ b/lib/sys_select.in.h
@@ -81,8 +81,9 @@
    of 'struct timeval', and no definition of this type.
    Also, Mac OS X, AIX, HP-UX, IRIX, Solaris, Interix declare select()
    in <sys/time.h>.
-   But avoid namespace pollution on glibc systems.  */
-# ifndef __GLIBC__
+   But avoid namespace pollution on glibc systems and "unknown type
+   name" problems on Cygwin.  */
+# if !(defined __GLIBC__ || defined __CYGWIN__)
 #  include <sys/time.h>
 # endif
 
@@ -100,10 +101,11 @@
 #endif
 
 /* Get definition of 'sigset_t'.
-   But avoid namespace pollution on glibc systems.
+   But avoid namespace pollution on glibc systems and "unknown type
+   name" problems on Cygwin.
    Do this after the include_next (for the sake of OpenBSD 5.0) but before
    the split double-inclusion guard (for the sake of Solaris).  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
+#if !((defined __GLIBC__ || defined __CYGWIN__) && !defined __UCLIBC__)
 # include <signal.h>
 #endif
 
@@ -289,12 +291,15 @@ _GL_WARN_ON_USE (pselect, "pselect is not portable - "
 #   define select rpl_select
 #  endif
 _GL_FUNCDECL_RPL (select, int,
-                  (int, fd_set *, fd_set *, fd_set *, struct timeval *));
+                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
+                   struct timeval *restrict));
 _GL_CXXALIAS_RPL (select, int,
-                  (int, fd_set *, fd_set *, fd_set *, struct timeval *));
+                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
+                   struct timeval *restrict));
 # else
 _GL_CXXALIAS_SYS (select, int,
-                  (int, fd_set *, fd_set *, fd_set *, struct timeval *));
+                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
+                   struct timeval *restrict));
 # endif
 _GL_CXXALIASWARN (select);
 #elif @HAVE_WINSOCK2_H@
diff --git a/lib/time_rz.c b/lib/time_rz.c
index bc80127..55b764e 100644
--- a/lib/time_rz.c
+++ b/lib/time_rz.c
@@ -47,8 +47,6 @@ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
    used.  */
 enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) };
 
-static char const TZ[] = "TZ";
-
 /* Magic cookie timezone_t value, for local time.  It differs from
    NULL and from all other timezone_t values.  Only the address
    matters; the pointer is never dereferenced.  */
@@ -205,7 +203,7 @@ tzfree (timezone_t tz)
 static char *
 getenv_TZ (void)
 {
-  return getenv (TZ);
+  return getenv ("TZ");
 }
 #endif
 
@@ -213,7 +211,7 @@ getenv_TZ (void)
 static int
 setenv_TZ (char const *tz)
 {
-  return tz ? setenv (TZ, tz, 1) : unsetenv (TZ);
+  return tz ? setenv ("TZ", tz, 1) : unsetenv ("TZ");
 }
 #endif
 
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 24400a9..f33dd01 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -194,7 +194,7 @@ update-subdirs:
           $(srcdir)/../build-aux/update-subdirs $$file; \
        done;
 
-.PHONY: updates repo-update update-authors
+.PHONY: updates repo-update update-authors update-gnus-news
 
 # Some modes of make-dist use this.
 updates: update-subdirs autoloads finder-data custom-deps
@@ -207,12 +207,16 @@ updates: update-subdirs autoloads finder-data custom-deps
 # this directory's autoloads rule.
 repo-update: compile finder-data custom-deps
 
-# Update the AUTHORS file.
+# Update etc/AUTHORS and etc/GNUS-NEWS.
 
 update-authors:
        $(emacs) -L "$(top_srcdir)/admin" -l authors \
          -f batch-update-authors "$(top_srcdir)/etc/AUTHORS" "$(top_srcdir)"
 
+update-gnus-news:
+       $(emacs) -L "$(top_srcdir)/doc/misc" -l gnus-news -f batch-gnus-news \
+         "$(top_srcdir)/doc/misc/gnus-news.texi" \
+         "$(top_srcdir)/etc/GNUS-NEWS"
 
 ETAGS = ../lib-src/etags
 
diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el
index 94cd08e..9574c03 100644
--- a/lisp/calendar/todo-mode.el
+++ b/lisp/calendar/todo-mode.el
@@ -1414,7 +1414,12 @@ the archive of the file moved to, creating it if it does 
not exist."
        (setq todo-files (funcall todo-files-function))
        (todo-reevaluate-filelist-defcustoms))
       (dolist (buf buffers)
+        ;; Make sure archive file is in Todo Archive mode so that
+        ;; todo-categories has correct value.
        (with-current-buffer (find-file-noselect buf)
+          (when (equal (file-name-extension (buffer-file-name)) "toda")
+            (unless (derived-mode-p 'todo-archive-mode)
+              (todo-archive-mode)))
          (widen)
          (goto-char (point-max))
          (let* ((beg (re-search-backward
@@ -1466,10 +1471,18 @@ the archive of the file moved to, creating it if it 
does not exist."
                  (re-search-backward
                   (concat "^" (regexp-quote todo-category-beg)
                           "\\(" (regexp-quote cat) "\\)$") nil t)
-                 (replace-match new nil nil nil 1)))
-             (setq todo-categories
-                   (append todo-categories (list (cons (or new cat) counts))))
-             (todo-update-categories-sexp)
+                 (replace-match new nil nil nil 1))
+                (setq todo-categories
+                      (append todo-categories (list (cons (or new cat) 
counts))))
+                (goto-char (point-min))
+                (if (looking-at "((\"")
+                    ;; Delete existing sexp.
+                    (delete-region (line-beginning-position) 
(line-end-position))
+                  ;; Otherwise, file is new, so make space for categories sexp.
+                  (insert "\n")
+                  (goto-char (point-min)))
+                ;; Insert (new or updated) sexp.
+                (prin1 todo-categories (current-buffer)))
              ;; If archive was just created, save it to avoid "File
              ;; <xyz> no longer exists!" message on invoking
              ;; `todo-view-archived-items'.
@@ -1500,9 +1513,7 @@ the archive of the file moved to, creating it if it does 
not exist."
                (setq todo-category-number 1))
              (todo-category-select)))))
       (set-window-buffer (selected-window)
-                        (set-buffer (find-file-noselect nfile)))
-      (todo-category-number (or new cat))
-      (todo-category-select))))
+                        (set-buffer (find-file-noselect nfile))))))
 
 (defun todo-merge-category (&optional file)
   "Merge current category into another existing category.
diff --git a/lisp/comint.el b/lisp/comint.el
index dcd4a5a..cb79c17 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -816,6 +816,13 @@ series of processes in the same Comint buffer.  The hook
                    (format "COLUMNS=%d" (window-width)))
            (list "TERM=emacs"
                  (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width))))
+
+         ;; This hack is for backward compatibility with Bash 4.3 and
+         ;; earlier.  It can break common uses of 'configure', so
+         ;; remove it once Bash 4.4 or later is common.
+         (unless (getenv "EMACS")
+           (list "EMACS=t"))
+
          (list (format "INSIDE_EMACS=%s,comint" emacs-version))
          process-environment))
        (default-directory
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index dccaa9e..088ca81 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -816,12 +816,11 @@ If in a Dired buffer, reverts it."
   (interactive)
   (if (file-exists-p dired-local-variables-file)
       (error "Old-style dired-local-variables-file `./%s' found;
-replace it with a dir-locals-file `./%s.el'"
+replace it with a dir-locals-file `./%s'"
              dired-local-variables-file
              dir-locals-file))
-  (if (dir-locals--all-files default-directory)
-      (message "File `./%s' already exists."
-               (car (dir-locals--all-files default-directory)))
+  (if (file-exists-p dir-locals-file)
+      (message "File `./%s' already exists." dir-locals-file)
     (add-dir-local-variable 'dired-mode 'subdirs nil)
     (add-dir-local-variable 'dired-mode 'dired-omit-mode t)
     ;; Run extra-hooks and revert directory.
diff --git a/lisp/dired.el b/lisp/dired.el
index 24b128f..5741872 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -2736,9 +2736,18 @@ instead of `dired-actual-switches'."
                 (save-excursion
                   (goto-char (point-min))
                   (dired-goto-file-1 file file (point-max)))
-                ;; Otherwise, look for it as a relative name.  The
-                ;; hair is to get the result of `dired-goto-subdir'
-                ;; without calling it if we don't have any subdirs.
+                 ;; Next, look for it as a relative name with leading
+                 ;; subdirectories.  (This happens in Dired buffers
+                 ;; created by find-dired, for example.)
+                 (save-excursion
+                   (goto-char (point-min))
+                   (dired-goto-file-1 (file-relative-name file
+                                                          default-directory)
+                                      file (point-max)))
+                ;; Otherwise, look for it as a relative name, a base
+                ;; name only.  The hair is to get the result of
+                ;; `dired-goto-subdir' without calling it if we don't
+                ;; have any subdirs.
                 (save-excursion
                   (when (if (string= dir (expand-file-name default-directory))
                             (goto-char (point-min))
@@ -4428,7 +4437,7 @@ instead.
 
 ;;;***
 
-;;;### (autoloads nil "dired-x" "dired-x.el" 
"8dae922d1549647835460b6cb70af4df")
+;;;### (autoloads nil "dired-x" "dired-x.el" 
"f00ad5ec7383d017263855ad8add60a3")
 ;;; Generated autoloads from dired-x.el
 
 (autoload 'dired-jump "dired-x" "\
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index 9d912c3..223565c 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -626,7 +626,7 @@ at the bottom edge of the page moves to the next page."
            (image-bob)
            (image-bol 1))
          (set-window-hscroll (selected-window) hscroll)))
-    (image-next-line 1)))
+    (image-next-line arg)))
 
 (defun doc-view-previous-line-or-previous-page (&optional arg)
   "Scroll downward by ARG lines if possible, else goto previous page.
diff --git a/lisp/emacs-lisp/cursor-sensor.el b/lisp/emacs-lisp/cursor-sensor.el
index ac063d48..f1ab82e 100644
--- a/lisp/emacs-lisp/cursor-sensor.el
+++ b/lisp/emacs-lisp/cursor-sensor.el
@@ -113,7 +113,7 @@
            ;; non-sticky on both ends, but that means get-pos-property might
            ;; never see it.
            (new (or (get-char-property point 'cursor-sensor-functions)
-                    (unless (= point 1)
+                    (unless (bobp)
                       (get-char-property (1- point) 
'cursor-sensor-functions))))
            (old (window-parameter window 'cursor-sensor--last-state))
            (oldposmark (car old))
diff --git a/lisp/emacs-lisp/map.el b/lisp/emacs-lisp/map.el
index ec8d3d7..ba15a65 100644
--- a/lisp/emacs-lisp/map.el
+++ b/lisp/emacs-lisp/map.el
@@ -123,33 +123,26 @@ MAP can be a list, hash-table or array."
              default)))
 
 (defmacro map-put (map key value)
-  "Associate KEY with VALUE in MAP and return MAP.
+  "Associate KEY with VALUE in MAP and return VALUE.
 If KEY is already present in MAP, replace the associated value
 with VALUE.
 
 MAP can be a list, hash-table or array."
-  (macroexp-let2 nil map map
-    `(progn
-       (setf (map-elt ,map ,key) ,value)
-       ,map)))
+  `(setf (map-elt ,map ,key) ,value))
 
-(defmacro map-delete (map key)
+(defun map-delete (map key)
   "Delete KEY from MAP and return MAP.
 No error is signaled if KEY is not a key of MAP.  If MAP is an
 array, store nil at the index KEY.
 
 MAP can be a list, hash-table or array."
-  (declare (debug t))
-  (gv-letplace (mgetter msetter) `(gv-delay-error ,map)
-    (macroexp-let2 nil key key
-      `(if (not (listp ,mgetter))
-           (map--delete ,mgetter ,key)
-         ;; The alist case is special, since it can't be handled by the
-         ;; map--delete function.
-         (setf (alist-get ,key (gv-synthetic-place ,mgetter ,msetter)
-                          nil t)
-               nil)
-         ,mgetter))))
+  (map--dispatch map
+    :list (setf (alist-get key map nil t) nil)
+    :hash-table (remhash key map)
+    :array (and (>= key 0)
+                (<= key (seq-length map))
+                (aset map key nil)))
+  map)
 
 (defun map-nested-elt (map keys &optional default)
   "Traverse MAP using KEYS and return the looked up value or DEFAULT if nil.
@@ -337,15 +330,6 @@ MAP can be a list, hash-table or array."
                       (cdr pair)))
            map))
 
-(defun map--delete (map key)
-  (map--dispatch map
-    :list (error "No place to remove the mapping for %S" key)
-    :hash-table (remhash key map)
-    :array (and (>= key 0)
-                (<= key (seq-length map))
-                (aset map key nil)))
-  map)
-
 (defun map--apply-hash-table (function map)
   "Private function used to apply FUNCTION over MAP, MAP being a hash-table."
   (let (result)
diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el
index 495ba7c..1d8f0cb 100644
--- a/lisp/emacs-lisp/smie.el
+++ b/lisp/emacs-lisp/smie.el
@@ -1493,7 +1493,10 @@ should not be computed on the basis of the following 
token."
                            (let ((endpos (point)))
                              (goto-char pos)
                              (forward-line 1)
-                             (and (equal res (smie-indent-forward-token))
+                             ;; As seen in bug#22960, pos may be inside
+                             ;; a string, and forward-token may then stumble.
+                             (and (ignore-errors
+                                    (equal res (smie-indent-forward-token)))
                                   (eq (point) endpos)))))
                     nil
                   (goto-char pos)
diff --git a/lisp/forms.el b/lisp/forms.el
index c0b48fd..b068352 100644
--- a/lisp/forms.el
+++ b/lisp/forms.el
@@ -593,7 +593,7 @@ Commands:                        Equivalent keys in 
read-only mode:
         ;; set-visited-file-name from calling set-auto-mode, which
         ;; might kill all local variables and set forms-file nil,
         ;; which will then barf in find-file-noselect below.  This can
-        ;; hapen when the user sets the default major mode that is
+        ;; happen when the user sets the default major mode that is
         ;; different from the Fundamental mode.
         (let (change-major-mode-with-file-name)
           (set-visited-file-name nil))
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index f70877d..3ea63c7 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -30,6 +30,7 @@
 (autoload 'gnus-map-function "gnus-util")
 (autoload 'gnus-replace-in-string "gnus-util")
 (autoload 'gnus-read-shell-command "gnus-util")
+(autoload 'gnus-format-message "gnus-util")
 
 (autoload 'mm-inline-partial "mm-partial")
 (autoload 'mm-inline-external-body "mm-extern")
diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el
index 3ac3da0..254c427 100644
--- a/lisp/gnus/mml-sec.el
+++ b/lisp/gnus/mml-sec.el
@@ -27,6 +27,8 @@
 
 (require 'gnus-util)
 (require 'epg)
+(require 'password-cache)
+(require 'mm-encode)
 
 (autoload 'mail-strip-quoted-names "mail-utils")
 (autoload 'mml2015-sign "mml2015")
@@ -35,6 +37,7 @@
 (autoload 'mml1991-encrypt "mml1991")
 (autoload 'message-fetch-field "message")
 (autoload 'message-goto-body "message")
+(autoload 'message-options-get "message")
 (autoload 'mml-insert-tag "mml")
 (autoload 'mml-smime-sign "mml-smime")
 (autoload 'mml-smime-encrypt "mml-smime")
@@ -44,6 +47,8 @@
 (autoload 'mml-smime-verify-test "mml-smime")
 (autoload 'epa--select-keys "epa")
 
+(declare-function message-options-set "message" (symbol value))
+
 (defvar mml-sign-alist
   '(("smime"     mml-smime-sign-buffer     mml-smime-sign-query)
     ("pgp"       mml-pgp-sign-buffer       list)
@@ -110,20 +115,15 @@ details."
   :group 'message
   :type 'boolean)
 
-(defcustom mml-secure-cache-passphrase
-  (if (boundp 'password-cache)
-      password-cache
-    t)
+;; FIXME If it's "NOT recommended", why is it the default?
+(defcustom mml-secure-cache-passphrase password-cache
   "If t, cache OpenPGP or S/MIME passphrases inside Emacs.
 Passphrase caching in Emacs is NOT recommended.  Use gpg-agent instead.
 See Info node `(message) Security'."
   :group 'message
   :type 'boolean)
 
-(defcustom mml-secure-passphrase-cache-expiry
-  (if (boundp 'password-cache-expiry)
-      password-cache-expiry
-    16)
+(defcustom mml-secure-passphrase-cache-expiry password-cache-expiry
   "How many seconds the passphrase is cached.
 Whether the passphrase is cached at all is controlled by
 `mml-secure-cache-passphrase'."
diff --git a/lisp/gnus/mml-smime.el b/lisp/gnus/mml-smime.el
index 248e636..502c65b 100644
--- a/lisp/gnus/mml-smime.el
+++ b/lisp/gnus/mml-smime.el
@@ -356,10 +356,6 @@ Whether the passphrase is cached at all is controlled by
 
 (autoload 'mml-compute-boundary "mml")
 
-;; We require mm-decode, which requires mm-bodies, which autoloads
-;; message-options-get (!).
-(declare-function message-options-set "message" (symbol value))
-
 (defun mml-smime-epg-sign (cont)
   (let ((inhibit-redisplay t)
        (boundary (mml-compute-boundary cont)))
diff --git a/lisp/gnus/mml1991.el b/lisp/gnus/mml1991.el
index bb5c940..568dc56 100644
--- a/lisp/gnus/mml1991.el
+++ b/lisp/gnus/mml1991.el
@@ -25,11 +25,6 @@
 
 ;;; Code:
 
-(eval-and-compile
-  (if (locate-library "password-cache")
-      (require 'password-cache)
-    (require 'password)))
-
 (eval-when-compile
   (require 'cl)
   (require 'mm-util))
diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el
index e2e9977..61ca536 100644
--- a/lisp/gnus/mml2015.el
+++ b/lisp/gnus/mml2015.el
@@ -27,11 +27,6 @@
 
 ;;; Code:
 
-(eval-and-compile
-  (if (locate-library "password-cache")
-      (require 'password-cache)
-    (require 'password)))
-
 (eval-when-compile (require 'cl))
 (require 'mm-decode)
 (require 'mm-util)
diff --git a/lisp/isearch.el b/lisp/isearch.el
index b8ada2c..48354d3 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2574,16 +2574,30 @@ the word mode."
   (when (eq regexp-function t)
     (setq regexp-function #'word-search-regexp))
   (let ((description
-         ;; Don't use a description on the default search mode.
-         (cond ((equal regexp-function search-default-mode) "")
-               (regexp-function
-                (and (symbolp regexp-function)
-                     (or (get regexp-function 'isearch-message-prefix)
-                         "")))
-               (isearch-regexp "regexp ")
-               ;; We're in literal mode. If the default mode is not
-               ;; literal, then describe it.
-               ((functionp search-default-mode) "literal "))))
+         (cond
+          ;; 1. Do not use a description on the default search mode,
+          ;;    but only if the default search mode is non-nil.
+          ((or (and search-default-mode
+                    (equal search-default-mode regexp-function))
+               ;; Special case where `search-default-mode' is t
+               ;; (defaults to regexp searches).
+               (and (eq search-default-mode t)
+                    (eq search-default-mode isearch-regexp))) "")
+          ;; 2. Use the `isearch-message-prefix' set for
+          ;;    `regexp-function' if available.
+          (regexp-function
+           (and (symbolp regexp-function)
+                (or (get regexp-function 'isearch-message-prefix)
+                    "")))
+          ;; 3. Else if `isearch-regexp' is non-nil, set description
+          ;;    to "regexp ".
+          (isearch-regexp "regexp ")
+          ;; 4. Else if we're in literal mode (and if the default
+          ;;    mode is also not literal), describe it.
+          ((functionp search-default-mode) "literal ")
+          ;; 5. And finally, if none of the above is true, set the
+          ;;    description to an empty string.
+          (t ""))))
     (if space-before
         ;; Move space from the end to the beginning.
         (replace-regexp-in-string "\\(.*\\) \\'" " \\1" description)
diff --git a/lisp/loadup.el b/lisp/loadup.el
index bd47bed..21c64a8 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -117,6 +117,10 @@
 (load "format")
 (load "bindings")
 (load "window")  ; Needed here for `replace-buffer-in-windows'.
+;; We are now capable of resizing the mini-windows, so give the
+;; variable its advertised default value (it starts as nil, see
+;; xdisp.c).
+(setq resize-mini-windows 'grow-only)
 (setq load-source-file-function 'load-with-code-conversion)
 (load "files")
 
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 70b0f23..10ba5b3 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -4582,6 +4582,8 @@ Argument MIME is non-nil if this is a mime message."
     (list armor-start (- (point-max) after-end) mime
           armor-end-regexp)))
 
+(declare-function rmail-mime-entity-truncated "rmailmm" (entity))
+
 ;; Should this have a key-binding, or be in a menu?
 ;; There doesn't really seem to be an appropriate menu.
 ;; Eg the edit command is not in a menu either.
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 0557214..6281d7e 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -192,7 +192,7 @@
                   :enable (menu-bar-non-minibuffer-window-p)
                   :help "Read an existing file into an Emacs buffer"))
     (bindings--define-key menu [new-file]
-      '(menu-item "New File..." find-file
+      '(menu-item "Visit New File..." find-file
                   :enable (menu-bar-non-minibuffer-window-p)
                   :help "Specify a new file's name, to edit the file"))
 
diff --git a/lisp/midnight.el b/lisp/midnight.el
index 0e68eb9..878c5a7 100644
--- a/lisp/midnight.el
+++ b/lisp/midnight.el
@@ -53,8 +53,12 @@ the time when it is run.")
   "Non-nil means run `midnight-hook' at midnight."
   :global t
   :initialize #'custom-initialize-default
-  (if midnight-mode (timer-activate midnight-timer)
-    (cancel-timer midnight-timer)))
+  ;; Disable first, since the ':initialize' function above already
+  ;; starts the timer when the mode is turned on for the first time,
+  ;; via setting 'midnight-delay', which calls 'midnight-delay-set',
+  ;; which starts the timer.
+  (when (timerp midnight-timer) (cancel-timer midnight-timer))
+  (if midnight-mode (timer-activate midnight-timer)))
 
 ;;; time conversion
 
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index ecac0ae..6540059 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -1835,7 +1835,7 @@ variables.")
                 'display-buffer-below-selected))
            ,(if temp-buffer-resize-mode
                 '(window-height . resize-temp-buffer-window)
-              '(window-height . shrink-window-if-larger-than-buffer))
+              '(window-height . fit-window-to-buffer))
            ,(when temp-buffer-resize-mode
               '(preserve-size . (nil . t))))
           nil
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index e943132..2c8ff79 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -783,8 +783,13 @@ size, and full-buffer size."
         (url-expand-file-name url (concat (car base) (cadr base))))))
 
 (defun shr-ensure-newline ()
-  (unless (zerop (current-column))
-    (insert "\n")))
+  (unless (bobp)
+    (let ((prefix (get-text-property (line-beginning-position)
+                                    'shr-prefix-length)))
+      (unless (or (zerop (current-column))
+                  (and prefix
+                       (= prefix (- (point) (line-beginning-position)))))
+        (insert "\n")))))
 
 (defun shr-ensure-paragraph ()
   (unless (bobp)
@@ -812,6 +817,10 @@ size, and full-buffer size."
                                                    (line-end-position))
                       (line-end-position)))))
        (delete-region (match-beginning 0) (match-end 0)))
+       ;; We have a single blank line.
+       ((and (eolp) (bolp))
+        (insert "\n"))
+       ;; Insert new paragraph.
        (t
        (insert "\n\n"))))))
 
@@ -915,7 +924,8 @@ If EXTERNAL, browse the URL using `shr-external-browser'."
     (let ((param (match-string 4 data))
          (payload (url-unhex-string (match-string 5 data))))
       (when (string-match "^.*\\(;[ \t]*base64\\)$" param)
-       (setq payload (base64-decode-string payload)))
+       (setq payload (ignore-errors
+                        (base64-decode-string payload))))
       payload)))
 
 ;; Behind display-graphic-p test.
@@ -1206,7 +1216,7 @@ ones, in case fg and bg are nil."
   (shr-ensure-paragraph))
 
 (defun shr-tag-div (dom)
-  (shr-ensure-paragraph)
+  (shr-ensure-newline)
   (shr-generic dom)
   (shr-ensure-newline))
 
@@ -1470,6 +1480,10 @@ The preference is a float determined from 
`shr-prefer-media-type'."
   (shr-ensure-paragraph)
   (let ((shr-list-mode 'ul))
     (shr-generic dom))
+  ;; If we end on an empty <li>, then make sure we really end on a new
+  ;; paragraph.
+  (unless (bolp)
+    (insert "\n"))
   (shr-ensure-paragraph))
 
 (defun shr-tag-ol (dom)
diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el
index 7402464..12c9f41 100644
--- a/lisp/net/soap-client.el
+++ b/lisp/net/soap-client.el
@@ -538,7 +538,7 @@ This is a specialization of `soap-encode-value' for
                (base64Binary
                 (unless (stringp value)
                   (error "Not a string value for base64Binary"))
-                (base64-encode-string (encode-coding-string value 'utf-8)))
+                (base64-encode-string value))
 
                (otherwise
                 (error "Don't know how to encode %s for type %s"
@@ -682,7 +682,7 @@ This is a specialization of `soap-decode-type' for
                decimal byte float double duration)
          (string-to-number (car contents)))
         (boolean (string= (downcase (car contents)) "true"))
-        (base64Binary (decode-coding-string (base64-decode-string (car 
contents)) 'utf-8))
+        (base64Binary (base64-decode-string (car contents)))
         (anyType (soap-decode-any-type node))
         (Array (soap-decode-array node))))))
 
@@ -3096,7 +3096,11 @@ the SOAP request.
 NOTE: The SOAP service provider should document the available
 operations and their parameters for the service.  You can also
 use the `soap-inspect' function to browse the available
-operations in a WSDL document."
+operations in a WSDL document.
+
+NOTE: `soap-invoke' base64-decodes xsd:base64Binary return values
+into unibyte strings; these byte-strings require further
+interpretation by the caller."
   (apply #'soap-invoke-internal nil nil wsdl service operation-name 
parameters))
 
 (defun soap-invoke-async (callback cbargs wsdl service operation-name
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 1f43747..9fa4610 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -520,6 +520,7 @@ as given in your `~/.profile'."
 (defcustom tramp-remote-process-environment
   `("TMOUT=0" "LC_CTYPE=''"
     ,(format "TERM=%s" tramp-terminal-type)
+    "EMACS=t" ;; Deprecated; remove this line once Bash 4.4-or-later is common.
     ,(format "INSIDE_EMACS='%s,tramp:%s'" emacs-version tramp-version)
     "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH=" "PAGER=cat"
     "autocorrect=" "correct=")
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index 3b9f44e..f458904 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -1407,7 +1407,7 @@ been put there by c-put-char-property.  POINT remains 
unchanged."
         (c-state-cache-good-pos c-state-cache-good-pos)
         ;(c-state-nonlit-pos-cache (copy-tree c-state-nonlit-pos-cache))
         ;(c-state-nonlit-pos-cache-limit c-state-nonlit-pos-cache-limit)
-        ;(c-state-semi-nonlit-pos-cache (copy-treec 
c-state-semi-nonlit-pos-cache))
+        ;(c-state-semi-nonlit-pos-cache (copy-tree 
c-state-semi-nonlit-pos-cache))
         ;(c-state-semi-nonlit-pos-cache-limit c-state-semi-nonlit-pos-cache)
         (c-state-brace-pair-desert (copy-tree c-state-brace-pair-desert))
         (c-state-point-min c-state-point-min)
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index b7ab408..0b15a28 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1702,6 +1702,14 @@ Returns the compilation buffer created."
                (list "TERM=emacs"
                      (format "TERMCAP=emacs:co#%d:tc=unknown:"
                              (window-width))))
+
+             ;; Set the EMACS variable, but
+             ;; don't override users' setting of $EMACS.
+             ;; Remove this hack once Bash 4.4-or-later is common,
+             ;; since it can break 'configure'.
+             (unless (getenv "EMACS")
+               (list "EMACS=t"))
+
              (list (format "INSIDE_EMACS=%s,compile" emacs-version))
              (copy-sequence process-environment))))
        (set (make-local-variable 'compilation-arguments)
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 9e175a2..fc4501d 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -575,7 +575,7 @@ It can be quoted, or be inside a quoted form."
                                        " " (cadr table-etc)))
                     (cddr table-etc)))))))))
 
-(defun lisp-completion-at-point (_predicate)
+(defun lisp-completion-at-point (&optional _predicate)
   (declare (obsolete elisp-completion-at-point "25.1"))
   (elisp-completion-at-point))
 
diff --git a/lisp/progmodes/idlw-toolbar.el b/lisp/progmodes/idlw-toolbar.el
index 0e0714e..d857bfd 100644
--- a/lisp/progmodes/idlw-toolbar.el
+++ b/lisp/progmodes/idlw-toolbar.el
@@ -439,7 +439,7 @@ static char * file[] = {
 \"                            \",
 \"                            \",
 \"                            \"};")
-  "The Cont icon.")      
+  "The Cont icon.")
 
 (defvar idlwave-toolbar-to-here-icon
   (idlwave-toolbar-make-button
@@ -918,7 +918,7 @@ static char * file[] = {
                     (help (aref x 3))
                     (key (vector 'tool-bar func))
                     (def (list 'menu-item
-                               "a"
+                               ""
                                func
                                :image (symbol-value icon)
                                :visible show
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index 718b339..3f25a0c 100644
--- a/lisp/progmodes/prog-mode.el
+++ b/lisp/progmodes/prog-mode.el
@@ -49,53 +49,6 @@
     map)
   "Keymap used for programming modes.")
 
-(defvar prog-indentation-context nil
-  "When non-nil, provides context for indenting embedded code chunks.
-
-There are languages where part of the code is actually written in
-a sub language, e.g., a Yacc/Bison or ANTLR grammar also consists
-of plain C code.  This variable enables the major mode of the
-main language to use the indentation engine of the sub-mode for
-lines in code chunks written in the sub-mode's language.
-
-When a major mode of such a main language decides to delegate the
-indentation of a line/region to the indentation engine of the sub
-mode, it should bind this variable to non-nil around the call.
-
-The non-nil value should be a list of the form:
-
-   (FIRST-COLUMN (START . END) PREVIOUS-CHUNKS)
-
-FIRST-COLUMN is the column the indentation engine of the sub-mode
-should use for top-level language constructs inside the code
-chunk (instead of 0).
-
-START and END specify the region of the code chunk.  END can be
-nil, which stands for the value of `point-max'.  The function
-`prog-widen' uses this to restore restrictions imposed by the
-sub-mode's indentation engine.
-
-PREVIOUS-CHUNKS, if non-nil, provides the indentation engine of
-the sub-mode with the virtual context of the code chunk.  Valid
-values are:
-
- - A string containing text which the indentation engine can
-   consider as standing in front of the code chunk.  To cache the
-   string's calculated syntactic information for repeated calls
-   with the same string, the sub-mode can add text-properties to
-   the string.
-
-   A typical use case is for grammars with code chunks which are
-   to be indented like function bodies -- the string would contain
-   the corresponding function preamble.
-
- - A function, to be called with the start position of the current
-   chunk.  It should return either the region of the previous chunk
-   as (PREV-START . PREV-END), or nil if there is no previous chunk.
-
-   A typical use case are literate programming sources -- the
-   function would successively return the previous code chunks.")
-
 (defun prog-indent-sexp (&optional defun)
   "Indent the expression after point.
 When interactively called with prefix, indent the enclosing defun
@@ -109,27 +62,6 @@ instead."
          (end (progn (forward-sexp 1) (point))))
       (indent-region start end nil))))
 
-(defun prog-first-column ()
-  "Return the indentation column normally used for top-level constructs."
-  (or (car prog-indentation-context) 0))
-
-(defun prog-widen ()
-  "Remove restrictions (narrowing) from current code chunk or buffer.
-This function should be used instead of `widen' in any function used
-by the indentation engine to make it respect the value of
-`prog-indentation-context'.
-
-This function (like `widen') is useful inside a
-`save-restriction' to make the indentation correctly work when
-narrowing is in effect."
-  (let ((chunk (cadr prog-indentation-context)))
-    (if chunk
-        ;; No call to `widen' is necessary here, as narrow-to-region
-        ;; changes (not just narrows) the existing restrictions
-        (narrow-to-region (car chunk) (or (cdr chunk) (point-max)))
-      (widen))))
-
-
 (defvar-local prettify-symbols-alist nil
   "Alist of symbol prettifications.
 Each element looks like (SYMBOL . CHARACTER), where the symbol
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 5aeefe4..90097df 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -283,18 +283,6 @@
   :version "24.3"
   :link '(emacs-commentary-link "python"))
 
-
-;;; 24.x Compat
-
-
-(unless (fboundp 'prog-widen)
-  (defun prog-widen ()
-    (widen)))
-
-(unless (fboundp 'prog-first-column)
-  (defun prog-first-column ()
-    0))
-
 
 ;;; Bindings
 
@@ -761,7 +749,7 @@ work on `python-indent-calculate-indentation' instead."
   (interactive)
   (save-excursion
     (save-restriction
-      (prog-widen)
+      (widen)
       (goto-char (point-min))
       (let ((block-end))
         (while (and (not block-end)
@@ -860,7 +848,7 @@ keyword
  - Point is on a line starting a dedenter block.
  - START is the position where the dedenter block starts."
   (save-restriction
-    (prog-widen)
+    (widen)
     (let ((ppss (save-excursion
                   (beginning-of-line)
                   (syntax-ppss))))
@@ -1007,10 +995,10 @@ current context or a list of integers.  The latter case 
is only
 happening for :at-dedenter-block-start context since the
 possibilities can be narrowed to specific indentation points."
   (save-restriction
-    (prog-widen)
+    (widen)
     (save-excursion
       (pcase (python-indent-context)
-        (`(:no-indent . ,_) (prog-first-column)) ; usually 0
+        (`(:no-indent . ,_) 0)
         (`(,(or :after-line
                 :after-comment
                 :inside-string
@@ -1048,7 +1036,7 @@ possibilities can be narrowed to specific indentation 
points."
          (let ((opening-block-start-points
                 (python-info-dedenter-opening-block-positions)))
            (if (not opening-block-start-points)
-               (prog-first-column) ; if not found default to first column
+               0  ; if not found default to first column
              (mapcar (lambda (pos)
                        (save-excursion
                          (goto-char pos)
@@ -1066,7 +1054,7 @@ integers.  Levels are returned in ascending order, and in 
the
 case INDENTATION is a list, this order is enforced."
   (if (listp indentation)
       (sort (copy-sequence indentation) #'<)
-    (nconc (number-sequence (prog-first-column) (1- indentation)
+    (nconc (number-sequence 0 (1- indentation)
                             python-indent-offset)
            (list indentation))))
 
@@ -1091,7 +1079,7 @@ minimum."
         (python-indent--previous-level levels (current-indentation))
       (if levels
           (apply #'max levels)
-        (prog-first-column)))))
+        0))))
 
 (defun python-indent-line (&optional previous)
   "Internal implementation of `python-indent-line-function'.
@@ -4479,7 +4467,7 @@ Optional argument INCLUDE-TYPE indicates to include the 
type of the defun.
 This function can be used as the value of `add-log-current-defun-function'
 since it returns nil if point is not inside a defun."
   (save-restriction
-    (prog-widen)
+    (widen)
     (save-excursion
       (end-of-line 1)
       (let ((names)
@@ -4662,7 +4650,7 @@ likely an invalid python file."
   (let ((point (python-info-dedenter-opening-block-position)))
     (when point
       (save-restriction
-        (prog-widen)
+        (widen)
         (message "Closes %s" (save-excursion
                                (goto-char point)
                                (buffer-substring
@@ -4683,7 +4671,7 @@ statement."
 With optional argument LINE-NUMBER, check that line instead."
   (save-excursion
     (save-restriction
-      (prog-widen)
+      (widen)
       (when line-number
         (python-util-goto-line line-number))
       (while (and (not (eobp))
@@ -4699,7 +4687,7 @@ With optional argument LINE-NUMBER, check that line 
instead."
 Optional argument LINE-NUMBER forces the line number to check against."
   (save-excursion
     (save-restriction
-      (prog-widen)
+      (widen)
       (when line-number
         (python-util-goto-line line-number))
       (when (python-info-line-ends-backslash-p)
@@ -4716,7 +4704,7 @@ When current line is continuation of another return the 
point
 where the continued line ends."
   (save-excursion
     (save-restriction
-      (prog-widen)
+      (widen)
       (let* ((context-type (progn
                              (back-to-indentation)
                              (python-syntax-context-type)))
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 36c1aed..972bf99 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -368,7 +368,7 @@ It is used when `ruby-encoding-magic-comment-style' is set 
to `custom'."
        (exp  (exp1) (exp "," exp) (exp "=" exp)
              (id " @ " exp))
        (exp1 (exp2) (exp2 "?" exp1 ":" exp1))
-       (exp2 (exp3) (exp3 "." exp2))
+       (exp2 (exp3) (exp3 "." exp3))
        (exp3 ("def" insts "end")
              ("begin" insts-rescue-insts "end")
              ("do" insts "end")
@@ -388,7 +388,7 @@ It is used when `ruby-encoding-magic-comment-style' is set 
to `custom'."
        (cases (exp "then" insts)
               (cases "when" cases) (insts "else" insts))
        (expseq (exp) );;(expseq "," expseq)
-       (hashvals (id "=>" exp1) (hashvals "," hashvals))
+       (hashvals (exp1 "=>" exp1) (hashvals "," hashvals))
        (insts-rescue-insts (insts)
                            (insts-rescue-insts "rescue" insts-rescue-insts)
                            (insts-rescue-insts "ensure" insts-rescue-insts))
@@ -406,17 +406,18 @@ It is used when `ruby-encoding-magic-comment-style' is 
set to `custom'."
      '((right "=")
        (right "+=" "-=" "*=" "/=" "%=" "**=" "&=" "|=" "^="
               "<<=" ">>=" "&&=" "||=")
-       (left ".." "...")
-       (left "+" "-")
-       (left "*" "/" "%" "**")
+       (nonassoc ".." "...")
        (left "&&" "||")
-       (left "^" "&" "|")
        (nonassoc "<=>")
-       (nonassoc ">" ">=" "<" "<=")
        (nonassoc "==" "===" "!=")
        (nonassoc "=~" "!~")
+       (nonassoc ">" ">=" "<" "<=")
+       (left "^" "&" "|")
        (left "<<" ">>")
-       (right "."))))))
+       (left "+" "-")
+       (left "*" "/" "%")
+       (left "**")
+       (assoc "."))))))
 
 (defun ruby-smie--bosp ()
   (save-excursion (skip-chars-backward " \t")
@@ -443,7 +444,7 @@ It is used when `ruby-encoding-magic-comment-style' is set 
to `custom'."
                   (member (save-excursion (ruby-smie--backward-token))
                           '("iuwu-mod" "and" "or")))
              (save-excursion
-               (forward-comment 1)
+               (forward-comment (point-max))
                (looking-at "&?\\."))))))
 
 (defun ruby-smie--redundant-do-p (&optional skip)
@@ -629,19 +630,13 @@ It is used when `ruby-encoding-magic-comment-style' is 
set to `custom'."
         ;; because when `.' is inside the line, the
         ;; additional indentation from it looks out of place.
         ((smie-rule-parent-p ".")
-         (let (smie--parent)
-           (save-excursion
-             ;; Traverse up the parents until the parent is "." at
-             ;; indentation, or any other token.
-             (while (and (let ((parent (smie-indent--parent)))
-                           (goto-char (cadr parent))
-                           (save-excursion
-                             (unless (integerp (car parent)) (forward-char -1))
-                             (not (ruby-smie--bosp))))
-                         (progn
-                           (setq smie--parent nil)
-                           (smie-rule-parent-p "."))))
-             (smie-rule-parent))))
+         ;; Traverse up the call chain until the parent is not `.',
+         ;; or `.' at indentation, or at eol.
+         (while (and (not (ruby-smie--bosp))
+                     (equal (nth 2 (smie-backward-sexp ".")) ".")
+                     (not (ruby-smie--bosp)))
+           (forward-char -1))
+         (smie-indent-virtual))
         (t (smie-rule-parent))))))
     (`(:after . ,(or `"(" "[" "{"))
      ;; FIXME: Shouldn't this be the default behavior of
@@ -661,7 +656,9 @@ It is used when `ruby-encoding-magic-comment-style' is set 
to `custom'."
     (`(:before . ".")
      (if (smie-rule-sibling-p)
          (and ruby-align-chained-calls 0)
-       ruby-indent-level))
+       (smie-backward-sexp ".")
+       (cons 'column (+ (current-column)
+                        ruby-indent-level))))
     (`(:before . ,(or `"else" `"then" `"elsif" `"rescue" `"ensure"))
      (smie-rule-parent))
     (`(:before . "when")
@@ -1377,7 +1374,7 @@ delimiter."
       (goto-char ruby-indent-point)
       (beginning-of-line)
       (skip-syntax-forward " ")
-      (if (looking-at "\\.[^.]")
+      (if (looking-at "\\.[^.]\\|&\\.")
           (+ indent ruby-indent-level)
         indent))))
 
@@ -2176,7 +2173,7 @@ See `font-lock-syntax-table'.")
           'font-lock-string-face)))
     ;; Perl-ish keywords.
     "\\_<\\(?:BEGIN\\|END\\)\\_>\\|^__END__$"
-    ;; Variables.
+    ;; Singleton objects.
     (,(concat ruby-font-lock-keyword-beg-re
               "\\_<\\(nil\\|true\\|false\\)\\_>")
      1 font-lock-constant-face)
@@ -2184,7 +2181,7 @@ See `font-lock-syntax-table'.")
     ("\\_<__\\(?:LINE\\|ENCODING\\|FILE\\)__\\_>"
      (0 font-lock-builtin-face))
     ;; Symbols.
-    ("\\(^\\|[^:]\\)\\(:@?\\(?:\\w\\|_\\)+\\)\\([!?=]\\)?"
+    ("\\(^\\|[^:]\\)\\(:@\\{0,2\\}\\(?:\\sw\\|\\s_\\)+\\)"
      (2 font-lock-constant-face)
      (3 (unless (and (eq (char-before (match-end 3)) ?=)
                      (eq (char-after (match-end 3)) ?>))
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 69e6a15..feed0fb 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -436,6 +436,8 @@ If SELECT is non-nil, select the target window."
 ;;; XREF buffer (part of the UI)
 
 ;; The xref buffer is used to display a set of xrefs.
+(defconst xref-buffer-name "*xref*"
+  "The name of the buffer to show xrefs.")
 
 (defmacro xref--with-dedicated-window (&rest body)
   `(let* ((xref-w (get-buffer-window xref-buffer-name))
@@ -470,6 +472,9 @@ If SELECT is non-nil, select the target window."
         (xref--show-pos-in-buf marker buf select))
     (user-error (message (error-message-string err)))))
 
+(defvar-local xref--window nil
+  "The original window this xref buffer was created from.")
+
 (defun xref-show-location-at-point ()
   "Display the source of xref at point in the appropriate window, if any."
   (interactive)
@@ -500,9 +505,6 @@ If SELECT is non-nil, select the target window."
     (back-to-indentation)
     (get-text-property (point) 'xref-item)))
 
-(defvar-local xref--window nil
-  "The original window this xref buffer was created from.")
-
 (defun xref-goto-xref ()
   "Jump to the xref on the current line and select its window."
   (interactive)
@@ -624,9 +626,6 @@ references displayed in the current *xref* buffer."
           (t
            (error "No %s xref" (if backward "previous" "next"))))))
 
-(defconst xref-buffer-name "*xref*"
-  "The name of the buffer to show xrefs.")
-
 (defvar xref--button-map
   (let ((map (make-sparse-keymap)))
     (define-key map [(control ?m)] #'xref-goto-xref)
diff --git a/lisp/replace.el b/lisp/replace.el
index 2c3aa9b..a2344d9 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -167,8 +167,6 @@ wants to replace FROM with TO."
     ;; unavailable while preparing to dump.
     (custom-reevaluate-setting 'query-replace-from-to-separator)
     (let* ((history-add-new-input nil)
-          (text-property-default-nonsticky
-           (cons '(separator . t) text-property-default-nonsticky))
           (separator
            (when query-replace-from-to-separator
              (propertize "\0"
@@ -193,11 +191,18 @@ wants to replace FROM with TO."
            ;; a region in order to specify the minibuffer input.
            ;; That should not clobber the region for the query-replace itself.
            (save-excursion
-             (if regexp-flag
-                 (read-regexp prompt nil 'query-replace-from-to-history)
-               (read-from-minibuffer
-                prompt nil nil nil 'query-replace-from-to-history
-                (car (if regexp-flag regexp-search-ring search-ring)) t))))
+              ;; The `with-current-buffer' ensures that the binding
+              ;; for `text-property-default-nonsticky' isn't a buffer
+              ;; local binding in the current buffer, which
+              ;; `read-from-minibuffer' wouldn't see.
+              (with-current-buffer (window-buffer (minibuffer-window))
+                (let ((text-property-default-nonsticky
+                       (cons '(separator . t) 
text-property-default-nonsticky)))
+                  (if regexp-flag
+                      (read-regexp prompt nil 'query-replace-from-to-history)
+                    (read-from-minibuffer
+                     prompt nil nil nil 'query-replace-from-to-history
+                     (car (if regexp-flag regexp-search-ring search-ring)) 
t))))))
            (to))
       (if (and (zerop (length from)) query-replace-defaults)
          (cons (caar query-replace-defaults)
@@ -293,7 +298,8 @@ As each match is found, the user must type a character 
saying
 what to do with it.  For directions, type \\[help-command] at that time.
 
 In Transient Mark mode, if the mark is active, operate on the contents
-of the region.  Otherwise, operate from point to the end of the buffer.
+of the region.  Otherwise, operate from point to the end of the buffer's
+accessible portion.
 
 Use \\<minibuffer-local-map>\\[next-history-element] \
 to pull the last incremental search string to the minibuffer
@@ -355,7 +361,8 @@ As each match is found, the user must type a character 
saying
 what to do with it.  For directions, type \\[help-command] at that time.
 
 In Transient Mark mode, if the mark is active, operate on the contents
-of the region.  Otherwise, operate from point to the end of the buffer.
+of the region.  Otherwise, operate from point to the end of the buffer's
+accessible portion.
 
 Use \\<minibuffer-local-map>\\[next-history-element] \
 to pull the last incremental search regexp to the minibuffer
@@ -452,7 +459,8 @@ Use `\\#&' or `\\#N' if you want a number instead of a 
string.
 In interactive use, `\\#' in itself stands for `replace-count'.
 
 In Transient Mark mode, if the mark is active, operate on the contents
-of the region.  Otherwise, operate from point to the end of the buffer.
+of the region.  Otherwise, operate from point to the end of the buffer's
+accessible portion.
 
 Use \\<minibuffer-local-map>\\[next-history-element] \
 to pull the last incremental search regexp to the minibuffer
@@ -507,7 +515,8 @@ each successive replacement uses the next successive 
replacement string,
 wrapping around from the last such string to the first.
 
 In Transient Mark mode, if the mark is active, operate on the contents
-of the region.  Otherwise, operate from point to the end of the buffer.
+of the region.  Otherwise, operate from point to the end of the buffer's
+accessible portion.
 
 Non-interactively, TO-STRINGS may be a list of replacement strings.
 
@@ -573,7 +582,7 @@ replace backward.
 Operates on the region between START and END (if both are nil, from point
 to the end of the buffer).  Interactively, if Transient Mark mode is
 enabled and the mark is active, operates on the contents of the region;
-otherwise from point to the end of the buffer.
+otherwise from point to the end of the buffer's accessible portion.
 
 Use \\<minibuffer-local-map>\\[next-history-element] \
 to pull the last incremental search string to the minibuffer
@@ -620,7 +629,8 @@ regexp in `search-whitespace-regexp'.
 This function is not affected by `replace-character-fold'
 
 In Transient Mark mode, if the mark is active, operate on the contents
-of the region.  Otherwise, operate from point to the end of the buffer.
+of the region.  Otherwise, operate from point to the end of the buffer's
+accessible portion.
 
 Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
 only matches surrounded by word boundaries.  A negative prefix arg means
diff --git a/lisp/simple.el b/lisp/simple.el
index 84a1919..2a81ee7 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -408,15 +408,19 @@ A non-nil INTERACTIVE argument means to run the 
`post-self-insert-hook'."
          (last-command-event ?\n)
          ;; Don't auto-fill if we have a numeric argument.
          (auto-fill-function (if arg nil auto-fill-function))
+         (arg (prefix-numeric-value arg))
          (postproc
           ;; Do the rest in post-self-insert-hook, because we want to do it
           ;; *before* other functions on that hook.
           (lambda ()
-            (cl-assert (eq ?\n (char-before)))
+            ;; We are not going to insert any newlines if arg is
+            ;; non-positive.
+            (or (and (numberp arg) (<= arg 0))
+                (cl-assert (eq ?\n (char-before))))
             ;; Mark the newline(s) `hard'.
             (if use-hard-newlines
                 (set-hard-newline-properties
-                 (- (point) (prefix-numeric-value arg)) (point)))
+                 (- (point) arg) (point)))
             ;; If the newline leaves the previous line blank, and we
             ;; have a left margin, delete that from the blank line.
             (save-excursion
@@ -433,19 +437,21 @@ A non-nil INTERACTIVE argument means to run the 
`post-self-insert-hook'."
                 (move-to-left-margin nil t)))))
     (unwind-protect
         (if (not interactive)
-        ;; FIXME: For non-interactive uses, many calls actually just want
-        ;; (insert "\n"), so maybe we should do just that, so as to avoid
-        ;; the risk of filling or running abbrevs unexpectedly.
-        (let ((post-self-insert-hook (list postproc)))
-          (self-insert-command (prefix-numeric-value arg)))
-      (unwind-protect
-          (progn
-            (add-hook 'post-self-insert-hook postproc nil t)
-            (self-insert-command (prefix-numeric-value arg)))
-        ;; We first used let-binding to protect the hook, but that was naive
-        ;; since add-hook affects the symbol-default value of the variable,
-        ;; whereas the let-binding might only protect the buffer-local value.
-        (remove-hook 'post-self-insert-hook postproc t)))
+            ;; FIXME: For non-interactive uses, many calls actually
+            ;; just want (insert "\n"), so maybe we should do just
+            ;; that, so as to avoid the risk of filling or running
+            ;; abbrevs unexpectedly.
+            (let ((post-self-insert-hook (list postproc)))
+              (self-insert-command arg))
+          (unwind-protect
+              (progn
+                (add-hook 'post-self-insert-hook postproc nil t)
+                (self-insert-command arg))
+            ;; We first used let-binding to protect the hook, but that
+            ;; was naive since add-hook affects the symbol-default
+            ;; value of the variable, whereas the let-binding might
+            ;; only protect the buffer-local value.
+            (remove-hook 'post-self-insert-hook postproc t)))
       (cl-assert (not (member postproc post-self-insert-hook)))
       (cl-assert (not (member postproc (default-value 
'post-self-insert-hook))))))
   nil)
diff --git a/lisp/startup.el b/lisp/startup.el
index a411891..536289c 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1890,10 +1890,12 @@ we put it on this frame."
       (when frame
        (let* ((img (create-image (fancy-splash-image-file)))
               (image-height (and img (cdr (image-size img nil frame))))
-              ;; We test frame-height so that, if the frame is split
-              ;; by displaying a warning, that doesn't cause the normal
-              ;; splash screen to be used.
-              (frame-height (1- (frame-height frame))))
+              ;; We test frame-height and not window-height so that,
+              ;; if the frame is split by displaying a warning, that
+              ;; doesn't cause the normal splash screen to be used.
+              ;; We subtract 2 from frame-height to account for the
+              ;; echo area and the mode line.
+              (frame-height (- (frame-height frame) 2)))
          (> frame-height (+ image-height 19)))))))
 
 
@@ -1998,7 +2000,7 @@ To quit a partially entered command, type Control-g.\n")
   (insert "  How to order printed manuals from the FSF\n")
 
   (insert "\nUseful tasks:\n")
-  (insert-button "New File"
+  (insert-button "Visit New File"
                 'action (lambda (_button) (call-interactively 'find-file))
                 'follow-link t)
   (insert (substitute-command-keys
@@ -2075,7 +2077,7 @@ If you have no Meta key, you may instead type ESC 
followed by the character.)"))
   ;; Insert links to useful tasks
   (insert "\nUseful tasks:\n")
 
-  (insert-button "New File"
+  (insert-button "Visit New File"
                 'action (lambda (_button) (call-interactively 'find-file))
                 'follow-link t)
   (insert "\t\t\t")
diff --git a/lisp/term.el b/lisp/term.el
index a2e01ed..6fd3a5e 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -1454,6 +1454,13 @@ Using \"emacs\" loses, because bash disables editing if 
$TERM == emacs.")
           (format "TERMINFO=%s" data-directory)
           (format term-termcap-format "TERMCAP="
                   term-term-name term-height term-width)
+
+          ;; This is for backwards compatibility with Bash 4.3 and earlier.
+          ;; Remove this hack once Bash 4.4-or-later is common, because
+          ;; it breaks './configure' of some packages that expect it to
+          ;; say where to find EMACS.
+          (format "EMACS=%s (term:%s)" emacs-version term-protocol-version)
+
           (format "INSIDE_EMACS=%s,term:%s" emacs-version 
term-protocol-version)
           (format "LINES=%d" term-height)
           (format "COLUMNS=%d" term-width))
diff --git a/lisp/xml.el b/lisp/xml.el
index 1802d04..414300c 100644
--- a/lisp/xml.el
+++ b/lisp/xml.el
@@ -580,7 +580,7 @@ Return one of:
       ;; However, if we're parsing incrementally, then we need to deal
       ;; with stray CDATA.
       (let ((s (xml-parse-string)))
-        (when (string-empty-p s)
+        (when (zerop (length s))
           ;; We haven't consumed any input! We must throw an error in
           ;; order to prevent looping forever.
           (error "XML: (Not Well-Formed) Could not parse: %s"
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index 5975e60..e520957 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -134,23 +134,35 @@ http://invisible-island.net/xterm/ctlseqs/ctlseqs.html)."
             (fdiff (- f (* 1.0 maxwrap dbig))))
        (+ (truncate fdiff) (* maxwrap dbig))))))
 
-(defun xterm-mouse--read-utf8-char (&optional prompt seconds)
-  "Read an utf-8 encoded character from the current terminal.
-This function reads and returns an utf-8 encoded character of
-command input. If the user generates an event which is not a
-character (i.e., a mouse click or function key event), read-char
-signals an error.
-
-The returned event may come directly from the user, or from a
-keyboard macro. It is not decoded by the keyboard's input coding
-system and always treated with an utf-8 input encoding.
-
-The optional arguments PROMPT and SECONDS work like in
-`read-event'."
-  (let ((tmp (keyboard-coding-system)))
-    (set-keyboard-coding-system 'utf-8)
-    (prog1 (read-event prompt t seconds)
-      (set-keyboard-coding-system tmp))))
+(defcustom xterm-mouse-utf-8 nil
+  "Non-nil if UTF-8 coordinates should be used to read mouse coordinates.
+Set this to non-nil if you are sure that your terminal
+understands UTF-8 coordinates, but not SGR coordinates."
+  :version "25.1"
+  :type 'boolean
+  :risky t
+  :group 'xterm)
+
+(defun xterm-mouse--read-coordinate ()
+  "Read a mouse coordinate from the current terminal.
+If `xterm-mouse-utf-8' was non-nil when
+`turn-on-xterm-mouse-tracking-on-terminal' was called, reads the
+coordinate as an UTF-8 code unit sequence; otherwise, reads a
+single byte."
+  (let ((previous-keyboard-coding-system (keyboard-coding-system)))
+    (unwind-protect
+        (progn
+          (set-keyboard-coding-system
+           (if (terminal-parameter nil 'xterm-mouse-utf-8)
+               'utf-8-unix
+             ;; Use Latin-1 instead of no-conversion to avoid flicker
+             ;; due to `set-keyboard-coding-system' changing the meta
+             ;; mode.
+             'latin-1))
+          ;; Wait only a little; we assume that the entire escape sequence
+          ;; has already been sent when this function is called.
+          (read-char nil nil 0.1))
+      (set-keyboard-coding-system previous-keyboard-coding-system))))
 
 ;; In default mode, each numeric parameter of XTerm's mouse report is
 ;; a single char, possibly encoded as utf-8.  The actual numeric
@@ -170,7 +182,7 @@ The optional arguments PROMPT and SECONDS work like in
                    (<= ?0 c ?9))
             (setq n (+ (* 10 n) c (- ?0))))
           (cons n c))
-      (cons (- (setq c (xterm-mouse--read-utf8-char)) 32) c))))
+      (cons (- (setq c (xterm-mouse--read-coordinate)) 32) c))))
 
 ;; XTerm reports mouse events as
 ;; <EVENT-CODE> <X> <Y> in default mode, and
@@ -314,6 +326,38 @@ down the SHIFT key while pressing the mouse button."
     (mapc #'turn-off-xterm-mouse-tracking-on-terminal (terminal-list))
     (setq mouse-position-function nil)))
 
+(defun xterm-mouse-tracking-enable-sequence ()
+  "Return a control sequence to enable XTerm mouse tracking.
+The returned control sequence enables basic mouse tracking, mouse
+motion events and finally extended tracking on terminals that
+support it.  The following escape sequences are understood by
+modern xterms:
+
+\"\\e[?1000h\" \"Basic mouse mode\": Enables reports for mouse
+            clicks.  There is a limit to the maximum row/column
+            position (<= 223), which can be reported in this
+            basic mode.
+
+\"\\e[?1002h\" \"Mouse motion mode\": Enables reports for mouse
+            motion events during dragging operations.
+
+\"\\e[?1005h\" \"UTF-8 coordinate extension\": Enables an
+            extension to the basic mouse mode, which uses UTF-8
+            characters to overcome the 223 row/column limit.
+            This extension may conflict with non UTF-8
+            applications or non UTF-8 locales.  It is only
+            enabled when the option `xterm-mouse-utf-8' is
+            non-nil.
+
+\"\\e[?1006h\" \"SGR coordinate extension\": Enables a newer
+            alternative extension to the basic mouse mode, which
+            overcomes the 223 row/column limit without the
+            drawbacks of the UTF-8 coordinate extension.
+
+The two extension modes are mutually exclusive, where the last
+given escape sequence takes precedence over the former."
+  (apply #'concat (xterm-mouse--tracking-sequence ?h)))
+
 (defconst xterm-mouse-tracking-enable-sequence
   "\e[?1000h\e[?1002h\e[?1005h\e[?1006h"
   "Control sequence to enable xterm mouse tracking.
@@ -343,10 +387,34 @@ escape sequences are understood by modern xterms:
 The two extension modes are mutually exclusive, where the last
 given escape sequence takes precedence over the former.")
 
+(make-obsolete-variable
+ 'xterm-mouse-tracking-enable-sequence
+ "use the function `xterm-mouse-tracking-enable-sequence' instead."
+ "25.1")
+
+(defun xterm-mouse-tracking-disable-sequence ()
+  "Return a control sequence to disable XTerm mouse tracking.
+The control sequence resets the modes set by
+`xterm-mouse-tracking-enable-sequence'."
+  (apply #'concat (nreverse (xterm-mouse--tracking-sequence ?l))))
+
 (defconst xterm-mouse-tracking-disable-sequence
   "\e[?1006l\e[?1005l\e[?1002l\e[?1000l"
   "Reset the modes set by `xterm-mouse-tracking-enable-sequence'.")
 
+(make-obsolete-variable
+ 'xterm-mouse-tracking-disable-sequence
+ "use the function `xterm-mouse-tracking-disable-sequence' instead."
+ "25.1")
+
+(defun xterm-mouse--tracking-sequence (suffix)
+  "Return a control sequence to enable or disable mouse tracking.
+SUFFIX is the last character of each escape sequence (?h to
+enable, ?l to disable)."
+  (mapcar
+   (lambda (code) (format "\e[?%d%c" code suffix))
+   `(1000 1002 ,@(when xterm-mouse-utf-8 '(1005)) 1006)))
+
 (defun turn-on-xterm-mouse-tracking-on-terminal (&optional terminal)
   "Enable xterm mouse tracking on TERMINAL."
   (when (and xterm-mouse-mode (eq t (terminal-live-p terminal))
@@ -360,18 +428,19 @@ given escape sequence takes precedence over the former.")
       (with-selected-frame (car (frames-on-display-list terminal))
         (define-key input-decode-map "\e[M" 'xterm-mouse-translate)
         (define-key input-decode-map "\e[<" 'xterm-mouse-translate-extended))
-      (condition-case err
-          (send-string-to-terminal xterm-mouse-tracking-enable-sequence
-                                   terminal)
-        ;; FIXME: This should use a dedicated error signal.
-        (error (if (equal (cadr err) "Terminal is currently suspended")
-                   nil                  ;The sequence will be sent upon resume.
-                 (signal (car err) (cdr err)))))
-      (push xterm-mouse-tracking-enable-sequence
-            (terminal-parameter nil 'tty-mode-set-strings))
-      (push xterm-mouse-tracking-disable-sequence
-            (terminal-parameter nil 'tty-mode-reset-strings))
-      (set-terminal-parameter terminal 'xterm-mouse-mode t))))
+      (let ((enable (xterm-mouse-tracking-enable-sequence))
+            (disable (xterm-mouse-tracking-disable-sequence)))
+        (condition-case err
+            (send-string-to-terminal enable terminal)
+          ;; FIXME: This should use a dedicated error signal.
+          (error (if (equal (cadr err) "Terminal is currently suspended")
+                     nil ; The sequence will be sent upon resume.
+                   (signal (car err) (cdr err)))))
+        (push enable (terminal-parameter nil 'tty-mode-set-strings))
+        (push disable (terminal-parameter nil 'tty-mode-reset-strings))
+        (set-terminal-parameter terminal 'xterm-mouse-mode t)
+        (set-terminal-parameter terminal 'xterm-mouse-utf-8
+                                xterm-mouse-utf-8)))))
 
 (defun turn-off-xterm-mouse-tracking-on-terminal (terminal)
   "Disable xterm mouse tracking on TERMINAL."
diff --git a/nextstep/README b/nextstep/README
index 026a048..7a1a092 100644
--- a/nextstep/README
+++ b/nextstep/README
@@ -1,4 +1,3 @@
-
   NS -- the Cocoa interface for OS X and compatible systems
   ---------------------------------------------------------
 
@@ -30,7 +29,7 @@ fact that it doesn't have a normal name.  Instead, the method 
name is
 made up of the name of each parameter.  An exception to this rule are
 methods without parameters.
 
-The following calls a method in the object `anObject'.
+The following calls a method in the object 'anObject'.
 
     [anObject alpha:1 beta:2 gamma:3];
 
@@ -57,7 +56,7 @@ Classes are declared like the following:
   and avoid language constructs that makes the code hard to maintain.
 
 * Don't use macros and types intended for the XCode Interface Builder,
-  like `IBAction'.
+  like 'IBAction'.
 
 * The NS interface should work on all version of OS X from 10.6.8
   (Snow Leopard) to the latest official release.
@@ -71,8 +70,8 @@ Classes are declared like the following:
 The NS interface features a printf-based trace package that prints the
 call tree of selected functions in the Cocoa interface, plus various
 extra information.  It can be enabled by uncommenting the line
-defining `NSTRACE_ENABLED' in "nsterm.h".  To enable more output,
-uncomment the lines defining symbols starting with `NSTRACE_GROUP'.
+defining 'NSTRACE_ENABLED' in "nsterm.h".  To enable more output,
+uncomment the lines defining symbols starting with 'NSTRACE_GROUP'.
 
 
   GNUSTEP AND OTHER COMPATIBLE SYSTEMS
@@ -103,3 +102,22 @@ The INSTALL file in this directory for compilation 
instructions.
 
 The Nextstep section in the etc/TODO file for a list of ideas for
 future development.
+
+
+----------------------------------------------------------------------
+Copyright 2008-2016 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 <http://www.gnu.org/licenses/>.
diff --git a/src/alloc.c b/src/alloc.c
index b5be0f6..4c9cbf1 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3730,7 +3730,6 @@ make_save_ptr_int (void *a, ptrdiff_t b)
   return val;
 }
 
-#if ! (defined USE_X_TOOLKIT || defined USE_GTK)
 Lisp_Object
 make_save_ptr_ptr (void *a, void *b)
 {
@@ -3741,7 +3740,6 @@ make_save_ptr_ptr (void *a, void *b)
   p->data[1].pointer = b;
   return val;
 }
-#endif
 
 Lisp_Object
 make_save_funcptr_ptr_obj (void (*a) (void), void *b, Lisp_Object c)
diff --git a/src/bidi.c b/src/bidi.c
index a68ffdb..c23ff95 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -532,7 +532,7 @@ bidi_copy_it (struct bidi_it *to, struct bidi_it *from)
   /* Copy everything from the start through the active part of
      the level stack.  */
   memcpy (to, from,
-         (offsetof (struct bidi_it, level_stack[1])
+         (offsetof (struct bidi_it, level_stack) + sizeof from->level_stack[0]
           + from->stack_idx * sizeof from->level_stack[0]));
 }
 
diff --git a/src/editfns.c b/src/editfns.c
index df98223..2ac0537 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1456,7 +1456,7 @@ time_overflow (void)
   error ("Specified time is not representable");
 }
 
-static void
+static _Noreturn void
 invalid_time (void)
 {
   error ("Invalid time specification");
@@ -1848,7 +1848,9 @@ lisp_time_struct (Lisp_Object specified_time, int *plen)
   Lisp_Object high, low, usec, psec;
   struct lisp_time t;
   int len = disassemble_lisp_time (specified_time, &high, &low, &usec, &psec);
-  int val = len ? decode_time_components (high, low, usec, psec, &t, 0) : 0;
+  if (!len)
+    invalid_time ();
+  int val = decode_time_components (high, low, usec, psec, &t, 0);
   check_time_validity (val);
   *plen = len;
   return t;
diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c
index cebd7b6..ca0bbfb 100644
--- a/src/emacsgtkfixed.c
+++ b/src/emacsgtkfixed.c
@@ -27,13 +27,12 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "emacsgtkfixed.h"
 
 /* Silence a bogus diagnostic; see GNOME bug 683906.  */
-#if 4 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#if 4 < __GNUC__ + (7 <= __GNUC_MINOR__) && ! GLIB_CHECK_VERSION (2, 35, 7)
 # pragma GCC diagnostic push
 # pragma GCC diagnostic ignored "-Wunused-local-typedefs"
 #endif
 
 typedef struct _EmacsFixed EmacsFixed;
-typedef struct _EmacsFixedPrivate EmacsFixedPrivate;
 typedef struct _EmacsFixedClass EmacsFixedClass;
 
 struct _EmacsFixedPrivate
diff --git a/src/emacsgtkfixed.h b/src/emacsgtkfixed.h
index 3d6a76a..0d09525 100644
--- a/src/emacsgtkfixed.h
+++ b/src/emacsgtkfixed.h
@@ -30,7 +30,6 @@ G_BEGIN_DECLS
 struct frame;
 
 typedef struct _EmacsFixedPrivate       EmacsFixedPrivate;
-typedef struct _EmacsFixedClass         EmacsFixedClass;
 
 struct _EmacsFixed
 {
diff --git a/src/floatfns.c b/src/floatfns.c
index b9af03b..c1bd258 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -3,8 +3,7 @@
 Copyright (C) 1988, 1993-1994, 1999, 2001-2016 Free Software Foundation,
 Inc.
 
-Author: Wolfgang Rupprecht (ac
-ording to ack.texi)
+Author: Wolfgang Rupprecht (according to ack.texi)
 
 This file is part of GNU Emacs.
 
diff --git a/src/font.c b/src/font.c
index 5ab3b3e..2519599 100644
--- a/src/font.c
+++ b/src/font.c
@@ -5317,7 +5317,7 @@ syms_of_font (void)
   DEFSYM (Qja, "ja");
   DEFSYM (Qko, "ko");
 
-  DEFSYM (QCuser_spec, "user-spec");
+  DEFSYM (QCuser_spec, ":user-spec");
 
   staticpro (&scratch_font_spec);
   scratch_font_spec = Ffont_spec (0, NULL);
diff --git a/src/frame.c b/src/frame.c
index 7511d53..53ff059 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -4565,7 +4565,7 @@ On Nextstep, this just calls `ns-parse-geometry'.  */)
 
    This function does not make the coordinates positive.  */
 
-#define DEFAULT_ROWS 35
+#define DEFAULT_ROWS 36
 #define DEFAULT_COLS 80
 
 long
diff --git a/src/ftfont.c b/src/ftfont.c
index a402245..7285aee 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -2596,7 +2596,12 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font 
*font,
         language information, and select a proper flt for them
         here.  */
       int c1 = LGLYPH_CHAR (LGSTRING_GLYPH (lgstring, 1));
-      if (CHAR_HAS_CATEGORY (c1, '^'))
+      /* For the combining characters in the range U+300..U+36F,
+        "combining" is the sole FLT provided by the m17n-lib.  In
+        addition, it is the sole FLT that can handle the other
+        combining characters with non-OTF fonts.  */
+      if ((0x300 <= c1 && c1 <= 0x36F)
+         || (! otf && CHAR_HAS_CATEGORY (c1, '^')))
        flt = mflt_get (msymbol ("combining"));
     }
   if (! flt && ! otf)
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 7dca585..e791e6a 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -252,35 +252,6 @@ xg_create_default_cursor (Display *dpy)
   return gdk_cursor_new_for_display (gdpy, GDK_LEFT_PTR);
 }
 
-static GdkPixbuf *
-xg_get_pixbuf_from_pixmap (struct frame *f, Pixmap pix)
-{
-  int iunused;
-  GdkPixbuf *tmp_buf;
-  Window wunused;
-  unsigned int width, height, uunused;
-  XImage *xim;
-
-  XGetGeometry (FRAME_X_DISPLAY (f), pix, &wunused, &iunused, &iunused,
-                &width, &height, &uunused, &uunused);
-
-  xim = XGetImage (FRAME_X_DISPLAY (f), pix, 0, 0, width, height,
-                   ~0, XYPixmap);
-  if (!xim) return 0;
-
-  tmp_buf = gdk_pixbuf_new_from_data ((guchar *) xim->data,
-                                      GDK_COLORSPACE_RGB,
-                                      FALSE,
-                                      xim->bitmap_unit,
-                                      width,
-                                      height,
-                                      xim->bytes_per_line,
-                                      NULL,
-                                      NULL);
-  XDestroyImage (xim);
-  return tmp_buf;
-}
-
 /* Apply GMASK to GPIX and return a GdkPixbuf with an alpha channel.  */
 
 static GdkPixbuf *
@@ -288,46 +259,43 @@ xg_get_pixbuf_from_pix_and_mask (struct frame *f,
                                  Pixmap pix,
                                  Pixmap mask)
 {
-  int width, height;
-  GdkPixbuf *icon_buf, *tmp_buf;
-
-  tmp_buf = xg_get_pixbuf_from_pixmap (f, pix);
-  icon_buf = gdk_pixbuf_add_alpha (tmp_buf, FALSE, 0, 0, 0);
-  g_object_unref (G_OBJECT (tmp_buf));
-
-  width = gdk_pixbuf_get_width (icon_buf);
-  height = gdk_pixbuf_get_height (icon_buf);
+  GdkPixbuf *icon_buf = 0;
+  int iunused;
+  Window wunused;
+  unsigned int width, height, depth, uunused;
 
-  if (mask)
+  if (FRAME_DISPLAY_INFO (f)->red_bits != 8)
+    return 0;
+  XGetGeometry (FRAME_X_DISPLAY (f), pix, &wunused, &iunused, &iunused,
+                &width, &height, &uunused, &depth);
+  if (depth != 24)
+    return 0;
+  XImage *xim = XGetImage (FRAME_X_DISPLAY (f), pix, 0, 0, width, height,
+                          ~0, XYPixmap);
+  if (xim)
     {
-      GdkPixbuf *mask_buf = xg_get_pixbuf_from_pixmap (f, mask);
-      guchar *pixels = gdk_pixbuf_get_pixels (icon_buf);
-      guchar *mask_pixels = gdk_pixbuf_get_pixels (mask_buf);
-      int rowstride = gdk_pixbuf_get_rowstride (icon_buf);
-      int mask_rowstride = gdk_pixbuf_get_rowstride (mask_buf);
-      int y;
-
-      for (y = 0; y < height; ++y)
-        {
-          guchar *iconptr, *maskptr;
-          int x;
-
-          iconptr = pixels + y * rowstride;
-          maskptr = mask_pixels + y * mask_rowstride;
-
-          for (x = 0; x < width; ++x)
-            {
-              /* In a bitmap, RGB is either 255/255/255 or 0/0/0.  Checking
-                 just R is sufficient.  */
-              if (maskptr[0] == 0)
-                iconptr[3] = 0; /* 0, 1, 2 is R, G, B.  3 is alpha.  */
-
-              iconptr += rowstride/width;
-              maskptr += mask_rowstride/width;
-            }
-        }
+      XImage *xmm = (! mask ? 0
+                    : XGetImage (FRAME_X_DISPLAY (f), mask, 0, 0,
+                                 width, height, ~0, XYPixmap));
+      icon_buf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height);
+      if (icon_buf)
+       {
+         guchar *pixels = gdk_pixbuf_get_pixels (icon_buf);
+         int rowjunkwidth = gdk_pixbuf_get_rowstride (icon_buf) - width * 4;
+         for (int y = 0; y < height; y++, pixels += rowjunkwidth)
+           for (int x = 0; x < width; x++)
+             {
+               unsigned long rgb = XGetPixel (xim, x, y);
+               *pixels++ = (rgb >> 16) & 255;
+               *pixels++ = (rgb >> 8) & 255;
+               *pixels++ = rgb & 255;
+               *pixels++ = xmm && !XGetPixel (xmm, x, y) ? 0 : 255;
+             }
+       }
 
-      g_object_unref (G_OBJECT (mask_buf));
+      if (xmm)
+       XDestroyImage (xmm);
+      XDestroyImage (xim);
     }
 
   return icon_buf;
@@ -1300,7 +1268,7 @@ xg_create_frame_widgets (struct frame *f)
     if (! g_signal_handler_find (G_OBJECT (gs),
                                  G_SIGNAL_MATCH_FUNC,
                                  0, 0, 0,
-                                 G_CALLBACK (style_changed_cb),
+                                 (gpointer) G_CALLBACK (style_changed_cb),
                                  0))
       {
         g_signal_connect (G_OBJECT (gs), "notify::gtk-theme-name",
@@ -1832,14 +1800,10 @@ xg_toggle_notify_cb (GObject *gobject, GParamSpec 
*arg1, gpointer user_data)
 
       if (!!visible != !!toggle_on)
         {
-          g_signal_handlers_block_by_func (G_OBJECT (wtoggle),
-                                           G_CALLBACK 
(xg_toggle_visibility_cb),
-                                           gobject);
+          gpointer cb = (gpointer) G_CALLBACK (xg_toggle_visibility_cb);
+          g_signal_handlers_block_by_func (G_OBJECT (wtoggle), cb, gobject);
           gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wtoggle), visible);
-          g_signal_handlers_unblock_by_func
-            (G_OBJECT (wtoggle),
-             G_CALLBACK (xg_toggle_visibility_cb),
-             gobject);
+          g_signal_handlers_unblock_by_func (G_OBJECT (wtoggle), cb, gobject);
         }
       x_gtk_show_hidden_files = visible;
     }
diff --git a/src/image.c b/src/image.c
index a44b90b..e8418b8 100644
--- a/src/image.c
+++ b/src/image.c
@@ -1830,6 +1830,9 @@ cache_image (struct frame *f, struct image *img)
   struct image_cache *c = FRAME_IMAGE_CACHE (f);
   ptrdiff_t i;
 
+  if (!c)
+    c = FRAME_IMAGE_CACHE (f) = make_image_cache ();
+
   /* Find a free slot in c->images.  */
   for (i = 0; i < c->used; ++i)
     if (c->images[i] == NULL)
diff --git a/src/keyboard.c b/src/keyboard.c
index 29d6d67..9618e38 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -430,10 +430,9 @@ kset_system_key_syms (struct kboard *kb, Lisp_Object val)
 static bool
 echo_keystrokes_p (void)
 {
-  return (!cursor_in_echo_area)
-        && (FLOATP (Vecho_keystrokes) ? XFLOAT_DATA (Vecho_keystrokes) > 0.0
-            : INTEGERP (Vecho_keystrokes) ? XINT (Vecho_keystrokes) > 0
-             : false);
+  return (FLOATP (Vecho_keystrokes) ? XFLOAT_DATA (Vecho_keystrokes) > 0.0
+         : INTEGERP (Vecho_keystrokes) ? XINT (Vecho_keystrokes) > 0
+          : false);
 }
 
 /* Add C to the echo string, without echoing it immediately.  C can be
@@ -2530,7 +2529,7 @@ read_char (int commandflag, Lisp_Object map,
   if (KEYMAPP (map) && INTERACTIVE
       && !NILP (prev_event) && ! EVENT_HAS_PARAMETERS (prev_event)
       /* Don't bring up a menu if we already have another event.  */
-      && NILP (Vunread_command_events)
+      && !CONSP (Vunread_command_events)
       && !detect_input_pending_run_timers (0))
     {
       c = read_char_minibuf_menu_prompt (commandflag, map);
@@ -2661,7 +2660,7 @@ read_char (int commandflag, Lisp_Object map,
       && !EQ (XCAR (prev_event), Qmenu_bar)
       && !EQ (XCAR (prev_event), Qtool_bar)
       /* Don't bring up a menu if we already have another event.  */
-      && NILP (Vunread_command_events))
+      && !CONSP (Vunread_command_events))
     {
       c = read_char_x_menu_prompt (map, prev_event, used_mouse_menu);
 
@@ -8902,7 +8901,9 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, 
Lisp_Object prompt,
           if (!echo_keystrokes_p ())
            current_kboard->immediate_echo = false;
        }
-      else if (echo_keystrokes_p ())
+      else if (cursor_in_echo_area /* FIXME: Not sure why we test this here,
+                                      maybe we should just drop this test.  */
+              && echo_keystrokes_p ())
        /* This doesn't put in a dash if the echo buffer is empty, so
           you don't always see a dash hanging out in the minibuffer.  */
        echo_dash ();
@@ -9877,7 +9878,7 @@ clear_input_pending (void)
 bool
 requeued_events_pending_p (void)
 {
-  return (!NILP (Vunread_command_events));
+  return (CONSP (Vunread_command_events));
 }
 
 DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 1, 0,
@@ -9888,7 +9889,7 @@ if there is a doubt, the value is t.
 If CHECK-TIMERS is non-nil, timers that are ready to run will do so.  */)
   (Lisp_Object check_timers)
 {
-  if (!NILP (Vunread_command_events)
+  if (CONSP (Vunread_command_events)
       || !NILP (Vunread_post_input_method_events)
       || !NILP (Vunread_input_method_events))
     return (Qt);
diff --git a/src/lisp.h b/src/lisp.h
index 2758884..6a98adb 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1766,7 +1766,8 @@ CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct)
 
 /* Make sure that sub char-table contents slot is where we think it is.  */
 verify (offsetof (struct Lisp_Sub_Char_Table, contents)
-       == offsetof (struct Lisp_Vector, contents[SUB_CHAR_TABLE_OFFSET]));
+       == (offsetof (struct Lisp_Vector, contents)
+           + SUB_CHAR_TABLE_OFFSET * sizeof (Lisp_Object)));
 
 /***********************************************************************
                               Symbols
diff --git a/src/nsterm.m b/src/nsterm.m
index 38aa4a3..4048ac4 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -646,41 +646,128 @@ ns_release_autorelease_pool (void *pool)
 }
 
 
-/* True, if the menu bar should be hidden.  */
-
 static BOOL
 ns_menu_bar_should_be_hidden (void)
+/* True, if the menu bar should be hidden.  */
 {
   return !NILP (ns_auto_hide_menu_bar)
     && [NSApp respondsToSelector:@selector(setPresentationOptions:)];
 }
 
 
-static CGFloat
-ns_menu_bar_height (NSScreen *screen)
-/* The height of the menu bar, if visible.
+struct EmacsMargins
+{
+  CGFloat top;
+  CGFloat bottom;
+  CGFloat left;
+  CGFloat right;
+};
 
-   Note: Don't use this when fullscreen is enabled -- the screen
-   sometimes includes, sometimes excludes the menu bar area. */
+
+static struct EmacsMargins
+ns_screen_margins (NSScreen *screen)
+/* The parts of SCREEN used by the operating system.  */
 {
-  CGFloat res;
+  NSTRACE ("ns_screen_margins");
+
+  struct EmacsMargins margins;
 
+  NSRect screenFrame = [screen frame];
+  NSRect screenVisibleFrame = [screen visibleFrame];
+
+  /* Sometimes, visibleFrame isn't up-to-date with respect to a hidden
+     menu bar, check this explicitly.  */
   if (ns_menu_bar_should_be_hidden())
     {
-      res = 0;
+      margins.top = 0;
     }
   else
     {
-      NSRect screenFrame = [screen frame];
-      NSRect screenVisibleFrame = [screen visibleFrame];
-
       CGFloat frameTop = screenFrame.origin.y + screenFrame.size.height;
       CGFloat visibleFrameTop = (screenVisibleFrame.origin.y
                                  + screenVisibleFrame.size.height);
 
-      res = frameTop - visibleFrameTop;
+      margins.top = frameTop - visibleFrameTop;
+    }
+
+  {
+    CGFloat frameRight = screenFrame.origin.x + screenFrame.size.width;
+    CGFloat visibleFrameRight = (screenVisibleFrame.origin.x
+                                 + screenVisibleFrame.size.width);
+    margins.right = frameRight - visibleFrameRight;
+  }
+
+  margins.bottom = screenVisibleFrame.origin.y - screenFrame.origin.y;
+  margins.left   = screenVisibleFrame.origin.x - screenFrame.origin.x;
+
+  NSTRACE_MSG ("left:%g right:%g top:%g bottom:%g",
+               margins.left,
+               margins.right,
+               margins.top,
+               margins.bottom);
+
+  return margins;
+}
+
+
+/* A screen margin between 1 and DOCK_IGNORE_LIMIT (inclusive) is
+   assumed to contain a hidden dock.  OS X currently use 4 pixels for
+   this, however, to be future compatible, a larger value is used.  */
+#define DOCK_IGNORE_LIMIT 6
+
+static struct EmacsMargins
+ns_screen_margins_ignoring_hidden_dock (NSScreen *screen)
+/* The parts of SCREEN used by the operating system, excluding the parts
+reserved for an hidden dock.  */
+{
+  NSTRACE ("ns_screen_margins_ignoring_hidden_dock");
 
+  struct EmacsMargins margins = ns_screen_margins(screen);
+
+  /* OS X (currently) reserved 4 pixels along the edge where a hidden
+     dock is located.  Unfortunately, it's not possible to find the
+     location and information about if the dock is hidden.  Instead,
+     it is assumed that if the margin of an edge is less than
+     DOCK_IGNORE_LIMIT, it contains a hidden dock.  */
+  if (margins.left <= DOCK_IGNORE_LIMIT)
+    {
+      margins.left = 0;
     }
+  if (margins.right <= DOCK_IGNORE_LIMIT)
+    {
+      margins.right = 0;
+    }
+  if (margins.top <= DOCK_IGNORE_LIMIT)
+    {
+      margins.top = 0;
+    }
+  /* Note: This doesn't occur in current versions of OS X, but
+     included for completeness and future compatibility.  */
+  if (margins.bottom <= DOCK_IGNORE_LIMIT)
+    {
+      margins.bottom = 0;
+    }
+
+  NSTRACE_MSG ("left:%g right:%g top:%g bottom:%g",
+               margins.left,
+               margins.right,
+               margins.top,
+               margins.bottom);
+
+  return margins;
+}
+
+
+static CGFloat
+ns_menu_bar_height (NSScreen *screen)
+/* The height of the menu bar, if visible.
+
+   Note: Don't use this when fullscreen is enabled -- the screen
+   sometimes includes, sometimes excludes the menu bar area.  */
+{
+  struct EmacsMargins margins = ns_screen_margins(screen);
+
+  CGFloat res = margins.top;
 
   NSTRACE ("ns_menu_bar_height " NSTRACE_FMT_RETURN " %.0f", res);
 
@@ -1172,10 +1259,31 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
    ========================================================================== 
*/
 
 
+// This bell implementation shows the visual bell image asynchronously
+// from the rest of Emacs. This is done by adding a NSView to the
+// superview of the Emacs window and removing it using a timer.
+//
+// Unfortunately, some Emacs operations, like scrolling, is done using
+// low-level primitives that copy the content of the window, including
+// the bell image. To some extent, this is handled by removing the
+// image prior to scrolling and marking that the window is in need for
+// redisplay.
+//
+// To test this code, make sure that there is no artifacts of the bell
+// image in the following situations. Use a non-empty buffer (like the
+// tutorial) to ensure that a scroll is performed:
+//
+// * Single-window: C-g C-v
+//
+// * Side-by-windows: C-x 3 C-g C-v
+//
+// * Windows above each other: C-x 2 C-g C-v
+
 @interface EmacsBell : NSImageView
 {
   // Number of currently active bell:s.
   unsigned int nestCount;
+  NSView * mView;
   bool isAttached;
 }
 - (void)show:(NSView *)view;
@@ -1204,7 +1312,6 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
       [self.image unlockFocus];
 #else
       self.image = [NSImage imageNamed:NSImageNameCaution];
-      [self.image setScalesWhenResized:YES];
       [self.image setSize:NSMakeSize(self.image.size.width * 5,
                                      self.image.size.height * 5)];
 #endif
@@ -1229,6 +1336,7 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
       [self setFrameSize:self.image.size];
 
       isAttached = true;
+      mView = view;
       [[[view window] contentView] addSubview:self
                                    positioned:NSWindowAbove
                                    relativeTo:nil];
@@ -1258,9 +1366,12 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
 
 -(void)remove
 {
+  NSTRACE ("[EmacsBell remove]");
   if (isAttached)
     {
+      NSTRACE_MSG ("removeFromSuperview");
       [self removeFromSuperview];
+      mView.needsDisplay = YES;
       isAttached = false;
     }
 }
@@ -1310,6 +1421,8 @@ static void hide_bell ()
      Ensure the bell is hidden.
    -------------------------------------------------------------------------- 
*/
 {
+  NSTRACE ("hide_bell");
+
   if (bell_view != nil)
     {
       [bell_view remove];
@@ -2392,6 +2505,8 @@ ns_clear_frame_area (struct frame *f, int x, int y, int 
width, int height)
 static void
 ns_copy_bits (struct frame *f, NSRect src, NSRect dest)
 {
+  NSTRACE ("ns_copy_bits");
+
   if (FRAME_NS_VIEW (f))
     {
       hide_bell();              // Ensure the bell image isn't scrolled.
@@ -7839,9 +7954,10 @@ not_in_argv (NSString *arg)
   // the menu-bar.
   [super zoom:sender];
 
-#elsif 0
+#elif 0
   // Native zoom done using the standard zoom animation, plus an
-  // explicit resize to cover the full screen.
+  // explicit resize to cover the full screen, except the menu-bar and
+  // dock, if present.
   [super zoom:sender];
 
   // After the native zoom, resize the resulting frame to fill the
@@ -7861,6 +7977,9 @@ not_in_argv (NSString *arg)
       NSTRACE_FSTYPE ("fullscreenState", fs_state);
 
       NSRect sr = [screen frame];
+      struct EmacsMargins margins
+        = ns_screen_margins_ignoring_hidden_dock(screen);
+
       NSRect wr = [self frame];
       NSTRACE_RECT ("Rect after zoom", wr);
 
@@ -7869,15 +7988,15 @@ not_in_argv (NSString *arg)
       if (fs_state == FULLSCREEN_MAXIMIZED
           || fs_state == FULLSCREEN_HEIGHT)
         {
-          newWr.origin.x = 0;
-          newWr.size.height = sr.size.height - ns_menu_bar_height(screen);
+          newWr.origin.y = sr.origin.y + margins.bottom;
+          newWr.size.height = sr.size.height - margins.top - margins.bottom;
         }
 
       if (fs_state == FULLSCREEN_MAXIMIZED
           || fs_state == FULLSCREEN_WIDTH)
         {
-          newWr.origin.y = 0;
-          newWr.size.width = sr.size.width;
+          newWr.origin.x = sr.origin.x + margins.left;
+          newWr.size.width = sr.size.width - margins.right - margins.left;
         }
 
       if (newWr.size.width     != wr.size.width
@@ -7890,13 +8009,20 @@ not_in_argv (NSString *arg)
         }
     }
 #else
-  // Non-native zoom which is done instantaneously.  The resulting frame
-  // covers the entire screen, except the menu-bar, if present.
+  // Non-native zoom which is done instantaneously.  The resulting
+  // frame covers the entire screen, except the menu-bar and dock, if
+  // present.
   NSScreen * screen = [self screen];
   if (screen != nil)
     {
       NSRect sr = [screen frame];
-      sr.size.height -= ns_menu_bar_height (screen);
+      struct EmacsMargins margins
+        = ns_screen_margins_ignoring_hidden_dock(screen);
+
+      sr.size.height -= (margins.top + margins.bottom);
+      sr.size.width  -= (margins.left + margins.right);
+      sr.origin.x += margins.left;
+      sr.origin.y += margins.bottom;
 
       sr = [[self delegate] windowWillUseStandardFrame:self
                                           defaultFrame:sr];
diff --git a/src/term.c b/src/term.c
index 17f3679..a77e572 100644
--- a/src/term.c
+++ b/src/term.c
@@ -3402,9 +3402,11 @@ static void
 tty_pop_down_menu (Lisp_Object arg)
 {
   tty_menu *menu = XSAVE_POINTER (arg, 0);
+  struct buffer *orig_buffer = XSAVE_POINTER (arg, 1);
 
   block_input ();
   tty_menu_destroy (menu);
+  set_buffer_internal (orig_buffer);
   unblock_input ();
 }
 
@@ -3683,7 +3685,10 @@ tty_menu_show (struct frame *f, int x, int y, int 
menuflags,
 
   pane = selidx = 0;
 
-  record_unwind_protect (tty_pop_down_menu, make_save_ptr (menu));
+  /* We save and restore the current buffer because tty_menu_activate
+     triggers redisplay, which switches buffers at will.  */
+  record_unwind_protect (tty_pop_down_menu,
+                        make_save_ptr_ptr (menu, current_buffer));
 
   specbind (Qoverriding_terminal_local_map,
            Fsymbol_value (Qtty_menu_navigation_map));
diff --git a/src/w32font.c b/src/w32font.c
index a1878ad..018e657 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -796,7 +796,8 @@ w32font_list_internal (struct frame *f, Lisp_Object 
font_spec,
          && !EQ (spec_charset, Qiso10646_1)
          && !EQ (spec_charset, Qunicode_bmp)
          && !EQ (spec_charset, Qunicode_sip)
-         && !EQ (spec_charset, Qunknown))
+         && !EQ (spec_charset, Qunknown)
+         && !EQ (spec_charset, Qascii_0))
        return Qnil;
     }
 
diff --git a/src/xdisp.c b/src/xdisp.c
index ce992d4..5be94f0 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -7229,18 +7229,21 @@ get_next_display_element (struct it *it)
                {
                  ptrdiff_t ignore;
                  int next_face_id;
+                 bool text_from_string = false;
+                 /* Normally, the next buffer location is stored in
+                    IT->current.pos...  */
                  struct text_pos pos = it->current.pos;
 
-                 /* For a string from a display property, the next
-                    buffer position is stored in the 'position'
+                 /* ...but for a string from a display property, the
+                    next buffer position is stored in the 'position'
                     member of the iteration stack slot below the
                     current one, see handle_single_display_spec.  By
-                    contrast, it->current.pos was not yet updated
-                    to point to that buffer position; that will
-                    happen in pop_it, after we finish displaying the
-                    current string.  Note that we already checked
-                    above that it->sp is positive, so subtracting one
-                    from it is safe.  */
+                    contrast, it->current.pos was not yet updated to
+                    point to that buffer position; that will happen
+                    in pop_it, after we finish displaying the current
+                    string.  Note that we already checked above that
+                    it->sp is positive, so subtracting one from it is
+                    safe.  */
                  if (it->from_disp_prop_p)
                    {
                      int stackp = it->sp - 1;
@@ -7249,19 +7252,49 @@ get_next_display_element (struct it *it)
                      while (stackp >= 0
                             && STRINGP ((it->stack + stackp)->string))
                        stackp--;
-                     eassert (stackp >= 0);
-                     pos = (it->stack + stackp)->position;
+                     if (stackp < 0)
+                       {
+                         /* If no stack slot was found for iterating
+                            a buffer, we are displaying text from a
+                            string, most probably the mode line or
+                            the header line, and that string has a
+                            display string on some of its
+                            characters.  */
+                         text_from_string = true;
+                         pos = it->stack[it->sp - 1].position;
+                       }
+                     else
+                       pos = (it->stack + stackp)->position;
                    }
                  else
                    INC_TEXT_POS (pos, it->multibyte_p);
 
-                 if (CHARPOS (pos) >= ZV)
+                 if (text_from_string)
+                   {
+                     Lisp_Object base_string = it->stack[it->sp - 1].string;
+
+                     if (CHARPOS (pos) >= SCHARS (base_string) - 1)
+                       it->end_of_box_run_p = true;
+                     else
+                       {
+                         next_face_id
+                           = face_at_string_position (it->w, base_string,
+                                                      CHARPOS (pos), 0,
+                                                      &ignore, face_id, false);
+                         it->end_of_box_run_p
+                           = (FACE_FROM_ID (it->f, next_face_id)->box
+                              == FACE_NO_BOX);
+                       }
+                   }
+                 else if (CHARPOS (pos) >= ZV)
                    it->end_of_box_run_p = true;
                  else
                    {
-                     next_face_id = face_at_buffer_position
-                       (it->w, CHARPOS (pos), &ignore,
-                        CHARPOS (pos) + TEXT_PROP_DISTANCE_LIMIT, false, -1);
+                     next_face_id =
+                       face_at_buffer_position (it->w, CHARPOS (pos), &ignore,
+                                                CHARPOS (pos)
+                                                + TEXT_PROP_DISTANCE_LIMIT,
+                                                false, -1);
                      it->end_of_box_run_p
                        = (FACE_FROM_ID (it->f, next_face_id)->box
                           == FACE_NO_BOX);
@@ -10524,8 +10557,8 @@ ensure_echo_area_buffers (void)
    suitable buffer from echo_buffer[] and clear it.
 
    If WHICH < 0, set echo_area_buffer[1] to echo_area_buffer[0], so
-   that the current message becomes the last displayed one, make
-   choose a suitable buffer for echo_area_buffer[0], and clear it.
+   that the current message becomes the last displayed one, choose a
+   suitable buffer for echo_area_buffer[0], and clear it.
 
    Value is what FN returns.  */
 
@@ -10559,7 +10592,7 @@ with_echo_area_buffer (struct window *w, int which,
        echo_area_buffer[this_one] = Qnil;
     }
 
-  /* Choose a suitable buffer from echo_buffer[] is we don't
+  /* Choose a suitable buffer from echo_buffer[] if we don't
      have one.  */
   if (NILP (echo_area_buffer[this_one]))
     {
@@ -17049,7 +17082,16 @@ redisplay_window (Lisp_Object window, bool 
just_this_one_p)
            ignore_mouse_drag_p = true;
 #endif
         }
+      ptrdiff_t count1 = SPECPDL_INDEX ();
+      /* x_consider_frame_title calls select-frame, which calls
+        resize_mini_window, which could resize the mini-window and by
+        that undo the effect of this redisplay cycle wrt minibuffer
+        and echo-area display.  Binding inhibit-redisplay to t makes
+        the call to resize_mini_window a no-op, thus avoiding the
+        adverse side effects.  */
+      specbind (Qinhibit_redisplay, Qt);
       x_consider_frame_title (w->frame);
+      unbind_to (count1, Qnil);
 #endif
     }
 
@@ -31389,8 +31431,11 @@ Value is a number or a cons (WIDTH-DPI . HEIGHT-DPI).  
*/);
               Vtruncate_partial_width_windows,
     doc: /* Non-nil means truncate lines in windows narrower than the frame.
 For an integer value, truncate lines in each window narrower than the
-full frame width, provided the window width is less than that integer;
-otherwise, respect the value of `truncate-lines'.
+full frame width, provided the total window width in column units is less
+than that integer; otherwise, respect the value of `truncate-lines'.
+The total width of the window is as returned by `window-total-width', it
+includes the fringes, the continuation and truncation glyphs, the
+display margins (if any), and the scroll bar
 
 For any other non-nil value, truncate lines in all windows that do
 not span the full frame width.
@@ -31598,7 +31643,12 @@ A value of t means resize them to fit the text 
displayed in them.
 A value of `grow-only', the default, means let mini-windows grow only;
 they return to their normal size when the minibuffer is closed, or the
 echo area becomes empty.  */);
-  Vresize_mini_windows = Qgrow_only;
+  /* Contrary to the doc string, we initialize this to nil, so that
+     loading loadup.el won't try to resize windows before loading
+     window.el, where some functions we need to call for this live.
+     We assign the 'grow-only' value right after loading window.el
+     during loadup.  */
+  Vresize_mini_windows = Qnil;
 
   DEFVAR_LISP ("blink-cursor-alist", Vblink_cursor_alist,
     doc: /* Alist specifying how to blink the cursor off.
diff --git a/src/xfns.c b/src/xfns.c
index 0a4a09e..b22af5c 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -273,7 +273,7 @@ x_real_pos_and_offsets (struct frame *f,
       XFree (tmp_children);
 #endif
 
-      if (wm_window == rootw || had_errors)
+      if (had_errors || wm_window == rootw)
         break;
 
       win = wm_window;
diff --git a/src/xwidget.c b/src/xwidget.c
index d438d87..c24475f 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -767,14 +767,14 @@ VALUE is the amount to scroll, either relatively or 
absolutely.  */)
    Lisp_Object value)
 {
   CHECK_XWIDGET (xwidget);
-  CHECK_NATNUM (value);
+  CHECK_NUMBER (value);
   struct xwidget *xw = XXWIDGET (xwidget);
   GtkAdjustment *adjustment
     = ((EQ (Qhorizontal, axis)
        ? gtk_scrolled_window_get_hadjustment
        : gtk_scrolled_window_get_vadjustment)
        (GTK_SCROLLED_WINDOW (xw->widgetscrolledwindow_osr)));
-  double final_value = XFASTINT (value);
+  double final_value = XINT (value);
   if (EQ (Qt, relative))
     final_value += gtk_adjustment_get_value (adjustment);
   gtk_adjustment_set_value (adjustment, final_value);
diff --git a/test/automated/map-tests.el b/test/automated/map-tests.el
index d145c19..20cb0f6 100644
--- a/test/automated/map-tests.el
+++ b/test/automated/map-tests.el
@@ -87,9 +87,16 @@ Evaluate BODY for each created map.
   (let ((vec [3 4 5]))
    (should-error (setf (map-elt vec 3) 6))))
 
+(ert-deftest test-map-put-alist-new-key ()
+  "Regression test for Bug#23105."
+  (let ((alist '((0 . a))))
+    (map-put alist 2 'b)
+    (should (eq (map-elt alist 2)
+                'b))))
+
 (ert-deftest test-map-put-return-value ()
   (let ((ht (make-hash-table)))
-    (should (eq (map-put ht 'a 'hello) ht))))
+    (should (eq (map-put ht 'a 'hello) 'hello))))
 
 (ert-deftest test-map-delete ()
   (with-maps-do map
diff --git a/test/automated/package-test.el b/test/automated/package-test.el
index e10946e..5580645 100644
--- a/test/automated/package-test.el
+++ b/test/automated/package-test.el
@@ -466,7 +466,7 @@ Must called from within a `tar-mode' buffer."
                              (cons (format "HOME=%s" homedir)
                                    process-environment)))
                         (epg-check-configuration (epg-configuration))
-                        t)
+                        (epg-find-configuration 'OpenPGP))
                     (delete-directory homedir t)))))
   (let* ((keyring (expand-file-name "key.pub" package-test-data-dir))
         (package-test-data-dir
diff --git a/test/automated/ruby-mode-tests.el 
b/test/automated/ruby-mode-tests.el
index 4fa7470..7e85fb8 100644
--- a/test/automated/ruby-mode-tests.el
+++ b/test/automated/ruby-mode-tests.el
@@ -449,6 +449,14 @@ VALUES-PLIST is a list with alternating index and value 
elements."
     ;; It's confused by the closing paren in the middle.
     (ruby-assert-state s 8 nil)))
 
+(ert-deftest ruby-interpolation-inside-another-interpolation ()
+  :expected-result :failed
+  (let ((s "\"#{[a, b, c].map { |v| \"#{v}\" }.join}\""))
+    (ruby-assert-face s 1 font-lock-string-face)
+    (ruby-assert-face s 2 font-lock-variable-name-face)
+    (ruby-assert-face s 38 font-lock-string-face)
+    (ruby-assert-state s 8 nil)))
+
 (ert-deftest ruby-interpolation-inside-double-quoted-percent-literals ()
   (ruby-assert-face "%Q{foo address@hidden" 8 font-lock-variable-name-face)
   (ruby-assert-face "%W{foo address@hidden" 8 font-lock-variable-name-face)
diff --git a/test/automated/tramp-tests.el b/test/automated/tramp-tests.el
index a29e42e..d9563ec 100644
--- a/test/automated/tramp-tests.el
+++ b/test/automated/tramp-tests.el
@@ -1785,6 +1785,14 @@ Several special characters do not work properly there."
       (file-truename tramp-test-temporary-file-directory) nil
     (string-match "^HP-UX" (tramp-get-connection-property v "uname" ""))))
 
+(defun tramp--test-darwin-p ()
+  "Check, whether the remote host runs Mac OS X.
+Several special characters do not work properly there."
+  ;; We must refill the cache.  `file-truename' does it.
+  (with-parsed-tramp-file-name
+      (file-truename tramp-test-temporary-file-directory) nil
+    (string-match "^Darwin" (tramp-get-connection-property v "uname" ""))))
+
 (defun tramp--test-check-files (&rest files)
   "Run a simple but comprehensive test over every file in FILES."
   ;; We must use `file-truename' for the temporary directory, because
@@ -2038,9 +2046,10 @@ Use the `ls' command."
        (file-name-coding-system 'utf-8))
     (tramp--test-check-files
      (unless (tramp--test-hpux-p) "Γυρίστε το Γαλαξία με Ώτο Στοπ")
-     (unless (tramp--test-hpux-p)
+     (unless (or (tramp--test-hpux-p) (tramp--test-darwin-p))
        "أصبح بوسعك الآن تنزيل نسخة كاملة من موسوعة ويكيبيديا العربية لتصفحها 
بلا اتصال بالإنترنت")
-     "银河系漫游指南系列"
+     (unless (tramp--test-darwin-p)
+       "银河系漫游指南系列")
      "Автостопом по гала́ктике")))
 
 (ert-deftest tramp-test32-utf8 ()
diff --git a/test/automated/xt-mouse-tests.el b/test/automated/xt-mouse-tests.el
new file mode 100644
index 0000000..c7e835c
--- /dev/null
+++ b/test/automated/xt-mouse-tests.el
@@ -0,0 +1,110 @@
+;;; xt-mouse-tests.el --- Test suite for xt-mouse.  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Philipp Stephani <address@hidden>
+
+;; 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:
+
+;;; Code:
+
+(require 'xt-mouse)
+
+(defmacro with-xterm-mouse-mode (&rest body)
+  "Run BODY with `xterm-mouse-mode' temporarily enabled."
+  (declare (indent 0))
+  ;; Make the frame huge so that the test input events below don't hit
+  ;; the menu bar.
+  `(cl-letf (((frame-width nil) 2000)
+             ((frame-height nil) 2000)
+             ;; Reset XTerm parameters so that the tests don't get
+             ;; confused.
+             ((terminal-parameter nil 'xterm-mouse-x) nil)
+             ((terminal-parameter nil 'xterm-mouse-y) nil)
+             ((terminal-parameter nil 'xterm-mouse-last-down) nil)
+             ((terminal-parameter nil 'xterm-mouse-last-click) nil))
+     (if xterm-mouse-mode
+         (progn ,@body)
+       (unwind-protect
+           (progn
+             ;; `xterm-mouse-mode' doesn't work in the initial
+             ;; terminal.  Since we can't create a second terminal in
+             ;; batch mode, fake it temporarily.
+             (cl-letf (((symbol-function 'terminal-name)
+                        (lambda (&optional _terminal) "fake-terminal")))
+               (xterm-mouse-mode))
+             ,@body)
+         (xterm-mouse-mode 0)))))
+
+(ert-deftest xt-mouse-tracking-basic ()
+  (should (equal (xterm-mouse-tracking-enable-sequence)
+                 "\e[?1000h\e[?1002h\e[?1006h"))
+  (should (equal (xterm-mouse-tracking-disable-sequence)
+                 "\e[?1006l\e[?1002l\e[?1000l"))
+  (with-xterm-mouse-mode
+    (should xterm-mouse-mode)
+    (should (terminal-parameter nil 'xterm-mouse-mode))
+    (should-not (terminal-parameter nil 'xterm-mouse-utf-8))
+    (let* ((unread-command-events (append "\e[M%\xD9\x81"
+                                          "\e[M'\xD9\x81" nil))
+           (key (read-key)))
+      (should (consp key))
+      (cl-destructuring-bind (event-type position . rest) key
+        (should (equal event-type 'S-mouse-2))
+        (should (consp position))
+        (cl-destructuring-bind (_ _ xy . rest) position
+          (should (equal xy '(184 . 95))))))))
+
+(ert-deftest xt-mouse-tracking-utf-8 ()
+  (let ((xterm-mouse-utf-8 t))
+    (should (equal (xterm-mouse-tracking-enable-sequence)
+                   "\e[?1000h\e[?1002h\e[?1005h\e[?1006h"))
+    (should (equal (xterm-mouse-tracking-disable-sequence)
+                   "\e[?1006l\e[?1005l\e[?1002l\e[?1000l"))
+    (with-xterm-mouse-mode
+      (should xterm-mouse-mode)
+      (should (terminal-parameter nil 'xterm-mouse-mode))
+      (should (terminal-parameter nil 'xterm-mouse-utf-8))
+      ;; The keyboard driver doesn't decode bytes in
+      ;; `unread-command-events'.
+      (let* ((unread-command-events (append "\e[M%\u0640\u0131"
+                                            "\e[M'\u0640\u0131" nil))
+             (key (read-key)))
+        (should (consp key))
+        (cl-destructuring-bind (event-type position . rest) key
+          (should (equal event-type 'S-mouse-2))
+          (should (consp position))
+          (cl-destructuring-bind (_ _ xy . rest) position
+            (should (equal xy '(1567 . 271)))))))))
+
+(ert-deftest xt-mouse-tracking-sgr ()
+  (with-xterm-mouse-mode
+    (should xterm-mouse-mode)
+    (should (terminal-parameter nil 'xterm-mouse-mode))
+    (should-not (terminal-parameter nil 'xterm-mouse-utf-8))
+    (let* ((unread-command-events (append "\e[<5;1569;273;M"
+                                          "\e[<5;1569;273;m" nil))
+           (key (read-key)))
+      (should (consp key))
+      (cl-destructuring-bind (event-type position . rest) key
+        (should (equal event-type 'S-mouse-2))
+        (should (consp position))
+        (cl-destructuring-bind (_ _ xy . rest) position
+          (should (equal xy '(1568 . 271))))))))
+
+;;; xt-mouse-tests.el ends here
diff --git a/test/indent/ruby.rb b/test/indent/ruby.rb
index 51923f7..b038512 100644
--- a/test/indent/ruby.rb
+++ b/test/indent/ruby.rb
@@ -222,7 +222,7 @@ foo.
   bar
 
 # 
https://github.com/rails/rails/blob/17f5d8e062909f1fcae25351834d8e89967b645e/activesupport/lib/active_support/time_with_zone.rb#L206
-foo
+foo # comment intended to confuse the tokenizer
   .bar
 
 z = {
@@ -295,10 +295,31 @@ foo > bar &&
   tee < qux
 
 zux do
-  foo == bar and
+  foo == bar &&
     tee == qux
+
+  a = 3 and
+    b = 4
 end
 
+foo + bar ==
+  tee + qux
+
+1 .. 2 &&
+     3
+
+3 < 4 +
+    5
+
+10 << 4 ^
+  20
+
+100 + 2 >>
+  3
+
+2 ** 10 /
+  2
+
 foo ^
   bar
 
@@ -317,6 +338,11 @@ def bar
     .baz
 end
 
+abc(foo
+      .bar,
+    tee
+      .qux)
+
 # 
http://stackoverflow.com/questions/17786563/emacs-ruby-mode-if-expressions-indentation
 tee = if foo
         bar
@@ -400,6 +426,17 @@ zoo
 a.records().map(&:b).zip(
   foo)
 
+foo1 =
+  subject.update(
+    1
+  )
+
+foo2 =
+  subject.
+    update(
+      2
+    )
+
 # FIXME: This is not consistent with the example below it, but this
 # offset only happens if the colon is at eol, which wouldn't be often.
 # Tokenizing `bar:' as `:bar =>' would be better, but it's hard to
@@ -410,6 +447,12 @@ foo(bar:
 foo(:bar =>
     tee)
 
+regions = foo(
+  OpenStruct.new(id: 0, name: "foo") => [
+    10
+  ]
+)
+
 {'a' => {
    'b' => 'c',
    'd' => %w(e f)



reply via email to

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