]> code.delx.au - gnu-emacs/commitdiff
Merge emacs-25 into master (using imerge)
authorJohn Wiegley <johnw@newartisans.com>
Wed, 30 Dec 2015 05:40:28 +0000 (21:40 -0800)
committerJohn Wiegley <johnw@newartisans.com>
Wed, 30 Dec 2015 05:40:28 +0000 (21:40 -0800)
55 files changed:
1  2 
.gitignore
CONTRIBUTE
ChangeLog.2
admin/release-process
configure.ac
doc/lispref/os.texi
etc/NEWS
lisp/emacs-lisp/eieio-compat.el
lisp/emacs-lisp/let-alist.el
lisp/emacs-lisp/package.el
lisp/erc/erc-backend.el
lisp/erc/erc.el
lisp/gnus/gnus-util.el
lisp/htmlfontify.el
lisp/ibuffer.el
lisp/loadup.el
lisp/mail/rmail.el
lisp/menu-bar.el
lisp/net/eww.el
lisp/net/shr.el
lisp/progmodes/cc-defs.el
lisp/progmodes/verilog-mode.el
lisp/ps-print.el
lisp/textmodes/reftex-auc.el
lisp/url/url-handlers.el
lisp/url/url-http.el
lisp/url/url-util.el
src/Makefile.in
src/emacs.c
src/keyboard.c
src/lisp.h
test/lisp/abbrev-tests.el
test/lisp/autorevert-tests.el
test/lisp/calendar/icalendar-tests.el
test/lisp/character-fold-tests.el
test/lisp/emacs-lisp/package-tests.el
test/lisp/faces-tests.el
test/lisp/gnus/auth-source-tests.el
test/lisp/gnus/message-tests.el
test/lisp/help-fns-tests.el
test/lisp/json-tests.el
test/lisp/net/tramp-tests.el
test/lisp/progmodes/elisp-mode-tests.el
test/lisp/simple-tests.el
test/lisp/subr-tests.el
test/manual/etags/CTAGS.good
test/manual/etags/ETAGS.good_1
test/manual/etags/ETAGS.good_2
test/manual/etags/ETAGS.good_3
test/manual/etags/ETAGS.good_4
test/manual/etags/ETAGS.good_5
test/manual/etags/ETAGS.good_6
test/manual/etags/Makefile
test/manual/indent/js.js
test/src/keymap-tests.el

diff --combined .gitignore
index 682179150a330e796f02396c10c2582e1ef70afb,34b0c02fec47a1dd1e120d2e850bd0ca3ed687d5..e544b10808b295d7f7b6e44cdf9a555b20b81ce2
@@@ -42,10 -42,11 +42,11 @@@ InfoPlist.string
  Makefile
  makefile
  !etc/refcards/Makefile
 -!test/automated/data/flymake/Makefile
 -!test/indent/Makefile
 -!test/etags/Makefile
 -!test/etags/make-src/Makefile
+ !modules/mod-test/Makefile
 +!test/lisp/progmodes/flymake-resources/Makefile
 +!test/manual/indent/Makefile
 +!test/manual/etags/Makefile
 +!test/manual/etags/make-src/Makefile
  /*.cache
  /confdefs.h
  /config.status
@@@ -139,6 -140,8 +140,8 @@@ src/stamp-h
  *.elc
  *.o
  *.res
+ *.so
+ *.dll
  [0-9]*.core
  core
  core.*[0-9]
@@@ -149,12 -152,10 +152,12 @@@ src/*.ma
  # Tests.
  test/indent/*.new
  test/biditest.txt
 -test/etags/srclist
 -test/etags/regexfile
 -test/etags/ETAGS
 -test/etags/CTAGS
 +test/manual/etags/srclist
 +test/manual/etags/regexfile
 +test/manual/etags/ETAGS
 +test/manual/etags/CTAGS
 +# Generated by test/make-test-deps.emacs-lisp
 +test/make-test-deps.mk
  
  # ctags, etags.
  TAGS
@@@ -209,6 -210,7 +212,7 @@@ lisp/international/uni-*.e
  *.cms
  *.cp
  *.cps
+ *.doc
  *.dvi
  *.fn
  *.fns
diff --combined CONTRIBUTE
index b385d68c985ee340460d0bb20369d8980e8e13b9,9061007fc9ce606e09360cf61964dc75f64f8445..c9c4b74f0904fe5e5df53aae4cefe240ca755821
@@@ -186,10 -186,12 +186,12 @@@ branch later
  
  However, if you know that the change will be difficult to merge to the
  trunk (eg because the trunk code has changed a lot), you can apply the
- change to both trunk and branch yourself.  Indicate in the release
- branch commit log that there is no need to merge the commit to the
- trunk; start the commit message with "Backport:".  gitmerge.el will
- then exclude that commit from the merge to trunk.
+ change to both trunk and branch yourself.  It could also happen that a
+ change is cherry-picked from master to the release branch, and so
+ doesn't need to be merged back.  In these cases, indicate in the
+ release branch commit log that there is no need to merge the commit to
+ the trunk; start the commit message with "Backport:".  gitmerge.el
+ will then exclude that commit from the merge to trunk.
  
  
  ** Other process information
@@@ -251,9 -253,9 +253,9 @@@ for more information on writing and run
  
  To run tests on the entire Emacs tree, run "make check" from the
  top-level directory.  Most tests are in the directory
 -"test/automated".  From the "test/automated" directory, run "make
 +"test/".  From the "test/" directory, run "make
  <filename>" to run the tests for <filename>.el(c).  See
 -"test/automated/Makefile" for more information.
 +"test/Makefile" for more information.
  
  ** Understanding Emacs Internals.
  
diff --combined ChangeLog.2
index 6d72663d56592dab08192f7b03c665d9a2c96e53,945f7871ddf59fcc16702a7633344bad5e9a5591..6a8f539da462096e38abc3d2f406ff6119fc6673
 +2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      * shr.el (shr-descend): Allow using lambdas in external functions.
 +
 +2015-12-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 +
 +      * admin/gitmerge.el: Tweaks that seemed necessary
 +
 +      * admin/gitmerge.el (gitmerge-skip-regexp): Remove "sync".
 +      (gitmerge-maybe-resume): Provide explicit empty commit message.
 +
 +2015-12-25  Ćukasz Stelmach  <stlman@poczta.fm>  (tiny change)
 +
 +      Use a different port for TLS erc
 +
 +      * lisp/erc/erc.el (erc-default-port-tls): New variable
 +      (bug#19497).
 +      * lisp/erc/erc.el (erc-tls): Use it.
 +
 +2015-12-25  Alain Schneble  <a.s@realize.ch>
 +
 +      Make relative URL parsing and resolution consistent with RFC 3986 (bug#22044)
 +
 +      * test/lisp/url/url-parse-tests.el: Add tests covering url-generic-parse-url.
 +      * test/lisp/url/url-expand-tests.el: Add tests covering url-expand-file-name.
 +      * lisp/url/url-parse.el (url-generic-parse-url): Keep empty fragment
 +      information in URL-struct.
 +      * lisp/url/url-parse.el (url-path-and-query): Do not artificially turn empty
 +      path and query into nil path and query, respectively.
 +      * lisp/url/url-expand.el (url-expander-remove-relative-links): Do not turn
 +      empty path into an absolute ("/") path.
 +      * lisp/url/url-expand.el (url-expand-file-name): Properly resolve
 +      fragment-only URIs. Do not just return them unchanged.
 +      * lisp/url/url-expand.el (url-default-expander): An empty path in the relative
 +      reference URI should not drop the last segment.
 +
 +2015-12-25  Alain Schneble  <a.s@realize.ch>
 +
 +      Make relative URL parsing and resolution consistent with RFC 3986 (bug#22044)
 +
 +      * test/lisp/url/url-parse-tests.el: Add tests covering url-generic-parse-url.
 +      * test/lisp/url/url-expand-tests.el: Add tests covering url-expand-file-name.
 +      * lisp/url/url-parse.el (url-generic-parse-url): Keep empty fragment
 +      information in URL-struct.
 +      * lisp/url/url-parse.el (url-path-and-query): Do not artificially turn empty
 +      path and query into nil path and query, respectively.
 +      * lisp/url/url-expand.el (url-expander-remove-relative-links): Do not turn
 +      empty path into an absolute ("/") path.
 +      * lisp/url/url-expand.el (url-expand-file-name): Properly resolve
 +      fragment-only URIs. Do not just return them unchanged.
 +      * lisp/url/url-expand.el (url-default-expander): An empty path in the relative
 +      reference URI should not drop the last segment.
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Let url use default file modes when copying files
 +
 +      * lisp/url/url-handlers.el (url-copy-file): Use default file
 +      modes when copying files (bug#11400).
 +
 +2015-12-25  Devon Sean McCullough  <Emacs-Hacker2012@jovi.net>
 +
 +      Doc fix for url-http
 +
 +      * lisp/url/url-http.el (url-http): Document better return values
 +        (bug#13187) (tiny change)
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      * eww.el (eww-display-html): Support <button> tags (bug#20485).
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Made ffap-url-p a defun instead of a defsubst
 +
 +      * lisp/ffap.el (ffap-url-p): Change from defsusbt to defun,
 +      since there doesn't seem to be much of a reason for it to be a
 +      defsubst (bug#18203).
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Add a command to view files in the browser to dired
 +
 +      * lisp/dired.el (dired-mode-map): Add the `W' command
 +      (bug#18810).
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Allow http://user:pass@foo/ URLs again
 +
 +      * lisp/url/url-auth.el (url-basic-auth): Allow explicit
 +      user/passwords in URLs (bug#19046).
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      * eww.el (eww-mode-map): Fix command name of eww-toggle-colors.
 +
 +2015-12-25  Samer Masterson  <samer@samertm.com>
 +
 +      Autoload url-insert-buffer-contents
 +
 +      * lisp/url/url-handlers.el: Add autoload cookie so that
 +      `package-list-packages' doesn't bug out (bug#21927) (tiny change)
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Allow toggling colors in eww
 +
 +      * doc/misc/eww.texi (Basics): Mention "C".
 +
 +      * lisp/net/eww.el (eww-toggle-colors): New command and keystroke.
 +
 +      * lisp/net/shr.el (shr-use-colors): New variable.
 +      (shr-colorize-region): Use it.
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Follow meta refresh tags in eww
 +
 +      * eww.el (eww-tag-meta): Follow meta refresh tags (bug#22234).
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      More eww file name coding fixes
 +
 +      * eww.el (eww-decode-url-file-name): Use the base coding
 +      system to check for encodability.
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Always save eww history
 +
 +      * eww.el (eww-setup-buffer): Always save history, even when
 +      called from outside the eww buffer (bug#19638).
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Default web pages to right-to-left
 +
 +      * eww.el (eww-mode): Most web pages are left-to-right, so make
 +      that the default (bug#19801).
 +
 +      * shr.el (shr-tag-html): Respect "dir" attributes
 +      (left-to-right, right-to-left).
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Make toggling checkboxes work again
 +
 +      * eww.el (eww-update-field): Make toggling checkboxes work
 +      again (bug#21881).
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Don't store cookies with empty names
 +
 +      * lisp/url/url-cookie.el (url-cookie-store): Refuse to store
 +      cookies with empty names (bug#21936).
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Stop rendering HTML before specdlr exhaustion
 +
 +      Fixes: 22117
 +
 +      * shr.el (shr-descend): Stop rendering before we run out of
 +      specpdl room (bug#22117).
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Use cl-reduce, not reduce.
 +
 +2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Allow several <tbody> tags in shr
 +
 +      * shr.el (shr-table-body): New function to find the real body
 +      of a table.
 +      (shr-tag-table): Use it to render several <tbody> tags in a
 +      table (bug#22170).
 +
 +2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Make prettier unique file names in eww
 +
 +      (eww-make-unique-file-name): Make unique file names by making
 +      files like foo(2).jpg instead of foo(1)(2).jpg.
 +
 +2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Decode hex-encoded URLs before using them as file names
 +
 +      * eww.el (eww-decode-url-file-name): New function.
 +      (eww-download-callback): Use it to decode file names before
 +      saving them.
 +
 +2015-12-24  Ashish SHUKLA  <ashish.is@lostca.se>
 +
 +      Add FreeBSD cert bundle
 +
 +      * doc/misc/emacs-gnutls.texi (Help For Users): Document
 +      FreeBSD bundle.
 +
 +      * lisp/net/gnutls.el (gnutls-trustfiles): Add FreeBSD cert bundle.
 +
 +2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Allow overriding shr functions from eww
 +
 +      * eww.el (eww-display-html): Allow overriding elements in
 +      `shr-external-rendering-functions'.
 +
 +2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      Ignore invalid SVG images
 +
 +      * shr.el (shr-tag-svg): Ignore SVG images that have no width
 +      or height, because these can't be displayed by ImageMagick,
 +      anyway.
 +
 +2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 +
 +      shr table rendering fix
 +
 +      * shr.el (shr-tag-table): Allow rendering body-less tables
 +      that have headers.
 +
 +2015-12-22  Sam Steingold  <sds@gnu.org>
 +
 +      clipboard should still work even if interprogram-* is disabled
 +
 +      (clipboard-yank): When `interprogram-cut-function' is nil,
 +      bind it to `gui-selection-value' - the default value.
 +      (clipboard-kill-region, clipboard-kill-ring-save): When
 +      `interprogram-paste-function' is nil, bind it to `gui-select-text' -
 +      the default value.
 +
 +2015-12-18  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Fix bootstrap issue with dired-loaddefs
 +
 +      * lisp/dired.el: Autoloads for secondary files loaded optionally.
 +
 +2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      dired generate autoloads to non-versioned file.
 +
 +      * lisp/dired.el: Remove autoloads.
 +      * lisp/Makefile.in: Add dired to autogenel.
 +      * lisp/dired-aux.el,lisp/dired-x.el: Update file local.
 +      * test/lisp/dired-tests.el: Add new test.
 +
 +2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      eieio generate autoloads to non-versioned file.
 +
 +      * lisp/Makefile.in: eieio-loaddefs add to autogenel.
 +      * lisp/emacs-lisp/eieio.el,lisp/emacs-lisp/eieio-core.el:
 +        Remove autoloads.
 +      * lisp/emacs-lisp/eieio-compat.el,lisp/emacs-lisp/eieio-custom.el,
 +        lisp/emacs-lisp/eieio-opt.el: Update file local.
 +      * test/lisp/emacs-lisp/eieio-tests/eieio-tests.el: New test.
 +
 +2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      htmlfontify generate autoload to non-versioned file.
 +
 +      * lisp/Makefile.in: Add htmlfontity-loaddefs to autogenel.
 +      * lisp/hfy-cmap.el: Update file local.
 +      * lisp/htmlfontify.el: Remove autoloads, add require.
 +      * test/lisp/htmlfontify-tests.el: Test autoload functionality.
 +
 +2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      ibuffer generate autoloads to non-versioned file.
 +
 +      * lisp/Makefile.in: Add ibuffer-loaddefs to autogenel.
 +      * lisp/ibuf-ext.el: Update file local.
 +      * lisp/ibuffer.el: Remove autoloads and add a require.
 +      * test/lisp/ibuffer-tests.el: Test that autoload is working.
 +
 +2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      rmail generate autoloads to non-versioned file.
 +
 +      * lisp/Makefile.in: Add rmail-loaddefs.el to autogenel.
 +      * lisp/mail/rmail.el: Remove autoloads, add require.
 +      * lisp/mail/rmailedit.el,lisp/mail/rmailkwd.el,
 +        lisp/mail/rmailmm.el,lisp/mail/rmailmsc.el,
 +        lisp/mail/rmailsort.el,lisp/mail/rmailsum.el,
 +        lisp/mail/undigest.el: Update file-local.
 +      * test/lisp/mail/rmail-tests.el:
 +
 +2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Add autoload-force target.
 +
 +      * lisp/Makefile.in (autoload-force): New target.
 +
 +2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      ps-print generate autoloads to non versioned file.
 +
 +      * lisp/Makefile.in: Add ps-print-loaddefs.el to autogen list.
 +      * lisp/ps-print.el: Remove autoloads.
 +      * lisp/ps-mule.el: Update file-local.
 +      * test/lisp/ps-print-tests.el: Test autoload functionality.
 +
 +2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      reftex generate autoloads to non versioned file.
 +
 +      * lisp/Makefile.in: Add reftex-loaddefs to autogen files
 +      * lisp/textmodes/reftex.el: Remove autoloads.
 +      * lisp/textmodes/reftex-auc.el,lisp/textmodes/reftex-cite.el,
 +        lisp/textmodes/reftex-dcr.el,lisp/textmodes/reftex-global.el,
 +        lisp/textmodes/reftex-index.el,lisp/textmodes/reftex-parse.el,
 +        lisp/textmodes/reftex-ref.el,lisp/textmodes/reftex-sel.el,
 +        lisp/textmodes/reftex-toc.el: Update autoload file-local.
 +      * test/lisp/textmodes/reftex-tests.el: Add test of an autoloaded
 +        function.
 +
 +2015-12-07  Stefan Monnier  <monnier@iro.umontreal.ca>
 +
 +      * lisp/calculator.el (calculator-define-key): Undo last change
 +
 +      Make map argument mandatory instead (bug#22106).
 +      (calculator-add-operators): Pass the argument that's not optional any more.
 +
 +2015-12-03  Glenn Morris  <rgm@gnu.org>
 +
 +      * Makefile.in: Avoid duplication.
 +
 +      (have-tests): New rule.
 +      (check, check-maybe): Use it.
 +
 +2015-12-02  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      make check unconditional, check-maybe top-level.
 +
 +       * Makefile.in: Add check-maybe target.
 +       * test/Makefile.in: Restore unconditional behaviour to make check.
 +
 +2015-12-01  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Tests now support out-of-source-build.
 +
 +       * tests/Makefile.in,test/make-test-deps.emacs-lisp: Remove assumptions
 +         about current working directory.
 +
 +2015-12-01  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * lisp/emacs-lisp/let-alist.el: Now an Elpa :core package
 +
 +2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Improve documentation and clean up.
 +
 +       * test/Makefile.in: Improve documentation, use EMACS variable
 +         correctly, and clean up makefile rules.
 +
 +2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Update file headers for name change.
 +
 +       * (test/src/decompress-tests.el, test/src/alloc-tests.el): Update headers.
 +
 +2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Test files renamed to new scheme.
 +
 +       * (finalizer-tests.el): Now renamed alloc-tests.el
 +       * (zlib-tests.el): Now renamed decompress-tests.el.
 +
 +2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Tests now depend on source files
 +
 +       * test/Makefile.in: Include dependences from tests to source files.
 +       * test/make-test-deps.emacs-lisp: New file
 +       * .gitignore: Ignore generated make include file
 +
 +2015-11-30  Stefan Monnier  <monnier@iro.umontreal.ca>
 +
 +      * lisp/progmodes/which-func.el: Improve disabling the mode
 +
 +      Use lexical-binding.
 +      (which-func-modes, which-func-non-auto-modes, which-func-maxout)
 +      (which-func, which-func-format): Remove redundant :group arg.
 +      (which-func-try-to-enable): New function.
 +      (which-func-ff-hook, which-function-mode): Use it.
 +      (mode-line-misc-info): Add ourselves here instead of in bindings.el.
 +      * lisp/bindings.el (mode-line-misc-info): Remove which-func-mode entry.
 +
 +2015-11-30  Stefan Monnier  <monnier@iro.umontreal.ca>
 +
 +      * lisp/calculator.el (calculator-define-key): Silence warning
 +
 +      ...about unknown calculator-mode-map.
 +
 +2015-11-29  Eli Barzilay  <eli@barzilay.org>
 +
 +      * lisp/calculator.el: more improvements and bugfixes.
 +
 +      - Mark `calculator-paste-decimals' as obsolete.  (It wasn't having an
 +        effect anyway.)
 +
 +      - Simplify `calculator-number-to-string' by throwing most of the work
 +        onto `number-to-string', leaving just some tweaks for decimal inputs.
 +        This leads to some minor changes, for example, pasting "1x1" in hex
 +        mode would warn that "x" is ignored and result in "11" (and it wasn't
 +        done in decimal mode), whereas now it just ignores everything from the
 +        "x" and on and result in a "1" just like in decimal input mode.  Also,
 +        overflows are left for `number-to-string' to deal with.
 +
 +      - `calculator-paste' is very simple as a result.
 +
 +      - Extend the simplified `calculator-paste': with a prefix argument it
 +        pastes a string as if the characters were entered.  This can be used
 +        to reduce expressions, but note that it's a simple literal operation,
 +        so precedence can be messed, a number can be paster while entering a
 +        number, spaces and newlines matter, etc.
 +
 +      - Fix a minor bug where "e+" in hex mode wouldn't use "+" as an
 +        operator.
 +
 +      - Fix a bug in `calculator-put-value': avoid grouping in the display
 +        that is used to construct `calculator-curnum'.  This would trigger
 +        when pasting or getting a value from a register in some radix mode
 +        with a large enough value.  Another fix: make the output radix equal
 +        the input one, otherwise numbers could be converted twice.
 +
 +2015-11-29  Eli Barzilay  <eli@barzilay.org>
 +
 +      * lisp/calculator.el: Re-do key bindings.
 +
 +      Use a helper function that arranges a parent keymap that binds alternate
 +      case keys so if some letter key is unbound and it's un/shifted version
 +      is, it will get used.  This makes the global-map trickery unnecessary.
 +
 +      Also switch to passing strings that name keys through `kbd'.
 +
 +2015-11-29  Eli Barzilay  <eli@barzilay.org>
 +
 +      * lisp/calculator.el: improve radix modes
 +
 +      Fix prompt for some input radix with decimal output (eg, "BD" instead of
 +      the incorrect "B="); also, some minor docstring tweaks for these.
 +
 +2015-11-29  Eli Barzilay  <eli@barzilay.org>
 +
 +      * lisp/calculator.el: better reading of register names
 +
 +      Use `register-read-with-preview' with a dynamically bound
 +      `register-alist' and a proper preview function to read register names.
 +
 +2015-11-29  Eli Barzilay  <eli@barzilay.org>
 +
 +      * lisp/calculator.el: General improvements
 +
 +      Use things like `when', `unless', and `push'.
 +
 +      Improve `calculator-last-input' so it doesn't barf when hitting `F1' in
 +      non-electric mode.
 +
 +2015-11-28  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Fix a problem with gfilenotify in filenotify-tests.el
 +
 +      * test/lisp/filenotify-tests.el
 +      (file-notify--test-expected-events): Remove.
 +      (file-notify--test-cleanup): Do not set that variable.
 +      (file-notify--test-with-events): EVENTS can also be a list of lists.
 +      (file-notify-test02-events, file-notify-test04-file-validity):
 +      Adapt expected result.
 +
 +2015-11-28  Eli Zaretskii  <eliz@gnu.org>
 +
 +      * .gitignore: Adjust to changes in 'test' directory structure.
 +
 +2015-11-28  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Fix test/manual/etags/Makefile
 +
 +      * test/manual/etags/Makefile (ETAGS_PROG, CTAGS_PROG): Adjust to
 +      changes in 'test' directory structure.
 +
 +2015-11-27  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Exclude resource dirs from search for tests.
 +
 +      * test/Makefile.in: Test file locations are now found with find
 +        rather than using finds native functions.
 +
 +2015-11-27  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Add test targets without directory names.
 +
 +       * (test/Makefile.in): Extend test_template to add two targets for each
 +         file.
 +
 +2015-11-27  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * lisp/emacs-lisp/package.el: Require url-handlers
 +
 +2015-11-27  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Move elisp-mode-tests to new function names.
 +
 +       * test/lisp/progmodes/elisp-mode-tests.el (find-defsdefun-c-defvar-c,
 +       find-defs-defun-el-defvar-c): Call `elisp--xref-find-definitions'.
 +
 +2015-11-27  Juanma Barranquero  <lekktu@gmail.com>
 +
 +      * lisp/emacs-lisp/package.el: Declare `url-insert-buffer-contents'
 +
 +2015-11-26  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Merge branch 'feature/standard-test-location'
 +
 +2015-11-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 +
 +      * lisp/emacs-lisp/eieio.el: Add some default implementations
 +
 +      (standard-class): Mark it obsolete.
 +      (slot-missing): Give it a default implementation.
 +      (destructor): Simplify and mark it obsolete.
 +      (object-print): Give it a default implementation.
 +      (eieio-change-class): Rename from change-class.
 +      (change-class): Redefine as obsolete alias.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Some final fixes in file notification before merging with master
 +
 +      * lisp/filenotify.el (file-notify--rm-descriptor): Remove WHAT arg.
 +      (file-notify-callback): Improve check for `stopped' event.  Call
 +      `file-notify-rm-watch' rather than `file-notify--rm-descriptor'.
 +      (file-notify-add-watch): In case FILE is not a directory, call the
 +      file monitor for the kqueue backend.  Otherwise, call the
 +      directory monitor for the upper directory.
 +
 +      * src/inotify.c (inotifyevent_to_event): Extract file name from
 +      watch_object if the event doesn't provide it.
 +      (Finotify_add_watch): Add file name to watch_object.
 +
 +      * test/automated/file-notify-tests.el (file-notify--test-timeout):
 +      Use different timeouts for different libraries.
 +      (file-notify--test-with-events): Suppress lock files.  Flush
 +      outstanding events before running the body.
 +      (file-notify-test02-events, file-notify-test04-file-validity): Do
 +      not skip cygwin tests.  Add additional test for file creation.
 +      Adapt expected result for different backends.
 +      (file-notify-test03-autorevert): Some of the tests don't work for
 +      w32notify.
 +      (file-notify-test06-many-events): Rename into both directions.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Rework file notifications, kqueue has problems with directory monitors
 +
 +      * lisp/filenotify.el (file-notify-add-watch): Call the native
 +      add-watch function on the file, not on the dir.
 +
 +      * src/kqueue.c (kqueue_compare_dir_list): Make also bookkeeping
 +      about already deleted entries.
 +
 +      * test/automated/auto-revert-tests.el
 +      (auto-revert-test01-auto-revert-several-files): Do not call "cp -f"
 +      since this deletes the target file first.
 +
 +      * test/automated/file-notify-tests.el (file-notify--test-event-test):
 +      Make stronger checks.
 +      (file-notify-test01-add-watch, file-notify-test02-events)
 +      (file-notify-test04-file-validity, file-notify-test05-dir-validity):
 +      Rewrite in order to call file monitors but directory monitors.
 +      (file-notify-test06-many-events): Ler rename work in both directions.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Continue with pending events
 +
 +      * src/kqueue.c (pending_events): Remove global variable.
 +      (kqueue_compare_dir_list): Create `write' event for not used
 +      pending events.
 +      (globals_of_kqueue): Remove initialization of pending_events.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Improve loops in file-notify-test06-many-events
 +
 +      * test/automated/file-notify-tests.el (file-notify-test06-many-events):
 +      Use `read-event' pauses for the `write-file' loops; otherwise
 +      events are lost in inotify and gfilenotify cases.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Handle more complex rename operation in kqueue
 +
 +      * src/kqueue.c (pending_events): New variable.
 +      (kqueue_compare_dir_list): Handle more complex rename operation.
 +      (globals_of_kqueue): Initialize pending_events.
 +
 +      * test/automated/file-notify-tests.el (file-notify-test06-many-events):
 +      Adapt expected events in the `rename-file' case.
 +      (file-notify-test06-many-events-remote): Declare.
 +
 +2015-11-25  Wolfgang Jenkner  <wjenkner@inode.at>
 +
 +      New test with a larger number of events
 +
 +      * test/automated/file-notify-tests.el (file-notify--test-with-events):
 +      Make timeout heuristically depend on the number of events.
 +
 +      (file-notify-test06-many-events): Use it for new test.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Further fixes for kqueue
 +
 +      * lisp/filenotify.el (file-notify-callback): Raise also event if
 +      directory name matches.
 +      (file-notify-add-watch): Add `create' to the flags for `kqueue'.
 +
 +      * src/kqueue.c (kqueue_generate_event): Use watch_object as
 +      argument instead of ident.  Remove callback argument.  Adapt
 +      callees.  Check actions whether they are monitored flags.
 +
 +      * test/automated/file-notify-tests.el (file-notify--test-library):
 +      New defun.
 +      (file-notify-test00-availability, file-notify-test02-events)
 +      (file-notify-test04-file-validity)
 +      (file-notify-test05-dir-validity): Use it.
 +      (file-notify-test02-events, file-notify-test04-file-validity): Add
 +      `read-event' calls between different file actions, in order to
 +      give the backends a chance to rais an event.  Needed especially
 +      for kqueue.  In case of deleting a directory, there are two
 +      `deleted' events.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Code cleanup of kqueue.c
 +
 +      * src/kqueue.c (kqueue_directory_listing): Skip "." and "..".
 +      (kqueue_compare_dir_list): Do not loop when calling
 +      directory_files_internal.  Remove checks for "." and "..", this is
 +      done in kqueue_directory_listing now.
 +      (Fkqueue_add_watch): Check for proper emacs_open flags.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Doc changes for kqueue
 +
 +      * doc/lispref/os.texi (File Notifications): Add kqueue as backend.
 +      Fix some glitches in the example.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Finish implementation in kqueue.c
 +
 +      * src/kqueue.c (kqueue_directory_listing, kqueue_callback):
 +      Simplify access to list.
 +      (kqueue_compare_dir_list): Simplify access to list.  Raise
 +      `delete' event if directory does not exist any longer.  Otherwise,
 +      wait until directory contents has changed.  Fix error in check.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      * lisp/filenotify.el (file-notify-add-watch): Fix thinko.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      More work on kqueue
 +
 +      * lisp/filenotify.el (file-notify-callback): Handle also the
 +      `rename' event from kqueue.
 +      (file-notify-add-watch): Do not register an entry twice.
 +
 +      * src/kqueue.c (kqueue_directory_listing): New function.
 +      (kqueue_generate_event): New argument FILE1.  Adapt callees.
 +      (kqueue_compare_dir_list): Rewrite in order to make it more robust.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Implement directory events
 +
 +      * lisp/filenotify.el (file-notify-handle-event)
 +      (file-notify-callback): Remove traces.
 +
 +      * src/kqueue.c: Include <sys/time.h>.
 +      (kqueue_generate_event, kqueue_compare_dir_list): New functions.
 +      (kqueue_callback): Use them.  Call kevent() with a zero timeout.
 +      (Fkqueue_add_watch): Adapt docstring.  Support directory events.
 +      Compute initial directory listing.  Close file descriptor in case
 +      of errors.
 +      (syms_of_kqueue): Declare Qcreate.
 +
 +2015-11-25  Wolfgang Jenkner  <wjenkner@inode.at>
 +
 +      Build fixes for kqueue support
 +
 +      * src/kqueue.c (Fkqueue_add_watch): O_BINARY is not a POSIX open(3)
 +      flag.
 +
 +      * configure.ac (HAVE_KQUEUE): There is no pkg-config module for native
 +      kqueue on *BSD.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Continue kqueue implementation
 +
 +      * lisp/filenotify.el (file-notify-handle-event)
 +      (file-notify-callback): Enable trace messages.
 +
 +      * src/kqueue.c: Include also <sys/types.h>.
 +      (kqueue_callback): Remove watch in case of NOTE_DELETE or NOTE_RENAME.
 +      (Fkqueue_rm_watch, Fkqueue_valid_p): New functions.
 +      (syms_of_kqueue): Add them.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Work on kqueue
 +
 +      * lisp/filenotify.el (file-notify--library)
 +      (file-notify-descriptors, file-notify-callback)
 +      (file-notify-add-watch, file-notify-rm-watch)
 +      (file-notify-valid-p): Add kqueue support.
 +
 +      * src/keyboard.c (make_lispy_event): Check also for HAVE_KQUEUE.
 +
 +2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Add kqueue support
 +
 +      * configure.ac (--with-file-notification): Add kqueue.
 +      (top): Remove special test for "${HAVE_NS}" and
 +      ${with_file_notification}, this is handled inside gfilenotify
 +      tests.  Add kqueue tests.  Use NOTIFY_CFLAGS and NOTIFY_LIBS
 +      instead of library specific variables.
 +
 +      * src/Makefile.in: Use NOTIFY_CFLAGS and NOTIFY_LIBS.
 +
 +      * src/emacs.c (main): Call globals_of_kqueue and syms_of_kqueue.
 +
 +      * src/kqueue.c: New file.
 +
 +      * src/lisp.h: Declare extern globals_of_kqueue and syms_of_kqueue.
 +
 +2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Update elisp-mode-tests for changed file location.
 +
 +       * test/lisp/progmodes/elisp-mode-tests.el:
 +
 +2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Exclude manual tests from Makefile
 +
 +       * test/Makefile.in:
 +
 +2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Move package test files to new directory.
 +
 +       * test/lisp/emacs-lisp/package-tests.el: Update resoruce file location.
 +       * test/data/package: Moved to test/lisp/emacs-lisp/package-resources
 +
 +2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Restore delete Makefiles and fix .gitignore.
 +
 +       * .gitignore: Update Makefiles to changed locations
 +       * test/lisp/progmodes/flymake-resources/Makefile,
 +         test/manual/etags/Makefile,
 +         test/manual/etags/make-src/Makefile,
 +         test/manual/indent/Makefile: Restored and moved to new location.
 +
 +2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Test infrastructure: updates after directory move
 +
 +       * (test/Makefile.in): Support directories several levels deep.
 +       * (test/data/flymake): Rename to test/lisp/progmodes/flymake-resources.
 +       * (test/lisp/progmodes/flymake-tests.el): Support renamed resource directory.
 +
 +2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
 +
 +      Rename all test files to reflect source layout.
 +
 +       * CONTRIBUTE,Makefile.in,configure.ac: Update to reflect
 +         test directory moves.
 +       * test/file-organisation.org: New file.
 +       * test/automated/Makefile.in
 +         test/automated/data/decompress/foo.gz
 +         test/automated/data/epg/pubkey.asc
 +         test/automated/data/epg/seckey.asc
 +         test/automated/data/files-bug18141.el.gz
 +         test/automated/data/flymake/test.c
 +         test/automated/data/flymake/test.pl
 +         test/automated/data/package/archive-contents
 +         test/automated/data/package/key.pub
 +         test/automated/data/package/key.sec
 +         test/automated/data/package/multi-file-0.2.3.tar
 +         test/automated/data/package/multi-file-readme.txt
 +         test/automated/data/package/newer-versions/archive-contents
 +         test/automated/data/package/newer-versions/new-pkg-1.0.el
 +         test/automated/data/package/newer-versions/simple-single-1.4.el
 +         test/automated/data/package/package-test-server.py
 +         test/automated/data/package/signed/archive-contents
 +         test/automated/data/package/signed/archive-contents.sig
 +         test/automated/data/package/signed/signed-bad-1.0.el
 +         test/automated/data/package/signed/signed-bad-1.0.el.sig
 +         test/automated/data/package/signed/signed-good-1.0.el
 +         test/automated/data/package/signed/signed-good-1.0.el.sig
 +         test/automated/data/package/simple-depend-1.0.el
 +         test/automated/data/package/simple-single-1.3.el
 +         test/automated/data/package/simple-single-readme.txt
 +         test/automated/data/package/simple-two-depend-1.1.el
 +         test/automated/abbrev-tests.el
 +         test/automated/auto-revert-tests.el
 +         test/automated/calc-tests.el
 +         test/automated/icalendar-tests.el
 +         test/automated/character-fold-tests.el
 +         test/automated/comint-testsuite.el
 +         test/automated/descr-text-test.el
 +         test/automated/electric-tests.el
 +         test/automated/cl-generic-tests.el
 +         test/automated/cl-lib-tests.el
 +         test/automated/eieio-test-methodinvoke.el
 +         test/automated/eieio-test-persist.el
 +         test/automated/eieio-tests.el
 +         test/automated/ert-tests.el
 +         test/automated/ert-x-tests.el
 +         test/automated/generator-tests.el
 +         test/automated/let-alist.el
 +         test/automated/map-tests.el
 +         test/automated/advice-tests.el
 +         test/automated/package-test.el
 +         test/automated/pcase-tests.el
 +         test/automated/regexp-tests.el
 +         test/automated/seq-tests.el
 +         test/automated/subr-x-tests.el
 +         test/automated/tabulated-list-test.el
 +         test/automated/thunk-tests.el
 +         test/automated/timer-tests.el
 +         test/automated/epg-tests.el
 +         test/automated/eshell.el
 +         test/automated/faces-tests.el
 +         test/automated/file-notify-tests.el
 +         test/automated/auth-source-tests.el
 +         test/automated/gnus-tests.el
 +         test/automated/message-mode-tests.el
 +         test/automated/help-fns.el
 +         test/automated/imenu-test.el
 +         test/automated/info-xref.el
 +         test/automated/mule-util.el
 +         test/automated/isearch-tests.el
 +         test/automated/json-tests.el
 +         test/automated/bytecomp-tests.el
 +         test/automated/coding-tests.el
 +         test/automated/core-elisp-tests.el
 +         test/automated/decoder-tests.el
 +         test/automated/files.el
 +         test/automated/font-parse-tests.el
 +         test/automated/lexbind-tests.el
 +         test/automated/occur-tests.el
 +         test/automated/process-tests.el
 +         test/automated/syntax-tests.el
 +         test/automated/textprop-tests.el
 +         test/automated/undo-tests.el
 +         test/automated/man-tests.el
 +         test/automated/completion-tests.el
 +         test/automated/dbus-tests.el
 +         test/automated/newsticker-tests.el
 +         test/automated/sasl-scram-rfc-tests.el
 +         test/automated/tramp-tests.el
 +         test/automated/obarray-tests.el
 +         test/automated/compile-tests.el
 +         test/automated/elisp-mode-tests.el
 +         test/automated/f90.el
 +         test/automated/flymake-tests.el
 +         test/automated/python-tests.el
 +         test/automated/ruby-mode-tests.el
 +         test/automated/subword-tests.el
 +         test/automated/replace-tests.el
 +         test/automated/simple-test.el
 +         test/automated/sort-tests.el
 +         test/automated/subr-tests.el
 +         test/automated/reftex-tests.el
 +         test/automated/sgml-mode-tests.el
 +         test/automated/tildify-tests.el
 +         test/automated/thingatpt.el
 +         test/automated/url-future-tests.el
 +         test/automated/url-util-tests.el
 +         test/automated/add-log-tests.el
 +         test/automated/vc-bzr.el
 +         test/automated/vc-tests.el
 +         test/automated/xml-parse-tests.el
 +         test/BidiCharacterTest.txt
 +         test/biditest.el
 +         test/cedet/cedet-utests.el
 +         test/cedet/ede-tests.el
 +         test/cedet/semantic-ia-utest.el
 +         test/cedet/semantic-tests.el
 +         test/cedet/semantic-utest-c.el
 +         test/cedet/semantic-utest.el
 +         test/cedet/srecode-tests.el
 +         test/cedet/tests/test.c
 +         test/cedet/tests/test.el
 +         test/cedet/tests/test.make
 +         test/cedet/tests/testdoublens.cpp
 +         test/cedet/tests/testdoublens.hpp
 +         test/cedet/tests/testfriends.cpp
 +         test/cedet/tests/testjavacomp.java
 +         test/cedet/tests/testnsp.cpp
 +         test/cedet/tests/testpolymorph.cpp
 +         test/cedet/tests/testspp.c
 +         test/cedet/tests/testsppcomplete.c
 +         test/cedet/tests/testsppreplace.c
 +         test/cedet/tests/testsppreplaced.c
 +         test/cedet/tests/testsubclass.cpp
 +         test/cedet/tests/testsubclass.hh
 +         test/cedet/tests/testtypedefs.cpp
 +         test/cedet/tests/testvarnames.c
 +         test/etags/CTAGS.good
 +         test/etags/ETAGS.good_1
 +         test/etags/ETAGS.good_2
 +         test/etags/ETAGS.good_3
 +         test/etags/ETAGS.good_4
 +         test/etags/ETAGS.good_5
 +         test/etags/ETAGS.good_6
 +         test/etags/a-src/empty.zz
 +         test/etags/a-src/empty.zz.gz
 +         test/etags/ada-src/2ataspri.adb
 +         test/etags/ada-src/2ataspri.ads
 +         test/etags/ada-src/etags-test-for.ada
 +         test/etags/ada-src/waroquiers.ada
 +         test/etags/c-src/a/b/b.c
 +         test/etags/c-src/abbrev.c
 +         test/etags/c-src/c.c
 +         test/etags/c-src/dostorture.c
 +         test/etags/c-src/emacs/src/gmalloc.c
 +         test/etags/c-src/emacs/src/keyboard.c
 +         test/etags/c-src/emacs/src/lisp.h
 +         test/etags/c-src/emacs/src/regex.h
 +         test/etags/c-src/etags.c
 +         test/etags/c-src/exit.c
 +         test/etags/c-src/exit.strange_suffix
 +         test/etags/c-src/fail.c
 +         test/etags/c-src/getopt.h
 +         test/etags/c-src/h.h
 +         test/etags/c-src/machsyscalls.c
 +         test/etags/c-src/machsyscalls.h
 +         test/etags/c-src/sysdep.h
 +         test/etags/c-src/tab.c
 +         test/etags/c-src/torture.c
 +         test/etags/cp-src/MDiagArray2.h
 +         test/etags/cp-src/Range.h
 +         test/etags/cp-src/burton.cpp
 +         test/etags/cp-src/c.C
 +         test/etags/cp-src/clheir.cpp.gz
 +         test/etags/cp-src/clheir.hpp
 +         test/etags/cp-src/conway.cpp
 +         test/etags/cp-src/conway.hpp
 +         test/etags/cp-src/fail.C
 +         test/etags/cp-src/functions.cpp
 +         test/etags/cp-src/screen.cpp
 +         test/etags/cp-src/screen.hpp
 +         test/etags/cp-src/x.cc
 +         test/etags/el-src/TAGTEST.EL
 +         test/etags/el-src/emacs/lisp/progmodes/etags.el
 +         test/etags/erl-src/gs_dialog.erl
 +         test/etags/f-src/entry.for
 +         test/etags/f-src/entry.strange.gz
 +         test/etags/f-src/entry.strange_suffix
 +         test/etags/forth-src/test-forth.fth
 +         test/etags/html-src/algrthms.html
 +         test/etags/html-src/index.shtml
 +         test/etags/html-src/software.html
 +         test/etags/html-src/softwarelibero.html
 +         test/etags/lua-src/allegro.lua
 +         test/etags/objc-src/PackInsp.h
 +         test/etags/objc-src/PackInsp.m
 +         test/etags/objc-src/Subprocess.h
 +         test/etags/objc-src/Subprocess.m
 +         test/etags/objcpp-src/SimpleCalc.H
 +         test/etags/objcpp-src/SimpleCalc.M
 +         test/etags/pas-src/common.pas
 +         test/etags/perl-src/htlmify-cystic
 +         test/etags/perl-src/kai-test.pl
 +         test/etags/perl-src/yagrip.pl
 +         test/etags/php-src/lce_functions.php
 +         test/etags/php-src/ptest.php
 +         test/etags/php-src/sendmail.php
 +         test/etags/prol-src/natded.prolog
 +         test/etags/prol-src/ordsets.prolog
 +         test/etags/ps-src/rfc1245.ps
 +         test/etags/pyt-src/server.py
 +         test/etags/tex-src/gzip.texi
 +         test/etags/tex-src/nonewline.tex
 +         test/etags/tex-src/testenv.tex
 +         test/etags/tex-src/texinfo.tex
 +         test/etags/y-src/atest.y
 +         test/etags/y-src/cccp.c
 +         test/etags/y-src/cccp.y
 +         test/etags/y-src/parse.c
 +         test/etags/y-src/parse.y
 +         test/indent/css-mode.css
 +         test/indent/js-indent-init-dynamic.js
 +         test/indent/js-indent-init-t.js
 +         test/indent/js-jsx.js
 +         test/indent/js.js
 +         test/indent/latex-mode.tex
 +         test/indent/modula2.mod
 +         test/indent/nxml.xml
 +         test/indent/octave.m
 +         test/indent/pascal.pas
 +         test/indent/perl.perl
 +         test/indent/prolog.prolog
 +         test/indent/ps-mode.ps
 +         test/indent/ruby.rb
 +         test/indent/scheme.scm
 +         test/indent/scss-mode.scss
 +         test/indent/sgml-mode-attribute.html
 +         test/indent/shell.rc
 +         test/indent/shell.sh
 +         test/redisplay-testsuite.el
 +         test/rmailmm.el
 +         test/automated/buffer-tests.el
 +         test/automated/cmds-tests.el
 +         test/automated/data-tests.el
 +         test/automated/finalizer-tests.el
 +         test/automated/fns-tests.el
 +         test/automated/inotify-test.el
 +         test/automated/keymap-tests.el
 +         test/automated/print-tests.el
 +         test/automated/libxml-tests.el
 +         test/automated/zlib-tests.el: Files Moved.
 +
 +2015-11-20  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Rework file notifications, kqueue has problems with directory monitors
 +
 +      * lisp/filenotify.el (file-notify-add-watch): Call the native
 +      add-watch function on the file, not on the dir.
 +
 +      * src/kqueue.c (kqueue_compare_dir_list): Make also bookkeeping
 +      about already deleted entries.
 +
 +      * test/automated/auto-revert-tests.el
 +      (auto-revert-test01-auto-revert-several-files): Do not call "cp -f"
 +      since this deletes the target file first.
 +
 +      * test/automated/file-notify-tests.el (file-notify--test-event-test):
 +      Make stronger checks.
 +      (file-notify-test01-add-watch, file-notify-test02-events)
 +      (file-notify-test04-file-validity, file-notify-test05-dir-validity):
 +      Rewrite in order to call file monitors but directory monitors.
 +      (file-notify-test06-many-events): Ler rename work in both directions.
 +
 +2015-11-19  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Continie with pending events
 +
 +      * src/kqueue.c (pending_events): Remove global variable.
 +      (kqueue_compare_dir_list): Create `write' event for not used
 +      pending events.
 +      (globals_of_kqueue): Remove initialization of pending_events.
 +
 +2015-11-19  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Improve loops in file-notify-test06-many-events
 +
 +      * test/automated/file-notify-tests.el (file-notify-test06-many-events):
 +      Use `read-event' pauses for the `write-file' loops; otherwise
 +      events are lost in inotify and gfilenotify cases.
 +
 +2015-11-19  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Handle more complex rename operation in kqueue
 +
 +      * src/kqueue.c (pending_events): New variable.
 +      (kqueue_compare_dir_list): Handle more complex rename operation.
 +      (globals_of_kqueue): Initialize pending_events.
 +
 +      * test/automated/file-notify-tests.el (file-notify-test06-many-events):
 +      Adapt expected events in the `rename-file' case.
 +      (file-notify-test06-many-events-remote): Declare.
 +
 +2015-11-18  Wolfgang Jenkner  <wjenkner@inode.at>
 +
 +      New test with a larger number of events.
 +
 +      * test/automated/file-notify-tests.el (file-notify--test-with-events):
 +      Make timeout heuristically depend on the number of events.
 +
 +      (file-notify-test06-many-events): Use it for new test.
 +
 +2015-11-18  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Further fixes for kqueue.
 +
 +      * lisp/filenotify.el (file-notify-callback): Raise also event if
 +      directory name matches.
 +      (file-notify-add-watch): Add `create' to the flags for `kqueue'.
 +
 +      * src/kqueue.c (kqueue_generate_event): Use watch_object as
 +      argument instead of ident.  Remove callback argument.  Adapt
 +      callees.  Check actions whether they are monitored flags.
 +
 +      * test/automated/file-notify-tests.el (file-notify--test-library):
 +      New defun.
 +      (file-notify-test00-availability, file-notify-test02-events)
 +      (file-notify-test04-file-validity)
 +      (file-notify-test05-dir-validity): Use it.
 +      (file-notify-test02-events, file-notify-test04-file-validity): Add
 +      `read-event' calls between different file actions, in order to
 +      give the backends a chance to rais an event.  Needed especially
 +      for kqueue.  In case of deleting a directory, there are two
 +      `deleted' events.
 +
 +2015-11-17  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Code cleanup of kqueue.c
 +
 +      * src/kqueue.c (kqueue_directory_listing): Skip "." and "..".
 +      (kqueue_compare_dir_list): Do not loop when calling
 +      directory_files_internal.  Remove checks for "." and "..", this is
 +      done in kqueue_directory_listing now.
 +      (Fkqueue_add_watch): Check for proper emacs_open flags.
 +
 +2015-11-16  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Doc changes for kqueue
 +
 +      * doc/lispref/os.texi (File Notifications): Add kqueue as backend.
 +      Fix some glitches in the example.
 +
 +2015-11-16  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Finish implementation in kqueue.c
 +
 +      * src/kqueue.c (kqueue_directory_listing, kqueue_callback):
 +      Simplify access to list.
 +      (kqueue_compare_dir_list): Simplify access to list.  Raise
 +      `delete' event if directory does not exist any longer.  Otherwise,
 +      wait until directory contents has changed.  Fix error in check.
 +
 +2015-11-16  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      * lisp/filenotify.el (file-notify-add-watch): Fix thinko.
 +
 +2015-11-15  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      More work on kqueue
 +
 +      * lisp/filenotify.el (file-notify-callback): Handle also the
 +      `rename' event from kqueue.
 +      (file-notify-add-watch): Do not register an entry twice.
 +
 +      * src/kqueue.c (kqueue_directory_listing): New function.
 +      (kqueue_generate_event): New argument FILE1.  Adapt callees.
 +      (kqueue_compare_dir_list): Rewrite in order to make it more robust.
 +
 +2015-11-14  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Implement directory events
 +
 +      * lisp/filenotify.el (file-notify-handle-event)
 +      (file-notify-callback): Remove traces.
 +
 +      * src/kqueue.c: Include <sys/time.h>.
 +      (kqueue_generate_event, kqueue_compare_dir_list): New functions.
 +      (kqueue_callback): Use them.  Call kevent() with a zero timeout.
 +      (Fkqueue_add_watch): Adapt docstring.  Support directory events.
 +      Compute initial directory listing.  Close file descriptor in case
 +      of errors.
 +      (syms_of_kqueue): Declare Qcreate.
 +
 +2015-11-11  Wolfgang Jenkner  <wjenkner@inode.at>
 +
 +      Build fixes for kqueue support.
 +
 +      * src/kqueue.c (Fkqueue_add_watch): O_BINARY is not a POSIX open(3)
 +      flag.
 +
 +      * configure.ac (HAVE_KQUEUE): There is no pkg-config module for native
 +      kqueue on *BSD.
 +
 +2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Continue kqueue implementation
 +
 +      * lisp/filenotify.el (file-notify-handle-event)
 +      (file-notify-callback): Enable trace messages.
 +
 +      * src/kqueue.c: Include also <sys/types.h>.
 +      (kqueue_callback): Remove watch in case of NOTE_DELETE or NOTE_RENAME.
 +      (Fkqueue_rm_watch, Fkqueue_valid_p): New functions.
 +      (syms_of_kqueue): Add them.
 +
 +2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Work on kqueue
 +
 +      * lisp/filenotify.el (file-notify--library)
 +      (file-notify-descriptors, file-notify-callback)
 +      (file-notify-add-watch, file-notify-rm-watch)
 +      (file-notify-valid-p): Add kqueue support.
 +
 +      * src/keyboard.c (make_lispy_event): Check also for HAVE_KQUEUE.
 +
 +2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Add kqueue support
 +
 +      * configure.ac (--with-file-notification): Add kqueue.
 +      (top): Remove special test for "${HAVE_NS}" and
 +      ${with_file_notification}, this is handled inside gfilenotify
 +      tests.  Add kqueue tests.  Use NOTIFY_CFLAGS and NOTIFY_LIBS
 +      instead of library specific variables.
 +
 +      * src/Makefile.in: Use NOTIFY_CFLAGS and NOTIFY_LIBS.
 +
 +      * src/emacs.c (main): Call globals_of_kqueue and syms_of_kqueue.
 +
 +      * src/kqueue.c: New file.
 +
 +      * src/lisp.h: Declare extern globals_of_kqueue and syms_of_kqueue.
 +
 +2015-11-21  Wilson Snyder  <wsnyder@wsnyder.org>
 +
 +      verilog-mode.el: Commentary and fix pre-Emacs 21 behavior.
 +
 +      * verilog-mode.el (verilog-save-font-no-change-functions):
 +      Commentary and fix pre-Emacs 21 behavior.
 +
 +2015-11-19  PrzemysƂaw Wojnowski  <esperanto@cumego.com>
 +
 +      Use obarray functions from obarray.
 +
 +      * lisp/abbrev.el (copy-abbrev-table, abbrev-table-p, make-abbrev-table,
 +        abbrev-table-get, abbrev-table-put, abbrev-table-empty-p,
 +        clear-abbrev-table, define-abbrev, abbrev--symbol, abbrev-table-menu):
 +        delegate to obarray.el functions.
 +      * lisp/loadup.el: load obarray before abbrev
 +      * test/automated/abbrev-tests.el: new tests
 +
 +2015-11-18  Christian Schwarzgruber  <c.schwarzgruber.cs@gmail.com>  (tiny change)
 +
 +      epa.el: Add option to replace original text
 +
 +      * lisp/epa.el (epa-replace-original-text): New user option.
 +      (Bug#21947)
 +
 +2015-11-18  Mark Oteiza  <mvoteiza@udel.edu>
 +
 +      Add interactive seek command.
 +
 +      * lisp/mpc.el (mpc-cmd-seekcur): New function.
 +      (mpc-seek-current): New command.
 +      (mpc-mode-menu): Add entry for mpc-seek-current
 +      (mpc-mode-map): Bind mpc-seek-current to "g"
 +
 +2015-11-18  Mark Oteiza  <mvoteiza@udel.edu>
 +
 +      Fix issue where a new tempfile was created every refresh
 +
 +      * lisp/mpc.el (mpc-format): Leave dir as relative path
 +
 +2015-11-18  Stefan Monnier  <monnier@iro.umontreal.ca>
 +
 +      * lisp/progmodes/cc-defs.el: Use with-silent-modifications
 +
 +      (c-save-buffer-state): Use with-silent-modifications when available.
 +      (c--macroexpand-all): Check macroexpand-all directly rather than
 +      c--mapcan-status.
 +
 +2015-11-18  Stefan Monnier  <monnier@iro.umontreal.ca>
 +
 +      * lisp/loadup.el: Set max-lisp-eval-depth here
 +
 +      * lisp/Makefile.in (BIG_STACK_DEPTH, BIG_STACK_OPTS): Remove.
 +      (BYTE_COMPILE_FLAGS): Adjust accordingly.
 +
 +2015-11-17  JoĂŁo TĂĄvora  <joaotavora@gmail.com>
 +
 +      Minor fix to comment indentation and typo in last commit
 +
 +      * linum.el (linum-update-window): Fix comment indentation and a
 +      typo.
 +
 +2015-11-17  JoĂŁo TĂĄvora  <joaotavora@gmail.com>
 +
 +      linum-mode plays more nicely with other margin-setting extensions
 +
 +      linum.el will only modify the left margin if it needs to, and will
 +      only reset the it back to 0 if it guesses that no-one has touched that
 +      margin in the meantime.
 +
 +      As such, this is a more of a workaround than an actual fix, but fixes
 +      the problems described in bug#20674 regarding the interaction with
 +      modes such as darkroom-mode and olivetti-mode.
 +
 +      A similar fix was commited to nlinum.el in ELPA.git's
 +      e7f5f549fbfb740b911fb7f33b42381ecece56d8
 +
 +      * linum.el (linum-delete-overlays): Restore margins more
 +      criteriously.
 +      (linum-update-window): Set margins more criteriously.
 +
 +2015-11-16  Daiki Ueno  <ueno@gnu.org>
 +
 +      * lisp/image-mode.el: Support encrypted file
 +
 +      (image-toggle-display-image): Read content from the buffer instead
 +      of the file, if the buffer holds a decrypted data.  (Bug#21870)
 +
 +2015-11-15  Juanma Barranquero  <lekktu@gmail.com>
 +
 +      * lisp/progmodes/verilog-mode.el (verilog-save-buffer-state): Add backquote
 +
 +2015-11-15  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * lisp/emacs-lisp/package.el: Fix a decoding issue
 +
 +      (package--with-response-buffer): Use `url-insert-buffer-contents'.
 +      The previous code had some issues with decoding. Refactoring that
 +      function allows us to use the decoding from url-handlers while still
 +      treating both sync and async requests the same.
 +
 +      * lisp/url/url-handlers.el (url-insert-file-contents): Move some code to
 +      `url-insert-buffer-contents'.
 +      (url-insert-buffer-contents): New function
 +
 +2015-11-15  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * lisp/emacs-lisp/package.el: Refactor -with-work-buffer-async
 +
 +      (package--with-work-buffer-async): Reimplement as
 +      `package--with-response-buffer'.
 +      (package--with-work-buffer): Mark obsolete.
 +      (package--with-response-buffer): New macro. This is a more self
 +      contained and less contrived version of
 +      `package--with-work-buffer-async'.  It uses keyword arguments,
 +      doesn't have async on the name, doesn't fallback on
 +      `package--with-work-buffer', and has _much_ simpler error
 +      handling.
 +
 +      (package--check-signature, package--download-one-archive)
 +      (package-install-from-archive, describe-package-1): Use it.
 +
 +      (package--download-and-read-archives): Let
 +      `package--download-one-archive' take care of calling
 +      `package--update-downloads-in-progress'.
 +
 +2015-11-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 +
 +      * lisp/progmodes/verilog-mode.el: Use with-silent-modifications
 +
 +      (verilog-save-buffer-state): Use with-silent-modifications when available.
 +      (verilog-save-font-no-change-functions): Don't bind
 +      before/after-change-functions if it's not needed.
 +
 +2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
 +
 +      * CONTRIBUTE: Remove information about feature freeze.
 +
 +      Merge branch 'release-process-lowercase'
 +
 +2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
 +
 +      Document the release process
 +
 +      * admin/notes/versioning: Add information about RC releases.
 +      * admin/release-process: Document the release process.
 +      * admin/authors.el (authors-ignored-files):
 +      * admin/README: Change FOR-RELEASE to release-process.
 +      * CONTRIBUTE:
 +      * admin/notes/bugtracker: Don't mention FOR-RELEASE.
 +
 +2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
 +
 +      * admin/release-process: Rename from admin/FOR-RELEASE.
 +
 +2015-11-14  David Engster  <deng@randomsample.de>
 +
 +      gitmerge: Fix git log command
 +
 +      * admin/gitmerge.el (gitmerge-missing): Use '--left-only' since we
 +      only want commits from the branch that is to be merged.
 +      (gitmerge-setup-log-buffer): Use the same symmetric range as in
 +      `gitmerge-missing'.
 +
 +2015-11-14  David Engster  <deng@randomsample.de>
 +
 +      gitmerge: Try to detect cherry-picks
 +
 +      * admin/gitmerge.el (gitmerge-default-branch): Change to
 +      origin/emacs-25.
 +      (gitmerge-missing): Use symmetric difference ('...') between
 +      branch and master so that cherry-picks can be detected.
 +
 +2015-11-14  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Increment Emacs version on master branch
 +
 +      * lisp/cus-edit.el (customize-changed-options-previous-release):
 +      Increase previous version to 24.5.
 +
 +      * configure.ac:
 +      * msdos/sed2v2.inp: Bump version to 25.1.50.
 +
 +2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
 +
 +      Mention CONTRIBUTE in README, since it was moved from etc/ to root.
 +      * etc/TODO: Remove the reference to `etc/CONTRIBUTE'.
 +      * README: Mention CONTRIBUTE.
 +
 +2015-11-13  Wilson Snyder  <wsnyder@wsnyder.org>
 +
 +      Update verilog-mode.el to 2015-11-09-b121d60-vpo
 +
 +      * verilog-mode.el (verilog-auto, verilog-delete-auto)
 +      (verilog-modi-cache-results, verilog-save-buffer-state)
 +      (verilog-save-font-no-change-functions): When internally suppressing
 +      change functions, use `inhibit-modification-hooks' and call
 +      `after-change-funtions' to more nicely work with user hooks.
 +      Reported by Stefan Monnier.
 +      (verilog-auto, verilog-delete-auto, verilog-delete-auto-buffer):
 +      Create `verilog-delete-auto-buffer' to avoid double-calling
 +      fontification hooks.
 +      (verilog-restore-buffer-modified-p, verilog-auto)
 +      (verilog-save-buffer-state): Prefer restore-buffer-modified-p over
 +      set-buffer-modified-p.  Reported by Stefan Monnier.
 +      (verilog-diff-auto, verilog-diff-buffers-p)
 +      (verilog-diff-ignore-regexp): Add `verilog-diff-ignore-regexp'.
 +      (verilog-auto-inst-port, verilog-read-sub-decls-expr): Fix
 +      AUTOINST with unpacked dimensional parameters, bug981.  Reported by
 +      by Amol Nagapurkar.
 +      (verilog-read-decls, verilog-read-sub-decls-line): Avoid unneeded
 +      properties inside internal structures.  No functional change
 +      intended.
 +
 +2015-11-13  Dmitry Gutov  <dgutov@yandex.ru>
 +
 +      Use generic dispatch for xref backends
 +
 +      * lisp/progmodes/xref.el (xref-backend-functions):
 +      New variable.
 +      (xref-find-function): Remove.
 +      (xref-find-backend)
 +      (xref--etags-backend): New functions.
 +      (xref-identifier-at-point-function)
 +      (xref-identifier-completion-table-function): Remove.
 +      (xref-backend-definitions, xref-backend-references)
 +      (xref-backend-apropos, xref-backend-identifier-at-point)
 +      (xref-backend-identifier-completion-table):
 +      New generic functions.
 +
 +      * 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.
 +      (elisp--xref-backend): New function.
 +      (elisp--xref-find-references, elisp--xref-find-apropos)
 +      (elisp--xref-identifier-completion-table):
 +      Turn into appropriately named generic methods.
 +
 +      * lisp/progmodes/etags.el (etags-xref-find): Remove.
 +      (xref-backend-identifier-completion-table)
 +      (xref-backend-references, xref-backend-definitions)
 +      (xref-backend-apropos): New generic methods.
 +
 +2015-11-13  Juri Linkov  <juri@linkov.net>
 +
 +      Support rectangular regions for more commands
 +
 +      * 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.
 +      (region-noncontiguous-p): New function.
 +
 +      * lisp/rect.el: Add function rectangle--insert-region
 +      around region-insert-function.
 +      (extract-rectangle-bounds): New function.
 +      (rectangle--extract-region): Handle the arg value â€˜bounds’.
 +      (rectangle--insert-region): New function.
 +
 +      * lisp/emulation/cua-rect.el: Add function cua--insert-rectangle
 +      around region-insert-function.
 +      (cua--extract-rectangle-bounds): New function.
 +      (cua--rectangle-region-extract): Handle the arg value â€˜bounds’.
 +
 +      * lisp/replace.el (query-replace, query-replace-regexp): Add arg
 +      â€˜region-noncontiguous-p’.  Use â€˜use-region-p’.
 +      (query-replace-regexp-eval, map-query-replace-regexp)
 +      (replace-string, replace-regexp): Use â€˜use-region-p’.
 +      (keep-lines, flush-lines, how-many): Use â€˜use-region-p’.
 +      (perform-replace): Add arg â€˜region-noncontiguous-p’.
 +      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)
 +
 +2015-11-13  Dmitry Gutov  <dgutov@yandex.ru>
 +
 +      Handle multiple matches on the same line; add highlighting
 +
 +      * lisp/progmodes/xref.el (xref-location-marker): Interpret the
 +      column value in characters.
 +      (xref--collect-matches): Rename from `xref--collect-match'.
 +      Search for all matches in the hit line.  Add `highlight' face to
 +      the matched region in the summary.  Update both callers.
 +
 +2015-11-13  Dmitry Gutov  <dgutov@yandex.ru>
 +
 +      Replace xref-match-bounds with xref-match-length
 +
 +      Relying on xref-location-marker to point to the beginning of the match
 +
 +      * lisp/progmodes/xref.el (xref-match-bounds): Remove.
 +      (xref-match-length): Add.
 +      (xref-make-match): Change the arguments.
 +      (xref--match-buffer-bounds): Remove.
 +      (xref-match-item): Store length, instead of end-column.
 +      (xref-pulse-momentarily)
 +      (xref--collect-match)
 +      (xref--query-replace-1): Update accordingly.
 +      (xref-query-replace): Ditto.  And check that the search results
 +      are up-to-date.
 +
 +2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
 +
 +      Merge from gnulib
 +
 +      This incorporates:
 +      2015-11-13 xalloc-oversized: improve performance with GCC 5
 +      * lib/xalloc-oversized.h: Copy from gnulib.
 +
 +2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
 +
 +      Spruce up ftfont.c memory allocation
 +
 +      * src/ftfont.c (setup_otf_gstring):
 +      Avoid O(N**2) behavior when reallocating.
 +      (ftfont_shape_by_flt): Prefer xpalloc to xrealloc when
 +      reallocating buffers; this simplifies the code.  Do not trust
 +      mflt_run to leave the output areas unchanged on failure, as
 +      this isn’t part of its interface spec.
 +
 +2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
 +
 +      Port recent XCB changes to 64-bit â€˜long int’
 +
 +      For historical reasons, libX11 represents 32-bit values like Atoms as
 +      â€˜long int’ even on platforms where â€˜long int’ is 64 bits.  XCB doesn’t
 +      do that, so adapt the recent XCB code to behave properly on 64-bit
 +      platforms.  Also, fix what appears to be a bug in the interpretation
 +      of xcb_get_property_value_length, at least on my Fedora platform
 +      which is running libxcb-1.11-5.fc21.
 +      * src/xfns.c (x_real_pos_and_offsets):
 +      * src/xterm.c (get_current_wm_state):
 +      xcb_get_property_value_length returns a byte count, not a word count.
 +      For 32-bit quantities, xcb_get_property_value returns a vector
 +      of 32-bit words, not of (possibly 64-bit) long int.
 +
 +2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
 +
 +      * src/undo.c (run_undoable_change): Now static.
 +
 +2015-11-13  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Remove support for ':timeout' from w32 tray notifications
 +
 +      * src/w32fns.c (Fw32_notification_notify): Delete the code that
 +      supports ':timeout'.
 +      (syms_of_w32fns): Don't DEFSYM ':timeout'.  This avoids clashes
 +      with dbusbind.c when D-Bus is compiled in.
 +
 +      * doc/lispref/os.texi (Desktop Notifications): Don't mention
 +      ':timeout'.
 +
 +2015-11-13  Juanma Barranquero  <lekktu@gmail.com>
 +
 +      * test/automated/simple-test.el: Add test for bug#20698 (bug#21885)
 +      (simple-test--transpositions): New macro.
 +      (simple-transpose-subr): New test.
 +
 +2015-11-13  Juanma Barranquero  <lekktu@gmail.com>
 +
 +      * lisp/progmodes/elisp-mode.el: Declare function `project-roots'
 +
 +2015-11-13  Juanma Barranquero  <lekktu@gmail.com>
 +
 +      * src/undo.c: Small fixes for previous change
 +      (run_undoable_change): Mark void argument list.
 +      (record_property_change): Remove unused variable `boundary'.
 +
 +2015-11-13  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Add a few more variables to redisplay--variables
 +
 +      * lisp/frame.el (redisplay--variables): Add bidi-paragraph-direction
 +      and bidi-display-reordering to the list.
 +
 +2015-11-13  Eli Zaretskii  <eliz@gnu.org>
 +
 +      * lisp/loadup.el: Enlarge the size of the hash table to 80000.
 +
 +2015-11-13  Eli Barzilay  <eli@barzilay.org>
 +
 +      Fix point positioning after transposing with negative arg
 +
 +      * lisp/simple.el (transpose-subr): When invoked with a negative
 +      argument, move point to after the transposed text, like we do
 +      when invoked with a positive argument.  (Bug#21885)
 +
 +2015-11-13  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Fix last change in shr.el
 +
 +      * lisp/net/shr.el (shr--have-one-fringe-p): Rename from
 +      have-fringes-p.  All callers changed.  Doc fix.  (Bug#21895)
 +
 +2015-11-13  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Fix last change
 +
 +      * src/w32fns.c (syms_of_w32fns) [WINDOWSNT && !HAVE_DBUS]:
 +      Don't DEFSYM tray notification symbols if D-Bus is being used.
 +
 +2015-11-13  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Another fix for MinGW64 and Cygwin builds due to notifications
 +
 +      * src/w32fns.c: Ifdef away tray notification code if D-Bus is
 +      being compiled into Emacs.
 +      (syms_of_w32fns) [WINDOWSNT && !HAVE_DBUS]: Don't defsubr
 +      Sw32_notification_notify and Sw32_notification_close if the code
 +      is not compiled.  Reported by Andy Moreton <andrewjmoreton@gmail.com>.
 +
 +2015-11-12  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
 +
 +      Remove intern calls and XXX comments from Fx_export_frames
 +
 +      * src/xfns.c (Fx_export_frames): Use Qpdf, Qpng, Qpostscript, and
 +      Qsvg instead of intern calls.  Use "postscript" instead of "ps"
 +      for consistency with image types.  Remove XXX comments.
 +      (syms_of_xfns) <Qpdf>: DEFSYM it.
 +
 +2015-11-12  Eric Hanchrow  <eric.hanchrow@gmail.com>
 +
 +      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.
 +
 +2015-11-12  Juanma Barranquero  <lekktu@gmail.com>
 +
 +      * test/automated/keymaps-test.el: Fix test to make it repeatable
 +
 +      (keymap-store_in_keymap-FASTINT-on-nonchars): Reset Buffer-menu-mode-map
 +      entry to its initial value to make the test repeatable in interactive
 +      sessions (assuming it doesn't fail and crashes Emacs, of course).
 +
 +2015-11-12  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * test/automated/cl-lib-tests.el (cl-lib-struct-constructors):
 +      Small fix.
 +
 +2015-11-12  Phillip Lord  <phillip.lord@newcastle.ac.uk>
 +
 +      The heuristic that Emacs uses to add an `undo-boundary' has been
 +      reworked, as it interacts poorly with functions on `post-command-hook'
 +      or `after-change-functions'.
 +
 +      * lisp/simple.el: New section added.
 +      * src/cmds.c (remove_excessive_undo_boundaries): Now in lisp.
 +      (self_insert_command): Calls simple.el to amalgamate.
 +      (delete_char): Calls simple.el to amalgamate.
 +      * src/keyboard.c (last_undo_boundary): Removed.
 +      * src/undo.c (run_undoable_change): New function.
 +
 +2015-11-12  Juri Linkov  <juri@linkov.net>
 +
 +      Bind [?\S-\ ] to previous line command in Dired-like modes
 +
 +      * lisp/arc-mode.el (archive-mode-map):
 +      * lisp/dired.el (dired-mode-map):
 +      * lisp/proced.el (proced-mode-map):
 +      * lisp/vc/vc-dir.el (vc-dir-mode-map):
 +      Bind [?\S-\ ] to previous line command.
 +      (Bug#20790)
 +
 +2015-11-12  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Fix the MinGW64 and Cygwin-w32 builds
 +
 +      * src/w32fns.c (MYNOTIFYICONDATAW_V1_SIZE)
 +      (MYNOTIFYICONDATAW_V2_SIZE, MYNOTIFYICONDATAW_V3_SIZE): Define and
 +      use instead of the corresponding NOTIFYICONDATAW_Vn_SIZE macros,
 +      which cause trouble with MinGW42 headers.  Ifdef away tray
 +      notifications code for Cygwin.  Reported by Andy Moreton
 +      <andrewjmoreton@gmail.com>.
 +
 +2015-11-12  Simen HeggestĂžyl  <simenheg@gmail.com>
 +
 +      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.
 +      (json--plist-to-alist): New utility function.
 +      (json-encode-hash-table): Re-use `json-encode-alist' when object keys
 +      are to be sorted.
 +      (json-encode-alist): Sort output by
 +      `json-encoding-object-sort-predicate, when set.
 +      (json-encode-plist): Re-use `json-encode-alist' when object keys are
 +      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.
 +
 +      * test/automated/json-tests.el (test-json-plist-to-alist)
 +      (test-json-encode-plist, test-json-encode-hash-table)
 +      (test-json-encode-alist-with-sort-predicate)
 +      (test-json-encode-plist-with-sort-predicate): New tests.
 +
 +      * etc/NEWS: Add an entry for the new commands.
 +
 +2015-11-12  Juanma Barranquero  <lekktu@gmail.com>
 +
 +      * test/automated/keymap-tests.el: New test file.
 +
 +2015-11-12  Ken Raeburn  <raeburn@raeburn.org>
 +
 +      Speed up x_real_pos_and_offsets using XCB
 +
 +      * src/xfns.c (x_real_pos_and_offsets) [USE_XCB]: Add XCB flavors of
 +      all X calls, and pipeline requests when possible, collecting results
 +      later.  Eliminate use of x_catch_errors (and thus XSync) in XCB case.
 +
 +2015-11-12  Ken Raeburn  <raeburn@raeburn.org>
 +
 +      Enable use of XCB for checking window manager state
 +
 +      * src/xterm.c (get_current_wm_state) [USE_XCB]: Use XCB calls instead
 +      of XGetWindowProperty plus error-catching, since we can explicitly
 +      check for errors in the XCB version.  This eliminates 3 XSync calls on
 +      top of the round-trip actually fetching the information.
 +
 +2015-11-12  Ken Raeburn  <raeburn@raeburn.org>
 +
 +      Detect XCB and save a connection handle
 +
 +      * configure.ac: If using X11, check for XCB libraries and header.
 +      * src/Makefile.in (XCB_LIBS): Define.
 +      (LIBX_EXTRA): Include it.
 +
 +      * src/xterm.h [USE_XCB]: Include X11/Xlib-xcb.h.
 +      (struct x_display_info) [USE_XCB]: Add an XCB connection handle field.
 +      * src/xterm.c (x_term_init) [USE_XCB]: Initialize the new field.
 +
 +2015-11-12  Ken Raeburn  <raeburn@raeburn.org>
 +
 +      Reduce some data dependencies between X calls
 +
 +      Gains nothing in the traditional-Xlib code, but more closely aligns
 +      with how the XCB version will work.
 +
 +      * src/xfns.c (x_real_pos_and_offsets): When translating coordinates,
 +      send coordinates (0,0) to the X server and add in the real coordinates
 +      after getting the response.  Move XGetGeometry for outer window inside
 +      error-trapping block.  Use DPY variable more, since it's available.
 +
 +2015-11-12  Ken Raeburn  <raeburn@raeburn.org>
 +
 +      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.
 +
 +2015-11-12  Eli Barzilay  <eli@barzilay.org>
 +
 +      Add "^" to the interactive specs of `dired-next/previous-line'
 +
 +      * lisp/dired.el (dired-next-line, dired-previous-line): It makes sense
 +      to bind these commands to the arrow keys, and that means that they work
 +      better with a "^" in the `interactive' declaration so selection works
 +      as expected.
 +
 +2015-11-11  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
 +
 +      Sync with soap-client repository, version 3.0.2
 +
 +      * soap-client.el: Bump version to 3.0.2.
 +
 +      * soap-client.el (soap-warning): Use format, not format-message.
 +
 +      * soap-client.el: Add cl-lib to Package-Requires.  Require cl-lib.
 +      (soap-validate-xs-simple-type): Use cl-labels instead of cl-flet.
 +
 +      * soap-client.el: Support Emacs versions that do not have
 +      define-error.
 +
 +      * soap-inspect.el: Remove version header.
 +
 +      * soap-client.el, soap-inspect.el, jira2.el: Fix first line header
 +      format.
 +
 +2015-11-11  Alan Mackenzie  <acm@muc.de>
 +
 +      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.
 +      (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
 +      open-paren-in-column-0-is-defun-start to nil.
 +
 +      * doc/misc/cc-mode.texi (Performance Issues)
 +      (Limitations and Known Bugs): Fix mix up between @chapter and @appendix.
 +
 +2015-11-11  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * lisp/obarray.el: Fix shadowed variables.
 +      (obarray-map, obarray-remove, obarray-put, obarray-get):
 +      Change OBARRAY arg to OB to avoid shadowing â€˜obarray’.
 +
 +2015-11-11  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Avoid error in submitting a form with EWW
 +
 +      * lisp/gnus/mm-url.el (mm-url-form-encode-xwfu): Allow argument
 +      CHUNK to be nil.  (Bug#21881)
 +
 +2015-11-11  Nicolas Petton  <nicolas@petton.fr>
 +
 +      Rename seq-p and map-p to seqp and mapp
 +
 +      * lisp/emacs-lisp/seq.el (seqp): New name.
 +      * lisp/emacs-lisp/map.el (mapp): New name.
 +      * doc/lispref/sequences.texi: Update the documentation for seqp.
 +      * test/automated/map-tests.el: Update the tests for mapp.
 +
 +2015-11-11  Nicolas Petton  <nicolas@petton.fr>
 +
 +      Rename obarray-p to obarrayp
 +
 +      * lisp/obarray.el (obarrayp): New name.
 +      * test/automated/obarray-tests.el: Update the tests.
 +
 +2015-11-11  Nicolas Petton  <nicolas@petton.fr>
 +
 +      Rename obarray-foreach to obarray-map
 +
 +      * lisp/obarray.el (obarray-map): New name.
 +      * test/automated/obarray-tests.el: Update the corresponding tests.
 +
 +2015-11-11  PrzemysƂaw Wojnowski  <esperanto@cumego.com>
 +
 +      New file with obarray functions
 +
 +      * lisp/obarray.el: Basic obarray functions extracted from abbrev.el.
 +      * test/automated/obarray-tests.el: New file.
 +
 +2015-11-11  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Implement tray notifications for MS-Windows
 +
 +      * src/w32fns.c (MY_NOTIFYICONDATAW): New typedef.
 +      (NOTIFYICONDATAW_V1_SIZE, NOTIFYICONDATAW_V2_SIZE)
 +      (NOTIFYICONDATAW_V3_SIZE, NIF_INFO, NIIF_NONE, NIIF_INFO)
 +      (NIIF_WARNING, NIIF_ERROR, EMACS_TRAY_NOTIFICATION_ID)
 +      (EMACS_NOTIFICATION_MSG): New macros.
 +      (NI_Severity): New enumeration.
 +      (get_dll_version, utf8_mbslen_lim, add_tray_notification)
 +      (delete_tray_notification, Fw32_notification_notify)
 +      (Fw32_notification_close): New functions.
 +      (syms_of_w32fns): Defsubr functions exposed to Lisp.  DEFSYM
 +      keywords used by w32-notification-notify.
 +
 +      * doc/lispref/os.texi (Desktop Notifications): Describe the native
 +      w32 tray notifications.
 +
 +2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Optimize `file-equal-p' and `file-in-directory-p' in Tramp
 +
 +      * lisp/net/tramp.el (tramp-handle-file-equal-p)
 +      (tramp-handle-file-in-directory-p): New defuns.  Suggested by
 +      Harvey Chapman <hchapman@3gfp.com>.
 +
 +      * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist):
 +      * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist):
 +      * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist):
 +      * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): Use them.
 +
 +2015-11-10  Karl Fogel  <kfogel@red-bean.com>
 +
 +      * CONTRIBUTE: Encourage adding tests.
 +
 +      Based on this post from John Wiegley:
 +
 +        From: "John Wiegley" <johnw@newartisans.com>
 +        Subject: Re: [Emacs-diffs] master 1f02cbe: Fix bug#21766 and add test
 +        To: Juanma Barranquero <lekktu@gmail.com>
 +        Cc: emacs-diffs@gnu.org, bruce.connor.am@gmail.com,
 +            emacs-devel <emacs-devel@gnu.org>
 +        Date: Wed, 28 Oct 2015 18:45:29 -0700
 +        Message-ID: <m2y4emqwg6.fsf@newartisans.com>
 +
 +        https://lists.gnu.org/archive/html/emacs-devel/2015-10/msg02372.html
 +
 +2015-11-10  David Reitter  <david.reitter@gmail.com>
 +
 +      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.
 +
 +2015-11-10  Paul Eggert  <eggert@cs.ucla.edu>
 +
 +      Move INTEGER_TO_CONS body out of .h file
 +
 +      * src/data.c (INTBIG_TO_LISP): New macro, with most
 +      of the contents of the old INTEGER_TO_CONS.
 +      (intbig_to_lisp, uintbig_to_lisp): New functions.
 +      * src/lisp.h (INTEGER_TO_CONS):
 +      Simplify by using EXPR_SIGNED and the new functions.
 +      This shrinks code size a bit, and makes it easier to
 +      put a breakpoint on handling of large integers.
 +
 +2015-11-10  Paul Eggert  <eggert@cs.ucla.edu>
 +
 +      Merge from gnulib
 +
 +      This incorporates:
 +      2015-11-10 intprops: new public macro EXPR_SIGNED
 +      2015-11-10 intprops: fix typo in clang port
 +      * lib/intprops.h: Copy from gnulib.
 +
 +2015-11-10  Paul Eggert  <eggert@cs.ucla.edu>
 +
 +      Spelling fixes
 +
 +      * lisp/net/soap-inspect.el (soap-inspect-xs-simple-type):
 +      Fix misspelling in output.
 +
 +2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * doc/lispref/variables.texi (Directory Local Variables):
 +      Document dir-locals wildcards.
 +
 +      * lisp/files.el (dir-locals-file): Point to Info node.
 +
 +      * doc/emacs/custom.texi (Directory Variables):
 +      Document dir-locals wildcards.
 +
 +      * etc/NEWS: Document new functionality.
 +
 +2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * 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.
 +      (dir-locals-sort-predicate): Delete variable.
 +
 +2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * lisp/files.el (dir-locals-read-from-file): Better handle errors.
 +
 +      * lisp/isearch.el (search-default-regexp-mode): Change default value.
 +
 +2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * 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  <bruce.connor.am@gmail.com>
 +
 +      * 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/help-fns.el (describe-variable): Update accordingly.
 +
 +      * .gitignore: Add .dir-locals?.el.
 +
 +2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
 +
 +      * lisp/emacs-lisp/map.el (map-merge-with): New function.
 +
 +      * test/automated/map-tests.el (test-map-merge-with): New test.
 +
 +2015-11-09  Karl Fogel  <kfogel@red-bean.com>
 +
 +      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.
 +
 +      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-09  Noah Friedman  <friedman@splode.com>
 +
 +      * 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-09  Dmitry Gutov  <dgutov@yandex.ru>
 +
 +      * lisp/progmodes/project.el: Update Commentary.
 +
 +      Merge branch 'project-next'
 +
 +2015-11-09  Dmitry Gutov  <dgutov@yandex.ru>
 +
 +      Fold `project-ask-user' into `project-current'
 +
 +      * lisp/progmodes/project.el (project-find-functions):
 +      Remove `project-ask-user'.
 +      (project-ask-user): Remove function and the corresponding
 +      `project-roots' implementation.
 +      (project-current): Add a new argument, MAYBE-PROMPT.  Prompt the
 +      user in case there's no project in the current directory.  Update
 +      all callers.
 +
 +2015-11-09  Karl Fogel  <kfogel@red-bean.com>
 +
 +      When VC detects a conflict, specify which file
 +
 +      * lisp/vc/vc.el (vc-message-unresolved-conflicts): New function.
 +      * lisp/vc/vc-svn.el (vc-svn-find-file-hook):
 +      * lisp/vc/vc-hg.el (vc-hg-find-file-hook):
 +      * lisp/vc/vc-bzr.el (vc-bzr-find-file-hook):
 +      * lisp/vc/vc-git.el (vc-git-find-file-hook): Use above new function
 +        to display a standard message that specifies the conflicted file.
 +
 +      Before this change, the message VC used for indicating a conflicted
 +      file was just "There are unresolved conflicts in this file" without
 +      naming the file (and this language was duplicated in several places).
 +      After this change, it's "There are unresolved conflicts in file FOO"
 +      (and this language is now centralized in one function in vc.el).
 +
 +      Justification: It's important for the message to name the conflicted
 +      file because the moment when VC realizes a file is conflicted does not
 +      always come interactively.  For example, some people automatically
 +      find a set of Org Mode files on startup, and may keep those .org files
 +      under version control.  If any of the files are conflicted, the user
 +      just sees some messages fly by, and might later check the "*Messages*"
 +      buffer to find out what files were conflicted.  I'm not saying this
 +      happened to me or anything; it's a purely hypothetical example.
 +
 +2015-11-09  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Fix assertion violation in define-key
 +
 +      * src/keymap.c (store_in_keymap): Don't use XFASTINT on non-character
 +      objects.  Reported by Drew Adams <drew.adams@oracle.com>
 +      and Juanma Barranquero <lekktu@gmail.com>.
 +
 +2015-11-09  Dima Kogan  <dima@secretsauce.net>
 +
 +      Fix a memory leak in GC of font cache
 +
 +      * src/alloc.c (compact_font_cache_entry): Don't GC unmarked font
 +      entities if some of the fonts it references are marked.  This
 +      plugs a memory leak.  (Bug#21556)
 +
 +2015-11-09  Paul Eggert  <eggert@cs.ucla.edu>
 +
 +      Use INT_ADD_WRAPV etc. to check integer overflow
 +
 +      * src/alloc.c (xnmalloc, xnrealloc, xpalloc, Fmake_string):
 +      * src/buffer.c (record_overlay_string, overlay_strings):
 +      * src/casefiddle.c (casify_object):
 +      * src/ccl.c (Fccl_execute_on_string):
 +      * src/character.c (char_width, c_string_width, lisp_string_width)
 +      (count_size_as_multibyte, string_escape_byte8):
 +      * src/coding.c (coding_alloc_by_realloc, produce_chars):
 +      * src/data.c (arith_driver):
 +      * src/dispnew.c (realloc_glyph_pool, init_display):
 +      * src/editfns.c (styled_format):
 +      * src/fns.c (Ffillarray):
 +      * src/ftfont.c (ftfont_shape_by_flt):
 +      * src/gnutls.c (gnutls_hex_string):
 +      * src/gtkutil.c (get_utf8_string):
 +      * src/image.c (x_to_xcolors, x_detect_edges, png_load_body):
 +      * src/keymap.c (Fkey_description):
 +      * src/lisp.h (SAFE_ALLOCA_LISP):
 +      * src/term.c (encode_terminal_code):
 +      * src/tparam.c (tparam1):
 +      * src/xselect.c (x_property_data_to_lisp):
 +      * src/xsmfns.c (smc_save_yourself_CB):
 +      * src/xterm.c (x_term_init):
 +      When checking for integer overflow, prefer INT_MULTIPLY_WRAPV to
 +      more-complicated code involving division and/or
 +      INT_MULTIPLY_OVERFLOW, and similarly for INT_ADD_WRAPV and
 +      subtraction and/or INT_ADD_OVERFLOW.
 +      * src/casefiddle.c (casify_object): Simplify multibyte size check.
 +      * src/character.c: Remove some obsolete â€˜#ifdef emacs’s.
 +      * src/data.c (arith_driver): Also check for division overflow,
 +      as that’s now possible given that the accumulator can now contain
 +      any Emacs integer.
 +      * src/lisp.h (lisp_word_count): Remove; no longer used.
 +
 +2015-11-08  Dmitry Gutov  <dgutov@yandex.ru>
 +
 +      Make sure that the ignore file exists
 +
 +      * lisp/vc/vc.el (vc-default-ignore-completion-table):
 +      Make sure that the ignore file exists.
 +
 +2015-11-08  Michael Sperber  <mike@xemacs.org>
 +
 +      * gnus-sum.el (gnus-summary-backend-map): Bind B-backspace to
 +      `gnus-summary-delete-article` in a way that also works on XEmacs.
 +
 +2015-11-08  Simen HeggestĂžyl  <simenheg@gmail.com>
 +
 +      Add support for retrieving paths to JSON elements
 +
 +      Add support for retrieving the path to a JSON element. This can for
 +      instance be useful to retrieve paths in deeply nested JSON
 +      structures.
 +
 +      * lisp/json.el (json-pre-element-read-function)
 +      (json-post-element-read-function): New variables to hold pre- and post
 +      read callback functions for `json-read-array' and `json-read-object'.
 +      (json--path): New variable used internally by `json-path-to-position'.
 +      (json--record-path, json--check-position): New functions used
 +      internally by `json-path-to-position'.
 +      (json-path-to-position): New function for retrieving the path to a
 +      JSON element at a given position.
 +      (json-read-object, json-read-array): Call
 +      `json-pre-element-read-function' and `json-post-element-read-function'
 +      when set.
 +
 +      * test/automated/json-tests.el (test-json-path-to-position-with-objects)
 +      (test-json-path-to-position-with-arrays)
 +      (test-json-path-to-position-no-match): New tests for
 +      `json-path-to-position'.
 +
 +2015-11-08  Karl Fogel  <kfogel@red-bean.com>
 +
 +      * etc/NEWS: Mention new `bookmark-set-no-overwrite'.
 +
 +      This really should been part of my previous commit
 +      (Sun Nov 8 14:16:43 2015 -0500, git commit 3812e17978).
 +
 +2015-11-08  Karl Fogel  <kfogel@red-bean.com>
 +
 +      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.
 +
 +2015-11-08  Paul Eggert  <eggert@cs.ucla.edu>
 +
 +      * src/unexelf.c (NEW_PROGRAM_H): Remove unused macro (Bug#20614).
 +
 +2015-11-08  Alan Modra  <amodra@gmail.com>
 +
 +      ELF unexec: Don't insert a new section
 +
 +      Reuse the .bss section instead, making it SHT_PROGBITS.  This way we
 +      don't need to mess with symbol st_shndx, or section sh_link and
 +      sh_info.
 +
 +      This does lead to eu-elflint complaints about symbols defined in .bss
 +      with a needed version, because normally it is undefined symbols that
 +      have needed versions;  Defined symbols have version definitions.
 +      The exception is symbols defined by the linker in .dynbss for
 +      variables copied from a shared library in order to avoid text
 +      relocations, with copy relocs to copy their initial values from the
 +      shared library.  These symbols are both defined and have needed
 +      versions, and eu-elflink only expects to see them in SHT_NOBITS
 +      sections.  Of course there is no real problem with having such symbols
 +      in SHT_PROGBITS sections.  glibc ld.so handles them fine.
 +
 +      * src/unexelf.c: Delete outdated comments.
 +      (PATCH_INDEX): Delete.
 +      (find_section): Delete.
 +      (unexec): Don't add a new section.  Instead reuse the last bss
 +      section, extending it to cover dumped data.  Make bss sections
 +      SHT_PROGBITS.  Remove all patching of sh_link, sh_info and
 +      st_shndx.  Rename bss sections.
 +
 +2015-11-08  Alan Modra  <amodra@gmail.com>
 +
 +      ELF unexec: Drive from PT_LOAD header rather than sections
 +
 +      This rewrites bss handling in the ELF unexec code.  Finding bss
 +      sections by name results in complicated code that
 +      - does not account for all names of possible bss sections,
 +      - assumes specific ordering of bss sections,
 +      - can wrongly choose a SHT_NOBITS section not in the bss segment,
 +      - incorrectly calculates bss size (no accounting for alignment gaps),
 +      - assumes .data and .bss are in the same segment.
 +
 +      All of these problems and more are solved by finding the bss segment
 +      in PT_LOAD headers, ie. the address range included in p_memsz but not
 +      p_filesz of the last PT_LOAD header, then matching SHT_NOBITS sections
 +      in that address range.
 +
 +      * src/unexelf.c: Delete old ppc comment.
 +      (OLD_PROGRAM_H): Define.
 +      (round_up): Delete.
 +      (unexec): Don't search for bss style sections by name.  Instead,
 +      use the last PT_LOAD header address range covered by p_memsz
 +      but not p_filesz and match any SHT_NOBITS section in that
 +      address range.  Simplify initialisation of section header vars.
 +      Don't assume that section headers are above bss segment.  Move
 +      copying of bss area out of section loop.  Align .data2 section
 +      to 1, since it now covers the entire bss area.  For SHT_NOBITS
 +      sections in the bss segment, leave sh_addr and sh_addralign
 +      unchanged, but correct sh_offset.  Clear memory corresponding
 +      to SHT_NOBITS .plt section.  Delete comment and hacks for
 +      sections partly overlapping bss range now that the full range
 +      is properly calculated.  Delete now dead .sbss code.
 +      (Bug#20614)
 +
 +2015-11-08  Alan Modra  <amodra@gmail.com>
 +
 +      ELF unexec: R_*_NONE relocs
 +
 +      These should be ignored on all targets.
 +
 +      * src/unexelf.c (unexec): Ignore R_*_NONE relocs for any target,
 +      not just Alpha.  Comment on reloc size assumption.
 +
 +2015-11-08  Alan Modra  <amodra@gmail.com>
 +
 +      ELF unexec: _OBJC_ symbols in bss sections
 +
 +      This code assumed that there was only one bss section.  Rather than
 +      checking for a particular index, check the section type.  Also, handle
 +      the possibility that the section was SHT_NOBITS originally and is
 +      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.
 +
 +2015-11-08  Alan Modra  <amodra@gmail.com>
 +
 +      ELF unexec: Symbol table patching
 +
 +      No st_shndx value larger than SHN_LORESERVE should be changed.
 +      * src/unexelf.c (unexec): Don't adjust any st_shndx larger than
 +      SHN_LORESERVE.  Error on SHN_XINDEX.
 +
 +2015-11-08  Alan Modra  <amodra@gmail.com>
 +
 +      ELF unexec: Merge Alpha and MIPS COFF debug handling
 +
 +      * src/unexelf.c (unexec): Merge Alpha and MIPS COFF debug handling.
 +      Don't find .mdebug section index, find the section in the loop.
 +      Allow for unlikely possibility that .mdebug is located at sh_offset
 +      before bss segment, by calculating move from difference in
 +      sh_offset rather than just assuming new_data2_size.  Simplify
 +      cbLineOffset handling.
 +
 +2015-11-08  Alan Modra  <amodra@gmail.com>
 +
 +      ELF unexec: Tidy code
 +
 +      Separate out some of the more mechanical changes so following patches
 +      are smaller.
 +
 +      * src/unexelf.c (unexec): Rearrange initialisation of program
 +      header vars.  Use pointer vars in loops rather than indexing
 +      section header array via macros.  Simplify _OBJC_ sym code
 +      and reloc handling code.
 +
 +2015-11-08  Alan Modra  <amodra@gmail.com>
 +
 +      ELF unexec: Correct section header index
 +
 +      First a small fix.  The code incorrectly uses "NEW_SECTION_H (n)" when
 +      it should have been using "NEW_SECTION_H (nn)" to find the name of the
 +      section currently being processed.  Of course, before the bss
 +      sections, n and nn have the same value, so this doesn't matter except
 +      in the case of .sbss.  For .sbss this probably meant .bss (most likely
 +      the next section) was copied from memory.  A later patch removes the
 +      bogus .sbss handling anyway.
 +
 +      * src/unexelf.c (unexec): Use correct index to look up names.
 +
 +2015-11-08  Michael Albinus  <michael.albinus@gmx.de>
 +
 +      Fix Bug#21841
 +
 +      * lisp/filenotify.el (file-notify--rm-descriptor):
 +      Use `descriptor' instead of computing its value.
 +      (file-notify--descriptor): Additional argument FILE.  Adapt all callees.
 +      (file-notify-rm-watch): Use `descriptor' when calling file name handler.
 +      (Bug#21841)
 +
 +2015-11-08  Dmitry Gutov  <dgutov@yandex.ru>
 +
 +      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.
 +      (http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg00536.html)
 +
 +2015-11-07  Dmitry Gutov  <dgutov@yandex.ru>
 +
 +      Move and rename xref-find-regexp to the project package
 +
 +      * lisp/progmodes/project.el (project-find-regexp)
 +      (project--read-regexp)
 +      (project--find-regexp-in): New functions.
 +
 +      * lisp/progmodes/xref.el (xref--find-xrefs): Extract from
 +      xref--show-xrefs.  Use in existing callers in place of that
 +      function.
 +      (xref--show-xrefs): Only do the "show" part.
 +      (xref-find-regexp): Rename, more or less, to
 +      project-or-libraries-find-regexp.
 +
 +2015-11-06  Dmitry Gutov  <dgutov@yandex.ru>
 +
 +      Abolish temporary buffer management for xref
 +
 +      * lisp/progmodes/xref.el (xref--temporary-buffers)
 +      (xref--current)
 +      (xref--inhibit-mark-current)
 +      (xref--mark-selected): Remove.  Remove all references.
 +      (xref--show-xrefs): Do not construct the
 +      list of the temporary buffers, nor pass it along.
 +
 +2015-11-06  Dmitry Gutov  <dgutov@yandex.ru>
 +
 +      Rename "search path" to "library roots"
 +
 +      * lisp/emacs-lisp/cl-seq.el (cl-set-difference): Retain the order
 +      of the elements from CL-LIST1.
 +
 +      * test/automated/cl-lib-tests.el (cl-lib-test-set-functions):
 +      Update WRT to the above change.
 +
 +      * lisp/progmodes/project.el (project-search-path-function): Rename
 +      to project-library-roots-function, update the documentation and
 +      references.
 +      (project-search-path): Likewise, to project-library-roots.
 +      (project-roots): Clarify documentation.
 +      (project-vc-search-path): Likewise, to project-vc-library-roots.
 +      (project-library-roots): In addition to the renames, thread the
 +      results through file-name-as-directory.
 +      (project-prune-directories): Accept a variable number of
 +      arguments.  Rename to project-combine-directories.
 +      (project-subtract-directories): New function.
 +
 +      * lisp/progmodes/elisp-mode.el (elisp--xref-find-references):
 +      Append project-roots and project-library-roots together.
 +
 +      * lisp/progmodes/etags.el (etags--xref-find-references): Ditto.
 +
  2015-11-08  Paul Eggert  <eggert@cs.ucla.edu>
  
        Prefer xpalloc to doubling buffers by hand
        * lisp/net/tramp-compat.el (tramp-compat-delete-dups): New defun.
        * lisp/net/tramp-smb.el (tramp-smb-handle-directory-files): Use it.
  
- 2015-10-28  Anders Lindgren  <andlind@gmail.com>
-       Merge branch 'master' of /Volumes/HD2/build/emacs-git-ssh
-       Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/emacs
-       Merge branch 'master' of /Volumes/HD2/build/emacs-git-ssh
  2015-10-28  Michael Albinus  <michael.albinus@gmx.de>
  
        * lisp/net/tramp-smb.el (tramp-smb-handle-directory-files):
        * nsterm.m (ns_constrain_all_frames, ns_init_term): Block input.
        * nsterm.m (ns_send_appdefined, EmacsApp): Trace output.
  
- 2015-10-28  Anders Lindgren  <andlind@gmail.com>
-       Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/emacs
  2015-10-28  Artur Malabarba  <bruce.connor.am@gmail.com>
  
        * src/process.c (Fget_buffer_process): Improve docstring.
  
  This file records repository revisions from
  commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
 -commit 8a8613bcf4227dfe46a694b761e9575bdf6ca2ce (inclusive).
 +commit 531b28b4d96adf39d853fcb5e0bba7251fcce4b6 (inclusive).
  See ChangeLog.1 for earlier changes.
  
  ;; Local Variables:
diff --combined admin/release-process
index 1cfcf544587b619b9c5d729f39acd2350eff59c9,d0b55badab0ec72628511476dc1583b867fcef7c..a6f9c2a19e0011091b16b36116272a08dca61f4a
@@@ -10,18 -10,30 +10,30 @@@ The first phase of the release schedul
  period for new features, on the `master' branch and several feature
  branches.
  
- ** Phase two: bugfixes
+ ** Phase two: fixing and stabilizing the release branch
  
  Shortly before this phase, Emacs developers will be devoted to
  figuring out what features to include in the next release and what
  features to defer to a later release.
  
+ This phase is mostly spent fixing bugs and documenting new features
+ and changes on the "emacs-NN" branch.  Actually, the default branch
+ for pushing any work in this phase should be "emacs-NN", except for
+ new features.
  At the beginning of this phase, a release branch called "emacs-NN"
  ("NN" represents the major version number of the new Emacs release)
- will be cut from `master'.
- This phase is spent fixing bugs and eliminating undocumented new
- features on the "emacs-NN" branch.
+ will be cut from `master'.  When that happens, the version number on
+ `master' should be incremented; use admin/admin.el's `set-version'
+ command to do that, then commit the changes it made and push to
+ `master'.  For major releases, also update the value of
+ `customize-changed-options-previous-release'.
+ The 2 main manuals, the User Manual and the Emacs Lisp Manual, need to
+ be proofread, preferably by at least 2 different persons, and any
+ uncovered problems fixed.  This is a lot of work, so it is advisable
+ to divide the job between several people (see the checklist near the
+ end of this file).
  
  In parallel to this phase, `master' can receive new features, to be
  released in the next release cycle.  From time to time, the master
@@@ -32,10 -44,9 +44,10 @@@ branches merges bugfix commits from th
  Emacs uses the "blocking bug(s)" feature of Debbugs for bugs need to
  be addressed in the next release.
  
 -Currently, bug#19759 is the tracking bug for release of 25.1.  Say
 -bug#123 needs to be fixed for Emacs 25.1.  Send a message to
 -control@debbugs.gnu.org that says:
 +Currently, bug#19759 is the tracking bug for release of 25.1 and
 +bug#21966 is the tracking bug for release of 25.2.  Say bug#123 needs
 +to be fixed for Emacs 25.1.  Send a message to control@debbugs.gnu.org
 +that says:
  
     block 19759 by 123
  
@@@ -48,8 -59,16 +60,16 @@@ files.  See `admin/notes/years' for inf
  copyright years for GNU Emacs.
  
  ** Make sure the necessary sources and scripts for any generated files
- are included in the source tarfile.  (They don't need to be installed,
- so eg admin/ is fine.)
+ are included in the source tarball.  (They don't need to be installed,
+ so e.g. admin/ is fine.)
+ ** Regenerate AUTHORS by using admin/authors.el
+ (The instructions are at the beginning of that file.)
+ ** Remove temporary +++/--- lines in NEWS.
+ But first make sure there are no unmarked entries, and update the
+ documentation (or decide no updates are necessary) for those that
+ aren't.
  
  ** Manuals
  Check for node names using problematic characters:
@@@ -60,7 -79,15 +80,15 @@@ Check for major new features added sinc
  lisp files), and add the relevant authors to the Acknowledgments in
  doc/emacs/ack.texi and emacs.texi.
  
- Check cross-references between the manuals (eg from emacs to elisp)
+ For major releases, rewrite the "Antinews" appendix of the User Manual
+ (doc/emacs/anti.texi) to describe features lost by downgrading to the
+ previous version.  The way to do that is read NEWS, pick up the more
+ significant changes and new features in the upcoming release, then
+ describe the "benefits" from losing those features.  Be funny, use
+ humor.  The text written for the previous major release can serve as
+ good example.
+ Check cross-references between the manuals (e.g. from emacs to elisp)
  are correct.  You can use something like the following in the info
  directory in the Emacs build tree:
  
@@@ -78,32 -105,31 +106,31 @@@ Redirect /software/emacs/manual/html_no
  Another tool you can use to check links is gnu.org's linc.py:
  http://www.gnu.org/server/source/
  
- You run this something like:
+ You run this with something like:
  
  cd /path/to/cvs/emacs-www
  linc.py -o /path/to/output-dir --url http://www.gnu.org/software/emacs/ .
  
  Be warned that it is really, really slow (as in, can take ~ a full day
  to check the manual/ directory).  It is probably best to run it on a
- single directory at a time from eg manual/html_node.  It is very
+ single directory at a time from e.g. manual/html_node.  It is very
  inefficient, but may reveal a few things that info-xref does not.
  
  make emacs.dvi, elisp.dvi, and deal with any errors (undefined
  references etc) in the output.  Break any overfull lines.
  Underfull hboxes are not serious, but it can be nice to get rid of
  them if a simple rephrasing or rearrangement will work.
  
- Update the master menu and detailed menu (eg the antinews version).
+ Update the master menu and detailed menu (e.g. the antinews version).
  The command texinfo-multiple-files-update can do this, but you
- probably want to apply the results selectively (eg the current master
+ probably want to apply the results selectively (e.g. the current master
  menu has better line-breaks than the automatic version).  It includes
  the menu-entry name (if there is one) as well as the node name - using
  only the latter looks better.  Also, it doesn't seem to handle nested
  includes, so will miss edebug.texi etc.
  
  Check for widow and orphan lines in the printed manual; make sure all
- the pages really look ok in the manual as formatted.  Orphans/widows
+ the pages really look OK in the manual as formatted.  Orphans/widows
  are cases where the first/last line of a paragraph is on its own at
  the end/start of a page, or where the last word in a paragraph is on
  its own at the start of a line.  It looks better if you reword/respace
@@@ -117,9 -143,13 +144,13 @@@ pages of the manuals, and even if they 
  depend on what paper and font size they use.  This also means that if
  you _are_ going to do this, it should be done with the paper and font
  size that the GNU Press are going to use when they print the manuals.
- I think this is different to what you get if you just use eg 'make
+ I think this is different to what you get if you just use e.g. 'make
  emacs.pdf' (e.g., enable "smallbook").
  
+ ** Try to reorder NEWS: most important things first, related items together.
+ ** For a major release, add a "New in Emacs XX" section to faq.texi.
  ** Check the keybindings in the refcards are correct, and add any new ones.
  What paper size are the English versions supposed to be on?
  On Debian testing, the packages texlive-lang-czechslovak and
@@@ -141,14 -171,6 +172,6 @@@ pt-br     Rodrigo Rea
  ru    Alex Ott
  sk    Miroslav VaĆĄko
  
- ** For a major release, add a "New in Emacs XX" section to faq.texi.
- ** Remove temporary +++/--- lines in NEWS.
- ** Try to reorder NEWS: most important things first, related items together.
- ** Consider bumping customize-changed-options-previous-release.
  ** cusver-check from admin.el can help find new defcustoms missing
  :version tags.
  
diff --combined configure.ac
index 0b7b4032482abcfd8e082696291c8e417373e7ba,a5b9bd3d377de6d9275c2815f78f1c29abcae778..94007a495379bbc0a1ea855c96f855835df06e50
@@@ -23,7 -23,7 +23,7 @@@ dnl  along with GNU Emacs.  If not, se
  
  AC_PREREQ(2.65)
  dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
 -AC_INIT(GNU Emacs, 25.0.50, bug-gnu-emacs@gnu.org)
 +AC_INIT(GNU Emacs, 25.1.50, bug-gnu-emacs@gnu.org)
  
  dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
  dnl and then quoted again for a C string.  Separate options with spaces.
@@@ -316,7 -316,7 +316,7 @@@ this option's value should be 'yes', 'n
          with_x_toolkit=$val
  ])
  
- OPTION_DEFAULT_OFF([wide-int], [prefer wide Emacs integers (typically 62-bit)])
+ OPTION_DEFAULT_OFF([wide-int], [prefer wide Emacs integers (typically 62-bit); allows buffer and string size up to 2GB on 32-bit hosts, at the cost of 10% to 30% slowdown of Lisp interpreter and larger memory footprint])
  if test "$with_wide_int" = yes; then
    AC_DEFINE([WIDE_EMACS_INT], 1, [Use long long for EMACS_INT if available.])
  fi
@@@ -353,20 -353,20 +353,21 @@@ OPTION_DEFAULT_ON([gsettings],[don't co
  OPTION_DEFAULT_ON([selinux],[don't compile with SELinux support])
  OPTION_DEFAULT_ON([gnutls],[don't use -lgnutls for SSL/TLS support])
  OPTION_DEFAULT_ON([zlib],[don't compile with zlib decompression support])
+ OPTION_DEFAULT_OFF([modules],[compile with dynamic modules support])
  
  AC_ARG_WITH([file-notification],[AS_HELP_STRING([--with-file-notification=LIB],
 - [use a file notification library (LIB one of: yes, gfile, inotify, w32, no)])],
 + [use a file notification library (LIB one of: yes, inotify, kqueue, gfile, w32, no)])],
   [ case "${withval}" in
      y | ye | yes )    val=yes ;;
      n | no )          val=no  ;;
 -    g | gf | gfi | gfil | gfile )     val=gfile ;;
      i | in | ino | inot | inoti | inotif | inotify )  val=inotify ;;
 +    k | kq | kqu | kque | kqueu | kqueue )    val=kqueue ;;
 +    g | gf | gfi | gfil | gfile )     val=gfile ;;
      w | w3 | w32 )    val=w32 ;;
      * ) AC_MSG_ERROR(['--with-file-notification=$withval' is invalid;
 -this option's value should be 'yes', 'no', 'gfile', 'inotify' or 'w32'.
 +this option's value should be 'yes', 'no', 'inotify', 'kqeue', 'gfile' or 'w32'.
  'yes' is a synonym for 'w32' on MS-Windows, for 'no' on Nextstep,
 -otherwise for the first of 'inotify' or 'gfile' that is usable.])
 +otherwise for the first of 'inotify', 'kqueue' or 'gfile' that is usable.])
      ;;
     esac
     with_file_notification=$val
@@@ -2103,8 -2103,8 +2104,8 @@@ AC_CACHE_CHECK
          [[malloc_set_state (malloc_get_state ());
            __after_morecore_hook = hook;
            __malloc_initialize_hook = hook;]])],
-        [emacs_cv_var_doug_lea_malloc=yes])])
-    fi
+        [emacs_cv_var_doug_lea_malloc=yes])
+    fi])
  doug_lea_malloc=$emacs_cv_var_doug_lea_malloc
  
  system_malloc=$emacs_cv_sanitize_address
@@@ -2199,7 -2199,6 +2200,6 @@@ if test "$ac_cv_header_pthread_h" && te
    AC_CACHE_CHECK([for pthread library],
      [emacs_cv_pthread_lib],
      [emacs_cv_pthread_lib=no
-      OLD_CPPFLAGS=$CPPFLAGS
       OLD_LIBS=$LIBS
       for emacs_pthread_lib in 'none needed' -lpthread; do
         case $emacs_pthread_lib in
         if test "$emacs_cv_pthread_lib" != no; then
         break
         fi
-      done
-      CPPFLAGS=$OLD_CPPFLAGS])
+      done])
    if test "$emacs_cv_pthread_lib" != no; then
      AC_DEFINE([HAVE_PTHREAD], 1, [Define to 1 if you have POSIX threads.])
      case $emacs_cv_pthread_lib in
@@@ -2691,6 -2689,12 +2690,6 @@@ AC_SUBST(LIBGNUTLS_CFLAGS
  NOTIFY_OBJ=
  NOTIFY_SUMMARY=no
  
 -dnl FIXME?  Don't auto-detect on NS, but do allow someone to specify
 -dnl a particular library.  This doesn't make much sense?
 -if test "${HAVE_NS}" = yes && test ${with_file_notification} = yes; then
 -  with_file_notification=no
 -fi
 -
  dnl MS Windows native file monitor is available for mingw32 only.
  case $with_file_notification,$opsys in
    w32,cygwin)
@@@ -2721,41 -2725,16 +2720,41 @@@ case $with_file_notification,$NOTIFY_OB
      fi ;;
  esac
  
 +dnl kqueue is available on BSD-like systems.
 +case $with_file_notification,$NOTIFY_OBJ in
 +  kqueue,* | yes,)
 +    EMACS_CHECK_MODULES([KQUEUE], [libkqueue])
 +    if test "$HAVE_KQUEUE" = "yes"; then
 +       AC_DEFINE(HAVE_KQUEUE, 1, [Define to 1 to use kqueue.])
 +       CPPFLAGS="$CPPFLAGS -I/usr/include/kqueue"
 +       NOTIFY_CFLAGS=$KQUEUE_CFLAGS
 +       NOTIFY_LIBS=$KQUEUE_LIBS
 +       NOTIFY_OBJ=kqueue.o
 +       NOTIFY_SUMMARY="yes -lkqueue"
 +    else
 +       AC_SEARCH_LIBS(kqueue, [])
 +       if test "$ac_cv_search_kqueue" != no; then
 +         AC_DEFINE(HAVE_KQUEUE, 1, [Define to 1 to use kqueue.])
 +       NOTIFY_OBJ=kqueue.o
 +       NOTIFY_SUMMARY="yes (kqueue)"
 +       fi
 +    fi ;;
 +esac
 +
  dnl g_file_monitor exists since glib 2.18.  G_FILE_MONITOR_EVENT_MOVED
  dnl has been added in glib 2.24.  It has been tested under
  dnl GNU/Linux only.
  case $with_file_notification,$NOTIFY_OBJ in
    gfile,* | yes,)
 -    EMACS_CHECK_MODULES([GFILENOTIFY], [gio-2.0 >= 2.24])
 -    if test "$HAVE_GFILENOTIFY" = "yes"; then
 -       AC_DEFINE(HAVE_GFILENOTIFY, 1, [Define to 1 if using GFile.])
 -       NOTIFY_OBJ=gfilenotify.o
 -       NOTIFY_SUMMARY="yes -lgio (gfile)"
 +    if test "${HAVE_NS}" != yes; then
 +       EMACS_CHECK_MODULES([GFILENOTIFY], [gio-2.0 >= 2.24])
 +       if test "$HAVE_GFILENOTIFY" = "yes"; then
 +        AC_DEFINE(HAVE_GFILENOTIFY, 1, [Define to 1 if using GFile.])
 +        NOTIFY_CFLAGS=$GFILENOTIFY_CFLAGS
 +        NOTIFY_LIBS=$GFILENOTIFY_LIBS
 +        NOTIFY_OBJ=gfilenotify.o
 +        NOTIFY_SUMMARY="yes -lgio (gfile)"
 +       fi
      fi ;;
  esac
  
@@@ -2767,9 -2746,9 +2766,9 @@@ esa
  if test -n "$NOTIFY_OBJ"; then
     AC_DEFINE(USE_FILE_NOTIFY, 1, [Define to 1 if using file notifications.])
  fi
 +AC_SUBST(NOTIFY_CFLAGS)
 +AC_SUBST(NOTIFY_LIBS)
  AC_SUBST(NOTIFY_OBJ)
 -AC_SUBST(GFILENOTIFY_CFLAGS)
 -AC_SUBST(GFILENOTIFY_LIBS)
  
  dnl Do not put whitespace before the #include statements below.
  dnl Older compilers (eg sunos4 cc) choke on it.
@@@ -3305,6 -3284,52 +3304,52 @@@ if test "${HAVE_ZLIB}" = "yes"; the
  fi
  AC_SUBST(LIBZ)
  
+ ### Dynamic modules support
+ LIBMODULES=
+ HAVE_MODULES=no
+ MODULES_OBJ=
+ MODULES_SUFFIX=
+ if test "${with_modules}" != "no"; then
+   if test "$opsys" = "gnu-linux"; then
+     LIBMODULES="-ldl"
+     MODULES_SUFFIX=".so"
+     HAVE_MODULES=yes
+   elif test "$opsys" = "cygwin"; then
+     MODULES_SUFFIX=".dll"
+     HAVE_MODULES=yes
+   elif test "$opsys" = "darwin"; then
+     MODULES_SUFFIX=".so"
+     HAVE_MODULES=yes
+   elif test "$opsys" = "mingw32"; then
+     MODULES_SUFFIX=".dll"
+     HAVE_MODULES=yes
+   else
+     # BSD system have dlopen in the libc
+     AC_CHECK_FUNC(dlopen, [MODULES_SUFFIX=".so"]
+                           [HAVE_MODULES=yes], [])
+   fi
+   if test "${HAVE_MODULES}" = no; then
+     AC_MSG_ERROR([Dynamic modules are not supported on your system])
+   else
+     SAVE_LIBS=$LIBS
+     LIBS="$LIBS $LIBMODULES"
+     AC_CHECK_FUNCS([dlfunc])
+     LIBS=$SAVE_LIBS
+   fi
+ fi
+ if test "${HAVE_MODULES}" = yes; then
+    MODULES_OBJ="dynlib.o emacs-module.o"
+    AC_DEFINE(HAVE_MODULES, 1, [Define to 1 if dynamic modules are enabled])
+    AC_DEFINE_UNQUOTED(MODULES_SUFFIX, "$MODULES_SUFFIX",
+      [System extension for dynamic libraries])
+ fi
+ AC_SUBST(MODULES_OBJ)
+ AC_SUBST(LIBMODULES)
+ AX_GCC_VAR_ATTRIBUTE(cleanup)
+ AC_CHECK_FUNCS(dladdr)
  ### Use -lpng if available, unless '--with-png=no'.
  HAVE_PNG=no
  LIBPNG=
@@@ -4086,8 -4111,8 +4131,8 @@@ OLDCFLAGS="$CFLAGS
  OLDLIBS="$LIBS"
  CFLAGS="$CFLAGS $GTK_CFLAGS $RSVG_CFLAGS $DBUS_CFLAGS $SETTINGS_CFLAGS"
  LIBS="$LIBS $GTK_LIBS $RSVG_LIBS $DBUS_LIBS $SETTINGS_LIBS"
 -CFLAGS="$CFLAGS $GFILENOTIFY_CFLAGS $CAIRO_CFLAGS"
 -LIBS="$LIBS $GFILENOTIFY_LIBS $CAIRO_LIBS"
 +CFLAGS="$CFLAGS $NOTIFY_CFLAGS $CAIRO_CFLAGS"
 +LIBS="$LIBS $NOTIFY_LIBS $CAIRO_LIBS"
  AC_MSG_CHECKING([whether GLib is linked in])
  AC_LINK_IFELSE([AC_LANG_PROGRAM(
        [[#include <glib.h>
@@@ -4167,7 -4192,7 +4212,7 @@@ els
    SEPCHAR=':'
  fi
  AC_DEFINE_UNQUOTED(SEPCHAR, ['$SEPCHAR'], [Character that separates PATH elements.])
 -dnl This is for MinGW, and is used in test/automated/Makefile.in.
 +dnl This is for MinGW, and is used in test/Makefile.in.
  dnl The MSYS Bash has heuristics for replacing ':' with ';' when it
  dnl decides that a command-line argument to be passed to a MinGW program
  dnl is a PATH-style list of directories.  But that heuristics plays it
@@@ -5195,7 -5220,7 +5240,7 @@@ optsep
  emacs_config_features=
  for opt in XAW3D XPM JPEG TIFF GIF PNG RSVG CAIRO IMAGEMAGICK SOUND GPM DBUS \
    GCONF GSETTINGS NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT \
-   LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS X_TOOLKIT X11 NS; do
+   LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS X_TOOLKIT X11 NS MODULES; do
  
      case $opt in
        NOTIFY|ACL) eval val=\${${opt}_SUMMARY} ;;
@@@ -5243,6 -5268,7 +5288,7 @@@ AS_ECHO(["  Does Emacs use -lXaw3d
    Does Emacs use -lotf?                                   ${HAVE_LIBOTF}
    Does Emacs use -lxft?                                   ${HAVE_XFT}
    Does Emacs directly use zlib?                           ${HAVE_ZLIB}
+   Does Emacs have dynamic modules support?                ${HAVE_MODULES}
    Does Emacs use toolkit scroll bars?                     ${USE_TOOLKIT_SCROLL_BARS}
  "])
  
@@@ -5318,13 -5344,13 +5364,13 @@@ AC_CONFIG_FILES([Makefile lib/Makefile 
         leim/Makefile nextstep/Makefile nt/Makefile])
  
  dnl test/ is not present in release tarfiles.
 -opt_makefile=test/automated/Makefile
 +opt_makefile=test/Makefile
  
  if test -f "$srcdir/$opt_makefile.in"; then
    SUBDIR_MAKEFILES="$SUBDIR_MAKEFILES $opt_makefile"
    dnl Again, it's best not to use a variable.  Though you can add
    dnl ", [], [opt_makefile='$opt_makefile']" and it should work.
 -  AC_CONFIG_FILES([test/automated/Makefile])
 +  AC_CONFIG_FILES([test/Makefile])
  fi
  
  
diff --combined doc/lispref/os.texi
index 17a0b47ad064e858f427959de032cd2b66ca7309,5b89e1ad5813ea84436637eb63e6efd454296554..92e3ee2b33cc31614759993e7de6405cfb814f91
@@@ -902,6 -902,9 +902,9 @@@ Hewlett-Packard HPUX operating system
  @item irix
  Silicon Graphics Irix system.
  
+ @item nacl
+ Google Native Client (@acronym{NaCl}) sandboxing system.
  @item ms-dos
  Microsoft's DOS@.  Emacs compiled with DJGPP for MS-DOS binds
  @code{system-type} to @code{ms-dos} even when you run it on MS-Windows.
@@@ -911,7 -914,7 +914,7 @@@ AT&T Unix System V
  
  @item windows-nt
  Microsoft Windows NT, 9X and later.  The value of @code{system-type}
- is always @code{windows-nt}, e.g., even on Windows 7.
+ is always @code{windows-nt}, e.g., even on Windows 10.
  
  @end table
  
@@@ -2640,9 -2643,9 +2643,9 @@@ This function removes the tray notifica
  
  Several operating systems support watching of filesystems for changes
  of files.  If configured properly, Emacs links a respective library
 -like @file{gfilenotify}, @file{inotify}, or @file{w32notify}
 -statically.  These libraries enable watching of filesystems on the
 -local machine.
 +like @file{inotify}, @file{kqueue}, @file{gfilenotify}, or
 +@file{w32notify} statically.  These libraries enable watching of
 +filesystems on the local machine.
  
  It is also possible to watch filesystems on remote machines,
  @pxref{Remote Files,, Remote Files, emacs, The GNU Emacs Manual}
@@@ -2713,8 -2716,7 +2716,8 @@@ watching @var{file} has been stoppe
  Note that the @file{w32notify} library does not report
  @code{attribute-changed} events.  When some file's attribute, like
  permissions or modification time, has changed, this library reports a
 -@code{changed} event.
 +@code{changed} event.  Likewise, the @file{kqueue} library does not
 +report reliably file attribute changes when watching a directory.
  
  The @code{stopped} event reports, that watching the file has been
  stopped.  This could be because @code{file-notify-rm-watch} was called
@@@ -2753,7 -2755,7 +2756,7 @@@ being reported.  For example
  @group
  (write-region "bla" nil "/tmp/foo")
       @result{} Event (35025468 created "/tmp/.#foo")
 -        Event (35025468 changed "/tmp/foo") [2 times]
 +        Event (35025468 changed "/tmp/foo")
          Event (35025468 deleted "/tmp/.#foo")
  @end group
  
@@@ -2799,14 -2801,14 +2802,14 @@@ also makes it invalid
  @example
  @group
  (make-directory "/tmp/foo")
 -     @result{} nil
 +     @result{} Event (35025468 created "/tmp/foo")
  @end group
  
  @group
  (setq desc
        (file-notify-add-watch
          "/tmp/foo" '(change) 'my-notify-callback))
 -     @result{} 35025468
 +     @result{} 11359632
  @end group
  
  @group
  
  @group
  (write-region "bla" nil "/tmp/foo/bla")
 -     @result{} Event (35025468 created "/tmp/foo/.#bla")
 -        Event (35025468 created "/tmp/foo/bla")
 -        Event (35025468 changed "/tmp/foo/bla")
 -        Event (35025468 changed "/tmp/foo/.#bla")
 +     @result{} Event (11359632 created "/tmp/foo/.#bla")
 +        Event (11359632 created "/tmp/foo/bla")
 +        Event (11359632 changed "/tmp/foo/bla")
 +        Event (11359632 deleted "/tmp/foo/.#bla")
  @end group
  
  @group
  ;; Deleting a file in the directory doesn't invalidate the watch.
  (delete-file "/tmp/foo/bla")
 -     @result{} Event (35025468 deleted "/tmp/foo/bla")
 +     @result{} Event (11359632 deleted "/tmp/foo/bla")
  @end group
  
  @group
  (write-region "bla" nil "/tmp/foo/bla")
 -     @result{} Event (35025468 created "/tmp/foo/.#bla")
 -        Event (35025468 created "/tmp/foo/bla")
 -        Event (35025468 changed "/tmp/foo/bla")
 -        Event (35025468 changed "/tmp/foo/.#bla")
 +     @result{} Event (11359632 created "/tmp/foo/.#bla")
 +        Event (11359632 created "/tmp/foo/bla")
 +        Event (11359632 changed "/tmp/foo/bla")
 +        Event (11359632 deleted "/tmp/foo/.#bla")
  @end group
  
  @group
  ;; Deleting the directory invalidates the watch.
 +;; Events arrive for different watch descriptors.
  (delete-directory "/tmp/foo" 'recursive)
 -     @result{} Event (35025468 deleted "/tmp/foo/bla")
 -        Event (35025468 deleted "/tmp/foo")
 -        Event (35025468 stopped "/tmp/foo")
 +     @result{} Event (35025468 deleted "/tmp/foo")
 +        Event (11359632 deleted "/tmp/foo/bla")
 +        Event (11359632 deleted "/tmp/foo")
 +        Event (11359632 stopped "/tmp/foo")
  @end group
  
  @group
@@@ -2922,6 -2922,18 +2925,18 @@@ means complete; it is intended to give 
  issues involved, rather than to be a security checklist.
  
  @table @asis
+ @item File local variables
+ @cindex file local variables
+ A file that Emacs visits can contain variable settings that affects
+ the buffer visiting that file; @xref{File Local Variables}.
+ Similarly, a directory can specify local variable values common to all
+ files in that directory; @xref{Directory Local Variables}.  Although
+ Emacs takes some effort to protect against misuse of these variables,
+ a security hole can be created merely by a package setting
+ @code{safe-local-variable} too optimistically, a problem that is all
+ too common.  To disable this feature for both files and directories,
+ set @code{enable-local-variables} to @code{nil}.
  @item Access control
  Although Emacs normally respects access permissions of the underlying
  operating system, in some cases it handles accesses specially.  For
diff --combined etc/NEWS
index e4db4256380bc26f67fb4f2e4a9db13e0c7080db,10d516bc23f0a286a401e01945621ba654d9cc01..05db9980ee9207faf828ef42609b962e466abbcf
+++ b/etc/NEWS
@@@ -22,30 -22,24 +22,37 @@@ Temporary note
  When you add a new item, use the appropriate mark if you are sure it applies,
  otherwise leave it unmarked.
  
 +\f
 +* Installation Changes in Emacs 25.2
 +
 +** 'configure' detects the kqueue file notification library on *BSD
 +and Mac OS X machines.
 +
 +\f
 +* Changes in Specialized Modes and Packages in Emacs 25.2
 +
 +** File Notifications
 +
 +*** The kqueue library is integrated for *BSD and Mac OS X machines.
 +
  \f
  * Installation Changes in Emacs 25.1
  
  +++
  ** Building Emacs now requires C99 or later.
  
+ +++
  ** Building Emacs now requires GNU make, version 3.81 or later.
  
+ +++
  ** New configure option --with-cairo.
- Maybe add text based on http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00689.html
+ This builds Emacs with Cairo drawing.  As a side effect, it provides
+ support for built-in printing, when Emacs was built with GTK+.
  
+ ** New configure option --with-modules.
+ This enables support for loading dynamic modules; see below.
+ ---
  ** By default, Emacs no longer works on IRIX.  We expect that Emacs
  users are not affected by this, as SGI stopped supporting IRIX in
  December 2013.  If you are affected, please send a bug report.  You
@@@ -53,12 -47,14 +60,14 @@@ should be able to work around the probl
  undumping code to GCC under IRIX, or by configuring --with-wide-int,
  or by sticking with Emacs 24.4.
  
+ ---
  ** The Emacs garbage collector assumes GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS.
  The GC_MAKE_GCPROS_NOOPS stack-marking variant has been the default
  since Emacs 24.4, and the other variants were undocumented and were
  obstacles to maintenance and development.  GC_MARK_STACK and its
  related symbols have been removed from the C internals.
  
+ ---
  ** 'configure' now prefers gnustep-config when configuring GNUstep.
  If gnustep-config is not available, the old heuristics are used.
  
@@@ -77,6 -73,7 +86,7 @@@ supported, and its presence led to conf
  This affects only the 'movemail' utility; Emacs itself can still
  process MMDF-format files as before.
  
+ +++
  ** The configure option '--enable-silent-rules' is now the default,
  and silent rules are now quieter.  To get the old behavior where
  'make' chatters a lot, configure with '--disable-silent-rules' or
@@@ -94,6 -91,7 +104,7 @@@ be installed setgid.  The option now de
  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.
@@@ -116,85 -114,86 +127,94 @@@ and can contain escape sequences for co
  \f
  * Changes in Emacs 25.1
  
- ** Any file of the form .dir-locals*.el is now considered a dir-local
-    file, and multiple can be used in the same directory. See the
-    variable `dir-locals-file' for more information.
- ** `xref-find-definitions' and `describe-function' now display
-    information about mode local overrides (defined by
-    cedet/mode-local.el `define-overloadable-function' and
-    `define-mode-local-overrides').
- ** 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 doc command `describe-symbol'.  Works for functions, vars, faces, etc...
- ** New user option `search-default-regexp-mode' specifies the default mode for isearch
- ** `isearch' and `query-replace' now perform character folding in matches.
- This is analogous to case-folding, but applies between Unicode
- characters and their ASCII counterparts.  This means many characters
- will match entire groups of characters.
- For instance, the " will match all variants of unicode 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 â“.
- ** New function `character-fold-to-regexp' can be used
- by searching commands to produce a regexp matching anything that
- character-folds into STRING.
- ** 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.
- ** New function `checkdoc-file' checks for style errors.
- It's meant for use together with `compile':
- emacs -batch --eval "(checkdoc-file \"subr.el\")"
- ** New command `comment-line' bound to `C-x C-;'.
+ ** 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
+ 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
+ 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
+ that any module that provides Lisp-callable functions will have to use
+ 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
+ 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'
+ 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
+ at configure time.
  
- ** New function `custom-prompt-customize-unsaved-options' checks for
- unsaved customizations and prompts user to customize (if found).
+ +++
+ ** Any file of the form .dir-locals*.el is now considered a dir-local
+ file, and multiple such files can be used in the same directory.  See
+ the variable `dir-locals-file' for more information.
  
  +++
  ** 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.
  
 +---
 +** International domain names (IDNA) are now encoded via the new
 +puny.el library, so that one can visit web sites like
 +"http://mĂ©xico.icom.museum".
 +
+ ** If Emacs isn't built with TLS support, an external TLS-capable
+ 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.
+ +++
  ** C-h l now also lists the commands that were run.
  
 -+++
 -** x-select-enable-clipboard is renamed select-enable-clipboard
 -and x-select-enable-primary is renamed select-enable-primary.
 +** The new M-s M-w key binding uses eww to search the web for the
 +text in the region.
 +
 +** M-x suggests shorthands and ignores obsolete commands for completion.
 +** x-select-enable-clipboard is renamed select-enable-clipboard.
 +x-select-enable-primary and renamed select-enable-primary.
  Additionally they both now apply to all systems (OSX, GNUstep, Windows, you
  name it), with the proviso that on some systems (e.g. Windows)
  select-enable-primary is ineffective since the system doesn't
  have the equivalent of a primary selection.
  
  +++
- ** terpri gets an optional arg ENSURE to conditionally output a newline.
+ ** New option `switch-to-buffer-in-dedicated-window' allows to customize
+ how `switch-to-buffer' proceeds interactively when the selected window
+ is strongly dedicated to its buffer.
  
  +++
- ** New macro `define-advice'.
+ ** 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
  when called interactively.  A prefix argument toggles this behavior.
  
- ** New var `truncate-string-ellipsis' to choose how to indicate truncation.
  +++
  ** The new variable `term-file-aliases' replaces some files from lisp/term.
  The function `tty-run-terminal-initialization' consults this variable
@@@ -210,114 -209,49 +230,49 @@@ for use in Emacs bug reports
  hiding character but the default `.' can be used by let-binding the
  variable `read-hide-char'.
  
- ** 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'.
- *** The ls-lisp package uses `string-collate-lessp' to sort file names.
- If you want the old, locale-independent sorting, customize the new
- option `ls-lisp-use-string-collate' to a nil value.
- *** 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
- 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.
- +++
- ** The new function `bidi-find-overridden-directionality' allows 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 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 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.
- ** 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 function `directory-files-recursively' returns all matching
- files (recursively) under a directory.
+ ---
+ ** New input method: `tamil-dvorak'.
  
- ** 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 forward slash.
\f
+ * Editing Changes in Emacs 25.1
  
  +++
- ** 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.
- ** 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
- character in the current buffer's default font.  If the default face
- is remapped (see `face-remapping-alist'), the value for the remapped
- face is returned.  This function complements the existing function
- `default-font-height'.
- ** 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
- function returns the information for the remapped face.
- ** 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
- that it accounts for (i) continuation glyphs, (ii) the size of the
- font, and (iii) the specified window.
+ ** M-x suggests shorthands and ignores obsolete commands for completion.
  
- ** New possible value for `system-type': nacl.
+ ** Changes in undo
  
  +++
- ** New variable `inhibit-message', when bound to non-nil, inhibits
-    `message' and related functions from displaying messages the Echo
-    Area.  The output is still logged to the *Messages* buffer.
+ *** 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
+ "Undo" in the ELisp manual for more details.
  
  +++
- ** 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.
+ *** 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
+ affected by the command.
  
  +++
- ** `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.
\f
- * Editing Changes in Emacs 25.1
+ ** New command `comment-line' bound to `C-x C-;'.
  
- ** Successive single-char deletions are collapsed in the undo-log just like
- successive char insertions.
+ ** New and improved facilities for inserting Unicode characters
  
- ** Unicode names entered via C-x 8 RET now use substring completion by default.
+ ---
+ *** Unicode names entered via C-x 8 RET now use substring completion by default.
  
- ** C-x 8 now has shorthands for these chars: â€ â€‘ â€’ â€“ â€” â€• â€˜ â€™ â€œ â€ â€  â€Ą â€ą â€Č â€ł
+ +++
+ *** C-x 8 now has shorthands for these chars: â€ â€‘ â€’ â€“ â€” â€• â€˜ â€™ â€œ â€ â€  â€Ą â€ą â€Č â€ł
  â‚Ź â„– â† â†’ â†” âˆ’ â‰ˆ â‰  â‰€ â‰„.  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”
+ +++
+ *** 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 global-eldoc-mode is enabled by default.
  
+ ---
  ** Emacs now supports "bracketed paste mode" when running on a terminal
  that supports it.  This facility allows Emacs to understand pasted
  chunks of text as strings to be inserted, instead of interpreting each
@@@ -325,6 -259,7 +280,7 @@@ character in the pasted text as actual 
  paste experience similar to that under a window system, and significant
  performance improvements when pasting large amounts of text.
  
+ +++
  ** Emacs now supports the latest version of the UBA.
  The Emacs implementation of the Unicode Bidirectional Algorithm (UBA)
  was updated to support all the latest additions and changes introduced
@@@ -333,73 -268,137 +289,140 @@@ This includes full support for directio
  Bidirectional Parentheses Algorithm (BPA) specified by these Unicode
  standards.
  
+ +++
  ** You can access `mouse-buffer-menu' (C-down-mouse-1) using C-f10.
  
  +++
  ** New buffer-local `electric-pair-local-mode'.
  
+ +++
+ ** 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
+ default.
+ +++
+ ** 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'.
  \f
  * Changes in Specialized Modes and Packages in Emacs 25.1
  
+ ** Checkdoc
+ +++
+ *** 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.
+ +++
+ *** New function `checkdoc-file' checks for style errors.
+ It's meant for use together with `compile':
+ emacs -batch --eval "(checkdoc-file \"subr.el\")"
+ +++
  ** 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.
  
+ ** IMAP
+ ---
+ *** `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
  the ordering of object keys by default.
  ---
  *** New commands `json-pretty-print-ordered' and
  `json-pretty-print-buffer-ordered' pretty prints JSON objects with
  object keys sorted alphabetically.
  
- ** You can recompute the VC state of a file buffer with `M-x vc-refresh-state'
+ +++
  ** Prog mode has some support for multi-mode indentation.
- See `prog-indentation-context' and `prog-widen'.
+ 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
- specify in which contexts a symbol map be composed to some unicode
+ specify in which contexts a symbol may be displayed as some Unicode
  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 `xterm-screen-extra-capabilities' config.
+ ** Enhanced xterm support
+ ---
+ *** 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.
+ (This variable was introduced in Emacs 24.1, but was not announced in
+ 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
+ by default at least in Debian, for security reasons).
  
- ** The `save-place' variable is replaced by a `save-place-mode'.
+ 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'.
+ +++
+ *** `xterm-mouse-mode' now supports mouse-tracking (if your xterm supports it).
+ ---
+ ** The `save-place' variable is replaced by `save-place-mode'.
  
  ** ERC
  
- *** Hide message types by network or channel.  `erc-hide-list' will
- hide all messages of the specified type, where `erc-network-hide-list'
- and `erc-channel-hide-list' will only hide the specified message types
- for the respective specified targets.
+ +++
+ *** 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
+ specified message types for the respective specified targets.
  
 +*** New variable `erc-default-port-tls' used to connect to TLS IRC
 +servers.
 +
  ** Midnight-mode
- *** `midnight-mode' is a proper minor mode.
- *** clean-buffer-*-regexps can now specify buffers via predicate functions.
  
- ** In xterms, 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
- 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'.
+ ---
+ *** `midnight-mode' is now a proper minor mode.
  
- ** xterm-mouse-mode now supports mouse-tracking (if your xterm supports it).
+ ---
+ *** clean-buffer-*-regexps can now specify buffers via predicate functions.
  
  ** package.el
  
+ +++
  *** 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
  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
+ The effect is that a user can manually place a specific version of a
  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'.
  
+ +++
  *** `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
@@@ -422,34 -423,43 +447,43 @@@ version (which were previously impossib
  This allows users to downgrade a package if a lower version is
  available.
  
+ ---
  *** When filtering the package menu, keywords starting with "arc:" or
  "status:" represent package archive or status, respectively, instead
  of actual keywords.
  
+ ---
  *** Most functions which involve downloading information now take an
  ASYNC argument.  If it is non-nil, package.el performs the download(s)
  asynchronously.
  
+ ---
  *** New variable `package-menu-async' controls whether the
  package-menu uses asynchronous downloads.
  
+ ---
  *** `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.
  
+ ---
  *** 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-user-selected-packages' installs all
  packages from `package-selected-packages' which are currently missing.
  
+ ---
  *** 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
@@@ -476,23 -486,61 +510,61 @@@ If you need your objects to be named, d
  *** `constructor' is now an obsolete alias for `make-instance'.
  
  ** 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
  kills the buffer at head.
+ ---
  *** 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.
  
  ** Minibuffer
  
- *** You can use <up> and <down> keys to move point in the multi-line
- minibuffer just as in an ordinary buffer.  Only when point moves over
+ +++
+ *** 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
+ 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.  The new commands bound to <up> and <down> in the minibuffer:
`next-line-or-history-element' and `previous-line-or-history-element'.
+ element.  `M-p' and `M-n' still move directly to previous/next history
item as before.
  
  ** Search and Replace
  
+ +++
+ *** New user option `search-default-regexp-mode'
+ specifies the default mode for I-search.
+ +++
+ *** `isearch' and `query-replace' can now perform character folding in matches.
+ Isearch does that by default, while `query-replace' will do that if
+ the new variable `replace-character-fold' is customized to a non-nil
+ value.  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.)  This means many characters in the search string will match
+ entire groups of characters instead of just themselves.
+ For instance, the " 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 â“.
+ +++
+ *** 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'.
+ +++
  *** 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
@@@ -513,8 -561,16 +585,16 @@@ this you can tell Edebug not to stop a
  instrumented function.
  
  ** ElDoc
+ +++
  *** 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'
+ ---
  *** `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. ] [,
  whether to use variable-pitch fonts or not.  The user can also
  customize the `shr-use-fonts' variable.
  
 ++++
 +*** A new command `C' (`eww-toggle-colors) can be used to toggle
 +whether to use the HTML-specified colors or not.  The user can also
 +customize the `shr-use-colors variable.
 +
  +++
  *** 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
@@@ -575,31 -626,45 +655,45 @@@ invalid certificates are marked in red
  
  ** Message mode
  
+ ---
  *** text/html messages that contain inline image parts will be
  transformed into multipart/related messages before sending.
  
- ** pcase
- *** New UPatterns `quote', `app', `cl-struct', and `eieio'.
- *** New UPatterns can be defined with `pcase-defmacro'.
  +++
- *** New vector QPattern.
+ ** 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'.
  
  ** Lisp mode
  *** Strings after `:documentation' are highlighted as docstrings.
  
  ** Rectangle editing
+ +++
  *** Rectangle Mark mode can have corners past EOL or in the middle of a TAB.
+ +++
  *** C-x C-x in rectangle-mark-mode now cycles through the four corners.
  *** `string-rectangle' provides on-the-fly preview of the result.
  
- ** New font-lock functions font-lock-ensure and font-lock-flush, which
- should be used instead of font-lock-fontify-buffer when called from Elisp.
+ +++
+ ** 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' takes (:append FUN) to mean
- appending FUN 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
+ 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'.
  
  ** Calendar and diary
  
@@@ -643,15 -708,26 +737,26 @@@ The remainder were
  
  **** The nil and list forms of `diary-display-function'.
  
+ +++
  ** 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'.
  
+ ** Info
  ---
- ** `Info-fontify-maximum-menu-size' can be t for no limit.
+ ** Info mode now displays symbol names in fixed-pitch font.
+ 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-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.
  
  
  ** Rmail
  
- *** The Rmail commands d, C-d and u take optional repeat counts to delete or
- undelete multiple messages.
+ +++
+ *** The Rmail commands `d', `C-d' and `u' take optional repeat counts
+ to delete or undelete multiple messages.
  
+ +++
  *** Rmail can now render HTML mail messages if your Emacs was built with
  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
@@@ -673,14 -751,18 +780,18 @@@ plain text parts, if display of HTML em
  *** 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'.
  
- ** sh-script
+ ** Shell-script Mode
+ ---
  *** 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.
  
  ** TLS
  ---
  
  ** URL
  
+ +++
  *** The URL package accepts now the protocols "ssh", "scp" and "rsync".
  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
  a function.
  
+ ---
  *** 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.
  
+ ---
  *** 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).
@@@ -723,47 -809,72 +838,72 @@@ filesystem notifications
  
  ** SQL mode
  
+ ---
  *** New user variable `sql-default-directory' enables remote
  connections using Tramp.
  
- *** New command `sql-send-line-and-next' sends the current line to the
- interactive buffer and advances to the next line, skipping whitespace
- and comments.
+ ---
+ *** 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.
  
- *** Add support for Vertica SQL.
+ ---
+ *** Added support for Vertica SQL.
  
  ** VC and related modes
  
+ +++
  *** 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.
  
+ +++
  *** 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'.
+ 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
  background or to the foreground.
  
- *** `compare-windows' now compares text with the most recently used window
- instead of the next window.  The new option `compare-windows-get-window-function'
- allows to customize this.
+ +++
+ *** `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'.
  
+ ---
  *** Two new faces `compare-windows-removed' and `compare-windows-added'
- replace the obsolete face `compare-windows'.
+ replace the face `compare-windows', which is now an obsolete alias for
+ `compare-windows-added'.
  
  ---
  *** `log-edit-insert-changelog' converts "(tiny change)" to
  "Copyright-paperwork-exempt: yes".  Set `log-edit-rewrite-tiny-change'
  nil to disable this.
  
- ** VHDL mode supports VHDL'08.
+ ---
+ ** VHDL mode now supports VHDL'08.
  
- ** Calculator: decimal display mode uses "," groups, so it's more
- fitting for use in money calculations; factorial works with
- non-integer inputs.
+ ** Calculator
  
- ** HideIfDef mode now support full C/C++ expressions, argumented macro expansions,
- interactive macro evaluation and automatic scanning of #defined symbols.
+ ---
+ *** Decimal display mode uses "," groups, so it's more
+ fitting for use in money calculations
+ ---
+ *** Factorial works with non-integer inputs.
+ ** HideIfDef mode now support full C/C++ expressions, argumented macro
+ expansions, interactive macro evaluation and automatic scanning of
+ #defined symbols.
  
  *** New custom variable `hide-ifdef-header-regexp' to define C/C++ header file
  name patterns.  Default case-insensitive .h, .hh, .hpp, .hxx, and .h++.
@@@ -810,6 -921,11 +950,11 @@@ easier binding, which is now unoccupie
  alias for a private variable.  `xref-push-marker-stack' and
  `xref-pop-marker-stack' should be used to mutate it instead.
  
+ ---
+ *** `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').
  ** etags
  As a result of the above, these commands are now obsolete:
  `find-tag-other-window', `find-tag-other-frame', `find-tag-regexp',
@@@ -850,6 -966,10 +995,10 @@@ to avoid interfering with the kill ring
  allow overriding the regular expression that recognizes the ldapsearch
  command line's password prompt.
  
+ EUDC's BBDB backend now supports BBDB 3.
+ EUDC's PH backend (eudcb-ph.el) is obsolete.
  ** Eshell
  
  +++
@@@ -907,10 -1027,18 +1056,22 @@@ compress many marked files into a singl
  compression command is determined from the new
  `dired-compress-files-alist' variable.
  
 ++++
 +*** `W' is now bound to `browse-url-of-dired-file', and is useful for
 +viewing HTML files and the like.
 +
+ ** 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
+ header.
+ +++
+ *** `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.
  ** Obsolete packages
  
  ---
@@@ -957,6 -1085,12 +1118,12 @@@ support for JSX, an XML-like syntax ext
  \f
  * Incompatible Lisp Changes in Emacs 25.1
  
+ ---
+ ** `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.
  Removed font-lock-beginning-of-syntax-function and the SYNTAX-BEGIN
  slot in font-lock-defaults.
@@@ -983,6 -1117,7 +1150,7 @@@ large portions of the Emacs display, an
  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
  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.
  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.
  *** 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.
@@@ -1089,6 -1225,12 +1258,12 @@@ that happen, `unhandled-file-name-direc
  \f
  * Lisp Changes in Emacs 25.1
  
+ ** pcase
+ *** New UPatterns `quote', `app', `cl-struct', `eieio', `seq', and `map'.
+ *** 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'.
  
@@@ -1118,6 -1260,27 +1293,27 @@@ of subprocess
  process filter, sentinel, etc., through keyword arguments (similar to
  `make-network-process').
  
+ +++
+ ** 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 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
+ buffers to allow certain parts of the text to be writable.
+ +++
+ ** 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'.
  ** `read-buffer' takes a new `predicate' argument.
  
  ** Emacs Lisp now supports generators.
@@@ -1144,6 -1307,26 +1340,26 @@@ evaluated (and should return a string) 
  ** New function `string-greaterp', which return the opposite result of
  `string-lessp'.
  
+ +++
+ ** 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'.
+ ---
+ *** The ls-lisp package uses `string-collate-lessp' to sort file names.
+ If you want the old, locale-independent sorting, customize the new
+ option `ls-lisp-use-string-collate' to a nil value.
+ +++
+ *** 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
+ 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 `funcall-interactively', which works like `funcall'
@@@ -1152,6 -1335,20 +1368,20 @@@ called interactively
  
  ** New function `function-put' to use instead of `put' for function properties.
  
+ +++
+ ** The new function `bidi-find-overridden-directionality' allows 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 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':
  *** (interactive-only INSTEAD), says to use INSTEAD for non-interactive use.
@@@ -1178,6 -1375,35 +1408,35 @@@ name.  The variable `system-name' is no
  ** 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.
+ 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
+ character in the current buffer's default font.  If the default face
+ is remapped (see `face-remapping-alist'), the value for the remapped
+ face is returned.  This function complements the existing function
+ `default-font-height'.
+ +++
+ *** 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
+ function returns the information for the remapped face.
+ +++
+ *** 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
+ 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
@@@ -1239,12 -1465,26 +1498,26 @@@ integers
  ** New function `set-binary-mode' allows to switch 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
+ 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).
  ** ASCII approximations to curved quotes are put in standard-display-table
  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.
  
+ +++
+ ** New var `truncate-string-ellipsis' to choose how to indicate truncation.
+ +++
+ ** 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
@@@ -1324,26 -1564,24 +1597,24 @@@ fullwidth frames, the behavior may depe
  windows 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'.
+ 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 option `switch-to-buffer-in-dedicated-window' allows 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.
  ** Tearoff menus and detachable toolbars for Gtk+ has been removed.
  Those features have been deprecated in Gtk+ for a long time.
  
- ** Miscellaneous
+ ** Etags
  
  *** etags no longer qualifies class members by default.
  By default, `etags' will not qualify class members for C-like
  object-oriented languages with their class names and namespaces, and
  will remove qualifications used explicitly in the code from the tag
@@@ -1357,6 -1595,16 +1628,16 @@@ using -Q might make some class members 
  (`xref-find-definitions'); if so, you can use `C-u M-.' to specify the
  qualified names by hand.
  
+ *** New language Ruby
+ Names of modules, classes, methods, and functions are tagged.
+ Overloaded operators are also tagged.
+ *** Improved support for Lua
+ Etags now tags functions even if the "function" keyword follows some
+ whitespace at line beginning.
  \f
  * Changes in Emacs 25.1 on Non-Free Operating Systems
  
@@@ -1386,6 -1634,12 +1667,12 @@@ Pass '--without-ns' to configure to cre
  
  ** OS X on PowerPC is no longer supported.
  
+ ---
+ ** 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.
  ---
  ** The new function 'w32-application-type' returns the type of an
  MS-Windows application given the name of its executable program file.
index e48e2d2af83ca42ba938adccf16be82ac1d77b31,641d65725922e4ee2aa4e3e95e497889fb452b02..9f1b8951a1c303b351a583ab9f93259fbfad3a2e
@@@ -4,6 -4,7 +4,7 @@@
  
  ;; Author: Eric M. Ludlam <zappo@gnu.org>
  ;; Keywords: OO, lisp
+ ;; Package: eieio
  
  ;; This file is part of GNU Emacs.
  
@@@ -264,7 -265,7 +265,7 @@@ Summary
  
  
  ;; Local Variables:
 -;; generated-autoload-file: "eieio-core.el"
 +;; generated-autoload-file: "eieio-loaddefs.el"
  ;; End:
  
  (provide 'eieio-compat)
index 0b5dedea9d25380ef895aebab969faf5b8f8363c,393f1d51050252636ad1aab73e57f4866298ef82..0b647a028ca223bab32f9289b10731d5e5ec99ca
@@@ -2,16 -2,13 +2,16 @@@
  
  ;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
  
 -;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 -;; Maintainer: Artur Malabarba <bruce.connor.am@gmail.com>
 +;; Author: Artur Malabarba <emacs@endlessparentheses.com>
 +;; Package-Requires: ((emacs "24.1"))
  ;; Version: 1.0.4
  ;; Keywords: extensions lisp
  ;; Prefix: let-alist
  ;; Separator: -
  
 +;; This is an Elpa :core package. Don't use functionality that is not
 +;; compatible with Emacs 24.1.
 +
  ;; This file is part of GNU Emacs.
  
  ;; GNU Emacs is free software: you can redistribute it and/or modify
@@@ -120,10 -117,10 +120,10 @@@ For instance, the following cod
  
  essentially expands to
  
-   (let ((.title (cdr (assq 'title alist)))
-         (.body  (cdr (assq 'body alist)))
-         (.site  (cdr (assq 'site alist)))
-         (.site.contents (cdr (assq 'contents (cdr (assq 'site alist))))))
+   (let ((.title (cdr (assq \\='title alist)))
+         (.body  (cdr (assq \\='body alist)))
+         (.site  (cdr (assq \\='site alist)))
+         (.site.contents (cdr (assq \\='contents (cdr (assq \\='site alist))))))
      (if (and .title .body)
          .body
        .site
@@@ -137,7 -134,7 +137,7 @@@ displayed in the example above.
    (let ((var (make-symbol "alist")))
      `(let ((,var ,alist))
         (let ,(mapcar (lambda (x) `(,(car x) ,(let-alist--access-sexp (car x) var)))
 -               (delete-dups (let-alist--deep-dot-search body)))
 +                     (delete-dups (let-alist--deep-dot-search body)))
           ,@body))))
  
  (provide 'let-alist)
index fdad84a117a534833472e41f2f121f598975e783,f60bff4a477f9014cd8afcd316cb1fd32a683371..97b899754693194c05ab1b89e58077b0467b6076
@@@ -5,7 -5,7 +5,7 @@@
  ;; Author: Tom Tromey <tromey@redhat.com>
  ;;         Daniel Hackney <dan@haxney.org>
  ;; Created: 10 Mar 2007
- ;; Version: 1.0.1
+ ;; Version: 1.1.0
  ;; Keywords: tools
  ;; Package-Requires: ((tabulated-list "1.0"))
  
  ;; You should have received a copy of the GNU General Public License
  ;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
  
- ;;; Change Log:
- ;;  2 Apr 2007 - now using ChangeLog file
- ;; 15 Mar 2007 - updated documentation
- ;; 14 Mar 2007 - Changed how obsolete packages are handled
- ;; 13 Mar 2007 - Wrote package-install-from-buffer
- ;; 12 Mar 2007 - Wrote package-menu mode
  ;;; Commentary:
  
  ;; The idea behind package.el is to be able to download packages and
@@@ -69,6 -61,7 +61,7 @@@
  ;; * Download.  Fetching the package from ELPA.
  ;; * Install.  Untar the package, or write the .el file, into
  ;;   ~/.emacs.d/elpa/ directory.
+ ;; * Autoload generation.
  ;; * Byte compile.  Currently this phase is done during install,
  ;;   but we may change this.
  ;; * Activate.  Evaluate the autoloads for the package to make it
  ;; - "installed" instead of a blank in the status column
  ;; - tramp needs its files to be compiled in a certain order.
  ;;   how to handle this?  fix tramp?
- ;; - on emacs 21 we don't kill the -autoloads.el buffer.  what about 22?
  ;; - maybe we need separate .elc directories for various emacs versions
  ;;   and also emacs-vs-xemacs.  That way conditional compilation can
  ;;   work.  But would this break anything?
- ;; - should store the package's keywords in archive-contents, then
- ;;   let the users filter the package-menu by keyword.  See
- ;;   finder-by-keyword.  (We could also let people view the
- ;;   Commentary, but it isn't clear how useful this is.)
  ;; - William Xu suggests being able to open a package file without
  ;;   installing it
  ;; - Interface with desktop.el so that restarting after an install
  ;;   private data dir, aka ".../etc".  Or, maybe data-directory
  ;;   needs to be a list (though this would be less nice)
  ;;   a few packages want this, eg sokoban
- ;; - package menu needs:
- ;;     ability to know which packages are built-in & thus not deletable
- ;;     it can sometimes print odd results, like 0.3 available but 0.4 active
- ;;        why is that?
- ;; - Allow multiple versions on the server...?
- ;;   [ why bother? ]
- ;; - Don't install a package which will invalidate dependencies overall
- ;; - Allow something like (or (>= emacs 21.0) (>= xemacs 21.5))
- ;;   [ currently thinking, why bother.. KISS ]
+ ;; - Allow multiple versions on the server, so that if a user doesn't
+ ;;   meet the requirements for the most recent version they can still
+ ;;   install an older one.
  ;; - Allow optional package dependencies
  ;;   then if we require 'bbdb', bbdb-specific lisp in lisp/bbdb
  ;;   and just don't compile to add to load path ...?
  
  (require 'tabulated-list)
  (require 'macroexp)
 +(require 'url-handlers)
  
  (defgroup package nil
    "Manager for Emacs Lisp packages."
@@@ -235,7 -216,7 +217,7 @@@ of it available such that
  
  This variable has three possible values:
      nil: no packages are hidden;
-     `archive': only criteria (a) is used;
+     `archive': only criterion (a) is used;
      t: both criteria are used.
  
  This variable has no effect if `package-menu--hide-packages' is
@@@ -253,7 -234,7 +235,7 @@@ Each element has the form (ARCHIVE-ID 
  
  When installing packages, the package with the highest version
  number from the archive with the highest priority is
- selected. When higher versions are available from archives with
+ selected.  When higher versions are available from archives with
  lower priorities, the user has to select those manually.
  
  Archives not in this list have the priority 0.
@@@ -665,8 -646,30 +647,30 @@@ PKG-DESC is a `package-desc' object.
  (defvar Info-directory-list)
  (declare-function info-initialize "info" ())
  
- (defun package-activate-1 (pkg-desc &optional reload)
+ (defun package--load-files-for-activation (pkg-desc reload)
+   "Load files for activating a package given by PKG-DESC.
+ Load the autoloads file, and ensure `load-path' is setup.  If
+ RELOAD is non-nil, also load all files in the package that
+ correspond to previously loaded files."
+   (let* ((loaded-files-list (when reload
+                               (package--list-loaded-files (package-desc-dir pkg-desc)))))
+     ;; Add to load path, add autoloads, and activate the package.
+     (package--activate-autoloads-and-load-path pkg-desc)
+     ;; Call `load' on all files in `package-desc-dir' already present in
+     ;; `load-history'.  This is done so that macros in these files are updated
+     ;; to their new definitions.  If another package is being installed which
+     ;; depends on this new definition, not doing this update would cause
+     ;; compilation errors and break the installation.
+     (with-demoted-errors "Error in package--load-files-for-activation: %s"
+       (mapc (lambda (feature) (load feature nil t))
+             ;; Skip autoloads file since we already evaluated it above.
+             (remove (file-truename (package--autoloads-file-name pkg-desc))
+                     loaded-files-list)))))
+ (defun package-activate-1 (pkg-desc &optional reload deps)
    "Activate package given by PKG-DESC, even if it was already active.
+ If DEPS is non-nil, also activate its dependencies (unless they
+ are already activated).
  If RELOAD is non-nil, also `load' any files inside the package which
  correspond to previously loaded files (those returned by
  `package--list-loaded-files')."
      (unless pkg-dir
        (error "Internal error: unable to find directory for `%s'"
               (package-desc-full-name pkg-desc)))
-     (let* ((loaded-files-list (when reload
-                                 (package--list-loaded-files pkg-dir))))
-       ;; Add to load path, add autoloads, and activate the package.
-       (package--activate-autoloads-and-load-path pkg-desc)
-       ;; Call `load' on all files in `pkg-dir' already present in
-       ;; `load-history'.  This is done so that macros in these files are updated
-       ;; to their new definitions.  If another package is being installed which
-       ;; depends on this new definition, not doing this update would cause
-       ;; compilation errors and break the installation.
-       (with-demoted-errors "Error in package-activate-1: %s"
-         (mapc (lambda (feature) (load feature nil t))
-               ;; Skip autoloads file since we already evaluated it above.
-               (remove (file-truename (package--autoloads-file-name pkg-desc))
-                       loaded-files-list))))
+     ;; Activate its dependencies recursively.
+     ;; FIXME: This doesn't check whether the activated version is the
+     ;; required version.
+     (when deps
+       (dolist (req (package-desc-reqs pkg-desc))
+         (unless (package-activate (car req))
+           (error "Unable to activate package `%s'.\nRequired package `%s-%s' is unavailable"
+                  name (car req) (package-version-join (cadr req))))))
+     (package--load-files-for-activation pkg-desc reload)
      ;; Add info node.
      (when (file-exists-p (expand-file-name "dir" pkg-dir))
        ;; FIXME: not the friendliest, but simple.
@@@ -740,7 -738,7 +739,7 @@@ DIR, sorted by most recently loaded las
  ;; one was already activated.  It also loads a features of this
  ;; package which were already loaded.
  (defun package-activate (package &optional force)
-   "Activate package PACKAGE.
+   "Activate the package named PACKAGE.
  If FORCE is true, (re-)activate it if it's already activated.
  Newer versions are always activated, regardless of FORCE."
    (let ((pkg-descs (cdr (assq package package-alist))))
       ((and (memq package package-activated-list) (not force))
        t)
       ;; Otherwise, proceed with activation.
-      (t
-       (let* ((pkg-vec (car pkg-descs))
-              (fail (catch 'dep-failure
-                      ;; Activate its dependencies recursively.
-                      (dolist (req (package-desc-reqs pkg-vec))
-                        (unless (package-activate (car req))
-                          (throw 'dep-failure req))))))
-         (if fail
-             (warn "Unable to activate package `%s'.
- Required package `%s-%s' is unavailable"
-                   package (car fail) (package-version-join (cadr fail)))
-           ;; If all goes well, activate the package itself.
-           (package-activate-1 pkg-vec force)))))))
+      (t (package-activate-1 (car pkg-descs) nil 'deps)))))
  
  \f
  ;;; Installation -- Local operations
@@@ -843,13 -829,21 +830,21 @@@ untar into a directory named DIR; other
      (package--make-autoloads-and-stuff pkg-desc pkg-dir)
      ;; Update package-alist.
      (let ((new-desc (package-load-descriptor pkg-dir)))
-       ;; FIXME: Check that `new-desc' matches `desc'!
+       (unless (equal (package-desc-full-name new-desc)
+                      (package-desc-full-name pkg-desc))
+         (error "The retrieved package (`%s') doesn't match what the archive offered (`%s')"
+                (package-desc-full-name new-desc) (package-desc-full-name pkg-desc)))
+       ;; Activation has to be done before compilation, so that if we're
+       ;; upgrading and macros have changed we load the new definitions
+       ;; before compiling.
+       (package-activate-1 new-desc :reload :deps)
        ;; FIXME: Compilation should be done as a separate, optional, step.
        ;; E.g. for multi-package installs, we should first install all packages
        ;; and then compile them.
-       (package--compile new-desc))
-     ;; Try to activate it.
-     (package-activate name 'force)
+       (package--compile new-desc)
+       ;; After compilation, load again any files loaded by
+       ;; `activate-1', so that we use the byte-compiled definitions.
+       (package--load-files-for-activation new-desc :reload))
      pkg-dir))
  
  (defun package-generate-description-file (pkg-desc pkg-file)
  ;;;; Compilation
  (defvar warning-minimum-level)
  (defun package--compile (pkg-desc)
-   "Byte-compile installed package PKG-DESC."
+   "Byte-compile installed package PKG-DESC.
+ This assumes that `pkg-desc' has already been activated with
+ `package-activate-1'."
    (let ((warning-minimum-level :error)
          (save-silently inhibit-message)
          (load-path load-path))
-     (package--activate-autoloads-and-load-path pkg-desc)
      (byte-recompile-directory (package-desc-dir pkg-desc) 0 t)))
  
  ;;;; Inferring package from current buffer
@@@ -1142,46 -1137,50 +1138,50 @@@ Point is after the headers when BODY ru
  FILE, if provided, is added to URL.
  URL can be a local file name, which must be absolute.
  ASYNC, if non-nil, runs the request asynchronously.
- ERROR-FORM is run only if an error occurs.  If NOERROR is
- non-nil, don't propagate errors caused by the connection or by
BODY (does not apply to errors signaled by ERROR-FORM).
+ ERROR-FORM is run only if a connection error occurs.  If NOERROR
+ is non-nil, don't propagate connection errors (does not apply to
errors signaled by ERROR-FORM or by BODY).
  
  \(fn URL &key ASYNC FILE ERROR-FORM NOERROR &rest BODY)"
    (declare (indent defun) (debug t))
    (while (keywordp (car body))
      (setq body (cdr (cdr body))))
-   (macroexp-let2* nil ((url-1 url))
-     `(cl-macrolet ((wrap-errors (&rest bodyforms)
-                                 (let ((err (make-symbol "err")))
-                                   `(condition-case ,err
-                                        ,(macroexp-progn bodyforms)
-                                      ,(list 'error ',error-form
-                                             (list 'unless ',noerror
-                                                   `(signal (car ,err) (cdr ,err))))))))
+   (macroexp-let2* nil ((url-1 url)
+                        (noerror-1 noerror))
+     `(cl-macrolet ((unless-error (body-2 &rest before-body)
+                                  (let ((err (make-symbol "err")))
+                                    `(with-temp-buffer
+                                       (when (condition-case ,err
+                                                 (progn ,@before-body t)
+                                               ,(list 'error ',error-form
+                                                      (list 'unless ',noerror-1
+                                                            `(signal (car ,err) (cdr ,err)))))
+                                         ,@body-2)))))
         (if (string-match-p "\\`https?:" ,url-1)
             (let* ((url (concat ,url-1 ,file))
                    (callback (lambda (status)
                                (let ((b (current-buffer)))
-                                 (unwind-protect (wrap-errors
-                                                  (when-let ((er (plist-get status :error)))
-                                                    (error "Error retrieving: %s %S" url er))
-                                                  (unless (search-forward-regexp "^\r?\n\r?" nil 'noerror)
-                                                    (error "Error retrieving: %s %S" url "incomprehensible buffer"))
-                                                  (with-temp-buffer
-                                                    (url-insert-buffer-contents b url)
-                                                    (kill-buffer b)
-                                                    (goto-char (point-min))
-                                                    ,@body)))))))
+                                 (require 'url-handlers)
+                                 (unless-error ,body
+                                               (when-let ((er (plist-get status :error)))
+                                                 (error "Error retrieving: %s %S" url er))
+                                               (with-current-buffer b
+                                                 (goto-char (point-min))
+                                                 (unless (search-forward-regexp "^\r?\n\r?" nil 'noerror)
+                                                   (error "Error retrieving: %s %S" url "incomprehensible buffer")))
+                                               (url-insert-buffer-contents b url)
+                                               (kill-buffer b)
+                                               (goto-char (point-min)))))))
               (if ,async
-                  (wrap-errors (url-retrieve url callback nil 'silent))
-                (with-current-buffer (wrap-errors (url-retrieve-synchronously url 'silent))
-                  (funcall callback nil))))
-          (wrap-errors (with-temp-buffer
-                         (let ((url (expand-file-name ,file ,url-1)))
-                           (unless (file-name-absolute-p url)
-                             (error "Location %s is not a url nor an absolute file name" url))
-                           (insert-file-contents url))
                        ,@body))))))
+                  (unless-error nil (url-retrieve url callback nil 'silent))
+                (unless-error ,body (url-insert-file-contents url))))
+          (unless-error ,body
+                        (let ((url (expand-file-name ,file ,url-1)))
+                          (unless (file-name-absolute-p url)
+                            (error "Location %s is not a url nor an absolute file name" url))
+                          (insert-file-contents url)))))))
(define-error 'bad-signature "Failed to verify signature")
  
  (defun package--check-signature-content (content string &optional sig-file)
    "Check signature CONTENT against STRING.
@@@ -1193,7 -1192,7 +1193,7 @@@ errors.
      (condition-case error
          (epg-verify-string context content string)
        (error (package--display-verify-error context sig-file)
-         (signal (car error) (cdr error))))
+              (signal 'bad-signature error)))
      (let (good-signatures had-fatal-error)
        ;; The .sig file may contain multiple signatures.  Success if one
        ;; of the signatures is good.
              (setq had-fatal-error t))))
        (when (and (null good-signatures) had-fatal-error)
          (package--display-verify-error context sig-file)
-         (error "Failed to verify signature %s" sig-file))
+         (signal 'bad-signature (list sig-file)))
        good-signatures)))
  
- (defun package--check-signature (location file &optional string async callback)
+ (defun package--check-signature (location file &optional string async callback unwind)
    "Check signature of the current buffer.
  Download the signature file from LOCATION by appending \".sig\"
  to FILE.
@@@ -1221,18 -1220,35 +1221,35 @@@ STRING is the string to verify, it defa
  If ASYNC is non-nil, the download of the signature file is
  done asynchronously.
  
- If the signature is verified and CALLBACK was provided, CALLBACK
- is `funcall'ed with the list of good signatures as argument (the
- list can be empty).  If the signatures file is not found,
- CALLBACK is called with no arguments."
+ If the signature does not verify, signal an error.
+ If the signature is verified and CALLBACK was provided, `funcall'
+ CALLBACK with the list of good signatures as argument (the list
+ can be empty).
+ If no signatures file is found, and `package-check-signature' is
+ `allow-unsigned', call CALLBACK with a nil argument.
+ Otherwise, an error is signaled.
+ UNWIND, if provided, is a function to be called after everything
+ else, even if an error is signaled."
    (let ((sig-file (concat file ".sig"))
          (string (or string (buffer-string))))
      (package--with-response-buffer location :file sig-file
        :async async :noerror t
-       :error-form (when callback (funcall callback nil))
-       (let ((sig (package--check-signature-content (buffer-substring (point) (point-max)) string sig-file)))
-         (when callback (funcall callback sig))
-         sig))))
+       ;; Connection error is assumed to mean "no sig-file".
+       :error-form (let ((allow-unsigned (eq package-check-signature 'allow-unsigned)))
+                     (when (and callback allow-unsigned)
+                       (funcall callback nil))
+                     (when unwind (funcall unwind))
+                     (unless allow-unsigned
+                       (error "Unsigned file `%s' at %s" file location)))
+       ;; OTOH, an error here means "bad signature", which we never
+       ;; suppress.  (Bug#22089)
+       (unwind-protect
+           (let ((sig (package--check-signature-content (buffer-substring (point) (point-max))
+                                                        string sig-file)))
+             (when callback (funcall callback sig))
+             sig)
+         (when unwind (funcall unwind))))))
  \f
  ;;; Packages on Archives
  ;; The following variables store information about packages available
@@@ -1495,19 -1511,12 +1512,12 @@@ similar to an entry in `package-alist'
             location file content async
             ;; This function will be called after signature checking.
             (lambda (&optional good-sigs)
-              (unless (or good-sigs (eq package-check-signature 'allow-unsigned))
-                ;; Even if the sig fails, this download is done, so
-                ;; remove it from the in-progress list.
-                (package--update-downloads-in-progress archive)
-                (error "Unsigned archive `%s'" name))
-              ;; Either everything worked or we don't mind not signing.
-              ;; Write out the archives file.
               (write-region content nil local-file nil 'silent)
               ;; Write out good signatures into archive-contents.signed file.
               (when good-sigs
                 (write-region (mapconcat #'epg-signature-to-string good-sigs "\n")
-                              nil (concat local-file ".signed") nil 'silent))
-              (package--update-downloads-in-progress archive))))))))
+                              nil (concat local-file ".signed") nil 'silent)))
+            (lambda () (package--update-downloads-in-progress archive))))))))
  
  (defun package--download-and-read-archives (&optional async)
    "Download descriptions of all `package-archives' and read them.
@@@ -1789,11 -1798,6 +1799,6 @@@ if all the in-between dependencies are 
             location file content nil
             ;; This function will be called after signature checking.
             (lambda (&optional good-sigs)
-              (unless (or good-sigs (eq package-check-signature 'allow-unsigned))
-                ;; Even if the sig fails, this download is done, so
-                ;; remove it from the in-progress list.
-                (error "Unsigned package: `%s'"
-                  (package-desc-name pkg-desc)))
               ;; Signature checked, unpack now.
               (with-temp-buffer (insert content)
                                 (let ((save-silently t))
diff --combined lisp/erc/erc-backend.el
index 1ef2fac1627a6057d627e278d77c7e52dc662406,06a23e80fdd781ae6d9eaecc98a5571ebc9010bb..e07dc90fcdcb1f05d2d48eb72fc23941c3889860
@@@ -370,7 -370,7 +370,7 @@@ This overrides `erc-server-coding-syste
  current target as returned by `erc-default-target'.
  
  Example: If you know that the channel #linux-ru uses the coding-system
- `cyrillic-koi8', then add '(\"#linux-ru\" . cyrillic-koi8) to the
+ `cyrillic-koi8', then add (\"#linux-ru\" . cyrillic-koi8) to the
  alist."
    :group 'erc-server
    :type '(repeat (cons (string :tag "Target")
@@@ -493,9 -493,19 +493,19 @@@ The current buffer is given by BUFFER.
                                       4 erc-server-send-ping-interval
                                       #'erc-server-send-ping
                                       buffer))
-       (setq erc-server-ping-timer-alist (cons (cons buffer
-                                                     erc-server-ping-handler)
-                                               erc-server-ping-timer-alist)))))
+       ;; I check the timer alist for an existing timer. If one exists,
+       ;; I get rid of it
+       (let ((timer-tuple (assq buffer erc-server-ping-timer-alist)))
+         (if timer-tuple
+             ;; this buffer already has a timer. Cancel it and set the new one
+             (progn
+               (erc-cancel-timer (cdr timer-tuple))
+               (setf (cdr (assq buffer erc-server-ping-timer-alist)) erc-server-ping-handler))
+           ;; no existing timer for this buffer. Add new one
+           (add-to-list 'erc-server-ping-timer-alist
+                        (cons buffer erc-server-ping-handler)))))))
  
  (defun erc-server-process-alive (&optional buffer)
    "Return non-nil when BUFFER has an `erc-server-process' open or running."
  (defun erc-server-connect (server port buffer)
    "Perform the connection and login using the specified SERVER and PORT.
  We will store server variables in the buffer given by BUFFER."
 -  (let ((msg (erc-format-message 'connect ?S server ?p port)))
 +  (let ((msg (erc-format-message 'connect ?S server ?p port)) process)
      (message "%s" msg)
 -    (let ((process (funcall erc-server-connect-function
 -                            (format "erc-%s-%s" server port)
 -                            nil server port)))
 -      (unless (processp process)
 -        (error "Connection attempt failed"))
 +    (setq process (funcall erc-server-connect-function
 +                           (format "erc-%s-%s" server port) nil server port))
 +    (unless (processp process)
 +      (error "Connection attempt failed"))
 +    ;; Misc server variables
 +    (with-current-buffer buffer
 +      (setq erc-server-process process)
 +      (setq erc-server-quitting nil)
 +      (setq erc-server-reconnecting nil)
 +      (setq erc-server-timed-out nil)
 +      (setq erc-server-banned nil)
 +      (setq erc-server-error-occurred nil)
 +      (let ((time (erc-current-time)))
 +        (setq erc-server-last-sent-time time)
 +        (setq erc-server-last-ping-time time)
 +        (setq erc-server-last-received-time time))
 +      (setq erc-server-lines-sent 0)
 +      ;; last peers (sender and receiver)
 +      (setq erc-server-last-peers '(nil . nil)))
 +    ;; we do our own encoding and decoding
 +    (when (fboundp 'set-process-coding-system)
 +      (set-process-coding-system process 'raw-text))
 +    ;; process handlers
 +    (set-process-sentinel process 'erc-process-sentinel)
 +    (set-process-filter process 'erc-server-filter-function)
 +    (set-process-buffer process buffer)
 +    (erc-log "\n\n\n********************************************\n")
 +    (message "%s" (erc-format-message
 +                   'login ?n
 +                   (with-current-buffer buffer (erc-current-nick))))
 +    ;; wait with script loading until we receive a confirmation (first
 +    ;; MOTD line)
 +    (if (eq (process-status process) 'connect)
 +        ;; waiting for a non-blocking connect - keep the user informed
 +        (erc-display-message nil nil buffer "Opening connection..\n")
        (message "%s...done" msg)
 -      ;; Misc server variables
 -      (with-current-buffer buffer
 -        (setq erc-server-process process)
 -        (setq erc-server-quitting nil)
 -        (setq erc-server-reconnecting nil)
 -        (setq erc-server-timed-out nil)
 -        (setq erc-server-banned nil)
 -        (setq erc-server-error-occurred nil)
 -        (let ((time (erc-current-time)))
 -          (setq erc-server-last-sent-time time)
 -          (setq erc-server-last-ping-time time)
 -          (setq erc-server-last-received-time time))
 -        (setq erc-server-lines-sent 0)
 -        ;; last peers (sender and receiver)
 -        (setq erc-server-last-peers '(nil . nil)))
 -      ;; we do our own encoding and decoding
 -      (when (fboundp 'set-process-coding-system)
 -        (set-process-coding-system process 'raw-text))
 -      ;; process handlers
 -      (set-process-sentinel process 'erc-process-sentinel)
 -      (set-process-filter process 'erc-server-filter-function)
 -      (set-process-buffer process buffer)))
 -  (erc-log "\n\n\n********************************************\n")
 -  (message "%s" (erc-format-message
 -            'login ?n
 -            (with-current-buffer buffer (erc-current-nick))))
 -  ;; wait with script loading until we receive a confirmation (first
 -  ;; MOTD line)
 -  (if (eq erc-server-connect-function 'open-network-stream-nowait)
 -      ;; it's a bit unclear otherwise that it's attempting to establish a
 -      ;; connection
 -      (erc-display-message nil nil buffer "Opening connection..\n")
 -    (erc-login)))
 +      (erc-login)) ))
  
  (defun erc-server-reconnect ()
  "Reestablish the current IRC connection.
@@@ -571,6 -583,11 +581,11 @@@ Make sure you are in an ERC buffer whe
          (erc-open erc-session-server erc-session-port erc-server-current-nick
                    erc-session-user-full-name t erc-session-password)))))
  
+ (defun erc-server-delayed-reconnect (event buffer)
+   (if (buffer-live-p buffer)
+     (with-current-buffer buffer
+       (erc-server-reconnect))))
  (defun erc-server-filter-function (process string)
    "The process filter for the ERC server."
    (with-current-buffer (process-buffer process)
  (defsubst erc-server-reconnect-p (event)
    "Return non-nil if ERC should attempt to reconnect automatically.
  EVENT is the message received from the closed connection process."
-   (and (not erc-server-quitting)   ;; user issued an explicit quit, give up now
-        (or erc-server-reconnecting ;; user issued explicit reconnect
-            ;; otherwise go through the full spectrum of checks:
-            (and erc-server-auto-reconnect
-                 (not erc-server-banned)
-                 ;; make sure we don't infinitely try to reconnect, unless the
-                 ;; user wants that
-                 (or (eq erc-server-reconnect-attempts t)
-                     (and (integerp erc-server-reconnect-attempts)
-                          (< erc-server-reconnect-count
-                             erc-server-reconnect-attempts)))
-                 (or erc-server-timed-out
-                     (not (string-match "^deleted" event)))
-                 ;; open-network-stream-nowait error for connection refused
-                 (not (string-match "^failed with code 111" event))))))
+   (or erc-server-reconnecting
+       (and erc-server-auto-reconnect
+            (not erc-server-banned)
+            (not erc-server-error-occurred)
+            ;; make sure we don't infinitely try to reconnect, unless the
+            ;; user wants that
+            (or (eq erc-server-reconnect-attempts t)
+                (and (integerp erc-server-reconnect-attempts)
+                     (< erc-server-reconnect-count
+                        erc-server-reconnect-attempts)))
+            (or erc-server-timed-out
+                (not (string-match "^deleted" event)))
+            ;; open-network-stream-nowait error for connection refused
+            (if (string-match "^failed with code 111" event) 'nonblocking t))))
  
  (defun erc-process-sentinel-2 (event buffer)
    "Called when `erc-process-sentinel-1' has detected an unexpected disconnect."
    (if (not (buffer-live-p buffer))
        (erc-update-mode-line)
      (with-current-buffer buffer
-       (let ((reconnect-p (erc-server-reconnect-p event)))
-         (erc-display-message nil 'error (current-buffer)
-                              (if reconnect-p 'disconnected
-                                'disconnected-noreconnect))
+       (let ((reconnect-p (erc-server-reconnect-p event)) message delay)
+         (setq message (if reconnect-p 'disconnected 'disconnected-noreconnect))
+         (erc-display-message nil 'error (current-buffer) message)
          (if (not reconnect-p)
              ;; terminate, do not reconnect
              (progn
            ;; reconnect
            (condition-case err
                (progn
-                 (setq erc-server-reconnecting nil)
-                 (setq erc-server-reconnect-count (1+ erc-server-reconnect-count))
-                 (erc-server-reconnect))
-             (error (when (buffer-live-p buffer)
-                      (set-buffer buffer)
-                      (unless (integerp erc-server-reconnect-attempts)
-                        (message "%s ... %s"
-                                 "Reconnecting until we succeed"
-                                 "kill the ERC server buffer to stop"))
-                      (if (numberp erc-server-reconnect-timeout)
-                          (run-at-time erc-server-reconnect-timeout nil
-                                       #'erc-process-sentinel-2
-                                       event buffer)
-                        (error (concat "`erc-server-reconnect-timeout'"
-                                       " must be a number")))))))))))
+                 (setq erc-server-reconnecting   nil
+                       erc-server-reconnect-count (1+ erc-server-reconnect-count))
+                 (setq delay erc-server-reconnect-timeout)
+                 (run-at-time delay nil
+                              #'erc-server-delayed-reconnect event buffer))
+             (error (unless (integerp erc-server-reconnect-attempts)
+                      (message "%s ... %s"
+                               "Reconnecting until we succeed"
+                               "kill the ERC server buffer to stop"))
+                    (erc-server-delayed-reconnect event buffer))))))))
  
  (defun erc-process-sentinel-1 (event buffer)
    "Called when `erc-process-sentinel' has decided that we're disconnecting.
@@@ -693,6 -703,9 +701,9 @@@ Conditionally try to reconnect and tak
                     (setq erc-server-ping-handler nil)))
            (run-hook-with-args 'erc-disconnected-hook
                                (erc-current-nick) (system-name) "")
+           (dolist (buf (erc-buffer-filter (lambda () (boundp 'erc-channel-users)) cproc))
+             (with-current-buffer buf
+               (setq erc-channel-users (make-hash-table :test 'equal))))
            ;; Remove the prompt
            (goto-char (or (marker-position erc-input-marker) (point-max)))
            (forward-line 0)
@@@ -795,7 -808,9 +806,9 @@@ protection algorithm.
  (defun erc-server-send-ping (buf)
    "Send a ping to the IRC server buffer in BUF.
  Additionally, detect whether the IRC process has hung."
-   (if (buffer-live-p buf)
+   (if (and (buffer-live-p buf)
+            (with-current-buffer buf
+              erc-server-last-received-time))
        (with-current-buffer buf
          (if (and erc-server-send-ping-timeout
                   (>
diff --combined lisp/erc/erc.el
index cd8e427f72bbed0d8beb4353592aa9bc2bfe6175,2b22bd55ccc4ca09fa435365d26b0f125601d2ff..49ba4ccf8cb4b05d0b23c2ef4b29fdef28f5da47
@@@ -629,7 -629,7 +629,7 @@@ See also: `erc-get-channel-user-list'.
  
  (defvar erc-channel-modes nil
    "List of strings representing channel modes.
- E.g. '(\"i\" \"m\" \"s\" \"b Quake!*@*\")
+ E.g. (\"i\" \"m\" \"s\" \"b Quake!*@*\")
  \(not sure the ban list will be here, but why not)")
  (make-variable-buffer-local 'erc-channel-modes)
  
@@@ -1471,10 -1471,6 +1471,10 @@@ Defaults to the server buffer.
  (defconst erc-default-port 6667
    "IRC port to use if it cannot be detected otherwise.")
  
 +(defconst erc-default-port-tls 6697
 +  "IRC port to use for encrypted connections if it cannot be
 +  detected otherwise.")
 +
  (defcustom erc-join-buffer 'buffer
    "Determines how to display a newly created IRC buffer.
  
@@@ -1967,7 -1963,9 +1967,9 @@@ Returns the buffer for the given serve
      (erc-update-modules)
      (set-buffer buffer)
      (setq old-point (point))
-     (erc-mode)
+     (let ((old-recon-count erc-server-reconnect-count))
+       (erc-mode)
+       (setq erc-server-reconnect-count old-recon-count))
      (setq erc-server-announced-name server-announced-name)
      (setq erc-server-connected connected-p)
      ;; connection parameters
                             (auth-source-search :host server
                                                 :max 1
                                                 :user nick
-                                                :port port
+                                                ;; secrets.el wouldn’t accept a number
+                                                :port (if (numberp port) (number-to-string port) port)
                                                 :require '(:secret)))
                        :secret)))
                  (if (functionp secret)
@@@ -2198,8 -2197,7 +2201,8 @@@ be invoked for the values of the other 
  (defun erc-tls (&rest r)
    "Interactively select TLS connection parameters and run ERC.
  Arguments are the same as for `erc'."
 -  (interactive (erc-select-read-args))
 +  (interactive (let ((erc-default-port erc-default-port-tls))
 +               (erc-select-read-args)))
    (let ((erc-server-connect-function 'erc-open-tls-stream))
      (apply #'erc r)))
  
  The process will be given the name NAME, its target buffer will be
  BUFFER.  HOST and PORT specify the connection target."
    (open-network-stream name buffer host port
+                      :nowait t
                         :type 'tls))
  
  ;;; Displaying error messages
@@@ -2421,9 -2420,9 +2425,9 @@@ If STRING is nil, the function does not
    "Display STRING in the ERC BUFFER.
  All screen output must be done through this function.  If BUFFER is nil
  or omitted, the default ERC buffer for the `erc-session-server' is used.
- The BUFFER can be an actual buffer, a list of buffers, 'all or 'active.
- If BUFFER = 'all, the string is displayed in all the ERC buffers for the
- current session.  'active means the current active buffer
+ The BUFFER can be an actual buffer, a list of buffers, `all' or `active'.
+ If BUFFER = `all', the string is displayed in all the ERC buffers for the
+ current session.  `active' means the current active buffer
  \(`erc-active-buffer').  If the buffer can't be resolved, the current
  buffer is used.  `erc-display-line-1' is used to display STRING.
  
@@@ -3251,7 -3250,7 +3255,7 @@@ LINE has the format \"USER ACTION\".
  (put 'erc-cmd-ME 'do-not-parse-args t)
  
  (defun erc-cmd-ME\'S (line)
-   "Do a /ME command, but add the string \" 's\" to the beginning."
+   "Do a /ME command, but add the string \" \\='s\" to the beginning."
    (erc-cmd-ME (concat " 's" line)))
  (put 'erc-cmd-ME\'S 'do-not-parse-args t)
  
@@@ -5032,7 -5031,7 +5036,7 @@@ See also `erc-remove-current-channel-me
  (defun erc-update-channel-topic (channel topic &optional modify)
    "Find a buffer for CHANNEL and set the TOPIC for it.
  
- If optional MODIFY is 'append or 'prepend, then append or prepend the
+ If optional MODIFY is `append' or `prepend', then append or prepend the
  TOPIC string to the current topic."
    (erc-with-buffer (channel)
      (cond ((eq modify 'append)
@@@ -5195,7 -5194,7 +5199,7 @@@ person who changed the modes.
                (t (setq erc-channel-user-limit nil))))))
  
  (defun erc-update-channel-key (channel onoff key)
-   "Update CHANNEL's key to KEY if ONOFF is 'on or to nil if it's 'off."
+   "Update CHANNEL's key to KEY if ONOFF is `on' or to nil if it's `off'."
    (erc-with-buffer
        (channel)
      (cond ((eq onoff 'on) (setq erc-channel-key key))
@@@ -6709,7 -6708,7 +6713,7 @@@ or `erc-kill-buffer-hook' if any other 
      (cond
       ((eq (erc-server-buffer) (current-buffer))
        (run-hooks 'erc-kill-server-hook))
-      ((erc-channel-p (erc-default-target))
+      ((erc-channel-p (or (erc-default-target) (buffer-name)))
        (run-hooks 'erc-kill-channel-hook))
       (t
        (run-hooks 'erc-kill-buffer-hook)))))
@@@ -6737,7 -6736,7 +6741,7 @@@ This function should be on `erc-kill-ch
    (text-property-not-all (point-min) (point-max) 'erc-parsed nil))
  
  (defun erc-restore-text-properties ()
-   "Restore the property 'erc-parsed for the region."
+   "Restore the property `erc-parsed' for the region."
    (let ((parsed-posn (erc-find-parsed-property)))
      (put-text-property
       (point-min) (point-max)
diff --combined lisp/gnus/gnus-util.el
index 933387da5597ffcf197092670c869121f7e71f6b,6759c0715b79ee6f427a14217b4c82b43ecda1a6..63ae2e628d11ba61d6b5a5e06efb93f8b2b6bc39
@@@ -1372,18 -1372,25 +1372,25 @@@ Return the modified alist.
  
  (if (fboundp 'union)
      (defalias 'gnus-union 'union)
-   (defun gnus-union (l1 l2)
-     "Set union of lists L1 and L2."
+   (defun gnus-union (l1 l2 &rest keys)
+     "Set union of lists L1 and L2.
+ If KEYS contains the `:test' and `equal' pair, use `equal' to compare
+ items in lists, otherwise use `eq'."
      (cond ((null l1) l2)
          ((null l2) l1)
          ((equal l1 l2) l1)
          (t
           (or (>= (length l1) (length l2))
               (setq l1 (prog1 l2 (setq l2 l1))))
-          (while l2
-            (or (member (car l2) l1)
-                (push (car l2) l1))
-            (pop l2))
+          (if (eq 'equal (plist-get keys :test))
+              (while l2
+                (or (member (car l2) l1)
+                    (push (car l2) l1))
+                (pop l2))
+            (while l2
+              (or (memq (car l2) l1)
+                  (push (car l2) l1))
+              (pop l2)))
           l1))))
  
  (declare-function gnus-add-text-properties "gnus"
@@@ -1989,16 -1996,6 +1996,16 @@@ to case differences.
    (defun gnus-timer--function (timer)
      (elt timer 5)))
  
 +(defun gnus-subsetp (list1 list2)
 +  "Return t if LIST1 is a subset of LIST2.
 +Similar to `subsetp' but use member for element test so that this works for
 +lists of strings."
 +  (when (and (listp list1) (listp list2))
 +    (if list1
 +      (and (member (car list1) list2)
 +           (gnus-subsetp (cdr list1) list2))
 +      t)))
 +
  (provide 'gnus-util)
  
  ;;; gnus-util.el ends here
diff --combined lisp/htmlfontify.el
index d00fae26793aa9ca7b5ea506a4d7454d876b0871,aed341c371301d4f9b5bb774e48cb65c89e056ba..3731be621e2b8b9284093f4706632ddaf424a1fd
@@@ -90,8 -90,6 +90,8 @@@
  ;;  (`font-lock-fontify-region')
  (require 'cus-edit)
  
 +(require 'htmlfontify-loaddefs)
 +
  (defconst htmlfontify-version 0.21)
  
  (defconst hfy-meta-tags
@@@ -262,10 -260,10 +262,10 @@@ These functions will be called with th
    :type    '(hook))
  
  (defcustom hfy-default-face-def nil
-   "Fallback `defface' specification for the face 'default, used when
+   "Fallback `defface' specification for the face `default', used when
  `hfy-display-class' has been set (the normal htmlfontify way of extracting
  potentially non-current face information doesn't necessarily work for
'default).\n
`default').\n
  Example: I customize this to:\n
  \((t :background \"black\" :foreground \"white\" :family \"misc-fixed\"))"
    :group   'htmlfontify
@@@ -410,23 -408,23 +410,23 @@@ calculating a face's attributes.  This 
  are running Emacs on a tty or in batch mode, and want htmlfontify to have
  access to the face spec you would use if you were connected to an X display.\n
  Some valid class specification elements are:\n
-   '(class      color)
-   '(class      grayscale)
-   '(background dark)
-   '(background light)
-   '(type       x-toolkit)
-   '(type       tty)
-   '(type       motif)
-   '(type       lucid)
+   (class      color)
+   (class      grayscale)
+   (background dark)
+   (background light)
+   (type       x-toolkit)
+   (type       tty)
+   (type       motif)
+   (type       lucid)
  Multiple values for a tag may be combined, to indicate that any one or more
  of these values in the specification key constitutes a match, eg:\n
'((class color grayscale) (type tty)) would match any of:\n
-   '((class color))
-   '((class grayscale))
-   '((class color grayscale))
-   '((class color foo))
-   '((type  tty))
-   '((type  tty) (class color))\n
+ ((class color grayscale) (type tty)) would match any of:\n
+   ((class color))
+   ((class grayscale))
+   ((class color grayscale))
+   ((class color foo))
+   ((type  tty))
+   ((type  tty) (class color))\n
  and so on."
    :type    '(alist :key-type (symbol) :value-type (symbol))
    :group   'htmlfontify
@@@ -881,10 -879,10 +881,10 @@@ specify - this matches Emacs's behavio
  to use, to the best of my understanding).\n
  If CLASS is nil, then you just get whatever `face-attr-construct' returns,
  ie the current specification in effect for FACE.\n
- *NOTE*: This function forces any face that is not 'default and which has
- no :inherit property to inherit from 'default (this is because 'default
+ *NOTE*: This function forces any face that is not `default' and which has
+ no :inherit property to inherit from `default' (this is because `default'
  is magical in that Emacs's fonts behave as if they inherit implicitly from
'default, but no such behavior exists in HTML/CSS).\n
`default', but no such behavior exists in HTML/CSS).\n
  See also `hfy-display-class' for details of valid values for CLASS."
    (let ((face-spec
           (if class
@@@ -2413,6 -2411,26 +2413,6 @@@ You may also want to set `hfy-page-head
    (let ((file (hfy-initfile)))
      (load file 'NOERROR nil nil) ))
  
 -\f
 -;;;### (autoloads nil "hfy-cmap" "hfy-cmap.el" "1fb78b15b18622256262c7246b2a3520")
 -;;; Generated autoloads from hfy-cmap.el
 -
 -(autoload 'htmlfontify-load-rgb-file "hfy-cmap" "\
 -Load an X11 style rgb.txt FILE.
 -Search `hfy-rgb-load-path' if FILE is not specified.
 -Loads the variable `hfy-rgb-txt-colour-map', which is used by
 -`hfy-fallback-colour-values'.
 -
 -\(fn &optional FILE)" t nil)
 -
 -(autoload 'hfy-fallback-colour-values "hfy-cmap" "\
 -Use a fallback method for obtaining the rgb values for a color.
 -
 -\(fn COLOUR-STRING)" nil nil)
 -
 -;;;***
 -\f
 -
  (provide 'htmlfontify)
  
  ;;; htmlfontify.el ends here
diff --combined lisp/ibuffer.el
index 3253a636c48e790a6d40ee52f73a45285bc8045d,bfb247ca8424cbb273b927772f504eedb1e24920..517e80f7dffb5ebc3a93248c9f57881b5ad4cf72
@@@ -37,7 -37,6 +37,7 @@@
  
  (require 'font-core)
  
 +(require 'ibuffer-loaddefs)
  ;; These come from ibuf-ext.el, which can not be require'd at compile time
  ;; because it has a recursive dependency on ibuffer.el
  (defvar ibuffer-auto-mode)
@@@ -129,7 -128,7 +129,7 @@@ own!)
  Thus, if you wanted to use these two formats, the appropriate
  value for this variable would be
  
-   '((mark \" \" name)
+   \\='((mark \" \" name)
      (mark modified read-only
            (name 16 16 :left)
            (size 6 -1 :right)))
@@@ -1355,23 -1354,36 +1355,36 @@@ group.
      (message "%s buffers marked" count))
    (ibuffer-redisplay t))
  
- (defun ibuffer-mark-forward (arg)
-   "Mark the buffer on this line, and move forward ARG lines.
+ (defsubst ibuffer-get-region-and-prefix ()
+   (let ((arg (prefix-numeric-value current-prefix-arg)))
+     (if (use-region-p) (list (region-beginning) (region-end) arg)
+       (list nil nil arg))))
+ (defun ibuffer-mark-forward (start end arg)
+   "Mark the buffers in the region, or ARG buffers.
  If point is on a group name, this function operates on that group."
-   (interactive "p")
-   (ibuffer-mark-interactive arg ibuffer-marked-char))
+   (interactive (ibuffer-get-region-and-prefix))
+   (ibuffer-mark-region-or-n-with-char start end arg ibuffer-marked-char))
  
- (defun ibuffer-unmark-forward (arg)
-   "Unmark the buffer on this line, and move forward ARG lines.
+ (defun ibuffer-unmark-forward (start end arg)
+   "Unmark the buffers in the region, or ARG buffers.
  If point is on a group name, this function operates on that group."
-   (interactive "p")
-   (ibuffer-mark-interactive arg ?\s))
+   (interactive (ibuffer-get-region-and-prefix))
+   (ibuffer-mark-region-or-n-with-char start end arg ?\s))
  
  (defun ibuffer-unmark-backward (arg)
-   "Unmark the buffer on this line, and move backward ARG lines.
+   "Unmark the ARG previous buffers.
  If point is on a group name, this function operates on that group."
    (interactive "p")
-   (ibuffer-unmark-forward (- arg)))
+   (ibuffer-unmark-forward nil nil (- arg)))
+ (defun ibuffer-mark-region-or-n-with-char (start end arg mark-char)
+   (if (use-region-p)
+       (let ((cur (point)) (line-count (count-lines start end)))
+         (goto-char start)
+         (ibuffer-mark-interactive line-count mark-char)
+         (goto-char cur))
+       (ibuffer-mark-interactive arg mark-char)))
  
  (defun ibuffer-mark-interactive (arg mark &optional movement)
    (ibuffer-assert-ibuffer-mode)
                       (list (ibuffer-current-buffer)
                             mark))))
  
- (defun ibuffer-mark-for-delete (arg)
-   "Mark the buffers on ARG lines forward for deletion.
+ (defun ibuffer-mark-for-delete (start end arg)
+   "Mark for deletion the buffers in the region, or ARG buffers.
  If point is on a group name, this function operates on that group."
-   (interactive "P")
-   (ibuffer-mark-interactive arg ibuffer-deletion-char 1))
+   (interactive (ibuffer-get-region-and-prefix))
+   (ibuffer-mark-region-or-n-with-char start end arg ibuffer-deletion-char))
  
  (defun ibuffer-mark-for-delete-backwards (arg)
-   "Mark the buffers on ARG lines backward for deletion.
+   "Mark for deletion the ARG previous buffers.
  If point is on a group name, this function operates on that group."
-   (interactive "P")
+   (interactive "p")
    (ibuffer-mark-interactive arg ibuffer-deletion-char -1))
  
  (defun ibuffer-current-buffer (&optional must-be-live)
@@@ -2599,6 -2611,382 +2612,6 @@@ will be inserted before the group at po
      (setq default-directory ibuffer-default-directory))
    (add-hook 'change-major-mode-hook 'font-lock-defontify nil t))
  
 -\f
 -;;; Start of automatically extracted autoloads.
 -\f
 -;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "65ef908165926cf48da6f43fd01ef50b")
 -;;; Generated autoloads from ibuf-ext.el
 -
 -(autoload 'ibuffer-auto-mode "ibuf-ext" "\
 -Toggle use of Ibuffer's auto-update facility (Ibuffer Auto mode).
 -With a prefix argument ARG, enable Ibuffer Auto mode if ARG is
 -positive, and disable it otherwise.  If called from Lisp, enable
 -the mode if ARG is omitted or nil.
 -
 -\(fn &optional ARG)" t nil)
 -
 -(autoload 'ibuffer-mouse-filter-by-mode "ibuf-ext" "\
 -Enable or disable filtering by the major mode chosen via mouse.
 -
 -\(fn EVENT)" t nil)
 -
 -(autoload 'ibuffer-interactive-filter-by-mode "ibuf-ext" "\
 -Enable or disable filtering by the major mode at point.
 -
 -\(fn EVENT-OR-POINT)" t nil)
 -
 -(autoload 'ibuffer-mouse-toggle-filter-group "ibuf-ext" "\
 -Toggle the display status of the filter group chosen with the mouse.
 -
 -\(fn EVENT)" t nil)
 -
 -(autoload 'ibuffer-toggle-filter-group "ibuf-ext" "\
 -Toggle the display status of the filter group on this line.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-forward-filter-group "ibuf-ext" "\
 -Move point forwards by COUNT filtering groups.
 -
 -\(fn &optional COUNT)" t nil)
 -
 -(autoload 'ibuffer-backward-filter-group "ibuf-ext" "\
 -Move point backwards by COUNT filtering groups.
 -
 -\(fn &optional COUNT)" t nil)
 - (autoload 'ibuffer-do-shell-command-pipe "ibuf-ext")
 - (autoload 'ibuffer-do-shell-command-pipe-replace "ibuf-ext")
 - (autoload 'ibuffer-do-shell-command-file "ibuf-ext")
 - (autoload 'ibuffer-do-eval "ibuf-ext")
 - (autoload 'ibuffer-do-view-and-eval "ibuf-ext")
 - (autoload 'ibuffer-do-rename-uniquely "ibuf-ext")
 - (autoload 'ibuffer-do-revert "ibuf-ext")
 - (autoload 'ibuffer-do-isearch "ibuf-ext")
 - (autoload 'ibuffer-do-isearch-regexp "ibuf-ext")
 - (autoload 'ibuffer-do-replace-regexp "ibuf-ext")
 - (autoload 'ibuffer-do-query-replace "ibuf-ext")
 - (autoload 'ibuffer-do-query-replace-regexp "ibuf-ext")
 - (autoload 'ibuffer-do-print "ibuf-ext")
 -
 -(autoload 'ibuffer-included-in-filters-p "ibuf-ext" "\
 -
 -
 -\(fn BUF FILTERS)" nil nil)
 -
 -(autoload 'ibuffer-filters-to-filter-group "ibuf-ext" "\
 -Make the current filters into a filtering group.
 -
 -\(fn NAME)" t nil)
 -
 -(autoload 'ibuffer-set-filter-groups-by-mode "ibuf-ext" "\
 -Set the current filter groups to filter by mode.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-pop-filter-group "ibuf-ext" "\
 -Remove the first filter group.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-decompose-filter-group "ibuf-ext" "\
 -Decompose the filter group GROUP into active filters.
 -
 -\(fn GROUP)" t nil)
 -
 -(autoload 'ibuffer-clear-filter-groups "ibuf-ext" "\
 -Remove all filter groups.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-jump-to-filter-group "ibuf-ext" "\
 -Move point to the filter group whose name is NAME.
 -
 -\(fn NAME)" t nil)
 -
 -(autoload 'ibuffer-kill-filter-group "ibuf-ext" "\
 -Kill the filter group named NAME.
 -The group will be added to `ibuffer-filter-group-kill-ring'.
 -
 -\(fn NAME)" t nil)
 -
 -(autoload 'ibuffer-kill-line "ibuf-ext" "\
 -Kill the filter group at point.
 -See also `ibuffer-kill-filter-group'.
 -
 -\(fn &optional ARG INTERACTIVE-P)" t nil)
 -
 -(autoload 'ibuffer-yank "ibuf-ext" "\
 -Yank the last killed filter group before group at point.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-yank-filter-group "ibuf-ext" "\
 -Yank the last killed filter group before group named NAME.
 -
 -\(fn NAME)" t nil)
 -
 -(autoload 'ibuffer-save-filter-groups "ibuf-ext" "\
 -Save all active filter groups GROUPS as NAME.
 -They are added to `ibuffer-saved-filter-groups'.  Interactively,
 -prompt for NAME, and use the current filters.
 -
 -\(fn NAME GROUPS)" t nil)
 -
 -(autoload 'ibuffer-delete-saved-filter-groups "ibuf-ext" "\
 -Delete saved filter groups with NAME.
 -They are removed from `ibuffer-saved-filter-groups'.
 -
 -\(fn NAME)" t nil)
 -
 -(autoload 'ibuffer-switch-to-saved-filter-groups "ibuf-ext" "\
 -Set this buffer's filter groups to saved version with NAME.
 -The value from `ibuffer-saved-filter-groups' is used.
 -
 -\(fn NAME)" t nil)
 -
 -(autoload 'ibuffer-filter-disable "ibuf-ext" "\
 -Disable all filters currently in effect in this buffer.
 -With optional arg DELETE-FILTER-GROUPS non-nil, delete all filter
 -group definitions by setting `ibuffer-filter-groups' to nil.
 -
 -\(fn &optional DELETE-FILTER-GROUPS)" t nil)
 -
 -(autoload 'ibuffer-pop-filter "ibuf-ext" "\
 -Remove the top filter in this buffer.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-decompose-filter "ibuf-ext" "\
 -Separate the top compound filter (OR, NOT, or SAVED) in this buffer.
 -
 -This means that the topmost filter on the filtering stack, which must
 -be a complex filter like (OR [name: foo] [mode: bar-mode]), will be
 -turned into two separate filters [name: foo] and [mode: bar-mode].
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-exchange-filters "ibuf-ext" "\
 -Exchange the top two filters on the stack in this buffer.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-negate-filter "ibuf-ext" "\
 -Negate the sense of the top filter in the current buffer.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-or-filter "ibuf-ext" "\
 -Replace the top two filters in this buffer with their logical OR.
 -If optional argument REVERSE is non-nil, instead break the top OR
 -filter into parts.
 -
 -\(fn &optional REVERSE)" t nil)
 -
 -(autoload 'ibuffer-save-filters "ibuf-ext" "\
 -Save FILTERS in this buffer with name NAME in `ibuffer-saved-filters'.
 -Interactively, prompt for NAME, and use the current filters.
 -
 -\(fn NAME FILTERS)" t nil)
 -
 -(autoload 'ibuffer-delete-saved-filters "ibuf-ext" "\
 -Delete saved filters with NAME from `ibuffer-saved-filters'.
 -
 -\(fn NAME)" t nil)
 -
 -(autoload 'ibuffer-add-saved-filters "ibuf-ext" "\
 -Add saved filters from `ibuffer-saved-filters' to this buffer's filters.
 -
 -\(fn NAME)" t nil)
 -
 -(autoload 'ibuffer-switch-to-saved-filters "ibuf-ext" "\
 -Set this buffer's filters to filters with NAME from `ibuffer-saved-filters'.
 -
 -\(fn NAME)" t nil)
 - (autoload 'ibuffer-filter-by-mode "ibuf-ext")
 - (autoload 'ibuffer-filter-by-used-mode "ibuf-ext")
 - (autoload 'ibuffer-filter-by-derived-mode "ibuf-ext")
 - (autoload 'ibuffer-filter-by-name "ibuf-ext")
 - (autoload 'ibuffer-filter-by-filename "ibuf-ext")
 - (autoload 'ibuffer-filter-by-size-gt  "ibuf-ext")
 - (autoload 'ibuffer-filter-by-size-lt  "ibuf-ext")
 - (autoload 'ibuffer-filter-by-content "ibuf-ext")
 - (autoload 'ibuffer-filter-by-predicate "ibuf-ext")
 -
 -(autoload 'ibuffer-toggle-sorting-mode "ibuf-ext" "\
 -Toggle the current sorting mode.
 -Default sorting modes are:
 - Recency - the last time the buffer was viewed
 - Name - the name of the buffer
 - Major Mode - the name of the major mode of the buffer
 - Size - the size of the buffer
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-invert-sorting "ibuf-ext" "\
 -Toggle whether or not sorting is in reverse order.
 -
 -\(fn)" t nil)
 - (autoload 'ibuffer-do-sort-by-major-mode "ibuf-ext")
 - (autoload 'ibuffer-do-sort-by-mode-name "ibuf-ext")
 - (autoload 'ibuffer-do-sort-by-alphabetic "ibuf-ext")
 - (autoload 'ibuffer-do-sort-by-size "ibuf-ext")
 - (autoload 'ibuffer-do-sort-by-filename/process "ibuf-ext")
 -
 -(autoload 'ibuffer-bs-show "ibuf-ext" "\
 -Emulate `bs-show' from the bs.el package.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-add-to-tmp-hide "ibuf-ext" "\
 -Add REGEXP to `ibuffer-tmp-hide-regexps'.
 -This means that buffers whose name matches REGEXP will not be shown
 -for this Ibuffer session.
 -
 -\(fn REGEXP)" t nil)
 -
 -(autoload 'ibuffer-add-to-tmp-show "ibuf-ext" "\
 -Add REGEXP to `ibuffer-tmp-show-regexps'.
 -This means that buffers whose name matches REGEXP will always be shown
 -for this Ibuffer session.
 -
 -\(fn REGEXP)" t nil)
 -
 -(autoload 'ibuffer-forward-next-marked "ibuf-ext" "\
 -Move forward by COUNT marked buffers (default 1).
 -
 -If MARK is non-nil, it should be a character denoting the type of mark
 -to move by.  The default is `ibuffer-marked-char'.
 -
 -If DIRECTION is non-nil, it should be an integer; negative integers
 -mean move backwards, non-negative integers mean move forwards.
 -
 -\(fn &optional COUNT MARK DIRECTION)" t nil)
 -
 -(autoload 'ibuffer-backwards-next-marked "ibuf-ext" "\
 -Move backwards by COUNT marked buffers (default 1).
 -
 -If MARK is non-nil, it should be a character denoting the type of mark
 -to move by.  The default is `ibuffer-marked-char'.
 -
 -\(fn &optional COUNT MARK)" t nil)
 -
 -(autoload 'ibuffer-do-kill-lines "ibuf-ext" "\
 -Hide all of the currently marked lines.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-jump-to-buffer "ibuf-ext" "\
 -Move point to the buffer whose name is NAME.
 -
 -If called interactively, prompt for a buffer name and go to the
 -corresponding line in the Ibuffer buffer.  If said buffer is in a
 -hidden group filter, open it.
 -
 -If `ibuffer-jump-offer-only-visible-buffers' is non-nil, only offer
 -visible buffers in the completion list.  Calling the command with
 -a prefix argument reverses the meaning of that variable.
 -
 -\(fn NAME)" t nil)
 -
 -(autoload 'ibuffer-diff-with-file "ibuf-ext" "\
 -View the differences between marked buffers and their associated files.
 -If no buffers are marked, use buffer at point.
 -This requires the external program \"diff\" to be in your `exec-path'.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-copy-filename-as-kill "ibuf-ext" "\
 -Copy filenames of marked buffers into the kill ring.
 -
 -The names are separated by a space.
 -If a buffer has no filename, it is ignored.
 -
 -With no prefix arg, use the filename sans its directory of each marked file.
 -With a zero prefix arg, use the complete filename of each marked file.
 -With \\[universal-argument], use the filename of each marked file relative
 -to `ibuffer-default-directory' if non-nil, otherwise `default-directory'.
 -
 -You can then feed the file name(s) to other commands with \\[yank].
 -
 -\(fn &optional ARG)" t nil)
 -
 -(autoload 'ibuffer-mark-by-name-regexp "ibuf-ext" "\
 -Mark all buffers whose name matches REGEXP.
 -
 -\(fn REGEXP)" t nil)
 -
 -(autoload 'ibuffer-mark-by-mode-regexp "ibuf-ext" "\
 -Mark all buffers whose major mode matches REGEXP.
 -
 -\(fn REGEXP)" t nil)
 -
 -(autoload 'ibuffer-mark-by-file-name-regexp "ibuf-ext" "\
 -Mark all buffers whose file name matches REGEXP.
 -
 -\(fn REGEXP)" t nil)
 -
 -(autoload 'ibuffer-mark-by-mode "ibuf-ext" "\
 -Mark all buffers whose major mode equals MODE.
 -
 -\(fn MODE)" t nil)
 -
 -(autoload 'ibuffer-mark-modified-buffers "ibuf-ext" "\
 -Mark all modified buffers.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-mark-unsaved-buffers "ibuf-ext" "\
 -Mark all modified buffers that have an associated file.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-mark-dissociated-buffers "ibuf-ext" "\
 -Mark all buffers whose associated file does not exist.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-mark-help-buffers "ibuf-ext" "\
 -Mark buffers whose major mode is in variable `ibuffer-help-buffer-modes'.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-mark-compressed-file-buffers "ibuf-ext" "\
 -Mark buffers whose associated file is compressed.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-mark-old-buffers "ibuf-ext" "\
 -Mark buffers which have not been viewed in `ibuffer-old-time' hours.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-mark-special-buffers "ibuf-ext" "\
 -Mark all buffers whose name begins and ends with `*'.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-mark-read-only-buffers "ibuf-ext" "\
 -Mark all read-only buffers.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-mark-dired-buffers "ibuf-ext" "\
 -Mark all `dired' buffers.
 -
 -\(fn)" t nil)
 -
 -(autoload 'ibuffer-do-occur "ibuf-ext" "\
 -View lines which match REGEXP in all marked buffers.
 -Optional argument NLINES says how many lines of context to display: it
 -defaults to one.
 -
 -\(fn REGEXP &optional NLINES)" t nil)
 -
 -;;;***
 -\f
 -;;; End of automatically extracted autoloads.
 -
 -
  (provide 'ibuffer)
  
  (run-hooks 'ibuffer-load-hook)
diff --combined lisp/loadup.el
index 782622cd0d786508615a6ea2c34b300ae662aa12,a58d04223eababdc2afbd0d778b8d9669e28b727..e3e0eb7762267e1b01f17d481fbc2df2e0170698
      (let ((dir (car load-path)))
        ;; We'll probably overflow the pure space.
        (setq purify-flag nil)
 +      ;; Value of max-lisp-eval-depth when compiling initially.
 +      ;; During bootstrapping the byte-compiler is run interpreted when
 +      ;; compiling itself, which uses a lot more stack than usual.
 +      (setq max-lisp-eval-depth 2200)
        (setq load-path (list (expand-file-name "." dir)
                            (expand-file-name "emacs-lisp" dir)
                            (expand-file-name "language" dir)
  (load "emacs-lisp/nadvice")
  (load "emacs-lisp/cl-preloaded")
  (load "minibuffer")            ;After loaddefs, for define-minor-mode.
 +(load "obarray")        ;abbrev.el is implemented in terms of obarrays.
  (load "abbrev")         ;lisp-mode.el and simple.el use define-abbrev-table.
  (load "simple")
  
  (if (featurep 'ns)
      (progn
        (load "term/common-win")
-       (load "term/ns-win")))
+       ;; Don't load ucs-normalize.el unless uni-*.el files were
+       ;; already produced, because it needs uni-*.el files that might
+       ;; not be built early enough during bootstrap.
+       (when (load-history-filename-element "charprop\\.el")
+         (load "international/ucs-normalize")
+         (load "term/ns-win"))))
  (if (fboundp 'x-create-frame)
      ;; Do it after loading term/foo-win.el since the value of the
      ;; mouse-wheel-*-event vars depends on those files being loaded or not.
diff --combined lisp/mail/rmail.el
index 1ed4cc7f6d821165c8e41d4ce2d4ee85231157e5,1a211a3e9cb93fc6e78b12a8152d98686fe02ed9..fe3375e8f58e34d70634b91a5e4e4343c4beb89f
@@@ -40,8 -40,6 +40,8 @@@
  (require 'mail-utils)
  (require 'rfc2047)
  
 +(require 'rmail-loaddefs)
 +
  (declare-function compilation--message->loc "compile" (cl-x) t)
  (declare-function epa--find-coding-system-for-mime-charset "epa" (mime-charset))
  
@@@ -100,7 -98,7 +100,7 @@@ its character representation and its di
  
  (defvar rmail-header-style 'normal
    "The current header display style choice, one of
'normal (selected headers) or 'full (all headers).")
`normal' (selected headers) or `full' (all headers).")
  
  (defvar rmail-mime-decoded nil
    "Non-nil if message has been processed by `rmail-show-mime-function'.")
@@@ -300,7 -298,7 +300,7 @@@ mail URLs as the source mailbox."
  ;;;###autoload
  (defun rmail-movemail-variant-p (&rest variants)
    "Return t if the current movemail variant is any of VARIANTS.
- Currently known variants are 'emacs and 'mailutils."
+ Currently known variants are `emacs' and `mailutils'."
    (when (not rmail-movemail-variant-in-use)
      ;; Autodetect
      (setq rmail-movemail-variant-in-use (rmail-autodetect)))
@@@ -4724,6 -4722,227 +4724,6 @@@ Argument MIME is non-nil if this is a m
        (setq buffer-file-coding-system rmail-message-encoding))))
  (add-hook 'after-save-hook 'rmail-after-save-hook)
  
 -\f
 -;;; Start of automatically extracted autoloads.
 -\f
 -;;;### (autoloads nil "rmailedit" "rmailedit.el" "1ed1c211e6e9c254ba3e0dd8d546e745")
 -;;; Generated autoloads from rmailedit.el
 -
 -(autoload 'rmail-edit-current-message "rmailedit" "\
 -Edit the contents of this message.
 -
 -\(fn)" t nil)
 -
 -;;;***
 -\f
 -;;;### (autoloads nil "rmailkwd" "rmailkwd.el" "298dcda7febb6e4ebf0a166101f40650")
 -;;; Generated autoloads from rmailkwd.el
 -
 -(autoload 'rmail-add-label "rmailkwd" "\
 -Add LABEL to labels associated with current RMAIL message.
 -Completes (see `rmail-read-label') over known labels when reading.
 -LABEL may be a symbol or string.  Only one label is allowed.
 -
 -\(fn LABEL)" t nil)
 -
 -(autoload 'rmail-kill-label "rmailkwd" "\
 -Remove LABEL from labels associated with current RMAIL message.
 -Completes (see `rmail-read-label') over known labels when reading.
 -LABEL may be a symbol or string.  Only one label is allowed.
 -
 -\(fn LABEL)" t nil)
 -
 -(autoload 'rmail-read-label "rmailkwd" "\
 -Read a label with completion, prompting with PROMPT.
 -Completions are chosen from `rmail-label-obarray'.  The default
 -is `rmail-last-label', if that is non-nil.  Updates `rmail-last-label'
 -according to the choice made, and returns a symbol.
 -
 -\(fn PROMPT)" nil nil)
 -
 -(autoload 'rmail-previous-labeled-message "rmailkwd" "\
 -Show previous message with one of the labels LABELS.
 -LABELS should be a comma-separated list of label names.
 -If LABELS is empty, the last set of labels specified is used.
 -With prefix argument N moves backward N messages with these labels.
 -
 -\(fn N LABELS)" t nil)
 -
 -(autoload 'rmail-next-labeled-message "rmailkwd" "\
 -Show next message with one of the labels LABELS.
 -LABELS should be a comma-separated list of label names.
 -If LABELS is empty, the last set of labels specified is used.
 -With prefix argument N moves forward N messages with these labels.
 -
 -\(fn N LABELS)" t nil)
 -
 -;;;***
 -\f
 -;;;### (autoloads nil "rmailmm" "rmailmm.el" "36f518e036612a33eb436cb267fd39c7")
 -;;; Generated autoloads from rmailmm.el
 -
 -(autoload 'rmail-mime "rmailmm" "\
 -Toggle the display of a MIME message.
 -
 -The actual behavior depends on the value of `rmail-enable-mime'.
 -
 -If `rmail-enable-mime' is non-nil (the default), this command toggles
 -the display of a MIME message between decoded presentation form and
 -raw data.  With optional prefix argument ARG, it toggles the display only
 -of the MIME entity at point, if there is one.  The optional argument
 -STATE forces a particular display state, rather than toggling.
 -`raw' forces raw mode, any other non-nil value forces decoded mode.
 -
 -If `rmail-enable-mime' is nil, this creates a temporary \"*RMAIL*\"
 -buffer holding a decoded copy of the message. Inline content-types are
 -handled according to `rmail-mime-media-type-handlers-alist'.
 -By default, this displays text and multipart messages, and offers to
 -download attachments as specified by `rmail-mime-attachment-dirs-alist'.
 -The arguments ARG and STATE have no effect in this case.
 -
 -\(fn &optional ARG STATE)" t nil)
 -
 -;;;***
 -\f
 -;;;### (autoloads nil "rmailmsc" "rmailmsc.el" "c3f0d33739768fc12acc4258ae0da72e")
 -;;; Generated autoloads from rmailmsc.el
 -
 -(autoload 'set-rmail-inbox-list "rmailmsc" "\
 -Set the inbox list of the current RMAIL file to FILE-NAME.
 -You can specify one file name, or several names separated by commas.
 -If FILE-NAME is empty, remove any existing inbox list.
 -
 -This applies only to the current session.
 -
 -\(fn FILE-NAME)" t nil)
 -
 -;;;***
 -\f
 -;;;### (autoloads nil "rmailsort" "rmailsort.el" "8f551773021df4fa1a14ec2517e6a4f1")
 -;;; Generated autoloads from rmailsort.el
 -
 -(autoload 'rmail-sort-by-date "rmailsort" "\
 -Sort messages of current Rmail buffer by \"Date\" header.
 -If prefix argument REVERSE is non-nil, sorts in reverse order.
 -
 -\(fn REVERSE)" t nil)
 -
 -(autoload 'rmail-sort-by-subject "rmailsort" "\
 -Sort messages of current Rmail buffer by \"Subject\" header.
 -Ignores any \"Re: \" prefix.  If prefix argument REVERSE is
 -non-nil, sorts in reverse order.
 -
 -\(fn REVERSE)" t nil)
 -
 -(autoload 'rmail-sort-by-author "rmailsort" "\
 -Sort messages of current Rmail buffer by author.
 -This uses either the \"From\" or \"Sender\" header, downcased.
 -If prefix argument REVERSE is non-nil, sorts in reverse order.
 -
 -\(fn REVERSE)" t nil)
 -
 -(autoload 'rmail-sort-by-recipient "rmailsort" "\
 -Sort messages of current Rmail buffer by recipient.
 -This uses either the \"To\" or \"Apparently-To\" header, downcased.
 -If prefix argument REVERSE is non-nil, sorts in reverse order.
 -
 -\(fn REVERSE)" t nil)
 -
 -(autoload 'rmail-sort-by-correspondent "rmailsort" "\
 -Sort messages of current Rmail buffer by other correspondent.
 -This uses either the \"From\", \"Sender\", \"To\", or
 -\"Apparently-To\" header, downcased.  Uses the first header not
 -excluded by `mail-dont-reply-to-names'.  If prefix argument
 -REVERSE is non-nil, sorts in reverse order.
 -
 -\(fn REVERSE)" t nil)
 -
 -(autoload 'rmail-sort-by-lines "rmailsort" "\
 -Sort messages of current Rmail buffer by the number of lines.
 -If prefix argument REVERSE is non-nil, sorts in reverse order.
 -
 -\(fn REVERSE)" t nil)
 -
 -(autoload 'rmail-sort-by-labels "rmailsort" "\
 -Sort messages of current Rmail buffer by labels.
 -LABELS is a comma-separated list of labels.  The order of these
 -labels specifies the order of messages: messages with the first
 -label come first, messages with the second label come second, and
 -so on.  Messages that have none of these labels come last.
 -If prefix argument REVERSE is non-nil, sorts in reverse order.
 -
 -\(fn REVERSE LABELS)" t nil)
 -
 -;;;***
 -\f
 -;;;### (autoloads nil "rmailsum" "rmailsum.el" "4bc0d1a65aede332348200e1937c84d4")
 -;;; Generated autoloads from rmailsum.el
 -
 -(autoload 'rmail-summary "rmailsum" "\
 -Display a summary of all messages, one line per message.
 -
 -\(fn)" t nil)
 -
 -(autoload 'rmail-summary-by-labels "rmailsum" "\
 -Display a summary of all messages with one or more LABELS.
 -LABELS should be a string containing the desired labels, separated by commas.
 -
 -\(fn LABELS)" t nil)
 -
 -(autoload 'rmail-summary-by-recipients "rmailsum" "\
 -Display a summary of all messages with the given RECIPIENTS.
 -Normally checks the To, From and Cc fields of headers;
 -but if PRIMARY-ONLY is non-nil (prefix arg given),
 - only look in the To and From fields.
 -RECIPIENTS is a regular expression.
 -
 -\(fn RECIPIENTS &optional PRIMARY-ONLY)" t nil)
 -
 -(autoload 'rmail-summary-by-regexp "rmailsum" "\
 -Display a summary of all messages according to regexp REGEXP.
 -If the regular expression is found in the header of the message
 -\(including in the date and other lines, as well as the subject line),
 -Emacs will list the message in the summary.
 -
 -\(fn REGEXP)" t nil)
 -
 -(autoload 'rmail-summary-by-topic "rmailsum" "\
 -Display a summary of all messages with the given SUBJECT.
 -Normally checks just the Subject field of headers; but with prefix
 -argument WHOLE-MESSAGE is non-nil, looks in the whole message.
 -SUBJECT is a regular expression.
 -
 -\(fn SUBJECT &optional WHOLE-MESSAGE)" t nil)
 -
 -(autoload 'rmail-summary-by-senders "rmailsum" "\
 -Display a summary of all messages whose \"From\" field matches SENDERS.
 -SENDERS is a regular expression.
 -
 -\(fn SENDERS)" t nil)
 -
 -;;;***
 -\f
 -;;;### (autoloads nil "undigest" "undigest.el" "c0ddfad4fe34ef9c1e790c2cc72b571d")
 -;;; Generated autoloads from undigest.el
 -
 -(autoload 'undigestify-rmail-message "undigest" "\
 -Break up a digest message into its constituent messages.
 -Leaves original message, deleted, before the undigestified messages.
 -
 -\(fn)" t nil)
 -
 -(autoload 'unforward-rmail-message "undigest" "\
 -Extract a forwarded message from the containing message.
 -This puts the forwarded message into a separate rmail message following
 -the containing message.  This command is only useful when messages are
 -forwarded with `rmail-enable-mime-composing' set to nil.
 -
 -\(fn)" t nil)
 -
 -;;;***
 -\f
 -;;; End of automatically extracted autoloads.
 -
  
  (provide 'rmail)
  
diff --combined lisp/menu-bar.el
index b22c1eab907d9697c9f0b12fcd60e4e585d80c36,fe2b6a6681bdb006ec748c5582d5a85d2eda22b3..1ca783ac43dc19cbfdcddb2e10cf2ce18983840f
    (cond
     ((and (eq menu-bar-last-search-type 'string)
         search-ring)
-     (search-forward (car search-ring)))
+     (nonincremental-search-forward))
     ((and (eq menu-bar-last-search-type 'regexp)
         regexp-search-ring)
      (re-search-forward (car regexp-search-ring)))
    (cond
     ((and (eq menu-bar-last-search-type 'string)
         search-ring)
-     (search-backward (car search-ring)))
+     (nonincremental-search-backward))
     ((and (eq menu-bar-last-search-type 'regexp)
         regexp-search-ring)
      (re-search-backward (car regexp-search-ring)))
     (t
      (error "No previous search"))))
  
- (defun nonincremental-search-forward (string)
+ (defun nonincremental-search-forward (&optional string backward)
    "Read a string and search for it nonincrementally."
    (interactive "sSearch for string: ")
    (setq menu-bar-last-search-type 'string)
-   (if (equal string "")
-       (search-forward (car search-ring))
-     (isearch-update-ring string nil)
-     (search-forward string)))
- (defun nonincremental-search-backward (string)
+   ;; Ideally, this whole command would be equivalent to `C-s RET'.
+   (let ((isearch-forward (not backward))
+         (isearch-regexp-function search-default-regexp-mode)
+         (isearch-regexp nil))
+     (if (or (equal string "") (not string))
+         (funcall (isearch-search-fun-default) (car search-ring))
+       (isearch-update-ring string nil)
+       (funcall (isearch-search-fun-default) string))))
+ (defun nonincremental-search-backward (&optional string)
    "Read a string and search backward for it nonincrementally."
-   (interactive "sSearch for string: ")
-   (setq menu-bar-last-search-type 'string)
-   (if (equal string "")
-       (search-backward (car search-ring))
-     (isearch-update-ring string nil)
-     (search-backward string)))
+   (interactive "sSearch backwards for string: ")
+   (nonincremental-search-forward string 'backward))
  
  (defun nonincremental-re-search-forward (string)
    "Read a regular expression and search for it nonincrementally."
      menu))
  
  (defun menu-bar-goto-uses-etags-p ()
-   (or (not (boundp 'xref-find-function))
-       (eq xref-find-function 'etags-xref-find)))
+   (or (not (boundp 'xref-backend-functions))
+       (eq (car xref-backend-functions) 'etags--xref-backend)))
  
  (defvar yank-menu (cons (purecopy "Select Yank") nil))
  (fset 'yank-menu (cons 'keymap yank-menu))
  (defun clipboard-yank ()
    "Insert the clipboard contents, or the last stretch of killed text."
    (interactive "*")
 -  (let ((gui-select-enable-clipboard t))
 +  (let ((gui-select-enable-clipboard t)
 +        (interprogram-paste-function (or interprogram-paste-function
 +                                         #'gui-selection-value)))
      (yank)))
  
  (defun clipboard-kill-ring-save (beg end &optional region)
    "Copy region to kill ring, and save in the GUI's clipboard."
    (interactive "r\np")
 -  (let ((gui-select-enable-clipboard t))
 +  (let ((gui-select-enable-clipboard t)
 +        (interprogram-cut-function (or interprogram-cut-function
 +                                       #'gui-select-text)))
      (kill-ring-save beg end region)))
  
  (defun clipboard-kill-region (beg end &optional region)
    "Kill the region, and save it in the GUI's clipboard."
    (interactive "r\np")
 -  (let ((gui-select-enable-clipboard t))
 +  (let ((gui-select-enable-clipboard t)
 +        (interprogram-cut-function (or interprogram-cut-function
 +                                       #'gui-select-text)))
      (kill-region beg end region)))
  
  (defun menu-bar-enable-clipboard ()
diff --combined lisp/net/eww.el
index 7ec58f1502807eabe6f8d244be25268ce3ef5310,e8fdc972fb372c244a7770bad9e2c451836c862b..107df24e865a357704db298313034cb564b8a160
@@@ -93,7 -93,7 +93,7 @@@ desktop.  Otherwise, such entries will 
  
  (defcustom eww-restore-desktop nil
    "How to restore EWW buffers on `desktop-restore'.
- If t or 'auto, the buffers will be reloaded automatically.
+ If t or `auto', the buffers will be reloaded automatically.
  If nil, buffers will require manual reload, and will contain the text
  specified in `eww-restore-reload-prompt' instead of the actual Web
  page contents."
@@@ -322,7 -322,8 +322,8 @@@ Currently this means either text/html o
                    (or (cdr (assq 'charset (cdr content-type)))
                        (eww-detect-charset (eww-html-p (car content-type)))
                        "utf-8"))))
-        (data-buffer (current-buffer)))
+        (data-buffer (current-buffer))
+        last-coding-system-used)
      ;; Save the https peer status.
      (with-current-buffer buffer
        (plist-put eww-data :peer (plist-get status :peer)))
           ((string-match-p "\\`image/" (car content-type))
            (eww-display-image buffer))
           (t
-           (eww-display-raw buffer encode)))
+           (eww-display-raw buffer (or encode charset 'utf-8))))
          (with-current-buffer buffer
            (plist-put eww-data :url url)
            (eww-update-header-line-format)
            (setq eww-history-position 0)
+           (and last-coding-system-used
+                (set-buffer-file-coding-system last-coding-system-used))
            (run-hooks 'eww-after-render-hook)))
        (kill-buffer data-buffer))))
  
             (list
              'base (list (cons 'href url))
              (progn
-               (when (or (and encode
-                              (not (eq charset encode)))
-                         (not (eq charset 'utf-8)))
-                 (condition-case nil
-                     (decode-coding-region (point) (point-max)
-                                           (or encode charset))
-                   (coding-system-error nil)))
+               (setq encode (or encode charset 'utf-8))
+               (condition-case nil
+                   (decode-coding-region (point) (point-max) encode)
+                 (coding-system-error nil))
                (libxml-parse-html-region (point) (point-max))))))
        (source (and (null document)
                     (buffer-substring (point) (point-max)))))
      (with-current-buffer buffer
+       (setq bidi-paragraph-direction 'left-to-right)
        (plist-put eww-data :source source)
        (plist-put eww-data :dom document)
        (let ((inhibit-read-only t)
            (shr-target-id (url-target (url-generic-parse-url url)))
            (shr-external-rendering-functions
               (append
 +              shr-external-rendering-functions
                '((title . eww-tag-title)
                  (form . eww-tag-form)
                  (input . eww-tag-input)
 +                (button . eww-form-submit)
                  (textarea . eww-tag-textarea)
                  (select . eww-tag-select)
                  (link . eww-tag-link)
        (let ((inhibit-read-only t))
        (erase-buffer)
        (insert data)
-       (unless (eq encode 'utf-8)
-         (encode-coding-region (point-min) (1+ (length data)) 'utf-8)
-         (condition-case nil
-             (decode-coding-region (point-min) (1+ (length data)) encode)
-           (coding-system-error nil))))
+       (condition-case nil
+           (decode-coding-region (point-min) (1+ (length data)) encode)
+         (coding-system-error nil)))
        (goto-char (point-min)))))
  
  (defun eww-display-image (buffer)
@@@ -683,7 -680,6 +682,7 @@@ the like.
      (define-key map "E" 'eww-set-character-encoding)
      (define-key map "S" 'eww-list-buffers)
      (define-key map "F" 'eww-toggle-fonts)
 +    (define-key map [(meta C)] 'eww-toggle-colors)
  
      (define-key map "b" 'eww-add-bookmark)
      (define-key map "B" 'eww-list-bookmarks)
        ["Add bookmark" eww-add-bookmark t]
        ["List bookmarks" eww-list-bookmarks t]
        ["List cookies" url-cookie-list t]
 +      ["Toggle fonts" eww-toggle-fonts t]
 +      ["Toggle colors" eww-toggle-colors t]
         ["Character Encoding" eww-set-character-encoding]))
      map))
  
    (setq-local desktop-save-buffer #'eww-desktop-misc-data)
    ;; multi-page isearch support
    (setq-local multi-isearch-next-buffer-function #'eww-isearch-next-buffer)
-   (setq truncate-lines t
-         bidi-paragraph-direction 'left-to-right)
+   (setq truncate-lines t)
    (buffer-disable-undo)
    (setq buffer-read-only t))
  
@@@ -1500,15 -1493,6 +1498,15 @@@ If CHARSET is nil then use UTF-8.
             "off"))
    (eww-reload))
  
 +(defun eww-toggle-colors ()
 +  "Toggle whether to use HTML-specified colors or not."
 +  (interactive)
 +  (message "Colors are now %s"
 +         (if (setq shr-use-colors (not shr-use-colors))
 +             "on"
 +           "off"))
 +  (eww-reload))
 +
  ;;; Bookmarks code
  
  (defvar eww-bookmarks nil)
@@@ -1936,7 -1920,7 +1934,7 @@@ Generally, the list should not include 
  
  (defun eww-restore-desktop (file-name buffer-name misc-data)
    "Restore an eww buffer from its desktop file record.
- If `eww-restore-desktop' is t or 'auto, this function will also
+ If `eww-restore-desktop' is t or `auto', this function will also
  initiate the retrieval of the respective URI in the background.
  Otherwise, the restored buffer will contain a prompt to do so by using
  \\[eww-reload]."
diff --combined lisp/net/shr.el
index 0b80e81abbca152acec218a26cc5084e75e8db6e,330f7b5d84ba48298cdc4fbdd506f248f20e6b85..0effa93b197ff7ea0fe7fe3d706d238ad67d7bca
@@@ -63,12 -63,6 +63,12 @@@ fit these criteria.
    :group 'shr
    :type 'boolean)
  
 +(defcustom shr-use-colors t
 +  "If non-nil, respect color specifications in the HTML."
 +  :version "25.2"
 +  :group 'shr
 +  :type 'boolean)
 +
  (defcustom shr-table-horizontal-line nil
    "Character used to draw horizontal table lines.
  If nil, don't draw horizontal table lines."
@@@ -141,14 -135,6 +141,14 @@@ cid: URL as the argument."
  (defvar shr-inhibit-images nil
    "If non-nil, inhibit loading images.")
  
 +(defvar shr-external-rendering-functions nil
 +  "Alist of tag/function pairs used to alter how shr renders certain tags.
 +For instance, eww uses this to alter rendering of title, forms
 +and other things:
 +((title . eww-tag-title)
 + (form . eww-tag-form)
 + ...)")
 +
  ;;; Internal variables.
  
  (defvar shr-folding-mode nil)
  (defvar shr-depth 0)
  (defvar shr-warning nil)
  (defvar shr-ignore-cache nil)
 -(defvar shr-external-rendering-functions nil)
  (defvar shr-target-id nil)
  (defvar shr-table-separator-length 1)
  (defvar shr-table-separator-pixel-width 0)
@@@ -257,7 -244,8 +257,8 @@@ DOM should be a parse tree as generate
                                       (if (and (null shr-width)
                                                (not (shr--have-one-fringe-p)))
                                           (* (frame-char-width) 2)
-                                        0))))))
+                                        0)))))
+         bidi-display-reordering)
      (shr-descend dom)
      (shr-fill-lines start (point))
      (shr-remove-trailing-whitespace start (point))
@@@ -441,10 -429,11 +442,10 @@@ size, and full-buffer size.
  
  (defun shr-descend (dom)
    (let ((function
 -       (or
 -        ;; Allow other packages to override (or provide) rendering
 -        ;; of elements.
 -        (cdr (assq (dom-tag dom) shr-external-rendering-functions))
 -        (intern (concat "shr-tag-" (symbol-name (dom-tag dom))) obarray)))
 +         (intern (concat "shr-tag-" (symbol-name (dom-tag dom))) obarray))
 +        ;; Allow other packages to override (or provide) rendering
 +        ;; of elements.
 +        (external (cdr (assq (dom-tag dom) shr-external-rendering-functions)))
        (style (dom-attr dom 'style))
        (shr-stylesheet shr-stylesheet)
        (shr-depth (1+ shr-depth))
          (setq style nil)))
        ;; If we have a display:none, then just ignore this part of the DOM.
        (unless (equal (cdr (assq 'display shr-stylesheet)) "none")
 -      (if (fboundp function)
 -          (funcall function dom)
 -        (shr-generic dom))
 +        (cond (external
 +               (funcall external dom))
 +              ((fboundp function)
 +               (funcall function dom))
 +              (t
 +               (shr-generic dom)))
        (when (and shr-target-id
                   (equal (dom-attr dom 'id) shr-target-id))
          ;; If the element was empty, we don't have anything to put the
@@@ -1102,9 -1088,7 +1103,9 @@@ ones, in case fg and bg are nil.
                 (shr-color-visible bg fg)))))))
  
  (defun shr-colorize-region (start end fg &optional bg)
 -  (when (and (or fg bg) (>= (display-color-cells) 88))
 +  (when (and shr-use-colors
 +             (or fg bg)
 +             (>= (display-color-cells) 88))
      (let ((new-colors (shr-color-check fg bg)))
        (when new-colors
        (when fg
index 1b6108ef0b24f5f10893e22fa35857cea99f3f8a,ac4aa19e565cf9cd34faadbebde94db380c80af6..8eed4b1b86ed224046fc7688572adf23fd44b081
  \f
  ;; cc-fix.el contains compatibility macros that should be used if
  ;; needed.
- (eval-and-compile
-   (if (or (/= (regexp-opt-depth "\\(\\(\\)\\)") 2)
-         (not (fboundp 'push)))
-       (cc-load "cc-fix")))
- (when (featurep 'xemacs) ; There is now (2005/12) code in GNU Emacs CVS
-                        ; to make the call to f-l-c-k throw an error.
-   (eval-after-load "font-lock"
-     '(if (and (not (featurep 'cc-fix))        ; only load the file once.
-             (let (font-lock-keywords)
-               (font-lock-compile-keywords '("\\<\\>"))
-               font-lock-keywords)) ; did the previous call foul this up?
-          (load "cc-fix"))))
- ;; The above takes care of the delayed loading, but this is necessary
- ;; to ensure correct byte compilation.
- (eval-when-compile
-   (if (and (featurep 'xemacs)
-          (not (featurep 'cc-fix))
-          (progn
-            (require 'font-lock)
-            (let (font-lock-keywords)
-              (font-lock-compile-keywords '("\\<\\>"))
-              font-lock-keywords)))
-       (cc-load "cc-fix")))
- ;; XEmacs 21.4 doesn't have `delete-dups'.
- (eval-and-compile
-   (if (and (not (fboundp 'delete-dups))
-          (not (featurep 'cc-fix)))
-       (cc-load "cc-fix")))
+ (cc-conditional-require
+  'cc-fix (or (/= (regexp-opt-depth "\\(\\(\\)\\)") 2)
+            (not (fboundp 'push))
+            ;; XEmacs 21.4 doesn't have `delete-dups'.
+            (not (fboundp 'delete-dups))))
+ (cc-conditional-require-after-load
+  'cc-fix "font-lock"
+  (and
+   (featurep 'xemacs)
+   (progn
+     (require 'font-lock)
+     (let (font-lock-keywords)
+       (font-lock-compile-keywords '("\\<\\>"))
+       font-lock-keywords))))
  \f
  ;;; Variables also used at compile time.
  
@@@ -221,7 -206,7 +206,7 @@@ This variant works around bugs in `eval
  (eval-and-compile
    (defmacro c--macroexpand-all (form &optional environment)
      ;; Macro to smooth out the renaming of `cl-macroexpand-all' in Emacs 24.3.
 -    (if (eq c--mapcan-status 'cl-mapcan)
 +    (if (fboundp 'macroexpand-all)
        `(macroexpand-all ,form ,environment)
        `(cl-macroexpand-all ,form ,environment)))
  
@@@ -508,21 -493,19 +493,21 @@@ must not be within a `c-save-buffer-sta
  wouldn't be able to undo them.
  
  The return value is the value of the last form in BODY."
 -  `(let* ((modified (buffer-modified-p)) (buffer-undo-list t)
 -        (inhibit-read-only t) (inhibit-point-motion-hooks t)
 -        before-change-functions after-change-functions
 -        deactivate-mark
 -        buffer-file-name buffer-file-truename ; Prevent primitives checking
 -                                              ; for file modification
 -        ,@varlist)
 -     (unwind-protect
 -       (progn ,@body)
 -       (and (not modified)
 -          (buffer-modified-p)
 -          (set-buffer-modified-p nil)))))
 -(put 'c-save-buffer-state 'lisp-indent-function 1)
 +  (declare (debug t) (indent 1))
 +  (if (fboundp 'with-silent-modifications)
 +      `(with-silent-modifications (let* ,varlist ,@body))
 +    `(let* ((modified (buffer-modified-p)) (buffer-undo-list t)
 +          (inhibit-read-only t) (inhibit-point-motion-hooks t)
 +          before-change-functions after-change-functions
 +          deactivate-mark
 +          buffer-file-name buffer-file-truename ; Prevent primitives checking
 +                                                ; for file modification
 +          ,@varlist)
 +       (unwind-protect
 +         (progn ,@body)
 +       (and (not modified)
 +            (buffer-modified-p)
 +            (set-buffer-modified-p nil))))))
  
  (defmacro c-tentative-buffer-changes (&rest body)
    "Eval BODY and optionally restore the buffer contents to the state it
index 4095d47b5a984994801ae96d65867a8fb18f2229,eae2f6cb8a68fd35975f2b69d99c1a966d75a7f0..90145ddff8bf92d3d073152bb4722fe2278aa2f4
  ;;
  
  ;; This variable will always hold the version number of the mode
 -(defconst verilog-mode-version "2015-09-18-314cf1d-vpo-GNU"
 +(defconst verilog-mode-version "2015-11-21-8112ca0-vpo-GNU"
    "Version of this Verilog mode.")
  (defconst verilog-mode-release-emacs t
    "If non-nil, this version of Verilog mode was released with Emacs itself.")
@@@ -230,9 -230,10 +230,9 @@@ STRING should be given if the last sear
          `(customize ,var))
        )
  
 -    (unless (boundp 'inhibit-point-motion-hooks)
 -      (defvar inhibit-point-motion-hooks nil))
 -    (unless (boundp 'deactivate-mark)
 -      (defvar deactivate-mark nil))
 +    (defvar inhibit-modification-hooks)
 +    (defvar inhibit-point-motion-hooks)
 +    (defvar deactivate-mark)
      )
    ;;
    ;; OK, do this stuff if we are NOT XEmacs:
@@@ -325,14 -326,6 +325,14 @@@ wherever possible, since it is slow.
                  (looking-at (concat "\\(?:"  regexp "\\)\\'")))))
          (not (null pos)))))))
  
 +(eval-and-compile
 +  (cond
 +   ((fboundp 'restore-buffer-modified-p)
 +    ;; Faster, as does not update mode line when nothing changes
 +    (defalias 'verilog-restore-buffer-modified-p 'restore-buffer-modified-p))
 +   (t
 +    (defalias 'verilog-restore-buffer-modified-p 'set-buffer-modified-p))))
 +
  (eval-and-compile
    ;; Both xemacs and emacs
    (condition-case nil
@@@ -757,7 -750,7 +757,7 @@@ Set this to \"logic\" for SystemVerilo
  (put 'verilog-auto-wire-type 'safe-local-variable `stringp)
  
  (defcustom verilog-auto-endcomments t
-   "Non-nil means insert a comment /* ... */ after 'end's.
+   "Non-nil means insert a comment /* ... */ after `end's.
  The name of the function or case will be set between the braces."
    :group 'verilog-mode-actions
    :type 'boolean)
@@@ -797,7 -790,7 +797,7 @@@ needed on every save.  A value of `dete
  automatically when it thinks necessary.  A value of `ask' will query the
  user when it thinks updating is needed.
  
- You should not rely on the 'ask or 'detect policies, they are safeguards
+ You should not rely on the `ask' or `detect' policies, they are safeguards
  only.  They do not detect when AUTOINSTs need to be updated because a
  sub-module's port list has changed."
    :group 'verilog-mode-actions
@@@ -834,10 -827,6 +834,10 @@@ Function takes three arguments, the ori
  difference buffer, and the point in original buffer with the
  first difference.")
  
 +(defvar verilog-diff-ignore-regexp nil
 +  "Non-nil specifies regexp which `verilog-diff-auto' will ignore.
 +This is typically nil.")
 +
  ;;; Compile support:
  ;;
  
@@@ -2948,6 -2937,8 +2948,6 @@@ find the errors.
      (modify-syntax-entry ?> "." table)
      (modify-syntax-entry ?& "." table)
      (modify-syntax-entry ?| "." table)
 -    ;; FIXME: This goes against Emacs conventions.  Use "_" syntax instead and
 -    ;; then use regexps with things like "\\_<...\\_>".
      (modify-syntax-entry ?` "w" table)  ; ` is part of definition symbols in Verilog
      (modify-syntax-entry ?_ "w" table)
      (modify-syntax-entry ?\' "." table)
@@@ -3234,63 -3225,56 +3234,63 @@@ A change is considered significant if i
  in any way that isn't completely restored again.  Any
  user-visible changes to the buffer must not be within a
  `verilog-save-buffer-state'."
 -  ;; From c-save-buffer-state
 -  `(let* ((modified (buffer-modified-p))
 -        (buffer-undo-list t)
 -        (inhibit-read-only t)
 -        (inhibit-point-motion-hooks t)
 -        (verilog-no-change-functions t)
 -        before-change-functions
 -        after-change-functions
 -        deactivate-mark
 -        buffer-file-name ; Prevent primitives checking
 -        buffer-file-truename) ; for file modification
 -     (unwind-protect
 -       (progn ,@body)
 -       (and (not modified)
 -          (buffer-modified-p)
 -          (set-buffer-modified-p nil)))))
 +  `(let ((inhibit-point-motion-hooks t)
 +         (verilog-no-change-functions t))
 +     ,(if (fboundp 'with-silent-modifications)
 +          `(with-silent-modifications ,@body)
 +        ;; Backward compatible version of with-silent-modifications
 +        `(let* ((modified (buffer-modified-p))
 +                (buffer-undo-list t)
 +                (inhibit-read-only t)
 +                (inhibit-modification-hooks t)
 +                ;; XEmacs ignores inhibit-modification-hooks.
 +                before-change-functions after-change-functions
 +                deactivate-mark
 +                buffer-file-name        ; Prevent primitives checking
 +                buffer-file-truename) ; for file modification
 +           (unwind-protect
 +               (progn ,@body)
 +             (and (not modified)
 +                  (buffer-modified-p)
 +                  (verilog-restore-buffer-modified-p nil)))))))
  
 -(defmacro verilog-save-no-change-functions (&rest body)
 -  "Execute BODY forms, disabling all change hooks in BODY.
 -For insignificant changes, see instead `verilog-save-buffer-state'."
 -  `(let* ((inhibit-point-motion-hooks t)
 -        (verilog-no-change-functions t)
 -        before-change-functions
 -        after-change-functions)
 -     (progn ,@body)))
  
  (defvar verilog-save-font-mod-hooked nil
 -  "Local variable when inside a `verilog-save-font-mods' block.")
 +  "Local variable when inside a `verilog-save-font-no-change-functions' block.")
  (make-variable-buffer-local 'verilog-save-font-mod-hooked)
  
 -(defmacro verilog-save-font-mods (&rest body)
 -  "Execute BODY forms, disabling text modifications to allow performing BODY.
 +(defmacro verilog-save-font-no-change-functions (&rest body)
 + "Execute BODY forms, disabling all change hooks in BODY.
  Includes temporary disabling of `font-lock' to restore the buffer
  to full text form for parsing.  Additional actions may be specified with
 -`verilog-before-save-font-hook' and `verilog-after-save-font-hook'."
 -  ;; Before version 20, match-string with font-lock returns a
 -  ;; vector that is not equal to the string.  IE if on "input"
 -  ;; nil==(equal "input" (progn (looking-at "input") (match-string 0)))
 -  `(let* ((hooked (unless verilog-save-font-mod-hooked
 -                  (verilog-run-hooks 'verilog-before-save-font-hook)
 -                  t))
 -        (verilog-save-font-mod-hooked t)
 -        (fontlocked (when (and (boundp 'font-lock-mode) font-lock-mode)
 -                      (font-lock-mode 0)
 -                      t)))
 -     (unwind-protect
 -         (progn ,@body)
 -       ;; Unwind forms
 -       (when fontlocked (font-lock-mode t))
 -       (when hooked (verilog-run-hooks 'verilog-after-save-font-hook)))))
 +`verilog-before-save-font-hook' and `verilog-after-save-font-hook'.
 +For insignificant changes, see instead `verilog-save-buffer-state'."
 + `(if verilog-save-font-mod-hooked ; Short-circuit a recursive call
 +      (progn ,@body)
 +    ;; Before version 20, match-string with font-lock returns a
 +    ;; vector that is not equal to the string.  IE if on "input"
 +    ;; nil==(equal "input" (progn (looking-at "input") (match-string 0)))
 +    ;; Therefore we must remove and restore font-lock mode
 +    (verilog-run-hooks 'verilog-before-save-font-hook)
 +    (let* ((verilog-save-font-mod-hooked (- (point-max) (point-min)))
 +           ;; Significant speed savings with no font-lock properties
 +           (fontlocked (when (and (boundp 'font-lock-mode) font-lock-mode)
 +                         (font-lock-mode 0)
 +                         t)))
 +      (run-hook-with-args 'before-change-functions (point-min) (point-max))
 +      (unwind-protect
 +          ;; Must inhibit and restore hooks before restoring font-lock
 +          (let* ((inhibit-point-motion-hooks t)
 +                 (inhibit-modification-hooks t)
 +                 (verilog-no-change-functions t)
 +                 ;; XEmacs and pre-Emacs 21 ignore inhibit-modification-hooks.
 +                 before-change-functions after-change-functions)
 +            (progn ,@body))
 +        ;; Unwind forms
 +        (run-hook-with-args 'after-change-functions (point-min) (point-max)
 +                            verilog-save-font-mod-hooked) ; old length
 +        (when fontlocked (font-lock-mode t))
 +        (verilog-run-hooks 'verilog-after-save-font-hook)))))
  
  ;;
  ;; Comment detection and caching
@@@ -3733,12 -3717,12 +3733,12 @@@ Variables controlling indentation/edit 
     will be inserted.  Setting this variable to zero results in every
     end acquiring a comment; the default avoids too many redundant
     comments in tight quarters.
-  `verilog-auto-lineup'              (default 'declarations)
+  `verilog-auto-lineup'              (default `declarations')
     List of contexts where auto lineup of code should be done.
  
  Variables controlling other actions:
  
-  `verilog-linter'                   (default surelint)
+  `verilog-linter'                   (default `surelint')
     Unix program to call to run the lint checker.  This is the default
     command for \\[compile-command] and \\[verilog-auto-save-compile].
  
@@@ -4089,7 -4073,7 +4089,7 @@@ The upper left corner is defined by poi
  and extend to the MAX - 1.  If no prefix arg is given, the user
  is prompted for a value.  The indices are surrounded by square
  brackets [].  For example, the following code with the point
- located after the first 'a' gives:
+ located after the first `a' gives:
  
      a = b                           a[  0] = b
      a = b                           a[  1] = b
@@@ -8090,7 -8074,7 +8090,7 @@@ Duplicate signals are also removed.  Fo
             (when (and sv-busstring
                        (not (equal sv-busstring (verilog-sig-bits sig))))
                 (when nil  ; Debugging
 -               (message (concat "Warning, can't merge into single bus %s%s"
 +               (message (concat "Warning, can't merge into single bus `%s%s'"
                                  ", the AUTOs may be wrong")
                          sv-name bus))
               (setq buswarn ", Couldn't Merge"))
@@@ -8393,18 -8377,18 +8393,18 @@@ Return an array of [outputs inouts inpu
                 (setcar (cdr (cdr (cdr newsig)))
                         (if (verilog-sig-memory newsig)
                             (concat (verilog-sig-memory newsig) (match-string 1))
 -                         (match-string 1))))
 +                         (match-string-no-properties 1))))
                  (vec  ; Multidimensional
                 (setq multidim (cons vec multidim))
                 (setq vec (verilog-string-replace-matches
 -                          "\\s-+" "" nil nil (match-string 1))))
 +                          "\\s-+" "" nil nil (match-string-no-properties 1))))
                  (t  ; Bit width
                 (setq vec (verilog-string-replace-matches
 -                          "\\s-+" "" nil nil (match-string 1))))))
 +                          "\\s-+" "" nil nil (match-string-no-properties 1))))))
         ;; Normal or escaped identifier -- note we remember the \ if escaped
         ((looking-at "\\s-*\\([a-zA-Z0-9`_$]+\\|\\\\[^ \t\n\f]+\\)")
          (goto-char (match-end 0))
 -        (setq keywd (match-string 1))
 +        (setq keywd (match-string-no-properties 1))
          (when (string-match "^\\\\" (match-string 1))
              (setq keywd (concat keywd " ")))  ; Escaped ID needs space at end
          ;; Add any :: package names to same identifier
    (defvar sigs-out-unk)
    (defvar sigs-temp)
    ;; These are known to be from other packages and may not be defined
 -  (defvar diff-command nil)
 +  (defvar diff-command)
    ;; There are known to be from newer versions of Emacs
 -  (defvar create-lockfiles))
 +  (defvar create-lockfiles)
 +  (defvar which-func-modes))
  
 -(defun verilog-read-sub-decls-sig (submoddecls comment port sig vec multidim)
 +(defun verilog-read-sub-decls-sig (submoddecls comment port sig vec multidim mem)
    "For `verilog-read-sub-decls-line', add a signal."
    ;; sig eq t to indicate .name syntax
    ;;(message "vrsds: %s(%S)" port sig)
        (setq sig  (if dotname port (verilog-symbol-detick-denumber sig)))
        (if vec (setq vec  (verilog-symbol-detick-denumber vec)))
        (if multidim (setq multidim  (mapcar `verilog-symbol-detick-denumber multidim)))
 +      (if mem (setq mem (verilog-symbol-detick-denumber mem)))
        (unless (or (not sig)
                    (equal sig ""))  ; Ignore .foo(1'b1) assignments
        (cond ((or (setq portdata (assoc port (verilog-decls-get-inouts submoddecls)))
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To/From " comment)
 -                          (verilog-sig-memory portdata)
 +                            mem
                            nil
                            (verilog-sig-signed portdata)
                            (unless (member (verilog-sig-type portdata) '("wire" "reg"))
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "From " comment)
 -                          (verilog-sig-memory portdata)
 +                          mem
                            nil
                            (verilog-sig-signed portdata)
                            ;; Though ok in SV, in V2K code, propagating the
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To " comment)
 -                          (verilog-sig-memory portdata)
 +                          mem
                            nil
                            (verilog-sig-signed portdata)
                            (unless (member (verilog-sig-type portdata) '("wire" "reg"))
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To/From " comment)
 -                          (verilog-sig-memory portdata)
 +                          mem
                            nil
                            (verilog-sig-signed portdata)
                            (verilog-sig-type portdata)
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To/From " comment)
 -                          (verilog-sig-memory portdata)
 +                          mem
                            nil
                            (verilog-sig-signed portdata)
                            (verilog-sig-type portdata)
    "For `verilog-read-sub-decls-line', parse a subexpression and add signals."
    ;;(message "vrsde: `%s'" expr)
    ;; Replace special /*[....]*/ comments inserted by verilog-auto-inst-port
 -  (setq expr (verilog-string-replace-matches "/\\*\\(\\[[^*]+\\]\\)\\*/" "\\1" nil nil expr))
 +  (setq expr (verilog-string-replace-matches "/\\*\\(\\.?\\[[^*]+\\]\\)\\*/" "\\1" nil nil expr))
    ;; Remove front operators
    (setq expr (verilog-string-replace-matches "^\\s-*[---+~!|&]+\\s-*" "" nil nil expr))
    ;;
        (while (setq mstr (pop mlst))
          (verilog-read-sub-decls-expr submoddecls comment port mstr)))))
     (t
 -    (let (sig vec multidim)
 +    (let (sig vec multidim mem)
        ;; Remove leading reduction operators, etc
        (setq expr (verilog-string-replace-matches "^\\s-*[---+~!|&]+\\s-*" "" nil nil expr))
        ;;(message "vrsde-ptop: `%s'" expr)
        (when vec (setq multidim (cons vec multidim)))
        (setq vec (match-string 1 expr)
              expr (substring expr (match-end 0))))
 +      ;; Find .[unpacked_memory] or .[unpacked][unpacked]...
 +      (while (string-match "^\\s-*\\.\\(\\[[^]]+\\]\\)" expr)
 +      ;;(message "vrsde-m: `%s'" (match-string 1 expr))
 +      (setq mem (match-string 1 expr)
 +            expr (substring expr (match-end 0))))
        ;; If found signal, and nothing unrecognized, add the signal
        ;;(message "vrsde-rem: `%s'" expr)
        (when (and sig (string-match "^\\s-*$" expr))
 -      (verilog-read-sub-decls-sig submoddecls comment port sig vec multidim))))))
 +      (verilog-read-sub-decls-sig submoddecls comment port sig vec multidim mem))))))
  
  (defun verilog-read-sub-decls-line (submoddecls comment)
    "For `verilog-read-sub-decls', read lines of port defs until none match.
@@@ -8740,23 -8717,23 +8740,23 @@@ Inserts the list of signals found, usin
        (while (not done)
        ;; Get port name
        (cond ((looking-at "\\s-*\\.\\s-*\\([a-zA-Z0-9`_$]*\\)\\s-*(\\s-*")
 -             (setq port (match-string 1))
 +             (setq port (match-string-no-properties 1))
               (goto-char (match-end 0)))
              ;; .\escaped (
              ((looking-at "\\s-*\\.\\s-*\\(\\\\[^ \t\n\f]*\\)\\s-*(\\s-*")
 -               (setq port (concat (match-string 1) " "))  ; escaped id's need trailing space
 +               (setq port (concat (match-string-no-properties 1) " "))  ; escaped id's need trailing space
               (goto-char (match-end 0)))
              ;; .name
              ((looking-at "\\s-*\\.\\s-*\\([a-zA-Z0-9`_$]*\\)\\s-*[,)/]")
               (verilog-read-sub-decls-sig
 -              submoddecls comment (match-string 1) t ; sig==t for .name
 -              nil nil) ; vec multidim
 +              submoddecls comment (match-string-no-properties 1) t ; sig==t for .name
 +              nil nil nil) ; vec multidim mem
               (setq port nil))
              ;; .\escaped_name
              ((looking-at "\\s-*\\.\\s-*\\(\\\\[^ \t\n\f]*\\)\\s-*[,)/]")
               (verilog-read-sub-decls-sig
 -              submoddecls comment (concat (match-string 1) " ") t ; sig==t for .name
 -              nil nil) ; vec multidim
 +              submoddecls comment (concat (match-string-no-properties 1) " ") t ; sig==t for .name
 +              nil nil nil) ; vec multidim mem
               (setq port nil))
              ;; random
              ((looking-at "\\s-*\\.[^(]*(")
          (cond ((looking-at "\\([a-zA-Z_][a-zA-Z_0-9]*\\)\\s-*)")
                 (verilog-read-sub-decls-sig
                  submoddecls comment port
 -                (verilog-string-remove-spaces (match-string 1)) ; sig
 -                nil nil)) ; vec multidim
 +                (verilog-string-remove-spaces (match-string-no-properties 1)) ; sig
 +                nil nil nil)) ; vec multidim mem
                ;;
                ((looking-at "\\([a-zA-Z_][a-zA-Z_0-9]*\\)\\s-*\\(\\[[^]]+\\]\\)\\s-*)")
                 (verilog-read-sub-decls-sig
                  submoddecls comment port
 -                (verilog-string-remove-spaces (match-string 1)) ; sig
 -                (match-string 2) nil)) ; vec multidim
 +                (verilog-string-remove-spaces (match-string-no-properties 1)) ; sig
 +                (match-string-no-properties 2) nil nil)) ; vec multidim mem
                ;; Fastpath was above looking-at's.
                ;; For something more complicated invoke a parser
                ((looking-at "[^)]+")
                 (verilog-read-sub-decls-expr
                  submoddecls comment port
 -                (buffer-substring
 +                (buffer-substring-no-properties
                   (point) (1- (progn (search-backward "(") ; start at (
                                      (verilog-forward-sexp-ign-cmt 1)
                                      (point)))))))) ; expr
@@@ -9917,7 -9894,7 +9917,7 @@@ Return modi if successful, else print m
               (or mif ignore-error
                   (error
                    (concat
 -                   "%s: Can't locate %s module definition%s"
 +                   "%s: Can't locate `%s' module definition%s"
                     "\n    Check the verilog-library-directories variable."
                     "\n    I looked in (if not listed, doesn't exist):\n\t%s")
                    (verilog-point-text) module
@@@ -9982,9 -9959,9 +9982,9 @@@ Cache the output of function so next ca
            (t
             ;; Read from file
             ;; Clear then restore any highlighting to make emacs19 happy
 -           (let (func-returns)
 -             (verilog-save-font-mods
 -              (setq func-returns (funcall function)))
 +             (let ((func-returns
 +                    (verilog-save-font-no-change-functions
 +                     (funcall function))))
               ;; Cache for next time
               (setq verilog-modi-cache-list
                     (cons (list (list modi function)
@@@ -10026,7 -10003,7 +10026,7 @@@ Report errors unless optional IGNORE-ER
    (let* ((realname (verilog-symbol-detick name t))
         (modport (assoc name (verilog-decls-get-modports (verilog-modi-get-decls modi)))))
      (or modport ignore-error
 -      (error "%s: Can't locate %s modport definition%s"
 +      (error "%s: Can't locate `%s' modport definition%s"
                 (verilog-point-text) name
                 (if (not (equal name realname))
                     (concat " (Expanded macro to " realname ")")
@@@ -10216,7 -10193,7 +10216,7 @@@ When MODI is non-null, also add to modi
          ((equal direction "parameter")
           (verilog-modi-cache-add-gparams modi sigs))
          (t
 -         (error "Unsupported verilog-insert-definition direction: %s" direction))))
 +         (error "Unsupported verilog-insert-definition direction: `%s'" direction))))
    (or dont-sort
        (setq sigs (sort (copy-alist sigs) `verilog-signals-sort-compare)))
    (while sigs
  
  (eval-when-compile
    (if (not (boundp 'indent-pt))
 -      (defvar indent-pt nil "Local used by insert-indent")))
 +      (defvar indent-pt nil "Local used by `verilog-insert-indent'.")))
  
  (defun verilog-insert-indent (&rest stuff)
    "Indent to position stored in local `indent-pt' variable, then insert STUFF.
@@@ -10533,41 -10510,6 +10533,41 @@@ removed.
          (re-search-backward ",")
          (delete-char 1))))))
  
 +(defun verilog-delete-auto-buffer ()
 +  "Perform `verilog-delete-auto' on the current buffer.
 +Intended for internal use inside a `verilog-save-font-no-change-functions' block."
 +  ;; Allow user to customize
 +  (verilog-run-hooks 'verilog-before-delete-auto-hook)
 +
 +  ;; Remove those that have multi-line insertions, possibly with parameters
 +  ;; We allow anything beginning with AUTO, so that users can add their own
 +  ;; patterns
 +  (verilog-auto-re-search-do
 +   (concat "/\\*AUTO[A-Za-z0-9_]+"
 +           ;; Optional parens or quoted parameter or .* for (((...)))
 +           "\\(\\|([^)]*)\\|(\"[^\"]*\")\\).*?"
 +           "\\*/")
 +   'verilog-delete-autos-lined)
 +  ;; Remove those that are in parenthesis
 +  (verilog-auto-re-search-do
 +   (concat "/\\*"
 +           (eval-when-compile
 +             (verilog-regexp-words
 +              `("AS" "AUTOARG" "AUTOCONCATWIDTH" "AUTOINST" "AUTOINSTPARAM"
 +                "AUTOSENSE")))
 +           "\\*/")
 +   'verilog-delete-to-paren)
 +  ;; Do .* instantiations, but avoid removing any user pins by looking for our magic comments
 +  (verilog-auto-re-search-do "\\.\\*"
 +                             'verilog-delete-auto-star-all)
 +  ;; Remove template comments ... anywhere in case was pasted after AUTOINST removed
 +  (goto-char (point-min))
 +  (while (re-search-forward "\\s-*// \\(Templated\\|Implicit \\.\\*\\)\\([ \tLT0-9]*\\| LHS: .*\\)?$" nil t)
 +    (replace-match ""))
 +
 +  ;; Final customize
 +  (verilog-run-hooks 'verilog-delete-auto-hook))
 +
  (defun verilog-delete-auto ()
    "Delete the automatic outputs, regs, and wires created by \\[verilog-auto].
  Use \\[verilog-auto] to re-insert the updated AUTOs.
@@@ -10578,10 -10520,39 +10578,10 @@@ called before and after this function, 
    (save-excursion
      (if (buffer-file-name)
          (find-file-noselect (buffer-file-name)))  ; To check we have latest version
 -    (verilog-save-no-change-functions
 +    (verilog-save-font-no-change-functions
       (verilog-save-scan-cache
 -      ;; Allow user to customize
 -      (verilog-run-hooks 'verilog-before-delete-auto-hook)
 -
 -      ;; Remove those that have multi-line insertions, possibly with parameters
 -      ;; We allow anything beginning with AUTO, so that users can add their own
 -      ;; patterns
 -      (verilog-auto-re-search-do
 -       (concat "/\\*AUTO[A-Za-z0-9_]+"
 -             ;; Optional parens or quoted parameter or .* for (((...)))
 -             "\\(\\|([^)]*)\\|(\"[^\"]*\")\\).*?"
 -             "\\*/")
 -       'verilog-delete-autos-lined)
 -      ;; Remove those that are in parenthesis
 -      (verilog-auto-re-search-do
 -       (concat "/\\*"
 -             (eval-when-compile
 -               (verilog-regexp-words
 -                `("AS" "AUTOARG" "AUTOCONCATWIDTH" "AUTOINST" "AUTOINSTPARAM"
 -                  "AUTOSENSE")))
 -             "\\*/")
 -       'verilog-delete-to-paren)
 -      ;; Do .* instantiations, but avoid removing any user pins by looking for our magic comments
 -      (verilog-auto-re-search-do "\\.\\*"
 -                               'verilog-delete-auto-star-all)
 -      ;; Remove template comments ... anywhere in case was pasted after AUTOINST removed
 -      (goto-char (point-min))
 -      (while (re-search-forward "\\s-*// \\(Templated\\|Implicit \\.\\*\\)\\([ \tLT0-9]*\\| LHS: .*\\)?$" nil t)
 -      (replace-match ""))
 +      (verilog-delete-auto-buffer)))))
  
 -      ;; Final customize
 -      (verilog-run-hooks 'verilog-delete-auto-hook)))))
  \f
  ;;; Auto inject:
  ;;
@@@ -10708,11 -10679,10 +10708,11 @@@ Typing \\[verilog-inject-auto] will mak
  ;; Auto diff:
  ;;
  
 -(defun verilog-diff-buffers-p (b1 b2 &optional whitespace)
 +(defun verilog-diff-buffers-p (b1 b2 &optional whitespace regexp)
    "Return nil if buffers B1 and B2 have same contents.
  Else, return point in B1 that first mismatches.
 -If optional WHITESPACE true, ignore whitespace."
 +If optional WHITESPACE true, ignore whitespace.
 +If optional REGEXP, ignore differences matching it."
    (save-excursion
      (let* ((case-fold-search nil)  ; compare-buffer-substrings cares
           (p1 (with-current-buffer b1 (goto-char (point-min))))
            (goto-char p2)
            (skip-chars-forward " \t\n\r\f\v")
            (setq p2 (point))))
 +      (when regexp
 +        (with-current-buffer b1
 +          (goto-char p1)
 +          (when (looking-at regexp)
 +              (setq p1 (match-end 0))))
 +        (with-current-buffer b2
 +          (goto-char p2)
 +          (when (looking-at regexp)
 +              (setq p2 (match-end 0)))))
        (setq size (min (- maxp1 p1) (- maxp2 p2)))
        (setq progress (compare-buffer-substrings b2 p2 (+ size p2)
                                                  b1 p1 (+ size p1)))
@@@ -10762,7 -10723,7 +10762,7 @@@ Ignores WHITESPACE if t, and writes out
    ;; call `diff' as `diff' has different calling semantics on different
    ;; versions of Emacs.
    (if (not (file-exists-p f1))
 -      (message "Buffer %s has no associated file on disc" (buffer-name b2))
 +      (message "Buffer `%s' has no associated file on disk" (buffer-name b2))
      (with-temp-buffer "*Verilog-Diff*"
                        (let ((outbuf (current-buffer))
                              (f2 (make-temp-file "vm-diff-auto-")))
@@@ -10830,7 -10791,7 +10830,7 @@@ or `diff' in batch mode.
            ;; Restore name if unwind
            (with-current-buffer b1 (setq buffer-file-name name1)))))
        ;;
 -      (setq diffpt (verilog-diff-buffers-p b1 b2 t))
 +      (setq diffpt (verilog-diff-buffers-p b1 b2 t verilog-diff-ignore-regexp))
        (cond ((not diffpt)
             (unless noninteractive (message "AUTO expansion identical"))
               (kill-buffer newname))  ; Nice to cleanup after oneself
@@@ -11093,7 -11054,6 +11093,7 @@@ If PAR-VALUES replace final strings wit
         (vl-name (verilog-sig-name port-st))
         (vl-width (verilog-sig-width port-st))
         (vl-modport (verilog-sig-modport port-st))
 +       (vl-memory (verilog-sig-memory port-st))
         (vl-mbits (if (verilog-sig-multidim port-st)
                         (verilog-sig-multidim-string port-st) ""))
         (vl-bits (if (or verilog-auto-inst-vector
                        (concat "\\<" (nth 0 (car check-values)) "\\>")
                        (concat "(" (nth 1 (car check-values)) ")")
                        t t vl-mbits)
 +            vl-memory (when vl-memory
 +                          (verilog-string-replace-matches
 +                           (concat "\\<" (nth 0 (car check-values)) "\\>")
 +                           (concat "(" (nth 1 (car check-values)) ")")
 +                           t t vl-memory))
              check-values (cdr check-values)))
        (setq vl-bits (verilog-simplify-range-expression vl-bits)
            vl-mbits (verilog-simplify-range-expression vl-mbits)
 +          vl-memory (when vl-memory (verilog-simplify-range-expression vl-memory))
            vl-width (verilog-make-width-expression vl-bits))) ; Not in the loop for speed
      ;; Default net value if not found
 -    (setq dflt-bits (if (and (verilog-sig-bits port-st)
 -                           (or (verilog-sig-multidim port-st)
 -                               (verilog-sig-memory port-st)))
 -                      (concat "/*" vl-mbits vl-bits "*/")
 +    (setq dflt-bits (if (or (and (verilog-sig-bits port-st)
 +                                 (verilog-sig-multidim port-st))
 +                            (verilog-sig-memory port-st))
 +                      (concat "/*" vl-mbits vl-bits
 +                                ;; .[ used to separate packed from unpacked
 +                                (if vl-memory "." "")
 +                                (if vl-memory vl-memory "")
 +                                "*/")
                      (concat vl-bits))
          tpl-net (concat port
                          (if (and vl-modport
          (for-star
           (indent-to (+ (if (< verilog-auto-inst-column 48) 24 16)
                         verilog-auto-inst-column))
 -         (verilog-insert " // Implicit .\*\n")) ;For some reason the . or * must be escaped...
 +         (verilog-insert " // Implicit .*\n"))
          (t
           (insert "\n")))))
  ;;(verilog-auto-inst-port (list "foo" "[5:0]") 10 (list (list "foo" "a@\"(% (+ @ 1) 4)\"a")) "3")
@@@ -12949,7 -12899,7 +12949,7 @@@ used on the right hand side of assignme
  By default, AUTORESET will include the width of the signal in the
  autos, SystemVerilog designs may want to change this.  To control
  this behavior, see `verilog-auto-reset-widths'.  In some cases
- AUTORESET must use a '0 assignment and it will print NOWIDTH; use
+ AUTORESET must use a \\='0 assignment and it will print NOWIDTH; use
  `verilog-auto-reset-widths' unbased to prevent this.
  
  AUTORESET ties signals to deasserted, which is presumed to be zero.
@@@ -13366,16 -13316,13 +13366,16 @@@ Typing \\[verilog-auto] will make this 
           (sig-list-all  (verilog-decls-get-iovars moddecls))
           ;;
           (undecode-sig (or (assoc undecode-name sig-list-all)
 -                           (error "%s: Signal %s not found in design" (verilog-point-text) undecode-name)))
 +                           (error "%s: Signal `%s' not found in design"
 +                                    (verilog-point-text) undecode-name)))
           (undecode-enum (or (verilog-sig-enum undecode-sig)
 -                            (error "%s: Signal %s does not have an enum tag" (verilog-point-text) undecode-name)))
 +                            (error "%s: Signal `%s' does not have an enum tag"
 +                                     (verilog-point-text) undecode-name)))
           ;;
           (enum-sigs (verilog-signals-not-in
                       (or (verilog-signals-matching-enum sig-list-consts undecode-enum)
 -                         (error "%s: No state definitions for %s" (verilog-point-text) undecode-enum))
 +                         (error "%s: No state definitions for `%s'"
 +                                  (verilog-point-text) undecode-enum))
                       nil))
           ;;
           (one-hot (or
@@@ -13571,115 -13518,120 +13571,115 @@@ Wilson Snyder (wsnyder@wsnyder.org).
    (unless noninteractive (message "Updating AUTOs..."))
    (if (fboundp 'dinotrace-unannotate-all)
        (dinotrace-unannotate-all))
 -  (verilog-save-font-mods
 +  ;; Disable change hooks for speed
 +  ;; This let can't be part of above let; must restore
 +  ;; after-change-functions before font-lock resumes
 +  (verilog-save-font-no-change-functions
     (let ((oldbuf (if (not (buffer-modified-p))
 -                   (buffer-string)))
 -       (case-fold-search verilog-case-fold)
 -       ;; Cache directories; we don't write new files, so can't change
 -       (verilog-dir-cache-preserving t)
 -       ;; Cache current module
 -       (verilog-modi-cache-current-enable t)
 -       (verilog-modi-cache-current-max (point-min)) ; IE it's invalid
 -       verilog-modi-cache-current)
 -     (unwind-protect
 -       ;; Disable change hooks for speed
 -       ;; This let can't be part of above let; must restore
 -       ;; after-change-functions before font-lock resumes
 -       (verilog-save-no-change-functions
 -        (verilog-save-scan-cache
 -         (save-excursion
 -           ;; Wipe cache; otherwise if we AUTOed a block above this one,
 -           ;; we'll misremember we have generated IOs, confusing AUTOOUTPUT
 -           (setq verilog-modi-cache-list nil)
 -           ;; Local state
 -           (verilog-read-auto-template-init)
 -           ;; If we're not in verilog-mode, change syntax table so parsing works right
 -           (unless (eq major-mode `verilog-mode) (verilog-mode))
 -           ;; Allow user to customize
 -           (verilog-run-hooks 'verilog-before-auto-hook)
 -           ;; Try to save the user from needing to revert-file to reread file local-variables
 -           (verilog-auto-reeval-locals)
 -           (verilog-read-auto-lisp-present)
 -           (verilog-read-auto-lisp (point-min) (point-max))
 -           (verilog-getopt-flags)
 -           ;; From here on out, we can cache anything we read from disk
 -           (verilog-preserve-dir-cache
 -            ;; These two may seem obvious to do always, but on large includes it can be way too slow
 -            (when verilog-auto-read-includes
 -              (verilog-read-includes)
 -              (verilog-read-defines nil nil t))
 -            ;; Setup variables due to SystemVerilog expansion
 -            (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic-setup)
 -            ;; This particular ordering is important
 -            ;; INST: Lower modules correct, no internal dependencies, FIRST
 -            (verilog-preserve-modi-cache
 -             ;; Clear existing autos else we'll be screwed by existing ones
 -             (verilog-delete-auto)
 -             ;; Injection if appropriate
 -             (when inject
 -               (verilog-inject-inst)
 -               (verilog-inject-sense)
 -               (verilog-inject-arg))
 -             ;;
 -             ;; Do user inserts first, so their code can insert AUTOs
 -             (verilog-auto-re-search-do "/\\*AUTOINSERTLISP(.*?)\\*/"
 -                                        'verilog-auto-insert-lisp)
 -             ;; Expand instances before need the signals the instances input/output
 -             (verilog-auto-re-search-do "/\\*AUTOINSTPARAM\\*/" 'verilog-auto-inst-param)
 -             (verilog-auto-re-search-do "/\\*AUTOINST\\*/" 'verilog-auto-inst)
 -             (verilog-auto-re-search-do "\\.\\*" 'verilog-auto-star)
 -             ;; Doesn't matter when done, but combine it with a common changer
 -             (verilog-auto-re-search-do "/\\*\\(AUTOSENSE\\|AS\\)\\*/" 'verilog-auto-sense)
 -             (verilog-auto-re-search-do "/\\*AUTORESET\\*/" 'verilog-auto-reset)
 -             ;; Must be done before autoin/out as creates a reg
 -             (verilog-auto-re-search-do "/\\*AUTOASCIIENUM(.*?)\\*/" 'verilog-auto-ascii-enum)
 -             ;;
 -             ;; first in/outs from other files
 -             (verilog-auto-re-search-do "/\\*AUTOINOUTMODPORT(.*?)\\*/" 'verilog-auto-inout-modport)
 -             (verilog-auto-re-search-do "/\\*AUTOINOUTMODULE(.*?)\\*/" 'verilog-auto-inout-module)
 -             (verilog-auto-re-search-do "/\\*AUTOINOUTCOMP(.*?)\\*/" 'verilog-auto-inout-comp)
 -             (verilog-auto-re-search-do "/\\*AUTOINOUTIN(.*?)\\*/" 'verilog-auto-inout-in)
 -             (verilog-auto-re-search-do "/\\*AUTOINOUTPARAM(.*?)\\*/" 'verilog-auto-inout-param)
 -             ;; next in/outs which need previous sucked inputs first
 -             (verilog-auto-re-search-do "/\\*AUTOOUTPUT\\((.*?)\\)?\\*/" 'verilog-auto-output)
 -             (verilog-auto-re-search-do "/\\*AUTOINPUT\\((.*?)\\)?\\*/" 'verilog-auto-input)
 -             (verilog-auto-re-search-do "/\\*AUTOINOUT\\((.*?)\\)?\\*/" 'verilog-auto-inout)
 -             ;; Then tie off those in/outs
 -             (verilog-auto-re-search-do "/\\*AUTOTIEOFF\\*/" 'verilog-auto-tieoff)
 -             ;; These can be anywhere after AUTOINSERTLISP
 -             (verilog-auto-re-search-do "/\\*AUTOUNDEF\\((.*?)\\)?\\*/" 'verilog-auto-undef)
 -             ;; Wires/regs must be after inputs/outputs
 -             (verilog-auto-re-search-do "/\\*AUTOASSIGNMODPORT(.*?)\\*/" 'verilog-auto-assign-modport)
 -             (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic)
 -             (verilog-auto-re-search-do "/\\*AUTOWIRE\\*/" 'verilog-auto-wire)
 -             (verilog-auto-re-search-do "/\\*AUTOREG\\*/" 'verilog-auto-reg)
 -             (verilog-auto-re-search-do "/\\*AUTOREGINPUT\\*/" 'verilog-auto-reg-input)
 -             ;; outputevery needs AUTOOUTPUTs done first
 -             (verilog-auto-re-search-do "/\\*AUTOOUTPUTEVERY\\((.*?)\\)?\\*/" 'verilog-auto-output-every)
 -             ;; After we've created all new variables
 -             (verilog-auto-re-search-do "/\\*AUTOUNUSED\\*/" 'verilog-auto-unused)
 -             ;; Must be after all inputs outputs are generated
 -             (verilog-auto-re-search-do "/\\*AUTOARG\\*/" 'verilog-auto-arg)
 -             ;; User inserts
 -             (verilog-auto-re-search-do "/\\*AUTOINSERTLAST(.*?)\\*/" 'verilog-auto-insert-last)
 -             ;; Fix line numbers (comments only)
 -             (when verilog-auto-inst-template-numbers
 -               (verilog-auto-templated-rel))
 -             (when verilog-auto-template-warn-unused
 -               (verilog-auto-template-lint))))
 -           ;;
 -           (verilog-run-hooks 'verilog-auto-hook)
 -           ;;
 -           (when verilog-auto-delete-trailing-whitespace
 -             (verilog-delete-trailing-whitespace))
 -           ;;
 -           (set (make-local-variable 'verilog-auto-update-tick) (buffer-chars-modified-tick))
 -           ;;
 -           ;; If end result is same as when started, clear modified flag
 -           (cond ((and oldbuf (equal oldbuf (buffer-string)))
 -                  (set-buffer-modified-p nil)
 -                  (unless noninteractive (message "Updating AUTOs...done (no changes)")))
 -                 (t (unless noninteractive (message "Updating AUTOs...done"))))
 -           ;; End of after-change protection
 -           )))
 -       ;; Unwind forms
 -       ;; Currently handled in verilog-save-font-mods
 -       ))))
 +                     (buffer-string)))
 +         (case-fold-search verilog-case-fold)
 +         ;; Cache directories; we don't write new files, so can't change
 +         (verilog-dir-cache-preserving t)
 +         ;; Cache current module
 +         (verilog-modi-cache-current-enable t)
 +         (verilog-modi-cache-current-max (point-min)) ; IE it's invalid
 +         verilog-modi-cache-current)
 +     (verilog-save-scan-cache
 +      (save-excursion
 +        ;; Wipe cache; otherwise if we AUTOed a block above this one,
 +        ;; we'll misremember we have generated IOs, confusing AUTOOUTPUT
 +        (setq verilog-modi-cache-list nil)
 +        ;; Local state
 +        (verilog-read-auto-template-init)
 +        ;; If we're not in verilog-mode, change syntax table so parsing works right
 +        (unless (eq major-mode `verilog-mode) (verilog-mode))
 +        ;; Allow user to customize
 +        (verilog-run-hooks 'verilog-before-auto-hook)
 +        ;; Try to save the user from needing to revert-file to reread file local-variables
 +        (verilog-auto-reeval-locals)
 +        (verilog-read-auto-lisp-present)
 +        (verilog-read-auto-lisp (point-min) (point-max))
 +        (verilog-getopt-flags)
 +        ;; From here on out, we can cache anything we read from disk
 +        (verilog-preserve-dir-cache
 +         ;; These two may seem obvious to do always, but on large includes it can be way too slow
 +         (when verilog-auto-read-includes
 +           (verilog-read-includes)
 +           (verilog-read-defines nil nil t))
 +         ;; Setup variables due to SystemVerilog expansion
 +         (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic-setup)
 +         ;; This particular ordering is important
 +         ;; INST: Lower modules correct, no internal dependencies, FIRST
 +         (verilog-preserve-modi-cache
 +          ;; Clear existing autos else we'll be screwed by existing ones
 +          (verilog-delete-auto-buffer)
 +          ;; Injection if appropriate
 +          (when inject
 +            (verilog-inject-inst)
 +            (verilog-inject-sense)
 +            (verilog-inject-arg))
 +          ;;
 +          ;; Do user inserts first, so their code can insert AUTOs
 +          (verilog-auto-re-search-do "/\\*AUTOINSERTLISP(.*?)\\*/"
 +                                     'verilog-auto-insert-lisp)
 +          ;; Expand instances before need the signals the instances input/output
 +          (verilog-auto-re-search-do "/\\*AUTOINSTPARAM\\*/" 'verilog-auto-inst-param)
 +          (verilog-auto-re-search-do "/\\*AUTOINST\\*/" 'verilog-auto-inst)
 +          (verilog-auto-re-search-do "\\.\\*" 'verilog-auto-star)
 +          ;; Doesn't matter when done, but combine it with a common changer
 +          (verilog-auto-re-search-do "/\\*\\(AUTOSENSE\\|AS\\)\\*/" 'verilog-auto-sense)
 +          (verilog-auto-re-search-do "/\\*AUTORESET\\*/" 'verilog-auto-reset)
 +          ;; Must be done before autoin/out as creates a reg
 +          (verilog-auto-re-search-do "/\\*AUTOASCIIENUM(.*?)\\*/" 'verilog-auto-ascii-enum)
 +          ;;
 +          ;; first in/outs from other files
 +          (verilog-auto-re-search-do "/\\*AUTOINOUTMODPORT(.*?)\\*/" 'verilog-auto-inout-modport)
 +          (verilog-auto-re-search-do "/\\*AUTOINOUTMODULE(.*?)\\*/" 'verilog-auto-inout-module)
 +          (verilog-auto-re-search-do "/\\*AUTOINOUTCOMP(.*?)\\*/" 'verilog-auto-inout-comp)
 +          (verilog-auto-re-search-do "/\\*AUTOINOUTIN(.*?)\\*/" 'verilog-auto-inout-in)
 +          (verilog-auto-re-search-do "/\\*AUTOINOUTPARAM(.*?)\\*/" 'verilog-auto-inout-param)
 +          ;; next in/outs which need previous sucked inputs first
 +          (verilog-auto-re-search-do "/\\*AUTOOUTPUT\\((.*?)\\)?\\*/" 'verilog-auto-output)
 +          (verilog-auto-re-search-do "/\\*AUTOINPUT\\((.*?)\\)?\\*/" 'verilog-auto-input)
 +          (verilog-auto-re-search-do "/\\*AUTOINOUT\\((.*?)\\)?\\*/" 'verilog-auto-inout)
 +          ;; Then tie off those in/outs
 +          (verilog-auto-re-search-do "/\\*AUTOTIEOFF\\*/" 'verilog-auto-tieoff)
 +          ;; These can be anywhere after AUTOINSERTLISP
 +          (verilog-auto-re-search-do "/\\*AUTOUNDEF\\((.*?)\\)?\\*/" 'verilog-auto-undef)
 +          ;; Wires/regs must be after inputs/outputs
 +          (verilog-auto-re-search-do "/\\*AUTOASSIGNMODPORT(.*?)\\*/" 'verilog-auto-assign-modport)
 +          (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic)
 +          (verilog-auto-re-search-do "/\\*AUTOWIRE\\*/" 'verilog-auto-wire)
 +          (verilog-auto-re-search-do "/\\*AUTOREG\\*/" 'verilog-auto-reg)
 +          (verilog-auto-re-search-do "/\\*AUTOREGINPUT\\*/" 'verilog-auto-reg-input)
 +          ;; outputevery needs AUTOOUTPUTs done first
 +          (verilog-auto-re-search-do "/\\*AUTOOUTPUTEVERY\\((.*?)\\)?\\*/" 'verilog-auto-output-every)
 +          ;; After we've created all new variables
 +          (verilog-auto-re-search-do "/\\*AUTOUNUSED\\*/" 'verilog-auto-unused)
 +          ;; Must be after all inputs outputs are generated
 +          (verilog-auto-re-search-do "/\\*AUTOARG\\*/" 'verilog-auto-arg)
 +          ;; User inserts
 +          (verilog-auto-re-search-do "/\\*AUTOINSERTLAST(.*?)\\*/" 'verilog-auto-insert-last)
 +          ;; Fix line numbers (comments only)
 +          (when verilog-auto-inst-template-numbers
 +            (verilog-auto-templated-rel))
 +          (when verilog-auto-template-warn-unused
 +            (verilog-auto-template-lint))))
 +        ;;
 +        (verilog-run-hooks 'verilog-auto-hook)
 +        ;;
 +        (when verilog-auto-delete-trailing-whitespace
 +          (verilog-delete-trailing-whitespace))
 +        ;;
 +        (set (make-local-variable 'verilog-auto-update-tick) (buffer-chars-modified-tick))
 +        ;;
 +        ;; If end result is same as when started, clear modified flag
 +        (cond ((and oldbuf (equal oldbuf (buffer-string)))
 +               (verilog-restore-buffer-modified-p nil)
 +               (unless noninteractive (message "Updating AUTOs...done (no changes)")))
 +              (t (unless noninteractive (message "Updating AUTOs...done"))))
 +        ;; End of save-cache
 +        )))))
  \f
  ;;; Skeletons:
  ;;
diff --combined lisp/ps-print.el
index b29894dc2e2429abb3f01e49862d810469de6644,ff60926d48ab51a836113b9a8adc8cc735fbebe4..c0c3d5fa0647494cb0b8735ec9059f3409c15469
@@@ -1475,8 -1475,6 +1475,8 @@@ Please send all bug fixes and enhanceme
  ;; Load XEmacs/Emacs definitions
  (require 'ps-def)
  
 +;; autoloads for secondary file
 +(require 'ps-print-loaddefs)
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; User Variables:
@@@ -3234,7 -3232,7 +3234,7 @@@ in the PostScript array HeaderLinesLeft
  
  Strings are inserted unchanged into the array; those representing
  PostScript string literals should be delimited with PostScript string
- delimiters '(' and ')'.
+ delimiters `(' and `)'.
  
  For symbols with bound functions, the function is called and should return a
  string to be inserted into the array.  For symbols with bound values, the value
@@@ -3288,8 -3286,8 +3288,8 @@@ The value should be a list of strings a
  in the PostScript array FooterLinesLeft.
  
  Strings are inserted unchanged into the array; those representing PostScript
- string literals should be delimited with PostScript string delimiters '(' and
')'.
+ string literals should be delimited with PostScript string delimiters `(' and
`)'.
  
  For symbols with bound functions, the function is called and should return a
  string to be inserted into the array.  For symbols with bound values, the value
@@@ -3603,7 -3601,7 +3603,7 @@@ image in a file with that name.
  (defun ps-line-lengths ()
    "Display the correspondence between a line length and a font size.
  Done using the current ps-print setup.
- Try: pr -t file | awk '{printf \"%3d %s\n\", length($0), $0}' | sort -r | head"
+ Try: pr -t file | awk \\='{printf \"%3d %s\n\", length($0), $0}\\=' | sort -r | head"
    (interactive)
    (ps-line-lengths-internal))
  
@@@ -4310,7 -4308,7 +4310,7 @@@ which long lines wrap around.
  (defun ps-line-lengths-internal ()
    "Display the correspondence between a line length and a font size.
  Done using the current ps-print setup.
- Try: pr -t file | awk '{printf \"%3d %s\n\", length($0), $0}' | sort -r | head"
+ Try: pr -t file | awk \\='{printf \"%3d %s\n\", length($0), $0}\\=' | sort -r | head"
    (let* ((ps-font-size-internal
          (or ps-font-size-internal
              (ps-get-font-size 'ps-font-size)))
@@@ -6586,6 -6584,79 +6586,6 @@@ If FACE is not a valid face name, use d
  (unless noninteractive
    (add-hook 'kill-emacs-hook #'ps-kill-emacs-check))
  
 -\f
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;; To make this file smaller, some commands go in a separate file.
 -;; But autoload them here to make the separation invisible.
 -\f
 -;;;### (autoloads nil "ps-mule" "ps-mule.el" "231b07356e5a37ebf517c613a3a12bba")
 -;;; Generated autoloads from ps-mule.el
 -
 -(defvar ps-multibyte-buffer nil "\
 -Specifies the multi-byte buffer handling.
 -
 -Valid values are:
 -
 -  nil                   This is the value to use the default settings;
 -                        by default, this only works to print buffers with
 -                        only ASCII and Latin characters.   But this default
 -                        setting can be changed by setting the variable
 -                        `ps-mule-font-info-database-default' differently.
 -                        The initial value of this variable is
 -                        `ps-mule-font-info-database-latin' (see
 -                        documentation).
 -
 -  `non-latin-printer'   This is the value to use when you have a Japanese
 -                        or Korean PostScript printer and want to print
 -                        buffer with ASCII, Latin-1, Japanese (JISX0208 and
 -                        JISX0201-Kana) and Korean characters.  At present,
 -                        it was not tested with the Korean characters
 -                        printing.  If you have a korean PostScript printer,
 -                        please, test it.
 -
 -  `bdf-font'            This is the value to use when you want to print
 -                        buffer with BDF fonts.  BDF fonts include both latin
 -                        and non-latin fonts.  BDF (Bitmap Distribution
 -                        Format) is a format used for distributing X's font
 -                        source file.  BDF fonts are included in
 -                        `intlfonts-1.2' which is a collection of X11 fonts
 -                        for all characters supported by Emacs.  In order to
 -                        use this value, be sure to have installed
 -                        `intlfonts-1.2' and set the variable
 -                        `bdf-directory-list' appropriately (see ps-bdf.el for
 -                        documentation of this variable).
 -
 -  `bdf-font-except-latin' This is like `bdf-font' except that it uses
 -                        PostScript default fonts to print ASCII and Latin-1
 -                        characters.  This is convenient when you want or
 -                        need to use both latin and non-latin characters on
 -                        the same buffer.  See `ps-font-family',
 -                        `ps-header-font-family' and `ps-font-info-database'.
 -
 -Any other value is treated as nil.")
 -
 -(custom-autoload 'ps-multibyte-buffer "ps-mule" t)
 -
 -(autoload 'ps-mule-initialize "ps-mule" "\
 -Initialize global data for printing multi-byte characters.
 -
 -\(fn)" nil nil)
 -
 -(autoload 'ps-mule-begin-job "ps-mule" "\
 -Start printing job for multi-byte chars between FROM and TO.
 -It checks if all multi-byte characters in the region are printable or not.
 -
 -\(fn FROM TO)" nil nil)
 -
 -(autoload 'ps-mule-end-job "ps-mule" "\
 -Finish printing job for multi-byte chars.
 -
 -\(fn)" nil nil)
 -
 -;;;***
 -\f
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -
  (provide 'ps-print)
  
  ;;; ps-print.el ends here
index b2629a5a5aeb1125345d2d5768e71495335ecab8,151be592367f44d1c077741decbe8cfbfbf2e2c5..8316fe5072b06c151b1a938e00aab67cf1d3b0dd
@@@ -137,7 -137,7 +137,7 @@@ argument identify one of multiple indic
         ((stringp tag) tag)
         ((integerp tag)
          (save-excursion
-           (goto-char (match-end 1))
+           (goto-char (match-end 0))
            (or (reftex-nth-arg tag (nth 6 entry)) "idx")))
         (t "idx")))))
  
@@@ -237,5 -237,5 +237,5 @@@ of ENTRY-LIST is a list of cons cells (
  ;;; reftex-auc.el ends here
  
  ;; Local Variables:
 -;; generated-autoload-file: "reftex.el"
 +;; generated-autoload-file: "reftex-loaddefs.el"
  ;; End:
diff --combined lisp/url/url-handlers.el
index 6d2a5c2ee4b16573e8058c365d5bb68661e7d97a,6df26a4c9cda87fc118b0a687f3524348ec847d2..9c27276785892170bd1165763714df45889c3afa
@@@ -269,8 -269,7 +269,8 @@@ A prefix arg makes KEEP-TIME non-nil.
        (error "Opening input file: No such file or directory, %s" url))
      (with-current-buffer buffer
        (setq handle (mm-dissect-buffer t)))
 -    (mm-save-part-to-file handle newname)
 +    (let ((mm-attachment-file-modes (default-file-modes)))
 +      (mm-save-part-to-file handle newname))
      (kill-buffer buffer)
      (mm-destroy-parts handle)))
  (put 'copy-file 'url-file-handlers 'url-copy-file)
@@@ -342,8 -341,15 +342,15 @@@ if it had been inserted from a file nam
        ;; XXX: This is HTTP/S specific and should be moved to url-http
        ;; instead.  See http://debbugs.gnu.org/17549.
        (when (bound-and-true-p url-http-response-status)
-         (unless (and (>= url-http-response-status 200)
-                      (< url-http-response-status 300))
+         ;; Don't signal an error if VISIT is non-nil, because
+         ;; 'insert-file-contents' doesn't.  This is required to
+         ;; support, e.g., 'browse-url-emacs', which is a fancy way of
+         ;; visiting the HTML source of a URL: in that case, we want to
+         ;; display a file buffer even if the URL does not exist and
+         ;; 'url-retrieve-synchronously' returns 404 or whatever.
+         (unless (or visit
+                     (and (>= url-http-response-status 200)
+                          (< url-http-response-status 300)))
            (let ((desc (nth 2 (assq url-http-response-status url-http-codes))))
              (kill-buffer buffer)
              ;; Signal file-error per http://debbugs.gnu.org/16733.
diff --combined lisp/url/url-http.el
index 258f8025662ae5342e26bdd84d051095f98652bc,e34f352e11d36a9381e9fbbcadc2bf4e47bd7258..36cc2f32bbcd3be3aba4c89076c6fc71921b897d
@@@ -26,7 -26,6 +26,7 @@@
  ;;; Code:
  
  (require 'cl-lib)
 +(require 'puny)
  (eval-when-compile
    (require 'subr-x))
  
@@@ -136,17 -135,6 +136,6 @@@ request."
      (507 insufficient-storage            "Insufficient storage"))
    "The HTTP return codes and their text.")
  
- (defcustom url-user-agent (format "User-Agent: %sURL/%s\r\n"
-                                 (if url-package-name
-                                     (concat url-package-name "/"
-                                             url-package-version " ")
-                                   "") url-version)
-   "User Agent used by the URL package."
-   :type '(choice (string :tag "A static User-Agent string")
-                  (function :tag "Call a function to get the User-Agent string"))
-   :version "25.1"
-   :group 'url)
  ;(eval-when-compile
  ;; These are all macros so that they are hidden from external sight
  ;; when the file is byte-compiled.
                       (url-scheme-get-property
                        (url-type url-http-target-url) 'default-port))
                   (format
 -                  "Host: %s:%d\r\n" host (url-port url-http-target-url))
 -               (format "Host: %s\r\n" host))
 +                  "Host: %s:%d\r\n" (puny-encode-domain host)
 +                  (url-port url-http-target-url))
 +               (format "Host: %s\r\n" (puny-encode-domain host)))
               ;; Who its from
               (if url-personal-mail-address
                   (concat
@@@ -433,7 -420,7 +422,7 @@@ Return the number of characters removed
        (progn
          (widen)
          (goto-char (point-max))
-         (insert "<hr>Sorry, but I do not know how to handle " type
+         (insert "<hr>Sorry, but I do not know how to handle " (or type auth url "")
                  " authentication.  If you'd like to write it,"
                  " please use M-x report-emacs-bug RET.<hr>")
            ;; We used to set a `status' var (declared "special") but I can't
@@@ -988,7 -975,7 +977,7 @@@ the callback to be triggered.
            (url-http-activate-callback)))))
  
  (defun url-http-chunked-encoding-after-change-function (st nd length)
-   "Function used when dealing with 'chunked' encoding.
+   "Function used when dealing with chunked encoding.
  Cannot give a sophisticated percentage, but we need a different
  function to look for the special 0-length chunk that signifies
  the end of the document."
                  (when (looking-at "\r?\n")
                    (url-http-debug "Removing terminator of last chunk")
                    (delete-region (match-beginning 0) (match-end 0)))
-                 (if (re-search-forward "^\r*$" nil t)
+                 (if (re-search-forward "^\r?\n" nil t)
                      (url-http-debug "Saw end of trailers..."))
                  (if (url-http-parse-headers)
                      (url-http-activate-callback))))))))))
    "Retrieve URL via HTTP asynchronously.
  URL must be a parsed URL.  See `url-generic-parse-url' for details.
  
 -When retrieval is completed, execute the function CALLBACK, passing it
 -an updated value of CBARGS as arguments.  The first element in CBARGS
 -should be a plist describing what has happened so far during the
 -request, as described in the docstring of `url-retrieve' (if in
 -doubt, specify nil).
 +When retrieval is completed, execute the function CALLBACK,
 +passing it an updated value of CBARGS as arguments.  The first
 +element in CBARGS should be a plist describing what has happened
 +so far during the request, as described in the docstring of
 +`url-retrieve' (if in doubt, specify nil).  The current buffer
 +then CALLBACK is executed is the retrieval buffer.
  
  Optional arg RETRY-BUFFER, if non-nil, specifies the buffer of a
  previous `url-http' call, which is being re-attempted.
  
  Optional arg GATEWAY-METHOD specifies the gateway to be used,
 -overriding the value of `url-gateway-method'."
 +overriding the value of `url-gateway-method'.
 +
 +The return value of this function is the retrieval buffer."
    (cl-check-type url vector "Need a pre-parsed URL.")
    (let* ((host (url-host (or url-using-proxy url)))
         (port (url-port (or url-using-proxy url)))
diff --combined lisp/url/url-util.el
index 54b02e98c97f0eae6ad664f5aa718f0037f6138c,7a186df474ee0da3c0e2a9eb5ba834049cc80727..65a24a5bbb73ae4749059010898f8509dddce0b6
@@@ -160,7 -160,7 +160,7 @@@ conversion.  Replaces these characters 
  
  ;;;###autoload
  (defun url-normalize-url (url)
-   "Return a 'normalized' version of URL.
+   "Return a \"normalized\" version of URL.
  Strips out default port numbers, etc."
    (let (type data retval)
      (setq data (url-generic-parse-url url)
@@@ -188,7 -188,7 +188,7 @@@ Will not do anything if `url-show-statu
  
  ;;;###autoload
  (defun url-get-normalized-date (&optional specified-time)
-  "Return a 'real' date string that most HTTP servers can understand."
+  "Return a date string that most HTTP servers can understand."
   (let ((system-time-locale "C"))
    (format-time-string "%a, %d %b %Y %T GMT" specified-time t)))
  
@@@ -468,7 -468,7 +468,7 @@@ should return it unchanged.
      (and host
         (not (string-match "\\`\\[.*\\]\\'" host))
         (setf (url-host obj)
 -             (url-hexify-string host url-host-allowed-chars)))
 +               (decode-coding-string (url-host obj) 'utf-8)))
  
      (if path
        (setq path (url-hexify-string path url-path-allowed-chars)))
diff --combined src/Makefile.in
index d7ad3954579a635b9dba0b969572198ef7165c27,8357655af3bd82fb9375ae98ae71b54ca7bd192d..f96ebb2aeeb370806f7ec2619db213c8f0a4941a
@@@ -160,13 -160,12 +160,13 @@@ SETTINGS_LIBS = @SETTINGS_LIBS
  ## gtkutil.o if USE_GTK, else empty.
  GTK_OBJ=@GTK_OBJ@
  
 -## gfilenotify.o if HAVE_GFILENOTIFY.
  ## inotify.o if HAVE_INOTIFY.
 +## kqueue.o if HAVE_KQUEUE.
 +## gfilenotify.o if HAVE_GFILENOTIFY.
  ## w32notify.o if HAVE_W32NOTIFY.
  NOTIFY_OBJ = @NOTIFY_OBJ@
 -GFILENOTIFY_CFLAGS = @GFILENOTIFY_CFLAGS@
 -GFILENOTIFY_LIBS = @GFILENOTIFY_LIBS@
 +NOTIFY_CFLAGS = @NOTIFY_CFLAGS@
 +NOTIFY_LIBS = @NOTIFY_LIBS@
  
  ## -ltermcap, or -lncurses, or -lcurses, or "".
  LIBS_TERMCAP=@LIBS_TERMCAP@
@@@ -231,6 -230,11 +231,11 @@@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS
  
  LIBZ = @LIBZ@
  
+ ## system-specific libs for dynamic modules, else empty
+ LIBMODULES = @LIBMODULES@
+ ## dynlib.o emacs-module.o if modules enabled, else empty
+ MODULES_OBJ = @MODULES_OBJ@
  XRANDR_LIBS = @XRANDR_LIBS@
  XRANDR_CFLAGS = @XRANDR_CFLAGS@
  
@@@ -356,7 -360,7 +361,7 @@@ ALL_CFLAGS=-Demacs $(MYCPPFLAGS) -I. -I
    $(XRANDR_CFLAGS) $(XINERAMA_CFLAGS) $(XFIXES_CFLAGS) \
    $(SETTINGS_CFLAGS) $(FREETYPE_CFLAGS) $(FONTCONFIG_CFLAGS) \
    $(LIBOTF_CFLAGS) $(M17N_FLT_CFLAGS) $(DEPFLAGS) \
 -  $(LIBGNUTLS_CFLAGS) $(GFILENOTIFY_CFLAGS) $(CAIRO_CFLAGS) \
 +  $(LIBGNUTLS_CFLAGS) $(NOTIFY_CFLAGS) $(CAIRO_CFLAGS) \
    $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAGS)
  ALL_OBJC_CFLAGS=$(ALL_CFLAGS) $(GNU_OBJC_CFLAGS)
  
@@@ -378,7 -382,7 +383,7 @@@ base_obj = dispnew.o frame.o scroll.o x
        minibuf.o fileio.o dired.o \
        cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o \
        alloc.o data.o doc.o editfns.o callint.o \
-       eval.o floatfns.o fns.o font.o print.o lread.o \
+       eval.o floatfns.o fns.o font.o print.o lread.o $(MODULES_OBJ) \
        syntax.o $(UNEXEC_OBJ) bytecode.o \
        process.o gnutls.o callproc.o \
        region-cache.o sound.o atimer.o \
@@@ -469,7 -473,7 +474,7 @@@ LIBES = $(LIBS) $(W32_LIBS) $(LIBS_GNUS
     $(LIBS_TERMCAP) $(GETLOADAVG_LIBS) $(SETTINGS_LIBS) $(LIBSELINUX_LIBS) \
     $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \
     $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) \
-    $(NOTIFY_LIBS) $(LIB_MATH) $(LIBZ)
 -   $(GFILENOTIFY_LIBS) $(LIB_MATH) $(LIBZ) $(LIBMODULES)
++   $(NOTIFY_LIBS) $(LIB_MATH) $(LIBZ) $(LIBMODULES)
  
  $(leimdir)/leim-list.el: bootstrap-emacs$(EXEEXT)
        $(MAKE) -C ../leim leim-list.el EMACS="$(bootstrap_exe)"
@@@ -482,6 -486,11 +487,11 @@@ $(srcdir)/macuvs.h $(lispsource)/intern
    bootstrap-emacs$(EXEEXT) FORCE
        $(MAKE) -C ../admin/unidata all EMACS="../$(bootstrap_exe)"
  
+ ## We require charprop.el to exist before ucs-normalize.el is
+ ## byte-compiled, because ucs-normalize.el needs to load 2 uni-*.el files.
+ $(lispsource)/international/ucs-normalize.elc: | \
+   $(lispsource)/international/charprop.el
  lispintdir = ${lispsource}/international
  ${lispintdir}/cp51932.el ${lispintdir}/eucjp-ms.el: FORCE
        ${MAKE} -C ../admin/charsets $(notdir $@)
diff --combined src/emacs.c
index 2e9f950851ad0bd237097d66912e75f0bba671a1,48ff20a11ce4e127167366d2444fd685110c22f1..926aa989e6a429222bed09873388e7c58e7be878
@@@ -761,6 -761,9 +761,9 @@@ main (int argc, char **argv
       names between UTF-8 and the system's ANSI codepage.  */
    maybe_load_unicows_dll ();
  #endif
+   /* This has to be done before module_init is called below, so that
+      the latter could use the thread ID of the main thread.  */
+   w32_init_main_thread ();
  #endif
  
  #ifdef RUN_TIME_REMAP
  
    atexit (close_output_streams);
  
+ #ifdef HAVE_MODULES
+   module_init ();
+ #endif
    sort_args (argc, argv);
    argc = 0;
    while (argv[argc]) argc++;
@@@ -1350,10 -1357,6 +1357,10 @@@ Using an Emacs configured with --with-x
      tzset ();
  #endif /* MSDOS */
  
 +#ifdef HAVE_KQUEUE
 +  globals_of_kqueue ();
 +#endif
 +
  #ifdef HAVE_GFILENOTIFY
    globals_of_gfilenotify ();
  #endif
        syms_of_terminal ();
        syms_of_term ();
        syms_of_undo ();
+ #ifdef HAVE_MODULES
+       syms_of_module ();
+ #endif
  #ifdef HAVE_SOUND
        syms_of_sound ();
  #endif
  
        syms_of_gnutls ();
  
 -#ifdef HAVE_GFILENOTIFY
 -      syms_of_gfilenotify ();
 -#endif /* HAVE_GFILENOTIFY */
 -
  #ifdef HAVE_INOTIFY
        syms_of_inotify ();
  #endif /* HAVE_INOTIFY */
  
 +#ifdef HAVE_KQUEUE
 +      syms_of_kqueue ();
 +#endif /* HAVE_KQUEUE */
 +
 +#ifdef HAVE_GFILENOTIFY
 +      syms_of_gfilenotify ();
 +#endif /* HAVE_GFILENOTIFY */
 +
  #ifdef HAVE_DBUS
        syms_of_dbusbind ();
  #endif /* HAVE_DBUS */
diff --combined src/keyboard.c
index ab7cb34a030f99de07d89795e1547bb66bed43c7,9ebd86b53560dfb367e4ea21657478e07a461909..6fa38aa1328e2c601fcc2881f894c3c996146ceb
@@@ -195,14 -195,15 +195,15 @@@ Lisp_Object unread_switch_frame
  /* Last size recorded for a current buffer which is not a minibuffer.  */
  static ptrdiff_t last_non_minibuf_size;
  
- /* Total number of times read_char has returned, modulo UINTMAX_MAX + 1.  */
  uintmax_t num_input_events;
+ ptrdiff_t point_before_last_command_or_undo;
+ struct buffer *buffer_before_last_command_or_undo;
  
  /* Value of num_nonmacro_input_events as of last auto save.  */
  
  static EMACS_INT last_auto_save;
  
- /* The value of point when the last command was started.  */
+ /* The value of point when the last command was started. */
  static ptrdiff_t last_point_position;
  
  /* The frame in which the last input event occurred, or Qmacro if the
@@@ -1449,6 -1450,11 +1450,11 @@@ command_loop_1 (void
                 result of changes from the last command. */
              call0 (Qundo_auto__add_boundary);
  
+             /* Record point and buffer, so we can put point into the undo
+                information if necessary. */
+             point_before_last_command_or_undo = PT;
+             buffer_before_last_command_or_undo = current_buffer;
              call1 (Qcommand_execute, Vthis_command);
  
  #ifdef HAVE_WINDOW_SYSTEM
@@@ -3313,14 -3319,12 +3319,12 @@@ readable_events (int flags
  #endif
                   ))
          {
-           union buffered_input_event *event;
-           event = ((kbd_fetch_ptr < kbd_buffer + KBD_BUFFER_SIZE)
-                    ? kbd_fetch_ptr
-                    : kbd_buffer);
+           union buffered_input_event *event = kbd_fetch_ptr;
  
          do
            {
+               if (event == kbd_buffer + KBD_BUFFER_SIZE)
+                 event = kbd_buffer;
              if (!(
  #ifdef USE_TOOLKIT_SCROLL_BARS
                    (flags & READABLE_EVENTS_FILTER_EVENTS) &&
                       && event->kind == BUFFER_SWITCH_EVENT))
                return 1;
              event++;
-               if (event == kbd_buffer + KBD_BUFFER_SIZE)
-                 event = kbd_buffer;
            }
          while (event != kbd_store_ptr);
          }
@@@ -5945,12 -5947,12 +5947,12 @@@ make_lispy_event (struct input_event *e
        }
  #endif /* HAVE_DBUS */
  
 -#if defined HAVE_GFILENOTIFY || defined HAVE_INOTIFY
 +#if defined HAVE_INOTIFY || defined HAVE_KQUEUE || defined HAVE_GFILENOTIFY
      case FILE_NOTIFY_EVENT:
        {
          return Fcons (Qfile_notify, event->arg);
        }
 -#endif /* defined HAVE_GFILENOTIFY || defined HAVE_INOTIFY */
 +#endif /* HAVE_INOTIFY || HAVE_KQUEUE || HAVE_GFILENOTIFY */
  
      case CONFIG_CHANGED_EVENT:
        return list3 (Qconfig_changed_event,
@@@ -11372,7 -11374,7 +11374,7 @@@ If an unhandled error happens in runnin
  the function in which the error occurred is unconditionally removed, since
  otherwise the error might happen repeatedly and make Emacs nonfunctional.
  
- See also `pre-command-hook'.  */);
+ See also `post-command-hook'.  */);
    Vpre_command_hook = Qnil;
  
    DEFVAR_LISP ("post-command-hook", Vpost_command_hook,
diff --combined src/lisp.h
index 426b6c949e923e0126a0cc10f54523f02351bdca,995760a50198a07339916b711a9e1b31e2134aea..ff88605fc9f425de55d76cc668d06342f8d8b6bb
@@@ -357,7 -357,7 +357,7 @@@ error !
  # define lisp_h_XINT(a) (XLI (a) >> INTTYPEBITS)
  # define lisp_h_XSYMBOL(a) \
      (eassert (SYMBOLP (a)), \
-      (struct Lisp_Symbol *) ((uintptr_t) XLI (a) - Lisp_Symbol \
+      (struct Lisp_Symbol *) ((intptr_t) XLI (a) - Lisp_Symbol \
                             + (char *) lispsym))
  # define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a) & ~VALMASK))
  # define lisp_h_XUNTAG(a, type) ((void *) (intptr_t) (XLI (a) - (type)))
  #if (defined __NO_INLINE__ \
       && ! defined __OPTIMIZE__ && ! defined __OPTIMIZE_SIZE__ \
       && ! (defined INLINING && ! INLINING))
+ # define DEFINE_KEY_OPS_AS_MACROS true
+ #else
+ # define DEFINE_KEY_OPS_AS_MACROS false
+ #endif
+ #if DEFINE_KEY_OPS_AS_MACROS
  # define XLI(o) lisp_h_XLI (o)
  # define XIL(i) lisp_h_XIL (i)
  # define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_CONS (x, y)
@@@ -468,6 -474,9 +474,9 @@@ enum Lisp_Misc_Typ
      Lisp_Misc_Overlay,
      Lisp_Misc_Save_Value,
      Lisp_Misc_Finalizer,
+ #ifdef HAVE_MODULES
+     Lisp_Misc_User_Ptr,
+ #endif
      /* Currently floats are not a misc type,
         but let's define this in case we want to change that.  */
      Lisp_Misc_Float,
@@@ -581,6 -590,12 +590,12 @@@ INLINE bool PROCESSP (Lisp_Object)
  INLINE bool PSEUDOVECTORP (Lisp_Object, int);
  INLINE bool SAVE_VALUEP (Lisp_Object);
  INLINE bool FINALIZERP (Lisp_Object);
+ #ifdef HAVE_MODULES
+ INLINE bool USER_PTRP (Lisp_Object);
+ INLINE struct Lisp_User_Ptr *(XUSER_PTR) (Lisp_Object);
+ #endif
  INLINE void set_sub_char_table_contents (Lisp_Object, ptrdiff_t,
                                              Lisp_Object);
  INLINE bool STRINGP (Lisp_Object);
@@@ -704,9 -719,15 +719,15 @@@ struct Lisp_Symbo
  #define DEFUN_ARGS_8  (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
                         Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
  
- /* Yield an integer that contains TAG along with PTR.  */
+ /* Yield a signed integer that contains TAG along with PTR.
+    Sign-extend pointers when USE_LSB_TAG (this simplifies emacs-module.c),
+    and zero-extend otherwise (that’s a bit faster here).
+    Sign extension matters only when EMACS_INT is wider than a pointer.  */
  #define TAG_PTR(tag, ptr) \
-   ((USE_LSB_TAG ? (tag) : (EMACS_UINT) (tag) << VALBITS) + (uintptr_t) (ptr))
+   (USE_LSB_TAG \
+    ? (intptr_t) (ptr) + (tag) \
+    : (EMACS_INT) (((EMACS_UINT) (tag) << VALBITS) + (uintptr_t) (ptr)))
  
  /* Yield an integer that contains a symbol tag along with OFFSET.
     OFFSET should be the offset in bytes from 'lispsym' to the symbol.  */
@@@ -838,7 -859,9 +859,9 @@@ INLINE EMACS_IN
  INLINE EMACS_INT
  (XFASTINT) (Lisp_Object a)
  {
-   return lisp_h_XFASTINT (a);
+   EMACS_INT n = lisp_h_XFASTINT (a);
+   eassume (0 <= n);
+   return n;
  }
  
  INLINE struct Lisp_Symbol *
@@@ -906,19 -929,10 +929,10 @@@ XFASTINT (Lisp_Object a
  {
    EMACS_INT int0 = Lisp_Int0;
    EMACS_INT n = USE_LSB_TAG ? XINT (a) : XLI (a) - (int0 << VALBITS);
-   eassert (0 <= n);
+   eassume (0 <= n);
    return n;
  }
  
- /* Extract A's value as a symbol.  */
- INLINE struct Lisp_Symbol *
- XSYMBOL (Lisp_Object a)
- {
-   uintptr_t i = (uintptr_t) XUNTAG (a, Lisp_Symbol);
-   void *p = (char *) lispsym + i;
-   return p;
- }
  /* Extract A's type.  */
  INLINE enum Lisp_Type
  XTYPE (Lisp_Object a)
    return USE_LSB_TAG ? i & ~VALMASK : i >> VALBITS;
  }
  
+ /* Extract A's value as a symbol.  */
+ INLINE struct Lisp_Symbol *
+ XSYMBOL (Lisp_Object a)
+ {
+   eassert (SYMBOLP (a));
+   intptr_t i = (intptr_t) XUNTAG (a, Lisp_Symbol);
+   void *p = (char *) lispsym + i;
+   return p;
+ }
  /* Extract A's pointer value, assuming A's type is TYPE.  */
  INLINE void *
  XUNTAG (Lisp_Object a, int type)
@@@ -1527,7 -1551,16 +1551,16 @@@ aref_addr (Lisp_Object array, ptrdiff_
  INLINE ptrdiff_t
  ASIZE (Lisp_Object array)
  {
-   return XVECTOR (array)->header.size;
+   ptrdiff_t size = XVECTOR (array)->header.size;
+   eassume (0 <= size);
+   return size;
+ }
+ INLINE ptrdiff_t
+ gc_asize (Lisp_Object array)
+ {
+   /* Like ASIZE, but also can be used in the garbage collector.  */
+   return XVECTOR (array)->header.size & ~ARRAY_MARK_FLAG;
  }
  
  INLINE void
@@@ -1542,7 -1575,7 +1575,7 @@@ gc_aset (Lisp_Object array, ptrdiff_t i
  {
    /* Like ASET, but also can be used in the garbage collector:
       sweep_weak_table calls set_hash_key etc. while the table is marked.  */
-   eassert (0 <= idx && idx < (ASIZE (array) & ~ARRAY_MARK_FLAG));
+   eassert (0 <= idx && idx < gc_asize (array));
    XVECTOR (array)->contents[idx] = val;
  }
  
@@@ -1924,21 -1957,22 +1957,22 @@@ struct Lisp_Hash_Tabl
  };
  
  
+ INLINE bool
+ HASH_TABLE_P (Lisp_Object a)
+ {
+   return PSEUDOVECTORP (a, PVEC_HASH_TABLE);
+ }
  INLINE struct Lisp_Hash_Table *
  XHASH_TABLE (Lisp_Object a)
  {
+   eassert (HASH_TABLE_P (a));
    return XUNTAG (a, Lisp_Vectorlike);
  }
  
  #define XSET_HASH_TABLE(VAR, PTR) \
       (XSETPSEUDOVECTOR (VAR, PTR, PVEC_HASH_TABLE))
  
- INLINE bool
- HASH_TABLE_P (Lisp_Object a)
- {
-   return PSEUDOVECTORP (a, PVEC_HASH_TABLE);
- }
  /* Value is the key part of entry IDX in hash table H.  */
  INLINE Lisp_Object
  HASH_KEY (struct Lisp_Hash_Table *h, ptrdiff_t idx)
@@@ -2230,6 -2264,18 +2264,18 @@@ XSAVE_OBJECT (Lisp_Object obj, int n
    return XSAVE_VALUE (obj)->data[n].object;
  }
  
+ #ifdef HAVE_MODULES
+ struct Lisp_User_Ptr
+ {
+   ENUM_BF (Lisp_Misc_Type) type : 16;      /* = Lisp_Misc_User_Ptr */
+   bool_bf gcmarkbit : 1;
+   unsigned spacer : 15;
+   void (*finalizer) (void *);
+   void *p;
+ };
+ #endif
  /* A finalizer sentinel.  */
  struct Lisp_Finalizer
    {
@@@ -2265,6 -2311,9 +2311,9 @@@ union Lisp_Mis
      struct Lisp_Overlay u_overlay;
      struct Lisp_Save_Value u_save_value;
      struct Lisp_Finalizer u_finalizer;
+ #ifdef HAVE_MODULES
+     struct Lisp_User_Ptr u_user_ptr;
+ #endif
    };
  
  INLINE union Lisp_Misc *
@@@ -2314,6 -2363,15 +2363,15 @@@ XFINALIZER (Lisp_Object a
    return & XMISC (a)->u_finalizer;
  }
  
+ #ifdef HAVE_MODULES
+ INLINE struct Lisp_User_Ptr *
+ XUSER_PTR (Lisp_Object a)
+ {
+   eassert (USER_PTRP (a));
+   return & XMISC (a)->u_user_ptr;
+ }
+ #endif
  \f
  /* Forwarding pointer to an int variable.
     This is allowed only in the value cell of a symbol,
@@@ -2598,6 -2656,14 +2656,14 @@@ FINALIZERP (Lisp_Object x
    return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Finalizer;
  }
  
+ #ifdef HAVE_MODULES
+ INLINE bool
+ USER_PTRP (Lisp_Object x)
+ {
+   return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_User_Ptr;
+ }
+ #endif
  INLINE bool
  AUTOLOADP (Lisp_Object x)
  {
@@@ -3104,7 -3170,9 +3170,9 @@@ SPECPDL_INDEX (void
     A call like (throw TAG VAL) searches for a catchtag whose `tag_or_ch'
     member is TAG, and then unbinds to it.  The `val' member is used to
     hold VAL while the stack is unwound; `val' is returned as the value
-    of the catch form.
+    of the catch form.  If there is a handler of type CATCHER_ALL, it will
+    be treated as a handler for all invocations of `throw'; in this case
+    `val' will be set to (TAG . VAL).
  
     All the other members are concerned with restoring the interpreter
     state.
     Members are volatile if their values need to survive _longjmp when
     a 'struct handler' is a local variable.  */
  
- enum handlertype { CATCHER, CONDITION_CASE };
+ enum handlertype { CATCHER, CONDITION_CASE, CATCHER_ALL };
  
  struct handler
  {
    struct byte_stack *byte_stack;
  };
  
- /* Fill in the components of c, and put it on the list.  */
- #define PUSH_HANDLER(c, tag_ch_val, handlertype)      \
-   if (handlerlist->nextfree)                          \
-     (c) = handlerlist->nextfree;                      \
-   else                                                        \
-     {                                                 \
-       (c) = xmalloc (sizeof (struct handler));                \
-       (c)->nextfree = NULL;                           \
-       handlerlist->nextfree = (c);                    \
-     }                                                 \
-   (c)->type = (handlertype);                          \
-   (c)->tag_or_ch = (tag_ch_val);                      \
-   (c)->val = Qnil;                                    \
-   (c)->next = handlerlist;                            \
-   (c)->lisp_eval_depth = lisp_eval_depth;             \
-   (c)->pdlcount = SPECPDL_INDEX ();                   \
-   (c)->poll_suppress_count = poll_suppress_count;     \
-   (c)->interrupt_input_blocked = interrupt_input_blocked;\
-   (c)->byte_stack = byte_stack_list;                  \
-   handlerlist = (c);
  extern Lisp_Object memory_signal_data;
  
  /* An address near the bottom of the stack.
@@@ -3407,7 -3453,8 +3453,8 @@@ Lisp_Object make_hash_table (struct has
  ptrdiff_t hash_lookup (struct Lisp_Hash_Table *, Lisp_Object, EMACS_UINT *);
  ptrdiff_t hash_put (struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object,
                    EMACS_UINT);
- extern struct hash_table_test hashtest_eql, hashtest_equal;
+ void hash_remove_from_table (struct Lisp_Hash_Table *, Lisp_Object);
+ extern struct hash_table_test hashtest_eq, hashtest_eql, hashtest_equal;
  extern void validate_subarray (Lisp_Object, Lisp_Object, Lisp_Object,
                               ptrdiff_t, ptrdiff_t *, ptrdiff_t *);
  extern Lisp_Object substring_both (Lisp_Object, ptrdiff_t, ptrdiff_t,
@@@ -3803,7 -3850,6 +3850,6 @@@ intern_c_string (const char *str
  }
  
  /* Defined in eval.c.  */
- extern EMACS_INT lisp_eval_depth;
  extern Lisp_Object Vautoload_queue;
  extern Lisp_Object Vrun_hooks;
  extern Lisp_Object Vsignaling_function;
@@@ -3847,6 -3893,8 +3893,8 @@@ extern Lisp_Object internal_condition_c
  extern Lisp_Object internal_condition_case_n
      (Lisp_Object (*) (ptrdiff_t, Lisp_Object *), ptrdiff_t, Lisp_Object *,
       Lisp_Object, Lisp_Object (*) (Lisp_Object, ptrdiff_t, Lisp_Object *));
+ extern struct handler *push_handler (Lisp_Object, enum handlertype);
+ extern struct handler *push_handler_nosignal (Lisp_Object, enum handlertype);
  extern void specbind (Lisp_Object, Lisp_Object);
  extern void record_unwind_protect (void (*) (Lisp_Object), Lisp_Object);
  extern void record_unwind_protect_ptr (void (*) (void *), void *);
@@@ -3877,6 -3925,14 +3925,14 @@@ Lisp_Object backtrace_top_function (voi
  extern bool let_shadows_buffer_binding_p (struct Lisp_Symbol *symbol);
  extern bool let_shadows_global_binding_p (Lisp_Object symbol);
  
+ #ifdef HAVE_MODULES
+ /* Defined in alloc.c.  */
+ extern Lisp_Object make_user_ptr (void (*finalizer) (void*), void *p);
+ /* Defined in emacs-module.c.  */
+ extern void module_init (void);
+ extern void syms_of_module (void);
+ #endif
  
  /* Defined in editfns.c.  */
  extern void insert1 (Lisp_Object);
@@@ -4257,23 -4313,17 +4313,23 @@@ extern void init_font (void)
  extern void syms_of_fontset (void);
  #endif
  
 +/* Defined in inotify.c */
 +#ifdef HAVE_INOTIFY
 +extern void syms_of_inotify (void);
 +#endif
 +
 +/* Defined in kqueue.c */
 +#ifdef HAVE_KQUEUE
 +extern void globals_of_kqueue (void);
 +extern void syms_of_kqueue (void);
 +#endif
 +
  /* Defined in gfilenotify.c */
  #ifdef HAVE_GFILENOTIFY
  extern void globals_of_gfilenotify (void);
  extern void syms_of_gfilenotify (void);
  #endif
  
 -/* Defined in inotify.c */
 -#ifdef HAVE_INOTIFY
 -extern void syms_of_inotify (void);
 -#endif
 -
  #ifdef HAVE_W32NOTIFY
  /* Defined on w32notify.c.  */
  extern void syms_of_w32notify (void);
index 17aea5d0f823ce0350f49edfca7be3fafab4fc00,6163e0b2c397dd26d354e1f6bf72ed18bd032fe2..37917ec53536911ed07a36f42c727d8c6527f6bc
@@@ -1,4 -1,4 +1,4 @@@
 -;;; abbrev-tests.el --- Test suite for abbrevs.
 +;;; abbrev-tests.el --- Test suite for abbrevs  -*- lexical-binding: t; -*-
  
  ;; Copyright (C) 2015 Free Software Foundation, Inc.
  
  
  ;;; Commentary:
  
+ ;; `kill-all-abbrevs-test' will remove all user *and* system abbrevs
+ ;; if called noninteractively with the init file loaded.
  ;;; Code:
  
  (require 'ert)
  (require 'abbrev)
+ (require 'seq)
+ ;; set up test abbrev table and abbrev entry
+ (defun setup-test-abbrev-table ()
+   (defvar ert-test-abbrevs nil)
+   (define-abbrev-table 'ert-test-abbrevs '(("a-e-t" "abbrev-ert-test")))
+   (abbrev-table-put ert-test-abbrevs :ert-test "ert-test-value")
+   ert-test-abbrevs)
  
 +(ert-deftest abbrev-table-p-test ()
 +  (should-not (abbrev-table-p 42))
 +  (should-not (abbrev-table-p "aoeu"))
 +  (should-not (abbrev-table-p '()))
 +  (should-not (abbrev-table-p []))
 +  ;; Missing :abbrev-table-modiff counter:
 +  (should-not (abbrev-table-p (obarray-make)))
 +  (let* ((table (obarray-make)))
 +    (abbrev-table-put table :abbrev-table-modiff 42)
 +    (should (abbrev-table-p table))))
 +
 +(ert-deftest abbrev-make-abbrev-table-test ()
 +  ;; Table without properties:
 +  (let ((table (make-abbrev-table)))
 +    (should (abbrev-table-p table))
 +    (should (= (length table) obarray-default-size)))
 +  ;; Table with one property 'foo with value 'bar:
 +  (let ((table (make-abbrev-table '(foo bar))))
 +    (should (abbrev-table-p table))
 +    (should (= (length table) obarray-default-size))
 +    (should (eq (abbrev-table-get table 'foo) 'bar))))
 +
 +(ert-deftest abbrev-table-get-put-test ()
 +  (let ((table (make-abbrev-table)))
 +    (should-not (abbrev-table-get table 'foo))
 +    (should (= (abbrev-table-put table 'foo 42) 42))
 +    (should (= (abbrev-table-get table 'foo) 42))
 +    (should (eq (abbrev-table-put table 'foo 'bar) 'bar))
 +    (should (eq (abbrev-table-get table 'foo) 'bar))))
 +
  (ert-deftest copy-abbrev-table-test ()
    (defvar foo-abbrev-table nil)         ; Avoid compiler warning
    (define-abbrev-table 'foo-abbrev-table
      (should (abbrev-table-p new-foo-abbrev-table)))
    (should-not (string-equal (buffer-name) "*Backtrace*")))
  
+ (ert-deftest kill-all-abbrevs-test ()
+   "Test undefining all defined abbrevs"
+   (unless noninteractive
+     (ert-skip "Cannot test kill-all-abbrevs in interactive mode"))
+   (let ((num-tables 0))
+     ;; ensure at least one abbrev exists
+     (should (abbrev-table-p (setup-test-abbrev-table)))
+     (setf num-tables (length abbrev-table-name-list))
+     (kill-all-abbrevs)
+     ;; no tables should have been removed/added
+     (should (= num-tables (length abbrev-table-name-list)))
+     ;; number of empty tables should be the same as number of tables
+     (should (= num-tables (length (seq-filter
+                                    (lambda (table)
+                                        (abbrev-table-empty-p (symbol-value table)))
+                                    abbrev-table-name-list))))))
+ (ert-deftest abbrev-table-name-test ()
+   "Test returning name of abbrev-table"
+   (let ((ert-test-abbrevs (setup-test-abbrev-table))
+         (no-such-table nil))
+     (should (equal 'ert-test-abbrevs (abbrev-table-name ert-test-abbrevs)))
+     (should (equal nil (abbrev-table-name no-such-table)))))
+ (ert-deftest clear-abbrev-table-test ()
+   "Test clearing single abbrev table"
+   (let ((ert-test-abbrevs (setup-test-abbrev-table)))
+     (should (equal "a-e-t" (symbol-name
+                             (abbrev-symbol "a-e-t" ert-test-abbrevs))))
+     (should (equal "abbrev-ert-test" (symbol-value
+                                       (abbrev-symbol "a-e-t" ert-test-abbrevs))))
+     (clear-abbrev-table ert-test-abbrevs)
+     (should (equal "nil" (symbol-name
+                           (abbrev-symbol "a-e-t" ert-test-abbrevs))))
+     (should (equal nil (symbol-value
+                         (abbrev-symbol "a-e-t" ert-test-abbrevs))))
+     (should (equal t (abbrev-table-empty-p ert-test-abbrevs)))))
  (provide 'abbrev-tests)
 -
  ;;; abbrev-tests.el ends here
index 6f186973ee75f7e34c34dd07d01efcec3389f073,e03ed8cb68777cb2a24c3c364d134605df1581ec..043f80de49e85d44b78e5790d78e3d6be4e88bad
@@@ -39,7 -39,9 +39,9 @@@
            (null (string-match
                   (format-message "Reverting buffer `%s'." (buffer-name buffer))
                   (buffer-string)))
-         (read-event nil nil 0.1)))))
+       (if (with-current-buffer buffer auto-revert-use-notify)
+           (read-event nil nil 0.1)
+         (sleep-for 0.1))))))
  
  (ert-deftest auto-revert-test00-auto-revert-mode ()
    "Check autorevert for a file."
            ;; Strange, that `copy-directory' does not work as expected.
            ;; The following shell command is not portable on all
            ;; platforms, unfortunately.
 -          (shell-command (format "%s -f %s/* %s" cp tmpdir2 tmpdir1))
 +          (shell-command (format "%s %s/* %s" cp tmpdir2 tmpdir1))
  
            ;; Check, that the buffers have been reverted.
            (dolist (buf (list buf1 buf2))
index 7e05d49883ea669359e3f9bdee79ab9d4993b928,829cbf2d765329293960bd87f3523ec868f6360f..829cbf2d765329293960bd87f3523ec868f6360f
@@@ -2231,7 -2231,63 +2231,63 @@@ END:VCALENDAR
   Class: PUBLIC
   UID: 040000008200E00074C5B7101A82E0080000000020FFAED0CFEFCC01000000000000000010000000575268034ECDB649A15349B1BF240F15
  "     nil)
+   ;; 2015-12-05, mixed line endings and empty lines, see Bug#22092.
+   (icalendar-tests--test-import
+    "BEGIN:VCALENDAR\r
+ PRODID:-//www.norwegian.no//iCalendar MIMEDIR//EN\r
+ VERSION:2.0\r
+ METHOD:REQUEST\r
+ BEGIN:VEVENT\r
+ UID:RFCALITEM1\r
+ SEQUENCE:1512040950\r
+ DTSTAMP:20141204T095043Z\r
+ ORGANIZER:noreply@norwegian.no\r
+ DTSTART:20141208T173000Z\r
+ DTEND:20141208T215500Z\r
+ LOCATION:Stavanger-Sola\r
+ DESCRIPTION:Fly med Norwegian, reservasjon. Fra Stavanger til Troms&#248; 8. des 2014 18:30, DY545Fly med Norwegian, reservasjon . Fra Stavanger til Troms&#248; 8. des 2014 21:00, DY390\r
+ X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\"><html><head><META NAME=\"Generator\" CONTENT=\"MS Exchange Server version 08.00.0681.000\"><title></title></head><body><b><font face=\"Calibri\" size=\"3\">Reisereferanse</p></body></html>
+ SUMMARY:Norwegian til Tromsoe-Langnes -\r
+ CATEGORIES:Appointment\r
+ PRIORITY:5\r
+ CLASS:PUBLIC\r
+ TRANSP:OPAQUE\r
+ END:VEVENT\r
+ END:VCALENDAR
+ "
+ "&2014/12/8 18:30-22:55 Norwegian til Tromsoe-Langnes -
+  Desc: Fly med Norwegian, reservasjon. Fra Stavanger til Troms&#248; 8. des 2014 18:30, DY545Fly med Norwegian, reservasjon . Fra Stavanger til Troms&#248; 8. des 2014 21:00, DY390
+  Location: Stavanger-Sola
+  Organizer: noreply@norwegian.no
+  Class: PUBLIC
+  UID: RFCALITEM1
+ "
+ "&8/12/2014 18:30-22:55 Norwegian til Tromsoe-Langnes -
+  Desc: Fly med Norwegian, reservasjon. Fra Stavanger til Troms&#248; 8. des 2014 18:30, DY545Fly med Norwegian, reservasjon . Fra Stavanger til Troms&#248; 8. des 2014 21:00, DY390
+  Location: Stavanger-Sola
+  Organizer: noreply@norwegian.no
+  Class: PUBLIC
+  UID: RFCALITEM1
+ "
+ "&12/8/2014 18:30-22:55 Norwegian til Tromsoe-Langnes -
+  Desc: Fly med Norwegian, reservasjon. Fra Stavanger til Troms&#248; 8. des 2014 18:30, DY545Fly med Norwegian, reservasjon . Fra Stavanger til Troms&#248; 8. des 2014 21:00, DY390
+  Location: Stavanger-Sola
+  Organizer: noreply@norwegian.no
+  Class: PUBLIC
+  UID: RFCALITEM1
+ "
  )
+   )
  
  (provide 'icalendar-tests)
  ;;; icalendar-tests.el ends here
index 2b1a15c9e764d4e1a34f95c0bbf238c64dffd981,c0568625649c6e760c1871a5b3a2d53850344f3e..c0568625649c6e760c1871a5b3a2d53850344f3e
  
  \f
  (ert-deftest character-fold--test-consistency ()
-   (dotimes (n 100)
+   (dotimes (n 30)
      (let ((w (character-fold--random-word n)))
        ;; A folded string should always match the original string.
        (character-fold--test-search-with-contents w w))))
  
  (ert-deftest character-fold--test-lax-whitespace ()
-   (dotimes (n 100)
+   (dotimes (n 40)
      (let ((w1 (character-fold--random-word n))
            (w2 (character-fold--random-word n))
            (search-spaces-regexp "\\s-+"))
         (concat w1 " " w2))
        (character-fold--test-search-with-contents
         (concat w1 "\s\n\s\t\f\t\n\r\t" w2)
-        (concat w1 (make-string 90 ?\s) w2)))))
+        (concat w1 (make-string 10 ?\s) w2)))))
+ (defun character-fold--test-match-exactly (string &rest strings-to-match)
+   (let ((re (concat "\\`" (character-fold-to-regexp string) "\\'")))
+     (dolist (it strings-to-match)
+       (should (string-match re it)))
+     ;; Case folding
+     (let ((case-fold-search t))
+       (dolist (it strings-to-match)
+         (should (string-match (upcase re) (downcase it)))
+         (should (string-match (downcase re) (upcase it)))))))
+ (ert-deftest character-fold--test-some-defaults ()
+   (dolist (it '(("ffl" . "ïŹ„") ("ffi" . "ïŹƒ")
+                 ("fi" . "ïŹ") ("ff" . "ïŹ€")
+                 ("ä" . "Ă€")))
+     (character-fold--test-search-with-contents (cdr it) (car it))
+     (let ((multi (char-table-extra-slot character-fold-table 0))
+           (character-fold-table (make-char-table 'character-fold-table)))
+       (set-char-table-extra-slot character-fold-table 0 multi)
+       (character-fold--test-match-exactly (car it) (cdr it)))))
+ (ert-deftest character-fold--test-fold-to-regexp ()
+   (let ((character-fold-table (make-char-table 'character-fold-table))
+         (multi  (make-char-table 'character-fold-table)))
+     (set-char-table-extra-slot character-fold-table 0 multi)
+     (aset character-fold-table ?a "xx")
+     (aset character-fold-table ?1 "44")
+     (aset character-fold-table ?\s "-!-")
+     (character-fold--test-match-exactly "a1a1" "xx44xx44")
+     (character-fold--test-match-exactly "a1  a 1" "xx44-!--!-xx-!-44")
+     (aset multi ?a '(("1" . "99")
+                      ("2" . "88")
+                      ("12" . "77")))
+     (character-fold--test-match-exactly "a" "xx")
+     (character-fold--test-match-exactly "a1" "xx44" "99")
+     (character-fold--test-match-exactly "a12" "77" "xx442" "992")
+     (character-fold--test-match-exactly "a2" "88")
+     (aset multi ?1 '(("2" . "yy")))
+     (character-fold--test-match-exactly "a1" "xx44" "99")
+     (character-fold--test-match-exactly "a12" "77" "xx442" "992")
+     ;; Support for this case is disabled.  See function definition or:
+     ;; https://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02562.html
+     ;; (character-fold--test-match-exactly "a12" "xxyy")
+     ))
+ (ert-deftest character-fold--speed-test ()
+   (dolist (string (append '("tty-set-up-initial-frame-face"
+                             "tty-set-up-initial-frame-face-frame-faceframe-faceframe-faceframe-face")
+                           (mapcar #'character-fold--random-word '(10 50 100
+                                                                      50 100))))
+     (message "Testing %s" string)
+     ;; Make sure we didn't just fallback on the trivial search.
+     (should-not (string= (regexp-quote string)
+                          (character-fold-to-regexp string)))
+     (with-temp-buffer
+       (save-excursion (insert string))
+       (let ((time (time-to-seconds (current-time))))
+         ;; Our initial implementation of case-folding in char-folding
+         ;; created a lot of redundant paths in the regexp. Because of
+         ;; that, if a really long string "almost" matches, the regexp
+         ;; engine took a long time to realize that it doesn't match.
+         (should-not (character-fold-search-forward (concat string "c") nil 'noerror))
+         ;; Ensure it took less than a second.
+         (should (< (- (time-to-seconds (current-time))
+                       time)
+                    1))))))
  
  (provide 'character-fold-tests)
  ;;; character-fold-tests.el ends here
index 6b3069c2a54a0e3d801d06da81967828511ee2fe,8401d1879aec4eddc2d232e8b2557a10b40e9e8f..7206084f3246a588ea25ab82fc88c74f80b32dec
@@@ -97,7 -97,7 +97,7 @@@
                                 (multi-file (0 1))))
    "`package-desc' used for testing dependencies.")
  
 -(defvar package-test-data-dir (expand-file-name "data/package" package-test-file-dir)
 +(defvar package-test-data-dir (expand-file-name "package-resources" package-test-file-dir)
    "Base directory of package test files.")
  
  (defvar package-test-fake-contents-file
@@@ -190,18 -190,18 +190,18 @@@ Must called from within a `tar-mode' bu
  
  (ert-deftest package-test-desc-from-buffer ()
    "Parse an elisp buffer to get a `package-desc' object."
 -  (with-package-test (:basedir "data/package" :file "simple-single-1.3.el")
 +  (with-package-test (:basedir "package-resources" :file "simple-single-1.3.el")
      (should (equal (package-buffer-info) simple-single-desc)))
 -  (with-package-test (:basedir "data/package" :file "simple-depend-1.0.el")
 +  (with-package-test (:basedir "package-resources" :file "simple-depend-1.0.el")
      (should (equal (package-buffer-info) simple-depend-desc)))
 -  (with-package-test (:basedir "data/package"
 +  (with-package-test (:basedir "package-resources"
                                 :file "multi-file-0.2.3.tar")
      (tar-mode)
      (should (equal (package-tar-file-info) multi-file-desc))))
  
  (ert-deftest package-test-install-single ()
    "Install a single file without using an archive."
 -  (with-package-test (:basedir "data/package" :file "simple-single-1.3.el")
 +  (with-package-test (:basedir "package-resources" :file "simple-single-1.3.el")
      (should (package-install-from-buffer))
      (package-initialize)
      (should (package-installed-p 'simple-single))
      (should (package-installed-p 'simple-single))
      (should (package-installed-p 'simple-depend))))
  
+ (ert-deftest package-test-macro-compilation ()
+   "Install a package which includes a dependency."
+   (with-package-test (:basedir "data/package")
+     (package-install-file (expand-file-name "macro-problem-package-1.0/"))
+     (require 'macro-problem)
+     ;; `macro-problem-func' uses a macro from `macro-aux'.
+     (should (equal (macro-problem-func) '(progn a b)))
+     (package-install-file (expand-file-name "macro-problem-package-2.0/"))
+     ;; After upgrading, `macro-problem-func' depends on a new version
+     ;; of the macro from `macro-aux'.
+     (should (equal (macro-problem-func) '(1 b)))
+     ;; `macro-problem-10-and-90' depends on an entirely new macro from `macro-aux'.
+     (should (equal (macro-problem-10-and-90) '(10 90)))))
  (ert-deftest package-test-install-two-dependencies ()
    "Install a package which includes a dependency."
    (with-package-test ()
  (ert-deftest package-test-install-prioritized ()
    "Install a lower version from a higher-prioritized archive."
    (with-package-test ()
 -    (let* ((newer-version (expand-file-name "data/package/newer-versions"
 +    (let* ((newer-version (expand-file-name "package-resources/newer-versions"
                                              package-test-file-dir))
             (package-archives `(("older" . ,package-test-data-dir)
                                 ("newer" . ,newer-version)))
  
  (ert-deftest package-test-install-multifile ()
    "Check properties of the installed multi-file package."
 -  (with-package-test (:basedir "data/package" :install '(multi-file))
 +  (with-package-test (:basedir "package-resources" :install '(multi-file))
      (let ((autoload-file
             (expand-file-name "multi-file-autoloads.el"
                               (expand-file-name
        (package-menu-execute)
        (should (package-installed-p 'simple-single))
        (let ((package-test-data-dir
 -             (expand-file-name "data/package/newer-versions" package-test-file-dir)))
 +             (expand-file-name "package-resources/newer-versions" package-test-file-dir)))
          (setq package-archives `(("gnu" . ,package-test-data-dir)))
          (package-menu-refresh)
  
                     (delete-directory homedir t)))))
    (let* ((keyring (expand-file-name "key.pub" package-test-data-dir))
         (package-test-data-dir
 -         (expand-file-name "data/package/signed" package-test-file-dir)))
 +         (expand-file-name "package-resources/signed" package-test-file-dir)))
      (with-package-test ()
        (package-initialize)
        (package-import-keyring keyring)
  
  (ert-deftest package-x-test-upload-buffer ()
    "Test creating an \"archive-contents\" file"
 -  (with-package-test (:basedir "data/package"
 +  (with-package-test (:basedir "package-resources"
                                 :file "simple-single-1.3.el"
                                 :upload-base t)
      (package-upload-buffer)
  
  (ert-deftest package-x-test-upload-new-version ()
    "Test uploading a new version of a package"
 -  (with-package-test (:basedir "data/package"
 +  (with-package-test (:basedir "package-resources"
                                 :file "simple-single-1.3.el"
                                 :upload-base t)
      (package-upload-buffer)
                 simple-depend-desc-2)))
      (should
       (equal (package--sort-by-dependence delete-list)
 +
              (list simple-depend-desc-2 simple-depend-desc-1 new-pkg-desc
                    multi-file-desc simple-depend-desc simple-single-desc)))
      (should
diff --combined test/lisp/faces-tests.el
index 007bc805120ceaa91ded34a418c3cc3644544bde,ff9dfc53fbee6b3385809a2b991dfcfb65d1897d..ff9dfc53fbee6b3385809a2b991dfcfb65d1897d
      (goto-char (point-min))
      (should (equal (background-color-at-point) "black"))
      (should (equal (foreground-color-at-point) "black")))
+   (with-temp-buffer
+     (insert (propertize "STRING" 'face '(:foreground "black" :background "black")))
+     (goto-char (point-min))
+     (should (equal (background-color-at-point) "black"))
+     (should (equal (foreground-color-at-point) "black")))
    (with-temp-buffer
      (emacs-lisp-mode)
      (setq-local font-lock-comment-face 'faces--test1)
index 0b49b9013f7491716a3da6cf7731eb2e6b18754f,dd70d546d5ccf20d570a94a7165d61d6952f5bfb..dd70d546d5ccf20d570a94a7165d61d6952f5bfb
                                      (:search-function . auth-source-secrets-search)
                                      (:create-function . auth-source-secrets-create)))))
  
+ (defun auth-source--test-netrc-parse-entry (entry host user port)
+   "Parse a netrc entry from buffer."
+   (auth-source-forget-all-cached)
+   (setq port (auth-source-ensure-strings port))
+   (with-temp-buffer
+     (insert entry)
+     (goto-char (point-min))
+     (let* ((check (lambda(alist)
+                   (and alist
+                        (auth-source-search-collection
+                         host
+                         (or
+                          (auth-source--aget alist "machine")
+                          (auth-source--aget alist "host")
+                          t))
+                        (auth-source-search-collection
+                         user
+                         (or
+                          (auth-source--aget alist "login")
+                          (auth-source--aget alist "account")
+                          (auth-source--aget alist "user")
+                          t))
+                        (auth-source-search-collection
+                         port
+                         (or
+                          (auth-source--aget alist "port")
+                          (auth-source--aget alist "protocol")
+                          t)))))
+          (entries (auth-source-netrc-parse-entries check 1)))
+       entries)))
+ (ert-deftest auth-source-test-netrc-parse-entry ()
+   (should (equal (auth-source--test-netrc-parse-entry
+                   "machine mymachine1 login user1 password pass1\n" t t t)
+                  '((("password" . "pass1")
+                     ("login" . "user1")
+                     ("machine" . "mymachine1")))))
+   (should (equal (auth-source--test-netrc-parse-entry
+                   "machine mymachine1 login user1 password pass1 port 100\n"
+                   t t t)
+                  '((("port" . "100")
+                     ("password" . "pass1")
+                     ("login" . "user1")
+                     ("machine" . "mymachine1"))))))
  (provide 'auth-source-tests)
  ;;; auth-source-tests.el ends here
index 49a72b0e67a682d1410ebd2e8899935a12319beb,790b5c15125850a160218dcf1810f6b6cd9f7657..790b5c15125850a160218dcf1810f6b6cd9f7657
@@@ -40,9 -40,9 +40,9 @@@
                    "and here's a closer ")
            (let ((last-command-event ?\)))
              (ert-simulate-command '(self-insert-command 1)))
-           ;; Syntax propertization doesn't kick in batch mode
-           (when noninteractive
-             (syntax-propertize (point-max)))
+           ;; Auto syntax propertization doesn't kick in until
+           ;; parse-sexp-lookup-properties is set.
+           (setq-local parse-sexp-lookup-properties t)
            (backward-sexp)
            (should (string= "here's an opener "
                             (buffer-substring-no-properties
index b8772eb84d64cbf3b297c3550cb008e8227f079b,79e90f7819cc513e20915748a898a3b3209eb881..79e90f7819cc513e20915748a898a3b3209eb881
      (should (search-forward
               "(defgh\\\\\\[universal-argument\\]b\\`c\\'d\\\\e\\\"f X)"))))
  
+ (ert-deftest help-fns-test-describe-symbol ()
+   "Test the `describe-symbol' function."
+   ;; 'describe-symbol' would originally signal an error for
+   ;; 'font-lock-comment-face'.
+   (describe-symbol 'font-lock-comment-face)
+   (with-current-buffer "*Help*"
+     (should (> (point-max) 1))
+     (goto-char (point-min))
+     (should (looking-at "^font-lock-comment-face is "))))
  ;;; help-fns.el ends here
diff --combined test/lisp/json-tests.el
index 8f0cd6f085705c655eed7bea5897d864d05744e5,bb043dc4e054f5c61e643882d8b69623ec1e9e09..bb043dc4e054f5c61e643882d8b69623ec1e9e09
  (require 'ert)
  (require 'json)
  
+ (defmacro json-tests--with-temp-buffer (content &rest body)
+   "Create a temporary buffer with CONTENT and evaluate BODY there.
+ Point is moved to beginning of the buffer."
+   (declare (indent 1))
+   `(with-temp-buffer
+      (insert ,content)
+      (goto-char (point-min))
+      ,@body))
+ ;;; Utilities
+ (ert-deftest test-json-join ()
+   (should (equal (json-join '() ", ")  ""))
+   (should (equal (json-join '("a" "b" "c") ", ")  "a, b, c")))
+ (ert-deftest test-json-alist-p ()
+   (should (json-alist-p '()))
+   (should (json-alist-p '((a 1) (b 2) (c 3))))
+   (should (json-alist-p '((:a 1) (:b 2) (:c 3))))
+   (should (json-alist-p '(("a" 1) ("b" 2) ("c" 3))))
+   (should-not (json-alist-p '(:a :b :c)))
+   (should-not (json-alist-p '(:a 1 :b 2 :c 3)))
+   (should-not (json-alist-p '((:a 1) (:b 2) 3))))
+ (ert-deftest test-json-plist-p ()
+   (should (json-plist-p '()))
+   (should (json-plist-p '(:a 1 :b 2 :c 3)))
+   (should-not (json-plist-p '(a 1 b 2 c 3)))
+   (should-not (json-plist-p '("a" 1 "b" 2 "c" 3)))
+   (should-not (json-plist-p '(:a :b :c)))
+   (should-not (json-plist-p '((:a 1) (:b 2) (:c 3)))))
  (ert-deftest test-json-plist-reverse ()
    (should (equal (json--plist-reverse '()) '()))
    (should (equal (json--plist-reverse '(:a 1)) '(:a 1)))
    (should (equal (json--plist-to-alist '(:a 1 :b 2 :c 3))
                   '((:a . 1) (:b . 2) (:c . 3)))))
  
- (ert-deftest test-json-encode-plist ()
-   (let ((plist '(:a 1 :b 2)))
-     (should (equal (json-encode plist) "{\"a\":1,\"b\":2}"))))
- (ert-deftest json-encode-simple-alist ()
-   (should (equal (json-encode '((a . 1)
-                                 (b . 2)))
-                  "{\"a\":1,\"b\":2}")))
- (ert-deftest test-json-encode-hash-table ()
-   (let ((hash-table (make-hash-table))
-         (json-encoding-object-sort-predicate 'string<))
-     (puthash :a 1 hash-table)
-     (puthash :b 2 hash-table)
-     (puthash :c 3 hash-table)
-     (should (equal (json-encode hash-table)
-                    "{\"a\":1,\"b\":2,\"c\":3}"))))
- (ert-deftest test-json-encode-alist-with-sort-predicate ()
-   (let ((alist '((:c . 3) (:a . 1) (:b . 2)))
-         (json-encoding-object-sort-predicate 'string<))
-     (should (equal (json-encode alist) "{\"a\":1,\"b\":2,\"c\":3}"))))
+ (ert-deftest test-json-advance ()
+   (json-tests--with-temp-buffer "{ \"a\": 1 }"
+     (json-advance 0)
+     (should (= (point) (point-min)))
+     (json-advance 3)
+     (should (= (point) (+ (point-min) 3)))))
  
- (ert-deftest test-json-encode-plist-with-sort-predicate ()
-   (let ((plist '(:c 3 :a 1 :b 2))
-         (json-encoding-object-sort-predicate 'string<))
-     (should (equal (json-encode plist) "{\"a\":1,\"b\":2,\"c\":3}"))))
+ (ert-deftest test-json-peek ()
+   (json-tests--with-temp-buffer ""
+     (should (eq (json-peek) :json-eof)))
+   (json-tests--with-temp-buffer "{ \"a\": 1 }"
+     (should (equal (json-peek) ?{))))
  
- (ert-deftest json-read-simple-alist ()
-   (let ((json-object-type 'alist))
-     (should (equal (json-read-from-string "{\"a\": 1, \"b\": 2}")
-                    '((a . 1)
-                      (b . 2))))))
+ (ert-deftest test-json-pop ()
+   (json-tests--with-temp-buffer ""
+     (should-error (json-pop) :type 'json-end-of-file))
+   (json-tests--with-temp-buffer "{ \"a\": 1 }"
+     (should (equal (json-pop) ?{))
+     (should (= (point) (+ (point-min) 1)))))
  
- (ert-deftest json-encode-string-with-special-chars ()
-   (should (equal (json-encode-string "a\n\fb")
-                  "\"a\\n\\fb\""))
-   (should (equal (json-encode-string "\nasdфыĐČ\u001f\u007ffgh\t")
-                  "\"\\nasdфыĐČ\\u001f\u007ffgh\\t\"")))
+ (ert-deftest test-json-skip-whitespace ()
+   (json-tests--with-temp-buffer "\t\r\n\f\b { \"a\": 1 }"
+     (json-skip-whitespace)
+     (should (equal (char-after (point)) ?{))))
  
- (ert-deftest json-read-string-with-special-chars ()
-   (should (equal (json-read-from-string "\"\\nasd\\u0444\\u044b\\u0432fgh\\t\"")
-                  "\nasdфыĐČfgh\t")))
+ ;;; Paths
  
  (ert-deftest test-json-path-to-position-with-objects ()
    (let* ((json-string "{\"foo\": {\"bar\": {\"baz\": \"value\"}}}")
           (matched-path (json-path-to-position 5 json-string)))
      (should (null matched-path))))
  
+ ;;; Keywords
+ (ert-deftest test-json-read-keyword ()
+   (json-tests--with-temp-buffer "true"
+     (should (json-read-keyword "true")))
+   (json-tests--with-temp-buffer "true"
+     (should-error
+      (json-read-keyword "false") :type 'json-unknown-keyword))
+   (json-tests--with-temp-buffer "foo"
+     (should-error
+      (json-read-keyword "foo") :type 'json-unknown-keyword)))
+ (ert-deftest test-json-encode-keyword ()
+   (should (equal (json-encode-keyword t) "true"))
+   (should (equal (json-encode-keyword json-false) "false"))
+   (should (equal (json-encode-keyword json-null) "null")))
+ ;;; Numbers
+ (ert-deftest test-json-read-number ()
+   (json-tests--with-temp-buffer "3"
+     (should (= (json-read-number) 3)))
+   (json-tests--with-temp-buffer "-5"
+     (should (= (json-read-number) -5)))
+   (json-tests--with-temp-buffer "123.456"
+     (should (= (json-read-number) 123.456)))
+   (json-tests--with-temp-buffer "1e3"
+     (should (= (json-read-number) 1e3)))
+   (json-tests--with-temp-buffer "2e+3"
+     (should (= (json-read-number) 2e3)))
+   (json-tests--with-temp-buffer "3E3"
+     (should (= (json-read-number) 3e3)))
+   (json-tests--with-temp-buffer "1e-7"
+     (should (= (json-read-number) 1e-7)))
+   (json-tests--with-temp-buffer "abc"
+     (should-error (json-read-number) :type 'json-number-format)))
+ (ert-deftest test-json-encode-number ()
+   (should (equal (json-encode-number 3) "3"))
+   (should (equal (json-encode-number -5) "-5"))
+   (should (equal (json-encode-number 123.456) "123.456")))
+ ;; Strings
+ (ert-deftest test-json-read-escaped-char ()
+   (json-tests--with-temp-buffer "\\\""
+     (should (equal (json-read-escaped-char) ?\"))))
+ (ert-deftest test-json-read-string ()
+   (json-tests--with-temp-buffer "\"foo \\\"bar\\\"\""
+     (should (equal (json-read-string) "foo \"bar\"")))
+   (json-tests--with-temp-buffer "\"abcαÎČÎł\""
+     (should (equal (json-read-string) "abcαÎČÎł")))
+   (json-tests--with-temp-buffer "\"\\nasd\\u0444\\u044b\\u0432fgh\\t\""
+     (should (equal (json-read-string) "\nasdфыĐČfgh\t")))
+   (json-tests--with-temp-buffer "foo"
+     (should-error (json-read-string) :type 'json-string-format)))
+ (ert-deftest test-json-encode-string ()
+   (should (equal (json-encode-string "foo") "\"foo\""))
+   (should (equal (json-encode-string "a\n\fb") "\"a\\n\\fb\""))
+   (should (equal (json-encode-string "\nasdфыĐČ\u001f\u007ffgh\t")
+                  "\"\\nasdфыĐČ\\u001f\u007ffgh\\t\"")))
+ (ert-deftest test-json-encode-key ()
+   (should (equal (json-encode-key "foo") "\"foo\""))
+   (should (equal (json-encode-key 'foo) "\"foo\""))
+   (should (equal (json-encode-key :foo) "\"foo\""))
+   (should-error (json-encode-key 5) :type 'json-key-format)
+   (should-error (json-encode-key ["foo"]) :type 'json-key-format)
+   (should-error (json-encode-key '("foo")) :type 'json-key-format))
+ ;;; Objects
+ (ert-deftest test-json-new-object ()
+   (let ((json-object-type 'alist))
+     (should (equal (json-new-object) '())))
+   (let ((json-object-type 'plist))
+     (should (equal (json-new-object) '())))
+   (let* ((json-object-type 'hash-table)
+          (json-object (json-new-object)))
+     (should (hash-table-p json-object))
+     (should (= (hash-table-count json-object) 0))))
+ (ert-deftest test-json-add-to-object ()
+   (let* ((json-object-type 'alist)
+          (json-key-type nil)
+          (obj (json-new-object)))
+     (setq obj (json-add-to-object obj "a" 1))
+     (setq obj (json-add-to-object obj "b" 2))
+     (should (equal (assq 'a obj) '(a . 1)))
+     (should (equal (assq 'b obj) '(b . 2))))
+   (let* ((json-object-type 'plist)
+          (json-key-type nil)
+          (obj (json-new-object)))
+     (setq obj (json-add-to-object obj "a" 1))
+     (setq obj (json-add-to-object obj "b" 2))
+     (should (= (plist-get obj :a) 1))
+     (should (= (plist-get obj :b) 2)))
+   (let* ((json-object-type 'hash-table)
+          (json-key-type nil)
+          (obj (json-new-object)))
+     (setq obj (json-add-to-object obj "a" 1))
+     (setq obj (json-add-to-object obj "b" 2))
+     (should (= (gethash "a" obj) 1))
+     (should (= (gethash "b" obj) 2))))
+ (ert-deftest test-json-read-object ()
+   (json-tests--with-temp-buffer "{ \"a\": 1, \"b\": 2 }"
+     (let ((json-object-type 'alist))
+       (should (equal (json-read-object) '((a . 1) (b . 2))))))
+   (json-tests--with-temp-buffer "{ \"a\": 1, \"b\": 2 }"
+     (let ((json-object-type 'plist))
+       (should (equal (json-read-object) '(:a 1 :b 2)))))
+   (json-tests--with-temp-buffer "{ \"a\": 1, \"b\": 2 }"
+     (let* ((json-object-type 'hash-table)
+            (hash-table (json-read-object)))
+       (should (= (gethash "a" hash-table) 1))
+       (should (= (gethash "b" hash-table) 2))))
+   (json-tests--with-temp-buffer "{ \"a\": 1 \"b\": 2 }"
+     (should-error (json-read-object) :type 'json-object-format)))
+ (ert-deftest test-json-encode-hash-table ()
+   (let ((hash-table (make-hash-table))
+         (json-encoding-object-sort-predicate 'string<)
+         (json-encoding-pretty-print nil))
+     (puthash :a 1 hash-table)
+     (puthash :b 2 hash-table)
+     (puthash :c 3 hash-table)
+     (should (equal (json-encode hash-table)
+                    "{\"a\":1,\"b\":2,\"c\":3}"))))
+ (ert-deftest json-encode-simple-alist ()
+   (let ((json-encoding-pretty-print nil))
+     (should (equal (json-encode '((a . 1) (b . 2)))
+                    "{\"a\":1,\"b\":2}"))))
+ (ert-deftest test-json-encode-plist ()
+   (let ((plist '(:a 1 :b 2))
+         (json-encoding-pretty-print nil))
+     (should (equal (json-encode plist) "{\"a\":1,\"b\":2}"))))
+ (ert-deftest test-json-encode-plist-with-sort-predicate ()
+   (let ((plist '(:c 3 :a 1 :b 2))
+         (json-encoding-object-sort-predicate 'string<)
+         (json-encoding-pretty-print nil))
+     (should (equal (json-encode plist) "{\"a\":1,\"b\":2,\"c\":3}"))))
+ (ert-deftest test-json-encode-alist-with-sort-predicate ()
+   (let ((alist '((:c . 3) (:a . 1) (:b . 2)))
+         (json-encoding-object-sort-predicate 'string<)
+         (json-encoding-pretty-print nil))
+     (should (equal (json-encode alist) "{\"a\":1,\"b\":2,\"c\":3}"))))
+ (ert-deftest test-json-encode-list ()
+   (let ((json-encoding-pretty-print nil))
+     (should (equal (json-encode-list '(:a 1 :b 2))
+                    "{\"a\":1,\"b\":2}"))
+     (should (equal (json-encode-list '((:a . 1) (:b . 2)))
+                    "{\"a\":1,\"b\":2}"))
+     (should (equal (json-encode-list '(1 2 3 4)) "[1,2,3,4]"))))
+ ;;; Arrays
+ (ert-deftest test-json-read-array ()
+   (let ((json-array-type 'vector))
+     (json-tests--with-temp-buffer "[1, 2, \"a\", \"b\"]"
+       (should (equal (json-read-array) [1 2 "a" "b"]))))
+   (let ((json-array-type 'list))
+     (json-tests--with-temp-buffer "[1, 2, \"a\", \"b\"]"
+       (should (equal (json-read-array) '(1 2 "a" "b")))))
+   (json-tests--with-temp-buffer "[1 2]"
+     (should-error (json-read-array) :type 'json-error)))
+ (ert-deftest test-json-encode-array ()
+   (let ((json-encoding-pretty-print nil))
+     (should (equal (json-encode-array [1 2 "a" "b"])
+                    "[1,2,\"a\",\"b\"]"))))
+ ;;; Reader
+ (ert-deftest test-json-read ()
+   (json-tests--with-temp-buffer "{ \"a\": 1 }"
+     ;; We don't care exactly what the return value is (that is tested
+     ;; in `test-json-read-object'), but it should parse without error.
+     (should (json-read)))
+   (json-tests--with-temp-buffer ""
+     (should-error (json-read) :type 'json-end-of-file))
+   (json-tests--with-temp-buffer "xxx"
+     (should-error (json-read) :type 'json-readtable-error)))
+ (ert-deftest test-json-read-from-string ()
+   (let ((json-string "{ \"a\": 1 }"))
+     (json-tests--with-temp-buffer json-string
+       (should (equal (json-read-from-string json-string)
+                      (json-read))))))
+ ;;; JSON encoder
+ (ert-deftest test-json-encode ()
+   (should (equal (json-encode "foo") "\"foo\""))
+   (with-temp-buffer
+     (should-error (json-encode (current-buffer)) :type 'json-error)))
  (provide 'json-tests)
  ;;; json-tests.el ends here
index c5cab7d5991d9e0a4c458e2ac58d8a1bbf6300dc,23171d6e98343afe10b00eead72b0e0cc150be6e..23171d6e98343afe10b00eead72b0e0cc150be6e
@@@ -1608,6 -1608,10 +1608,10 @@@ This tests also `make-symbolic-link', `
         (vc-handled-backends
          (with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
            (cond
+            ((tramp-find-executable v vc-git-program (tramp-get-remote-path v))
+             '(Git))
+            ((tramp-find-executable v vc-hg-program (tramp-get-remote-path v))
+             '(Hg))
             ((tramp-find-executable v vc-bzr-program (tramp-get-remote-path v))
              (setq tramp-remote-process-environment
                    (cons (format "BZR_HOME=%s"
               (tramp-dissect-file-name tramp-test-temporary-file-directory)
               nil 'keep-password)
              '(Bzr))
-            ((tramp-find-executable v vc-git-program (tramp-get-remote-path v))
-             '(Git))
-            ((tramp-find-executable v vc-hg-program (tramp-get-remote-path v))
-             '(Hg))
             (t nil)))))
      (skip-unless vc-handled-backends)
      (message "%s" vc-handled-backends)
  
          (let ((default-directory tmp-name1))
            ;; Create empty repository, and register the file.
-           (vc-create-repo (car vc-handled-backends))
+           ;; Sometimes, creation of repository fails (bzr!); we skip
+           ;; the test then.
+           (condition-case nil
+               (vc-create-repo (car vc-handled-backends))
+             (error (skip-unless nil)))
            ;; The structure of VC-FILESET is not documented.  Let's
            ;; hope it won't change.
            (condition-case nil
@@@ -1772,6 -1776,14 +1776,14 @@@ Several special characters do not work 
        (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
@@@ -1987,7 -1999,10 +1999,10 @@@ Use the `perl' command.
    (let ((tramp-connection-properties
         (append
          `((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
-            "stat" nil))
+            "stat" nil)
+           ;; See `tramp-sh-handle-file-truename'.
+           (,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
+            "readlink" nil))
          tramp-connection-properties)))
      (tramp--test-special-characters)))
  
@@@ -2005,21 -2020,25 +2020,25 @@@ Use the `ls' command.
          `((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
             "perl" nil)
            (,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
-            "stat" nil))
+            "stat" nil)
+           ;; See `tramp-sh-handle-file-truename'.
+           (,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
+            "readlink" nil))
          tramp-connection-properties)))
      (tramp--test-special-characters)))
  
  (defun tramp--test-utf8 ()
    "Perform the test in `tramp-test32-utf8*'."
+   (tramp--instrument-test-case 10
    (let ((coding-system-for-read 'utf-8)
        (coding-system-for-write 'utf-8)
        (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))
         "ۣ۔ۭۚ ŰšÙˆŰłŰčك Ű§Ù„ŰąÙ† ŰȘنŰČيل Ù†ŰłŰźŰ© ÙƒŰ§Ù…Ù„Ű© Ù…Ù† Ù…ÙˆŰłÙˆŰčŰ© ÙˆÙŠÙƒÙŠŰšÙŠŰŻÙŠŰ§ Ű§Ù„ŰčŰ±ŰšÙŠŰ© Ù„ŰȘŰ”ÙŰ­Ù‡Ű§ ŰšÙ„ۧ Ű§ŰȘŰ”Ű§Ù„ ŰšŰ§Ù„Ű„نŰȘŰ±Ù†ŰȘ")
       "银æČłçł»æŒ«æžžæŒ‡ć—çł»ćˆ—"
-      "АĐČŃ‚ĐŸŃŃ‚ĐŸĐżĐŸĐŒ ĐżĐŸ ĐłĐ°Đ»Đ°ÌĐșтоĐșĐ”")))
+      "АĐČŃ‚ĐŸŃŃ‚ĐŸĐżĐŸĐŒ ĐżĐŸ ĐłĐ°Đ»Đ°ÌĐșтоĐșĐ”"))))
  
  (ert-deftest tramp-test32-utf8 ()
    "Check UTF8 encoding in file names and file contents."
@@@ -2059,7 -2078,10 +2078,10 @@@ Use the `perl' command.
    (let ((tramp-connection-properties
         (append
          `((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
-            "stat" nil))
+            "stat" nil)
+           ;; See `tramp-sh-handle-file-truename'.
+           (,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
+            "readlink" nil))
          tramp-connection-properties)))
      (tramp--test-utf8)))
  
@@@ -2077,7 -2099,10 +2099,10 @@@ Use the `ls' command.
          `((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
             "perl" nil)
            (,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
-            "stat" nil))
+            "stat" nil)
+           ;; See `tramp-sh-handle-file-truename'.
+           (,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
+            "readlink" nil))
          tramp-connection-properties)))
      (tramp--test-utf8)))
  
index 97f86a969aa4be96a4f4f685750b4ead6b4cee66,b44e549e8845605d68561dc59745606f1a815e41..2d0452f69d787508c5bbfd9b73130544b3286bfb
@@@ -244,7 -244,7 +244,7 @@@ to (xref-elisp-test-descr-to-target xre
      (xref-make "(cl-defstruct (xref-elisp-location (:constructor xref-make-elisp-location)))"
                 (xref-make-elisp-location
                  'xref-elisp-location 'define-type
 -                (expand-file-name "../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
 +                (expand-file-name "../../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
      ;; It's not worth adding another special case to `xref-elisp-test-descr-to-target' for this
      "(cl-defstruct (xref-elisp-location")
     ))
     (xref-make "(defalias Buffer-menu-sort)"
              (xref-make-elisp-location
               'Buffer-menu-sort 'defalias
 -             (expand-file-name "../../lisp/buff-menu.elc" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/buff-menu.elc" emacs-test-dir)))
     (xref-make "(defun tabulated-list-sort)"
              (xref-make-elisp-location
               'tabulated-list-sort nil
 -             (expand-file-name "../../lisp/emacs-lisp/tabulated-list.el" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/emacs-lisp/tabulated-list.el" emacs-test-dir)))
     ))
  
  ;; FIXME: defconst
     (xref-make "(cl-defgeneric xref-location-marker)"
              (xref-make-elisp-location
               'xref-location-marker 'cl-defgeneric
 -             (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
     (xref-make "(cl-defmethod xref-location-marker ((l xref-elisp-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-elisp-location) 'cl-defmethod
 -             (expand-file-name "../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
     (xref-make "(cl-defmethod xref-location-marker ((l xref-file-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-file-location) 'cl-defmethod
 -             (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
     (xref-make "(cl-defmethod xref-location-marker ((l xref-buffer-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-buffer-location) 'cl-defmethod
 -             (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
     (xref-make "(cl-defmethod xref-location-marker ((l xref-bogus-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-bogus-location) 'cl-defmethod
 -             (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
     (xref-make "(cl-defmethod xref-location-marker ((l xref-etags-location)))"
                (xref-make-elisp-location
                 '(xref-location-marker xref-etags-location) 'cl-defmethod
 -               (expand-file-name "../../lisp/progmodes/etags.el" emacs-test-dir)))
 +               (expand-file-name "../../../lisp/progmodes/etags.el" emacs-test-dir)))
     ))
  
  (xref-elisp-deftest find-defs-defgeneric-eval
     (xref-make "(defun xref-find-definitions)"
              (xref-make-elisp-location
               'xref-find-definitions nil
 -             (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))))
 +             (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))))
  
  (xref-elisp-deftest find-defs-defun-eval
    (elisp--xref-find-definitions (eval '(defun stephe-leake-defun ())))
  ;; FIXME: deftype
  
  (xref-elisp-deftest find-defs-defun-c-defvar-c
-   (elisp--xref-find-definitions 'system-name)
+   (xref-backend-definitions 'elisp "system-name")
    (list
     (xref-make "(defvar system-name)"
              (xref-make-elisp-location 'system-name 'defvar "src/editfns.c"))
    )
  
  (xref-elisp-deftest find-defs-defun-el-defvar-c
-   (elisp--xref-find-definitions 'abbrev-mode)
+   (xref-backend-definitions 'elisp "abbrev-mode")
    ;; It's a minor mode, but the variable is defined in buffer.c
    (list
     (xref-make "(defvar abbrev-mode)"
      (xref-make "(defun abbrev-mode)"
                 (xref-make-elisp-location
                  'abbrev-mode nil
 -                (expand-file-name "../../lisp/abbrev.el" emacs-test-dir)))
 +                (expand-file-name "../../../lisp/abbrev.el" emacs-test-dir)))
      "(define-minor-mode abbrev-mode"))
    )
  
      (xref-make "(defun compilation-minor-mode)"
                 (xref-make-elisp-location
                  'compilation-minor-mode nil
 -                (expand-file-name "../../lisp/progmodes/compile.el" emacs-test-dir)))
 +                (expand-file-name "../../../lisp/progmodes/compile.el" emacs-test-dir)))
      "(define-minor-mode compilation-minor-mode")
     ))
  
     (xref-make "(defvar xref--marker-ring)"
              (xref-make-elisp-location
               'xref--marker-ring 'defvar
 -             (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
      ))
  
  (xref-elisp-deftest find-defs-defvar-c
     (xref-make "(defvar font-lock-keyword-face)"
              (xref-make-elisp-location
               'font-lock-keyword-face 'defvar
 -             (expand-file-name "../../lisp/font-lock.el" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/font-lock.el" emacs-test-dir)))
     (xref-make "(defface font-lock-keyword-face)"
              (xref-make-elisp-location
               'font-lock-keyword-face 'defface
 -             (expand-file-name "../../lisp/font-lock.el" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/font-lock.el" emacs-test-dir)))
     ))
  
  (xref-elisp-deftest find-defs-face-eval
      (xref-make "(feature xref)"
              (xref-make-elisp-location
               'xref 'feature
 -             (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
 +             (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
      ";;; Code:")
     ))
  
index 07b5eaa93e4dd8726c8406742ecc4c32084f57ce,771241ad7efd952887c7b08b5a38a46a55d49f5c..771241ad7efd952887c7b08b5a38a46a55d49f5c
                       (open-line 1)))
                   '("- - " . "\n(a b c d)"))))
  
+ ;; For a while, from 24 Oct - 21 Nov 2015, `open-line' in the Emacs
+ ;; development tree became sensitive to `electric-indent-mode', which
+ ;; it had not been before.  This sensitivity was reverted for the
+ ;; Emacs 25 release, so it could be discussed further (see thread
+ ;; "Questioning the new behavior of `open-line'." on the Emacs Devel
+ ;; mailing list, and bug #21884).
  (ert-deftest open-line-indent ()
    (should (equal (simple-test--dummy-buffer
                     (electric-indent-local-mode 1)
                   '("(a b" . "\n c d)")))
    (should (equal (simple-test--dummy-buffer
                     (electric-indent-local-mode 1)
-                    (open-line 1 'interactive))
-                  '("(a b" . "\n   c d)")))
+                    (open-line 1))
+                  '("(a b" . "\n c d)")))
    (should (equal (simple-test--dummy-buffer
                     (electric-indent-local-mode 1)
                     (let ((current-prefix-arg nil))
                       (call-interactively #'open-line)
                       (call-interactively #'open-line)))
-                  '("(a b" . "\n\n   c d)")))
+                  '("(a b" . "\n\n c d)")))
    (should (equal (simple-test--dummy-buffer
                     (electric-indent-local-mode 1)
-                    (open-line 5 'interactive))
-                  '("(a b" . "\n\n\n\n\n   c d)")))
+                    (open-line 5))
+                  '("(a b" . "\n\n\n\n\n c d)")))
    (should (equal (simple-test--dummy-buffer
                     (electric-indent-local-mode 1)
                     (let ((current-prefix-arg 5))
                       (call-interactively #'open-line)))
-                  '("(a b" . "\n\n\n\n\n   c d)")))
+                  '("(a b" . "\n\n\n\n\n c d)")))
    (should (equal (simple-test--dummy-buffer
                     (forward-char 1)
                     (electric-indent-local-mode 1)
-                    (open-line 1 'interactive))
-                  '("(a b" . "\n   c d)"))))
+                    (open-line 1))
+                  '("(a b " . "\nc d)"))))
  
+ ;; From 24 Oct - 21 Nov 2015, `open-line' took a second argument
+ ;; INTERACTIVE and ran `post-self-insert-hook' if the argument was
+ ;; true.  This test tested that.  Currently, however, `open-line'
+ ;; does not run run `post-self-insert-hook' at all, so for now
+ ;; this test just makes sure that it doesn't.
  (ert-deftest open-line-hook ()
    (let* ((x 0)
           (inc (lambda () (setq x (1+ x)))))
      (should (= x 0))
      (simple-test--dummy-buffer
        (add-hook 'post-self-insert-hook inc nil 'local)
-       (open-line 1 'interactive))
-     (should (= x 1))
+       (open-line 1))
+     (should (= x 0))
  
      (unwind-protect
          (progn
            (add-hook 'post-self-insert-hook inc)
            (simple-test--dummy-buffer
              (open-line 1))
-           (should (= x 1))
+           (should (= x 0))
            (simple-test--dummy-buffer
-             (open-line 10 'interactive))
-           (should (= x 2)))
+             (open-line 10))
+           (should (= x 0)))
        (remove-hook 'post-self-insert-hook inc))))
  
  \f
  
  
  ;;; auto-boundary tests
- (ert-deftest undo-auto--boundary-timer ()
+ (ert-deftest undo-auto-boundary-timer ()
    (should
-    undo-auto--current-boundary-timer))
+    undo-auto-current-boundary-timer))
  
  (ert-deftest undo-auto--boundaries-added ()
    ;; The change in the buffer should have caused addition
                   '("(s1) (s4)" . " (s2) (s3) (s5)"))))
  
  
+ ;; Test for a regression introduced by undo-auto--boundaries changes.
+ ;; https://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01652.html
+ (defun undo-test-kill-c-a-then-undo ()
+   (with-temp-buffer
+     (switch-to-buffer (current-buffer))
+     (setq buffer-undo-list nil)
+     (insert "a\nb\n\c\n")
+     (goto-char (point-max))
+     ;; We use a keyboard macro because it adds undo events in the same
+     ;; way as if a user were involved.
+     (kmacro-call-macro nil nil nil
+                        [left
+                         ;; Delete "c"
+                         backspace
+                         left left left
+                         ;; Delete "a"
+                         backspace
+                         ;; C-/ or undo
+                         67108911
+                         ])
+     (point)))
+ (defun undo-test-point-after-forward-kill ()
+   (with-temp-buffer
+     (switch-to-buffer (current-buffer))
+     (setq buffer-undo-list nil)
+     (insert "kill word forward")
+     ;; Move to word "word".
+     (goto-char 6)
+     (kmacro-call-macro nil nil nil
+                        [
+                         ;; kill-word
+                         C-delete
+                         ;; undo
+                         67108911
+                         ])
+     (point)))
+ (ert-deftest undo-point-in-wrong-place ()
+   (should
+    ;; returns 5 with the bug
+    (= 2
+       (undo-test-kill-c-a-then-undo)))
+   (should
+    (= 6
+       (undo-test-point-after-forward-kill))))
  (provide 'simple-test)
  ;;; simple-test.el ends here
diff --combined test/lisp/subr-tests.el
index ee8db593b498e9964e5c08f557b7d47ccc3b8e69,3fcb7d346a3999bb90f8f61a201da2cdd0a73f1d..3fcb7d346a3999bb90f8f61a201da2cdd0a73f1d
    (should (equal (macroexpand-all '(when a b c d))
                   '(if a (progn b c d)))))
  
+ (ert-deftest subr-test-version-parsing ()
+   (should (equal (version-to-list ".5") '(0 5)))
+   (should (equal (version-to-list "0.9 alpha1") '(0 9 -3 1)))
+   (should (equal (version-to-list "0.9 snapshot") '(0  9 -4)))
+   (should (equal (version-to-list "0.9-alpha1") '(0 9 -3 1)))
+   (should (equal (version-to-list "0.9-snapshot") '(0  9 -4)))
+   (should (equal (version-to-list "0.9.snapshot") '(0  9 -4)))
+   (should (equal (version-to-list "0.9_snapshot") '(0  9 -4)))
+   (should (equal (version-to-list "0.9alpha1") '(0 9 -3 1)))
+   (should (equal (version-to-list "0.9snapshot") '(0  9 -4)))
+   (should (equal (version-to-list "1.0 git") '(1  0 -4)))
+   (should (equal (version-to-list "1.0 pre2") '(1 0 -1 2)))
+   (should (equal (version-to-list "1.0-git") '(1  0 -4)))
+   (should (equal (version-to-list "1.0-pre2") '(1 0 -1 2)))
+   (should (equal (version-to-list "1.0.1-a") '(1 0 1 1)))
+   (should (equal (version-to-list "1.0.1-f") '(1 0 1 6)))
+   (should (equal (version-to-list "1.0.1.a") '(1 0 1 1)))
+   (should (equal (version-to-list "1.0.1.f") '(1 0 1 6)))
+   (should (equal (version-to-list "1.0.1_a") '(1 0 1 1)))
+   (should (equal (version-to-list "1.0.1_f") '(1 0 1 6)))
+   (should (equal (version-to-list "1.0.1a") '(1 0 1 1)))
+   (should (equal (version-to-list "1.0.1f") '(1 0 1 6)))
+   (should (equal (version-to-list "1.0.7.5") '(1 0 7 5)))
+   (should (equal (version-to-list "1.0.git") '(1  0 -4)))
+   (should (equal (version-to-list "1.0.pre2") '(1 0 -1 2)))
+   (should (equal (version-to-list "1.0_git") '(1  0 -4)))
+   (should (equal (version-to-list "1.0_pre2") '(1 0 -1 2)))
+   (should (equal (version-to-list "1.0git") '(1  0 -4)))
+   (should (equal (version-to-list "1.0pre2") '(1 0 -1 2)))
+   (should (equal (version-to-list "22.8 beta3") '(22 8 -2 3)))
+   (should (equal (version-to-list "22.8-beta3") '(22 8 -2 3)))
+   (should (equal (version-to-list "22.8.beta3") '(22 8 -2 3)))
+   (should (equal (version-to-list "22.8_beta3") '(22 8 -2 3)))
+   (should (equal (version-to-list "22.8beta3") '(22 8 -2 3)))
+   (should (equal (version-to-list "6.9.30 Beta") '(6 9 30 -2)))
+   (should (equal (version-to-list "6.9.30-Beta") '(6 9 30 -2)))
+   (should (equal (version-to-list "6.9.30.Beta") '(6 9 30 -2)))
+   (should (equal (version-to-list "6.9.30Beta") '(6 9 30 -2)))
+   (should (equal (version-to-list "6.9.30_Beta") '(6 9 30 -2)))
+   (should (equal
+             (error-message-string (should-error (version-to-list "OTP-18.1.5")))
+             "Invalid version syntax: `OTP-18.1.5' (must start with a number)"))
+   (should (equal
+             (error-message-string (should-error (version-to-list "")))
+             "Invalid version syntax: `' (must start with a number)"))
+   (should (equal
+             (error-message-string (should-error (version-to-list "1.0..7.5")))
+             "Invalid version syntax: `1.0..7.5'"))
+   (should (equal
+             (error-message-string (should-error (version-to-list "1.0prepre2")))
+             "Invalid version syntax: `1.0prepre2'"))
+   (should (equal
+             (error-message-string (should-error (version-to-list "22.8X3")))
+             "Invalid version syntax: `22.8X3'"))
+   (should (equal
+             (error-message-string (should-error (version-to-list "beta22.8alpha3")))
+             "Invalid version syntax: `beta22.8alpha3' (must start with a number)"))
+   (should (equal
+             (error-message-string (should-error (version-to-list "honk")))
+             "Invalid version syntax: `honk' (must start with a number)"))
+   (should (equal
+             (error-message-string (should-error (version-to-list 9)))
+             "Version must be a string"))
+   (let ((version-separator "_"))
+     (should (equal (version-to-list "_5") '(0 5)))
+     (should (equal (version-to-list "0_9 alpha1") '(0 9 -3 1)))
+     (should (equal (version-to-list "0_9 snapshot") '(0  9 -4)))
+     (should (equal (version-to-list "0_9-alpha1") '(0 9 -3 1)))
+     (should (equal (version-to-list "0_9-snapshot") '(0  9 -4)))
+     (should (equal (version-to-list "0_9.alpha1") '(0 9 -3 1)))
+     (should (equal (version-to-list "0_9.snapshot") '(0  9 -4)))
+     (should (equal (version-to-list "0_9alpha1") '(0 9 -3 1)))
+     (should (equal (version-to-list "0_9snapshot") '(0  9 -4)))
+     (should (equal (version-to-list "1_0 git") '(1  0 -4)))
+     (should (equal (version-to-list "1_0 pre2") '(1 0 -1 2)))
+     (should (equal (version-to-list "1_0-git") '(1  0 -4)))
+     (should (equal (version-to-list "1_0.pre2") '(1 0 -1 2)))
+     (should (equal (version-to-list "1_0_1-a") '(1 0 1 1)))
+     (should (equal (version-to-list "1_0_1-f") '(1 0 1 6)))
+     (should (equal (version-to-list "1_0_1.a") '(1 0 1 1)))
+     (should (equal (version-to-list "1_0_1.f") '(1 0 1 6)))
+     (should (equal (version-to-list "1_0_1_a") '(1 0 1 1)))
+     (should (equal (version-to-list "1_0_1_f") '(1 0 1 6)))
+     (should (equal (version-to-list "1_0_1a") '(1 0 1 1)))
+     (should (equal (version-to-list "1_0_1f") '(1 0 1 6)))
+     (should (equal (version-to-list "1_0_7_5") '(1 0 7 5)))
+     (should (equal (version-to-list "1_0_git") '(1  0 -4)))
+     (should (equal (version-to-list "1_0pre2") '(1 0 -1 2)))
+     (should (equal (version-to-list "22_8 beta3") '(22 8 -2 3)))
+     (should (equal (version-to-list "22_8-beta3") '(22 8 -2 3)))
+     (should (equal (version-to-list "22_8.beta3") '(22 8 -2 3)))
+     (should (equal (version-to-list "22_8beta3") '(22 8 -2 3)))
+     (should (equal (version-to-list "6_9_30 Beta") '(6 9 30 -2)))
+     (should (equal (version-to-list "6_9_30-Beta") '(6 9 30 -2)))
+     (should (equal (version-to-list "6_9_30.Beta") '(6 9 30 -2)))
+     (should (equal (version-to-list "6_9_30Beta") '(6 9 30 -2)))
+     (should (equal
+               (error-message-string (should-error (version-to-list "1_0__7_5")))
+               "Invalid version syntax: `1_0__7_5'"))
+     (should (equal
+               (error-message-string (should-error (version-to-list "1_0prepre2")))
+               "Invalid version syntax: `1_0prepre2'"))
+     (should (equal
+               (error-message-string (should-error (version-to-list "22.8X3")))
+               "Invalid version syntax: `22.8X3'"))
+     (should (equal
+               (error-message-string (should-error (version-to-list "beta22_8alpha3")))
+               "Invalid version syntax: `beta22_8alpha3' (must start with a number)"))))
  (provide 'subr-tests)
  ;;; subr-tests.el ends here
index 9291d34676971a1f8c205bd98add11d4848fb174,245f6703adface8311177bf183523589fa0b70ee..245f6703adface8311177bf183523589fa0b70ee
@@@ -46,6 -46,7 +46,7 @@@ $user_comment_lc      php-src/lce_functions.
  ($string,$flag,@string,@temp,@last    perl-src/yagrip.pl      40
  (a-forth-constant     forth-src/test-forth.fth        /^constant (a-forth-constant$/
  (another-forth-word   forth-src/test-forth.fth        /^: (another-forth-word) ( -- )$/
+ +     ruby-src/test.rb        /^        def +(y)$/
  +     tex-src/texinfo.tex     /^\\def+{{\\tt \\char 43}}$/
  /.notdef      ps-src/rfc1245.ps       /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/
  /.notdef      ps-src/rfc1245.ps       /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/
  /yen  ps-src/rfc1245.ps       /^\/yen \/.notdef \/.notdef \/.notdef \/.notdef \/.notdef /
  :a-forth-dictionary-entry     forth-src/test-forth.fth        /^create :a-forth-dictionary-entry$/
  <     tex-src/texinfo.tex     /^\\def<{{\\tt \\less}}$/
+ <<    ruby-src/test.rb        /^        def <<(y)$/
+ <=    ruby-src/test.rb        /^        def <=(y)$/
+ <=>   ruby-src/test.rb        /^        def <=>(y)$/
  =     tex-src/texinfo.tex     /^\\global\\let\\section = \\numberedsec$/
  =     tex-src/texinfo.tex     /^\\global\\let\\subsection = \\numberedsubsec$/
  =     tex-src/texinfo.tex     /^\\global\\let\\subsubsection = \\numberedsubsubsec$/
  =     tex-src/texinfo.tex     /^\\global\\let\\subsubsection = \\numberedsubsubsec$/
  =     tex-src/texinfo.tex     /^\\global\\def={{\\tt \\char 61}}}$/
  =/f   ada-src/etags-test-for.ada      /^   function "=" (L, R : System.Address) return Boo/
+ ==    ruby-src/test.rb        /^        def ==(y)$/
+ ===   ruby-src/test.rb        /^        def ===(y)$/
  =\indexdummyfont      tex-src/texinfo.tex     /^\\let\\cite=\\indexdummyfont$/
  =\relax       tex-src/texinfo.tex     /^\\let\\chapter=\\relax$/
  =\relax       tex-src/texinfo.tex     /^\\let\\section=\\relax$/
@@@ -220,6 -226,7 +226,7 @@@ A  cp-src/c.C      7
  A     cp-src/c.C      117
  A     cp-src/fail.C   7
  A     cp-src/fail.C   23
+ A     ruby-src/test1.ruby     /^class A$/
  ADDRESS       c-src/emacs/src/gmalloc.c       /^#define ADDRESS(B)    ((void *) (((B) - 1) * BLOCKSIZ/
  ALIGNOF_STRUCT_LISP_VECTOR    c-src/emacs/src/lisp.h  1378
  ALLOCATED_BEFORE_DUMPING      c-src/emacs/src/gmalloc.c       /^#define ALLOCATED_BEFORE_DUMPING(P) \\$/
@@@ -306,6 -313,7 +313,7 @@@ BUFFERP    c-src/emacs/src/lisp.h  /^BUFFER
  BUFFERSIZE    objc-src/Subprocess.h   43
  BUFFER_OBJFWDP        c-src/emacs/src/lisp.h  /^BUFFER_OBJFWDP (union Lisp_Fwd *a)$/
  BYTE_MARK_STACK       c-src/emacs/src/lisp.h  3181
+ Bar   lua-src/test.lua        /^function Square.something:Bar ()$/
  Bar   perl-src/kai-test.pl    /^package Bar;$/
  Bar::f4       perl-src/kai-test.pl    /^sub Bar::f4 {$/
  Bar::f5       perl-src/kai-test.pl    /^sub f5 {$/
@@@ -425,9 -433,12 +433,12 @@@ C_entries        c-src/etags.c   /^C_entries (in
  C_stab_entry  c-src/etags.c   2271
  C_symtype     c-src/etags.c   /^C_symtype (char *str, int len, int c_ext)$/
  ChangeFileType        pas-src/common.pas      /^function ChangeFileType; (*(FileName : NameString;/
+ Circle.getPos lua-src/test.lua        /^function Circle.getPos ()$/
  Cjava_entries c-src/etags.c   /^Cjava_entries (FILE *inf)$/
  Cjava_help    c-src/etags.c   551
  Cjava_suffixes        c-src/etags.c   549
+ ClassExample  ruby-src/test.rb        /^    class ClassExample$/
+ ClassExample.singleton_class_method   ruby-src/test.rb        /^        def ClassExample.singleton_class_method$/
  Clear/p       ada-src/2ataspri.adb    /^   procedure Clear (Cell : in out TAS_Cell) is$/
  Clear/p       ada-src/2ataspri.ads    /^   procedure Clear        (Cell : in out TAS_Cell)/
  Cobol_help    c-src/etags.c   558
@@@ -458,6 -469,7 +469,7 @@@ Create_LL_Task/p   ada-src/2ataspri.adb    /
  Create_LL_Task/p      ada-src/2ataspri.ads    /^   procedure Create_LL_Task$/
  Cstar_entries c-src/etags.c   /^Cstar_entries (FILE *inf)$/
  Cstar_suffixes        c-src/etags.c   562
+ Cube.data.getFoo      lua-src/test.lua        /^function Cube.data.getFoo ()$/
  D     cp-src/fail.C   41
  D     cp-src/fail.C   /^              D() : ::A::T2::T(97), x(1066) {}$/
  DAEMON_RUNNING        c-src/emacs/src/lisp.h  4258
@@@ -926,6 -938,8 +938,8 @@@ Mconway.cpp        cp-src/conway.cpp       /^void ma
  Metags        c-src/etags.c   /^main (int argc, char **argv)$/
  Mfail cp-src/fail.C   /^main()$/
  Mkai-test.pl  perl-src/kai-test.pl    /^package main;$/
+ ModuleExample ruby-src/test.rb        /^module ModuleExample$/
+ ModuleExample.singleton_module_method ruby-src/test.rb        /^    def ModuleExample.singleton_module_method$/
  More_Lisp_Bits        c-src/emacs/src/lisp.h  801
  MoveLayerAfter        lua-src/allegro.lua     /^function MoveLayerAfter (this_one)$/
  MoveLayerBefore       lua-src/allegro.lua     /^function MoveLayerBefore (this_one)$/
@@@ -1193,6 -1207,7 +1207,7 @@@ Range   cp-src/Range.h  /^  Range (double 
  ReadVacation  cp-src/functions.cpp    /^void ReadVacation ( char *filename ) {$/
  Read_Lock/p   ada-src/2ataspri.adb    /^   procedure Read_Lock (L : in out Lock; Ceiling_V/
  Read_Lock/p   ada-src/2ataspri.ads    /^   procedure Read_Lock (L : in out Lock; Ceiling_V/
+ Rectangle.getPos      lua-src/test.lua        /^function Rectangle.getPos ()$/
  ReleaseNameString     pas-src/common.pas      /^procedure ReleaseNameString; (* (var NSP: NameStri/
  RemoveLayer   lua-src/allegro.lua     /^function RemoveLayer ()$/
  RemoveUnderlineControl        pas-src/common.pas      /^function RemoveUnderlineControl; (*($/
@@@ -1309,6 -1324,7 +1324,7 @@@ SimpleCalc      objcpp-src/SimpleCalc.H /^@i
  SkipBlanks    pas-src/common.pas      /^function SkipBlanks; (*($/
  SkipChars     pas-src/common.pas      /^function SkipChars; (*($/
  SkipSpaces    pas-src/common.pas      /^procedure SkipSpaces; (* (Str : NameString; var I /
+ Square.something:Bar  lua-src/test.lua        /^function Square.something:Bar ()$/
  StartDay      cp-src/functions.cpp    /^Date StartDay(Date a,int days){\/\/Function to calcu/
  StripPath     pas-src/common.pas      /^function StripPath; (*($/
  SubString     pas-src/common.pas      /^function SubString; (*($/
@@@ -1647,6 -1663,8 +1663,8 @@@ Yacc_entries    c-src/etags.c   /^Yacc_entri
  Yacc_help     c-src/etags.c   693
  Yacc_suffixes c-src/etags.c   691
  Z     c-src/h.h       100
+ []    ruby-src/test.rb        /^        def [](y)$/
+ []=   ruby-src/test.rb        /^        def []=(y, val)$/
  \     tex-src/texinfo.tex     /^\\def\\ {{\\fontdimen2\\font=\\tclosesave{} }}%$/
  \     tex-src/texinfo.tex     /^\\gdef\\sepspaces{\\def {\\ }}}$/
  \'    tex-src/texinfo.tex     /^\\def\\'{{'}}$/
@@@ -2353,6 -2371,7 +2371,7 @@@ _malloc_thread_enabled_p        c-src/emacs/sr
  _realloc      c-src/emacs/src/gmalloc.c       /^_realloc (void *ptr, size_t size)$/
  _realloc_internal     c-src/emacs/src/gmalloc.c       /^_realloc_internal (void *ptr, size_t size)$/
  _realloc_internal_nolock      c-src/emacs/src/gmalloc.c       /^_realloc_internal_nolock (void *ptr, size_t size)$/
+ `     ruby-src/test.rb        /^        def `(command)$/
  a     c.c     152
  a     c.c     180
  a     c.c     /^a()$/
@@@ -2360,6 -2379,7 +2379,7 @@@ a       c.c     /^a ()$
  a     c-src/h.h       40
  a     c-src/h.h       103
  a     cp-src/c.C      132
+ a     ruby-src/test1.ruby     /^ def a()$/
  a-forth-constant!     forth-src/test-forth.fth        /^99 constant a-forth-constant!$/
  a-forth-value?        forth-src/test-forth.fth        /^55 value a-forth-value?$/
  a-forth-word  forth-src/test-forth.fth        /^: a-forth-word ( a b c -- a*b+c )  + * ;$/
@@@ -2484,6 -2504,7 +2504,7 @@@ b       c-src/h.h       4
  b     c-src/h.h       103
  b     c-src/h.h       104
  b     cp-src/c.C      132
+ b     ruby-src/test1.ruby     /^ def b()$/
  backslash=0   tex-src/texinfo.tex     /^\\let\\indexbackslash=0  %overridden during \\printin/
  bar   c-src/c.c       /^void bar() {while(0) {}}$/
  bar   c.c     143
@@@ -2599,6 -2620,10 +2620,10 @@@ childDidExit  objc-src/Subprocess.m   /^- 
  chunks_free   c-src/emacs/src/gmalloc.c       313
  chunks_used   c-src/emacs/src/gmalloc.c       311
  cjava c-src/etags.c   2936
+ class_method  ruby-src/test.rb        /^        def class_method$/
+ class_method_equals=  ruby-src/test.rb        /^        def class_method_equals=$/
+ class_method_exclamation!     ruby-src/test.rb        /^        def class_method_exclamation!$/
+ class_method_question?        ruby-src/test.rb        /^        def class_method_question?$/
  classifyLine  php-src/lce_functions.php       /^      function classifyLine($line)$/
  clear cp-src/conway.hpp       /^    void clear(void) { alive = 0; }$/
  clear-abbrev-table    c-src/abbrev.c  /^DEFUN ("clear-abbrev-table", Fclear_abbrev_table, /
@@@ -2988,8 -3013,11 +3013,11 @@@ generic_object        cp-src/clheir.cpp       /^gene
  generic_object        cp-src/clheir.hpp       13
  getArchs      objc-src/PackInsp.m     /^-(void)getArchs$/
  getDomainNames        php-src/lce_functions.php       /^      function getDomainNames()$/
+ getFoo        lua-src/test.lua        /^function Cube.data.getFoo ()$/
  getPOReader   php-src/lce_functions.php       /^      function &getPOReader($domain)$/
  getPath       objc-src/PackInsp.m     /^-(const char *)getPath:(char *)buf forType:(const /
+ getPos        lua-src/test.lua        /^function Rectangle.getPos ()$/
+ getPos        lua-src/test.lua        /^function Circle.getPos ()$/
  getTextDomains        php-src/lce_functions.php       /^  function getTextDomains($lines)$/
  get_compressor_from_suffix    c-src/etags.c   /^get_compressor_from_suffix (char *file, char **ext/
  get_contiguous_space  c-src/emacs/src/gmalloc.c       /^get_contiguous_space (ptrdiff_t size, void *positi/
@@@ -3397,6 -3425,8 +3425,8 @@@ mcCSC   cp-src/c.C      
  mcheck        c-src/emacs/src/gmalloc.c       /^mcheck (void (*func) (enum mcheck_status))$/
  mcheck_status c-src/emacs/src/gmalloc.c       283
  mcheck_used   c-src/emacs/src/gmalloc.c       2012
+ me22b lua-src/test.lua        /^   local function test.me22b (one)$/
+ me_22a        lua-src/test.lua        /^   function test.me_22a(one, two)$/
  memalign      c-src/emacs/src/gmalloc.c       /^memalign (size_t alignment, size_t size)$/
  member        prol-src/natded.prolog  /^member(X,[X|_]).$/
  memclear      c-src/emacs/src/lisp.h  /^memclear (void *p, ptrdiff_t nbytes)$/
@@@ -3420,6 -3450,7 +3450,7 @@@ miti    html-src/softwarelibero.html    /^Sfa
  modifier_names        c-src/emacs/src/keyboard.c      6319
  modifier_symbols      c-src/emacs/src/keyboard.c      6327
  modify_event_symbol   c-src/emacs/src/keyboard.c      /^modify_event_symbol (ptrdiff_t symbol_num, int mod/
+ module_method ruby-src/test.rb        /^    def module_method$/
  more_aligned_int      c.c     165
  morecore_nolock       c-src/emacs/src/gmalloc.c       /^morecore_nolock (size_t size)$/
  morecore_recursing    c-src/emacs/src/gmalloc.c       604
@@@ -4180,6 -4211,8 +4211,8 @@@ test    c-src/emacs/src/lisp.h  187
  test  cp-src/c.C      86
  test  erl-src/gs_dialog.erl   /^test() ->$/
  test  php-src/ptest.php       /^test $/
+ test.me22b    lua-src/test.lua        /^   local function test.me22b (one)$/
+ test.me_22a   lua-src/test.lua        /^   function test.me_22a(one, two)$/
  test_undefined        c-src/emacs/src/keyboard.c      /^test_undefined (Lisp_Object binding)$/
  texttreelist  prol-src/natded.prolog  /^texttreelist([]).$/
  this  c-src/a/b/b.c   1
index e1e0daf4872e64d8fad2141f9efa857c863aa48e,2ae4ec412561dc9f760093d476e6cf29c47dfcfb..2ae4ec412561dc9f760093d476e6cf29c47dfcfb
@@@ -2084,17 -2084,17 +2084,17 @@@ void agent::move(\7fmove\ 153,135
  \f
  cp-src/clheir.hpp,423
  class generic_object\7f13,520
-     virtual void compute_next_state(\7f21,842
-     virtual void step(\7f22,888
- const int max_num_directions \7f31,1219
- class location:\7flocation\ 133,1289
-     location(\7f43,1642
- class irregular_location:\7firregular_location\ 147,1686
-     irregular_location(\7f51,1762
- class discrete_location:\7fdiscrete_location\ 156,1889
-     discrete_location(\7f62,2044
-     void assign_neighbor(\7f66,2184
- class agent:\7fagent\ 175,2508
+     virtual void compute_next_state(\7f21,843
+     virtual void step(\7f22,889
+ const int max_num_directions \7f31,1220
+ class location:\7flocation\ 133,1290
+     location(\7f43,1643
+ class irregular_location:\7firregular_location\ 147,1687
+     irregular_location(\7f51,1763
+ class discrete_location:\7fdiscrete_location\ 156,1890
+     discrete_location(\7f62,2045
+     void assign_neighbor(\7f66,2185
+ class agent:\7fagent\ 175,2509
  \f
  cp-src/fail.C,294
  struct A \7f7,263
@@@ -2218,28 -2218,28 +2218,28 @@@ el-src/emacs/lisp/progmodes/etags.el,50
  (defun next-file \7f1685,67976
  (defvar tags-loop-operate \7f1760,70890
  (defvar tags-loop-scan\7f1763,70984
- (defun tags-loop-eval \7f1771,71314
- (defun tags-loop-continue \7f1782,71643
- (defun tags-search \7f1850,73949
- (defun tags-query-replace \7f1871,74775
- (defun tags-complete-tags-table-file \7f1896,75999
- (defun list-tags \7f1906,76378
- (defun tags-apropos \7f1934,77331
- (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78157
- (defun select-tags-table \7f1964,78396
- (defvar select-tags-table-mode-map \7f2019,80523
- (define-derived-mode select-tags-table-mode \7f2030,80906
- (defun select-tags-table-select \7f2034,81090
- (defun select-tags-table-quit \7f2043,81456
- (defun complete-tag \7f2049,81611
- (defconst etags--xref-limit \7f2074,82552
- (defvar etags-xref-find-definitions-tag-order \7f2076,82587
- (defun etags-xref-find \7f2082,82877
- (defun etags--xref-find-definitions \7f2096,83406
- (defclass xref-etags-location \7f2129,85121
- (defun xref-make-etags-location \7f2135,85344
- (cl-defmethod xref-location-marker \7f2139,85499
- (cl-defmethod xref-location-line \7f2146,85743
+ (defun tags-loop-eval \7f1771,71313
+ (defun tags-loop-continue \7f1782,71642
+ (defun tags-search \7f1850,73948
+ (defun tags-query-replace \7f1871,74774
+ (defun tags-complete-tags-table-file \7f1896,75998
+ (defun list-tags \7f1906,76377
+ (defun tags-apropos \7f1934,77330
+ (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78156
+ (defun select-tags-table \7f1964,78395
+ (defvar select-tags-table-mode-map \7f2019,80522
+ (define-derived-mode select-tags-table-mode \7f2030,80905
+ (defun select-tags-table-select \7f2034,81089
+ (defun select-tags-table-quit \7f2043,81455
+ (defun complete-tag \7f2049,81610
+ (defconst etags--xref-limit \7f2074,82551
+ (defvar etags-xref-find-definitions-tag-order \7f2076,82586
+ (defun etags-xref-find \7f2082,82876
+ (defun etags--xref-find-definitions \7f2096,83405
+ (defclass xref-etags-location \7f2129,85120
+ (defun xref-make-etags-location \7f2135,85343
+ (cl-defmethod xref-location-marker \7f2139,85498
+ (cl-defmethod xref-location-line \7f2146,85742
  \f
  erl-src/gs_dialog.erl,98
  -define(VERSION\7f2,32
@@@ -2336,49 -2336,63 +2336,63 @@@ function MoveLayerBottom \7f223,507
  function MoveLayerBefore \7f236,5457
  function MoveLayerAfter \7f258,6090
  \f
+ lua-src/test.lua,442
+ function Rectangle.getPos \7f2,15
+ function Rectangle.getPos \7fgetPos\ 12,15
+ function Circle.getPos \7f6,61
+ function Circle.getPos \7fgetPos\ 16,61
+ function Cube.data.getFoo \7f10,102
+ function Cube.data.getFoo \7fgetFoo\ 110,102
+ function Square.something:Bar \7f14,148
+ function Square.something:Bar \7fBar\ 114,148
+    function test.me_22a(\7f22,241
+    function test.me_22a(\7fme_22a\ 122,241
+    local function test.me22b \7f25,297
+    local function test.me22b \7fme22b\ 125,297
\f
  make-src/Makefile,1133
  LATEST=\7f1,0
- NONSRCS=\7f35,1578
- CPPFLAGS=\7f49,2191
- LDFLAGS=\7f50,2260
- FASTCFLAGS=\7f55,2531
- FILTER=\7f58,2642
-       @-$(\7f$\ 172,3064
-       @-$(\7f$\ 173,3113
-       @-$(\7f$\ 174,3177
-       @-$(\7f$\ 175,3223
-       @-$(\7f$\ 176,3291
-       @-$(\7f$\ 177,3383
-       @$(\7f81,3466
-       @$(\7f82,3514
-       @$(\7f83,3577
-       @$(\7f84,3622
-       @$(\7f85,3689
-       @$(\7f86,3780
- ${CHECKOBJS}: CFLAGS=\7f88,3806
-       @env CHECKEROPTS=\7f92,3922
-       @$(\7f98,4094
-       @$(\7f106,4250
-       @$(\7f110,4374
-       @$(\7f114,4500
-       @for i in $(SRCS); do echo $$i;\7f140,5315
-       $(\7f160,6053
-       $(\7f163,6114
-       $(\7f166,6177
-       $(\7f169,6228
-       $(\7f172,6317
-       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6614
-       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6703
-       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6791
-       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6880
-       TEXTAGS=\7f204,7122
-       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7122
-       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7239
-       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7388
-       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7464
-       TEXTAGS=\7f219,7583
-       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7583
-       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7710
+ NONSRCS=\7f35,1577
+ CPPFLAGS=\7f49,2190
+ LDFLAGS=\7f50,2259
+ FASTCFLAGS=\7f55,2530
+ FILTER=\7f58,2641
+       @-$(\7f$\ 172,3063
+       @-$(\7f$\ 173,3112
+       @-$(\7f$\ 174,3176
+       @-$(\7f$\ 175,3222
+       @-$(\7f$\ 176,3290
+       @-$(\7f$\ 177,3382
+       @$(\7f81,3465
+       @$(\7f82,3513
+       @$(\7f83,3576
+       @$(\7f84,3621
+       @$(\7f85,3688
+       @$(\7f86,3779
+ ${CHECKOBJS}: CFLAGS=\7f88,3805
+       @env CHECKEROPTS=\7f92,3921
+       @$(\7f98,4093
+       @$(\7f106,4249
+       @$(\7f110,4373
+       @$(\7f114,4499
+       @for i in $(SRCS); do echo $$i;\7f140,5320
+       $(\7f160,6058
+       $(\7f163,6119
+       $(\7f166,6182
+       $(\7f169,6233
+       $(\7f172,6322
+       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6619
+       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6708
+       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6796
+       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6885
+       TEXTAGS=\7f204,7127
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7127
+       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7244
+       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7393
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7469
+       TEXTAGS=\7f219,7588
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7588
+       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7715
  \f
  objc-src/Subprocess.h,98
  #define Subprocess \7f41,1217
@@@ -2963,6 -2977,31 +2977,31 @@@ class Configure(\7f760,2487
      def save(\7f797,26022
      def nosave(\7f807,26310
  \f
+ ruby-src/test.rb,594
+ module ModuleExample\7f1,0
+     class ClassExample\7f2,21
+         def class_method\7f3,44
+         def ClassExample.singleton_class_method\7f6,116
+         def class_method_exclamation!\7f9,221
+         def class_method_question?\7f12,319
+         def class_method_equals=\7fclass_method_equals=\ 115,411
+         def `(\7f18,499
+         def +(\7f21,589
+         def [](\7f24,637
+         def []=(\7f[]=\ 127,687
+         def <<(\7f30,749
+         def ==(\7f==\ 133,799
+         def <=(\7f<=\ 136,869
+         def <=>(\7f<=>\ 139,940
+         def ===(\7f===\ 142,987
+     def module_method\7f46,1048
+     def ModuleExample.singleton_module_method\7f49,1110
\f
+ ruby-src/test1.ruby,37
+ class A\7f1,0
+  def a(\7f2,8
+  def b(\7f5,38
\f
  tex-src/testenv.tex,52
  \newcommand{\nm}\7f\nm\ 14,77
  \section{blah}\7fblah\ 18,139
index 8b0742241c7bf1f9a5c714fc392d859801c5ec2b,3ec5b21d384cdf6a7e522a37f1f0923f046edc98..3ec5b21d384cdf6a7e522a37f1f0923f046edc98
@@@ -2642,24 -2642,24 +2642,24 @@@ extern void step_everybody(\7f11,48
  class generic_object\7f13,520
      generic_object(\7f17,582
      ~generic_object(\7f19,724
-     virtual void compute_next_state(\7f21,842
-     virtual void step(\7f22,888
- const int max_num_directions \7f31,1219
- class location:\7flocation\ 133,1289
-     location(\7f43,1642
-     ~location(\7f44,1661
- class irregular_location:\7firregular_location\ 147,1686
-     irregular_location(\7f51,1762
-     ~irregular_location(\7f53,1854
- class discrete_location:\7fdiscrete_location\ 156,1889
-     void clear_neighbors(\7f60,2004
-     discrete_location(\7f62,2044
-     ~discrete_location(\7f65,2154
-     void assign_neighbor(\7f66,2184
- class agent:\7fagent\ 175,2508
-     agent(\7f79,2578
-     ~agent(\7f80,2591
-     void move(\7f81,2605
+     virtual void compute_next_state(\7f21,843
+     virtual void step(\7f22,889
+ const int max_num_directions \7f31,1220
+ class location:\7flocation\ 133,1290
+     location(\7f43,1643
+     ~location(\7f44,1662
+ class irregular_location:\7firregular_location\ 147,1687
+     irregular_location(\7f51,1763
+     ~irregular_location(\7f53,1855
+ class discrete_location:\7fdiscrete_location\ 156,1890
+     void clear_neighbors(\7f60,2005
+     discrete_location(\7f62,2045
+     ~discrete_location(\7f65,2155
+     void assign_neighbor(\7f66,2185
+ class agent:\7fagent\ 175,2509
+     agent(\7f79,2579
+     ~agent(\7f80,2592
+     void move(\7f81,2606
  \f
  cp-src/fail.C,315
  struct A \7f7,263
@@@ -2787,28 -2787,28 +2787,28 @@@ el-src/emacs/lisp/progmodes/etags.el,51
  (defun next-file \7f1685,67976
  (defvar tags-loop-operate \7f1760,70890
  (defvar tags-loop-scan\7f1763,70984
- (defun tags-loop-eval \7f1771,71314
- (defun tags-loop-continue \7f1782,71643
- (defun tags-search \7f1850,73949
- (defun tags-query-replace \7f1871,74775
- (defun tags-complete-tags-table-file \7f1896,75999
- (defun list-tags \7f1906,76378
- (defun tags-apropos \7f1934,77331
- (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78157
- (defun select-tags-table \7f1964,78396
- (defvar select-tags-table-mode-map \7f2019,80523
- (define-derived-mode select-tags-table-mode \7f2030,80906
- (defun select-tags-table-select \7f2034,81090
- (defun select-tags-table-quit \7f2043,81456
- (defun complete-tag \7f2049,81611
- (defconst etags--xref-limit \7f2074,82552
- (defvar etags-xref-find-definitions-tag-order \7f2076,82587
- (defun etags-xref-find \7f2082,82877
- (defun etags--xref-find-definitions \7f2096,83406
- (defclass xref-etags-location \7f2129,85121
- (defun xref-make-etags-location \7f2135,85344
- (cl-defmethod xref-location-marker \7f2139,85499
- (cl-defmethod xref-location-line \7f2146,85743
+ (defun tags-loop-eval \7f1771,71313
+ (defun tags-loop-continue \7f1782,71642
+ (defun tags-search \7f1850,73948
+ (defun tags-query-replace \7f1871,74774
+ (defun tags-complete-tags-table-file \7f1896,75998
+ (defun list-tags \7f1906,76377
+ (defun tags-apropos \7f1934,77330
+ (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78156
+ (defun select-tags-table \7f1964,78395
+ (defvar select-tags-table-mode-map \7f2019,80522
+ (define-derived-mode select-tags-table-mode \7f2030,80905
+ (defun select-tags-table-select \7f2034,81089
+ (defun select-tags-table-quit \7f2043,81455
+ (defun complete-tag \7f2049,81610
+ (defconst etags--xref-limit \7f2074,82551
+ (defvar etags-xref-find-definitions-tag-order \7f2076,82586
+ (defun etags-xref-find \7f2082,82876
+ (defun etags--xref-find-definitions \7f2096,83405
+ (defclass xref-etags-location \7f2129,85120
+ (defun xref-make-etags-location \7f2135,85343
+ (cl-defmethod xref-location-marker \7f2139,85498
+ (cl-defmethod xref-location-line \7f2146,85742
  \f
  erl-src/gs_dialog.erl,98
  -define(VERSION\7f2,32
@@@ -2905,50 -2905,64 +2905,64 @@@ function MoveLayerBottom \7f223,507
  function MoveLayerBefore \7f236,5457
  function MoveLayerAfter \7f258,6090
  \f
+ lua-src/test.lua,442
+ function Rectangle.getPos \7f2,15
+ function Rectangle.getPos \7fgetPos\ 12,15
+ function Circle.getPos \7f6,61
+ function Circle.getPos \7fgetPos\ 16,61
+ function Cube.data.getFoo \7f10,102
+ function Cube.data.getFoo \7fgetFoo\ 110,102
+ function Square.something:Bar \7f14,148
+ function Square.something:Bar \7fBar\ 114,148
+    function test.me_22a(\7f22,241
+    function test.me_22a(\7fme_22a\ 122,241
+    local function test.me22b \7f25,297
+    local function test.me22b \7fme22b\ 125,297
\f
  make-src/Makefile,1156
  LATEST=\7f1,0
- NONSRCS=\7f35,1578
- CPPFLAGS=\7f49,2191
- LDFLAGS=\7f50,2260
- FASTCFLAGS=\7f55,2531
- FILTER=\7f58,2642
-       @-$(\7f$\ 172,3064
-       @-$(\7f$\ 173,3113
-       @-$(\7f$\ 174,3177
-       @-$(\7f$\ 175,3223
-       @-$(\7f$\ 176,3291
-       @-$(\7f$\ 177,3383
-       @$(\7f81,3466
-       @$(\7f82,3514
-       @$(\7f83,3577
-       @$(\7f84,3622
-       @$(\7f85,3689
-       @$(\7f86,3780
- ${CHECKOBJS}: CFLAGS=\7f88,3806
-       @env CHECKEROPTS=\7f92,3922
-       @$(\7f98,4094
-       @$(\7f106,4250
-       @$(\7f110,4374
-       @$(\7f114,4500
-       @for i in $(\7f140,5315
-       @for i in $(SRCS); do echo $$i;\7f140,5315
-       $(\7f160,6053
-       $(\7f163,6114
-       $(\7f166,6177
-       $(\7f169,6228
-       $(\7f172,6317
-       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6614
-       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6703
-       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6791
-       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6880
-       TEXTAGS=\7f204,7122
-       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7122
-       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7239
-       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7388
-       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7464
-       TEXTAGS=\7f219,7583
-       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7583
-       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7710
+ NONSRCS=\7f35,1577
+ CPPFLAGS=\7f49,2190
+ LDFLAGS=\7f50,2259
+ FASTCFLAGS=\7f55,2530
+ FILTER=\7f58,2641
+       @-$(\7f$\ 172,3063
+       @-$(\7f$\ 173,3112
+       @-$(\7f$\ 174,3176
+       @-$(\7f$\ 175,3222
+       @-$(\7f$\ 176,3290
+       @-$(\7f$\ 177,3382
+       @$(\7f81,3465
+       @$(\7f82,3513
+       @$(\7f83,3576
+       @$(\7f84,3621
+       @$(\7f85,3688
+       @$(\7f86,3779
+ ${CHECKOBJS}: CFLAGS=\7f88,3805
+       @env CHECKEROPTS=\7f92,3921
+       @$(\7f98,4093
+       @$(\7f106,4249
+       @$(\7f110,4373
+       @$(\7f114,4499
+       @for i in $(\7f140,5320
+       @for i in $(SRCS); do echo $$i;\7f140,5320
+       $(\7f160,6058
+       $(\7f163,6119
+       $(\7f166,6182
+       $(\7f169,6233
+       $(\7f172,6322
+       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6619
+       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6708
+       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6796
+       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6885
+       TEXTAGS=\7f204,7127
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7127
+       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7244
+       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7393
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7469
+       TEXTAGS=\7f219,7588
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7588
+       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7715
  \f
  objc-src/Subprocess.h,98
  #define Subprocess \7f41,1217
@@@ -3534,6 -3548,31 +3548,31 @@@ class Configure(\7f760,2487
      def save(\7f797,26022
      def nosave(\7f807,26310
  \f
+ ruby-src/test.rb,594
+ module ModuleExample\7f1,0
+     class ClassExample\7f2,21
+         def class_method\7f3,44
+         def ClassExample.singleton_class_method\7f6,116
+         def class_method_exclamation!\7f9,221
+         def class_method_question?\7f12,319
+         def class_method_equals=\7fclass_method_equals=\ 115,411
+         def `(\7f18,499
+         def +(\7f21,589
+         def [](\7f24,637
+         def []=(\7f[]=\ 127,687
+         def <<(\7f30,749
+         def ==(\7f==\ 133,799
+         def <=(\7f<=\ 136,869
+         def <=>(\7f<=>\ 139,940
+         def ===(\7f===\ 142,987
+     def module_method\7f46,1048
+     def ModuleExample.singleton_module_method\7f49,1110
\f
+ ruby-src/test1.ruby,37
+ class A\7f1,0
+  def a(\7f2,8
+  def b(\7f5,38
\f
  tex-src/testenv.tex,52
  \newcommand{\nm}\7f\nm\ 14,77
  \section{blah}\7fblah\ 18,139
index 37eaafbab61d3adffc12636e8e1844e28cb3b976,43b84eed5d290e3811e32d519b2b75d70c81357d..43b84eed5d290e3811e32d519b2b75d70c81357d
@@@ -2391,25 -2391,25 +2391,25 @@@ void agent::move(\7fmove\ 153,135
  cp-src/clheir.hpp,682
  class generic_object\7f13,520
      int where_in_registry;\7f15,547
-     virtual void compute_next_state(\7f21,842
-     virtual void step(\7f22,888
- const int max_num_directions \7f31,1219
- class location:\7flocation\ 133,1289
-     location(\7f43,1642
- class irregular_location:\7firregular_location\ 147,1686
-     double x,\7f49,1734
-     double x, y,\7f49,1734
-     double x, y, z;\7f49,1734
-     irregular_location(\7f51,1762
- class discrete_location:\7fdiscrete_location\ 156,1889
-     int x,\7f58,1936
-     int x, y,\7f58,1936
-     int x, y, z;\7f58,1936
-     class location *neighbors[\7fneighbors\ 159,1953
-     discrete_location(\7f62,2044
-     void assign_neighbor(\7f66,2184
- class agent:\7fagent\ 175,2508
-     location *where;\7fwhere\ 177,2549
+     virtual void compute_next_state(\7f21,843
+     virtual void step(\7f22,889
+ const int max_num_directions \7f31,1220
+ class location:\7flocation\ 133,1290
+     location(\7f43,1643
+ class irregular_location:\7firregular_location\ 147,1687
+     double x,\7f49,1735
+     double x, y,\7f49,1735
+     double x, y, z;\7f49,1735
+     irregular_location(\7f51,1763
+ class discrete_location:\7fdiscrete_location\ 156,1890
+     int x,\7f58,1937
+     int x, y,\7f58,1937
+     int x, y, z;\7f58,1937
+     class location *neighbors[\7fneighbors\ 159,1954
+     discrete_location(\7f62,2045
+     void assign_neighbor(\7f66,2185
+ class agent:\7fagent\ 175,2509
+     location *where;\7fwhere\ 177,2550
  \f
  cp-src/fail.C,330
  struct A \7f7,263
@@@ -2535,28 -2535,28 +2535,28 @@@ el-src/emacs/lisp/progmodes/etags.el,50
  (defun next-file \7f1685,67976
  (defvar tags-loop-operate \7f1760,70890
  (defvar tags-loop-scan\7f1763,70984
- (defun tags-loop-eval \7f1771,71314
- (defun tags-loop-continue \7f1782,71643
- (defun tags-search \7f1850,73949
- (defun tags-query-replace \7f1871,74775
- (defun tags-complete-tags-table-file \7f1896,75999
- (defun list-tags \7f1906,76378
- (defun tags-apropos \7f1934,77331
- (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78157
- (defun select-tags-table \7f1964,78396
- (defvar select-tags-table-mode-map \7f2019,80523
- (define-derived-mode select-tags-table-mode \7f2030,80906
- (defun select-tags-table-select \7f2034,81090
- (defun select-tags-table-quit \7f2043,81456
- (defun complete-tag \7f2049,81611
- (defconst etags--xref-limit \7f2074,82552
- (defvar etags-xref-find-definitions-tag-order \7f2076,82587
- (defun etags-xref-find \7f2082,82877
- (defun etags--xref-find-definitions \7f2096,83406
- (defclass xref-etags-location \7f2129,85121
- (defun xref-make-etags-location \7f2135,85344
- (cl-defmethod xref-location-marker \7f2139,85499
- (cl-defmethod xref-location-line \7f2146,85743
+ (defun tags-loop-eval \7f1771,71313
+ (defun tags-loop-continue \7f1782,71642
+ (defun tags-search \7f1850,73948
+ (defun tags-query-replace \7f1871,74774
+ (defun tags-complete-tags-table-file \7f1896,75998
+ (defun list-tags \7f1906,76377
+ (defun tags-apropos \7f1934,77330
+ (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78156
+ (defun select-tags-table \7f1964,78395
+ (defvar select-tags-table-mode-map \7f2019,80522
+ (define-derived-mode select-tags-table-mode \7f2030,80905
+ (defun select-tags-table-select \7f2034,81089
+ (defun select-tags-table-quit \7f2043,81455
+ (defun complete-tag \7f2049,81610
+ (defconst etags--xref-limit \7f2074,82551
+ (defvar etags-xref-find-definitions-tag-order \7f2076,82586
+ (defun etags-xref-find \7f2082,82876
+ (defun etags--xref-find-definitions \7f2096,83405
+ (defclass xref-etags-location \7f2129,85120
+ (defun xref-make-etags-location \7f2135,85343
+ (cl-defmethod xref-location-marker \7f2139,85498
+ (cl-defmethod xref-location-line \7f2146,85742
  \f
  erl-src/gs_dialog.erl,98
  -define(VERSION\7f2,32
@@@ -2653,49 -2653,63 +2653,63 @@@ function MoveLayerBottom \7f223,507
  function MoveLayerBefore \7f236,5457
  function MoveLayerAfter \7f258,6090
  \f
+ lua-src/test.lua,442
+ function Rectangle.getPos \7f2,15
+ function Rectangle.getPos \7fgetPos\ 12,15
+ function Circle.getPos \7f6,61
+ function Circle.getPos \7fgetPos\ 16,61
+ function Cube.data.getFoo \7f10,102
+ function Cube.data.getFoo \7fgetFoo\ 110,102
+ function Square.something:Bar \7f14,148
+ function Square.something:Bar \7fBar\ 114,148
+    function test.me_22a(\7f22,241
+    function test.me_22a(\7fme_22a\ 122,241
+    local function test.me22b \7f25,297
+    local function test.me22b \7fme22b\ 125,297
\f
  make-src/Makefile,1133
  LATEST=\7f1,0
- NONSRCS=\7f35,1578
- CPPFLAGS=\7f49,2191
- LDFLAGS=\7f50,2260
- FASTCFLAGS=\7f55,2531
- FILTER=\7f58,2642
-       @-$(\7f$\ 172,3064
-       @-$(\7f$\ 173,3113
-       @-$(\7f$\ 174,3177
-       @-$(\7f$\ 175,3223
-       @-$(\7f$\ 176,3291
-       @-$(\7f$\ 177,3383
-       @$(\7f81,3466
-       @$(\7f82,3514
-       @$(\7f83,3577
-       @$(\7f84,3622
-       @$(\7f85,3689
-       @$(\7f86,3780
- ${CHECKOBJS}: CFLAGS=\7f88,3806
-       @env CHECKEROPTS=\7f92,3922
-       @$(\7f98,4094
-       @$(\7f106,4250
-       @$(\7f110,4374
-       @$(\7f114,4500
-       @for i in $(SRCS); do echo $$i;\7f140,5315
-       $(\7f160,6053
-       $(\7f163,6114
-       $(\7f166,6177
-       $(\7f169,6228
-       $(\7f172,6317
-       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6614
-       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6703
-       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6791
-       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6880
-       TEXTAGS=\7f204,7122
-       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7122
-       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7239
-       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7388
-       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7464
-       TEXTAGS=\7f219,7583
-       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7583
-       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7710
+ NONSRCS=\7f35,1577
+ CPPFLAGS=\7f49,2190
+ LDFLAGS=\7f50,2259
+ FASTCFLAGS=\7f55,2530
+ FILTER=\7f58,2641
+       @-$(\7f$\ 172,3063
+       @-$(\7f$\ 173,3112
+       @-$(\7f$\ 174,3176
+       @-$(\7f$\ 175,3222
+       @-$(\7f$\ 176,3290
+       @-$(\7f$\ 177,3382
+       @$(\7f81,3465
+       @$(\7f82,3513
+       @$(\7f83,3576
+       @$(\7f84,3621
+       @$(\7f85,3688
+       @$(\7f86,3779
+ ${CHECKOBJS}: CFLAGS=\7f88,3805
+       @env CHECKEROPTS=\7f92,3921
+       @$(\7f98,4093
+       @$(\7f106,4249
+       @$(\7f110,4373
+       @$(\7f114,4499
+       @for i in $(SRCS); do echo $$i;\7f140,5320
+       $(\7f160,6058
+       $(\7f163,6119
+       $(\7f166,6182
+       $(\7f169,6233
+       $(\7f172,6322
+       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6619
+       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6708
+       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6796
+       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6885
+       TEXTAGS=\7f204,7127
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7127
+       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7244
+       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7393
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7469
+       TEXTAGS=\7f219,7588
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7588
+       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7715
  \f
  objc-src/Subprocess.h,98
  #define Subprocess \7f41,1217
@@@ -3307,6 -3321,31 +3321,31 @@@ class Configure(\7f760,2487
      def save(\7f797,26022
      def nosave(\7f807,26310
  \f
+ ruby-src/test.rb,594
+ module ModuleExample\7f1,0
+     class ClassExample\7f2,21
+         def class_method\7f3,44
+         def ClassExample.singleton_class_method\7f6,116
+         def class_method_exclamation!\7f9,221
+         def class_method_question?\7f12,319
+         def class_method_equals=\7fclass_method_equals=\ 115,411
+         def `(\7f18,499
+         def +(\7f21,589
+         def [](\7f24,637
+         def []=(\7f[]=\ 127,687
+         def <<(\7f30,749
+         def ==(\7f==\ 133,799
+         def <=(\7f<=\ 136,869
+         def <=>(\7f<=>\ 139,940
+         def ===(\7f===\ 142,987
+     def module_method\7f46,1048
+     def ModuleExample.singleton_module_method\7f49,1110
\f
+ ruby-src/test1.ruby,37
+ class A\7f1,0
+  def a(\7f2,8
+  def b(\7f5,38
\f
  tex-src/testenv.tex,52
  \newcommand{\nm}\7f\nm\ 14,77
  \section{blah}\7fblah\ 18,139
index 2b631d1a1659e32f778d095d18f20cde0d7ae4b6,434fe13cbd49c4eae035ace0d0aa0f74e021d51a..434fe13cbd49c4eae035ace0d0aa0f74e021d51a
@@@ -2248,17 -2248,17 +2248,17 @@@ void agent::move(\7fmove\ 153,135
  \f
  cp-src/clheir.hpp,423
  class generic_object\7f13,520
-     virtual void compute_next_state(\7f21,842
-     virtual void step(\7f22,888
- const int max_num_directions \7f31,1219
- class location:\7flocation\ 133,1289
-     location(\7f43,1642
- class irregular_location:\7firregular_location\ 147,1686
-     irregular_location(\7f51,1762
- class discrete_location:\7fdiscrete_location\ 156,1889
-     discrete_location(\7f62,2044
-     void assign_neighbor(\7f66,2184
- class agent:\7fagent\ 175,2508
+     virtual void compute_next_state(\7f21,843
+     virtual void step(\7f22,889
+ const int max_num_directions \7f31,1220
+ class location:\7flocation\ 133,1290
+     location(\7f43,1643
+ class irregular_location:\7firregular_location\ 147,1687
+     irregular_location(\7f51,1763
+ class discrete_location:\7fdiscrete_location\ 156,1890
+     discrete_location(\7f62,2045
+     void assign_neighbor(\7f66,2185
+ class agent:\7fagent\ 175,2509
  \f
  cp-src/fail.C,294
  struct A \7f7,263
@@@ -2382,28 -2382,28 +2382,28 @@@ el-src/emacs/lisp/progmodes/etags.el,50
  (defun next-file \7f1685,67976
  (defvar tags-loop-operate \7f1760,70890
  (defvar tags-loop-scan\7f1763,70984
- (defun tags-loop-eval \7f1771,71314
- (defun tags-loop-continue \7f1782,71643
- (defun tags-search \7f1850,73949
- (defun tags-query-replace \7f1871,74775
- (defun tags-complete-tags-table-file \7f1896,75999
- (defun list-tags \7f1906,76378
- (defun tags-apropos \7f1934,77331
- (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78157
- (defun select-tags-table \7f1964,78396
- (defvar select-tags-table-mode-map \7f2019,80523
- (define-derived-mode select-tags-table-mode \7f2030,80906
- (defun select-tags-table-select \7f2034,81090
- (defun select-tags-table-quit \7f2043,81456
- (defun complete-tag \7f2049,81611
- (defconst etags--xref-limit \7f2074,82552
- (defvar etags-xref-find-definitions-tag-order \7f2076,82587
- (defun etags-xref-find \7f2082,82877
- (defun etags--xref-find-definitions \7f2096,83406
- (defclass xref-etags-location \7f2129,85121
- (defun xref-make-etags-location \7f2135,85344
- (cl-defmethod xref-location-marker \7f2139,85499
- (cl-defmethod xref-location-line \7f2146,85743
+ (defun tags-loop-eval \7f1771,71313
+ (defun tags-loop-continue \7f1782,71642
+ (defun tags-search \7f1850,73948
+ (defun tags-query-replace \7f1871,74774
+ (defun tags-complete-tags-table-file \7f1896,75998
+ (defun list-tags \7f1906,76377
+ (defun tags-apropos \7f1934,77330
+ (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78156
+ (defun select-tags-table \7f1964,78395
+ (defvar select-tags-table-mode-map \7f2019,80522
+ (define-derived-mode select-tags-table-mode \7f2030,80905
+ (defun select-tags-table-select \7f2034,81089
+ (defun select-tags-table-quit \7f2043,81455
+ (defun complete-tag \7f2049,81610
+ (defconst etags--xref-limit \7f2074,82551
+ (defvar etags-xref-find-definitions-tag-order \7f2076,82586
+ (defun etags-xref-find \7f2082,82876
+ (defun etags--xref-find-definitions \7f2096,83405
+ (defclass xref-etags-location \7f2129,85120
+ (defun xref-make-etags-location \7f2135,85343
+ (cl-defmethod xref-location-marker \7f2139,85498
+ (cl-defmethod xref-location-line \7f2146,85742
  \f
  erl-src/gs_dialog.erl,98
  -define(VERSION\7f2,32
@@@ -2500,49 -2500,63 +2500,63 @@@ function MoveLayerBottom \7f223,507
  function MoveLayerBefore \7f236,5457
  function MoveLayerAfter \7f258,6090
  \f
+ lua-src/test.lua,442
+ function Rectangle.getPos \7f2,15
+ function Rectangle.getPos \7fgetPos\ 12,15
+ function Circle.getPos \7f6,61
+ function Circle.getPos \7fgetPos\ 16,61
+ function Cube.data.getFoo \7f10,102
+ function Cube.data.getFoo \7fgetFoo\ 110,102
+ function Square.something:Bar \7f14,148
+ function Square.something:Bar \7fBar\ 114,148
+    function test.me_22a(\7f22,241
+    function test.me_22a(\7fme_22a\ 122,241
+    local function test.me22b \7f25,297
+    local function test.me22b \7fme22b\ 125,297
\f
  make-src/Makefile,1133
  LATEST=\7f1,0
- NONSRCS=\7f35,1578
- CPPFLAGS=\7f49,2191
- LDFLAGS=\7f50,2260
- FASTCFLAGS=\7f55,2531
- FILTER=\7f58,2642
-       @-$(\7f$\ 172,3064
-       @-$(\7f$\ 173,3113
-       @-$(\7f$\ 174,3177
-       @-$(\7f$\ 175,3223
-       @-$(\7f$\ 176,3291
-       @-$(\7f$\ 177,3383
-       @$(\7f81,3466
-       @$(\7f82,3514
-       @$(\7f83,3577
-       @$(\7f84,3622
-       @$(\7f85,3689
-       @$(\7f86,3780
- ${CHECKOBJS}: CFLAGS=\7f88,3806
-       @env CHECKEROPTS=\7f92,3922
-       @$(\7f98,4094
-       @$(\7f106,4250
-       @$(\7f110,4374
-       @$(\7f114,4500
-       @for i in $(SRCS); do echo $$i;\7f140,5315
-       $(\7f160,6053
-       $(\7f163,6114
-       $(\7f166,6177
-       $(\7f169,6228
-       $(\7f172,6317
-       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6614
-       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6703
-       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6791
-       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6880
-       TEXTAGS=\7f204,7122
-       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7122
-       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7239
-       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7388
-       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7464
-       TEXTAGS=\7f219,7583
-       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7583
-       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7710
+ NONSRCS=\7f35,1577
+ CPPFLAGS=\7f49,2190
+ LDFLAGS=\7f50,2259
+ FASTCFLAGS=\7f55,2530
+ FILTER=\7f58,2641
+       @-$(\7f$\ 172,3063
+       @-$(\7f$\ 173,3112
+       @-$(\7f$\ 174,3176
+       @-$(\7f$\ 175,3222
+       @-$(\7f$\ 176,3290
+       @-$(\7f$\ 177,3382
+       @$(\7f81,3465
+       @$(\7f82,3513
+       @$(\7f83,3576
+       @$(\7f84,3621
+       @$(\7f85,3688
+       @$(\7f86,3779
+ ${CHECKOBJS}: CFLAGS=\7f88,3805
+       @env CHECKEROPTS=\7f92,3921
+       @$(\7f98,4093
+       @$(\7f106,4249
+       @$(\7f110,4373
+       @$(\7f114,4499
+       @for i in $(SRCS); do echo $$i;\7f140,5320
+       $(\7f160,6058
+       $(\7f163,6119
+       $(\7f166,6182
+       $(\7f169,6233
+       $(\7f172,6322
+       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6619
+       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6708
+       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6796
+       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6885
+       TEXTAGS=\7f204,7127
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7127
+       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7244
+       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7393
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7469
+       TEXTAGS=\7f219,7588
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7588
+       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7715
  \f
  objc-src/Subprocess.h,98
  #define Subprocess \7f41,1217
@@@ -3127,6 -3141,31 +3141,31 @@@ class Configure(\7f760,2487
      def save(\7f797,26022
      def nosave(\7f807,26310
  \f
+ ruby-src/test.rb,594
+ module ModuleExample\7f1,0
+     class ClassExample\7f2,21
+         def class_method\7f3,44
+         def ClassExample.singleton_class_method\7f6,116
+         def class_method_exclamation!\7f9,221
+         def class_method_question?\7f12,319
+         def class_method_equals=\7fclass_method_equals=\ 115,411
+         def `(\7f18,499
+         def +(\7f21,589
+         def [](\7f24,637
+         def []=(\7f[]=\ 127,687
+         def <<(\7f30,749
+         def ==(\7f==\ 133,799
+         def <=(\7f<=\ 136,869
+         def <=>(\7f<=>\ 139,940
+         def ===(\7f===\ 142,987
+     def module_method\7f46,1048
+     def ModuleExample.singleton_module_method\7f49,1110
\f
+ ruby-src/test1.ruby,37
+ class A\7f1,0
+  def a(\7f2,8
+  def b(\7f5,38
\f
  tex-src/testenv.tex,52
  \newcommand{\nm}\7f\nm\ 14,77
  \section{blah}\7fblah\ 18,139
index 544a166c6ddd432b7fa2214ebca95ddfdd83fa48,425e2526f3525c46214114acdc5da21d26247f18..425e2526f3525c46214114acdc5da21d26247f18
@@@ -3113,32 -3113,32 +3113,32 @@@ class generic_object\7f13,52
      int where_in_registry;\7f15,547
      generic_object(\7f17,582
      ~generic_object(\7f19,724
-     virtual void compute_next_state(\7f21,842
-     virtual void step(\7f22,888
- const int max_num_directions \7f31,1219
- class location:\7flocation\ 133,1289
-     location(\7f43,1642
-     ~location(\7f44,1661
- class irregular_location:\7firregular_location\ 147,1686
-     double x,\7f49,1734
-     double x, y,\7f49,1734
-     double x, y, z;\7f49,1734
-     irregular_location(\7f51,1762
-     ~irregular_location(\7f53,1854
- class discrete_location:\7fdiscrete_location\ 156,1889
-     int x,\7f58,1936
-     int x, y,\7f58,1936
-     int x, y, z;\7f58,1936
-     class location *neighbors[\7fneighbors\ 159,1953
-     void clear_neighbors(\7f60,2004
-     discrete_location(\7f62,2044
-     ~discrete_location(\7f65,2154
-     void assign_neighbor(\7f66,2184
- class agent:\7fagent\ 175,2508
-     location *where;\7fwhere\ 177,2549
-     agent(\7f79,2578
-     ~agent(\7f80,2591
-     void move(\7f81,2605
+     virtual void compute_next_state(\7f21,843
+     virtual void step(\7f22,889
+ const int max_num_directions \7f31,1220
+ class location:\7flocation\ 133,1290
+     location(\7f43,1643
+     ~location(\7f44,1662
+ class irregular_location:\7firregular_location\ 147,1687
+     double x,\7f49,1735
+     double x, y,\7f49,1735
+     double x, y, z;\7f49,1735
+     irregular_location(\7f51,1763
+     ~irregular_location(\7f53,1855
+ class discrete_location:\7fdiscrete_location\ 156,1890
+     int x,\7f58,1937
+     int x, y,\7f58,1937
+     int x, y, z;\7f58,1937
+     class location *neighbors[\7fneighbors\ 159,1954
+     void clear_neighbors(\7f60,2005
+     discrete_location(\7f62,2045
+     ~discrete_location(\7f65,2155
+     void assign_neighbor(\7f66,2185
+ class agent:\7fagent\ 175,2509
+     location *where;\7fwhere\ 177,2550
+     agent(\7f79,2579
+     ~agent(\7f80,2592
+     void move(\7f81,2606
  \f
  cp-src/fail.C,351
  struct A \7f7,263
@@@ -3268,28 -3268,28 +3268,28 @@@ el-src/emacs/lisp/progmodes/etags.el,51
  (defun next-file \7f1685,67976
  (defvar tags-loop-operate \7f1760,70890
  (defvar tags-loop-scan\7f1763,70984
- (defun tags-loop-eval \7f1771,71314
- (defun tags-loop-continue \7f1782,71643
- (defun tags-search \7f1850,73949
- (defun tags-query-replace \7f1871,74775
- (defun tags-complete-tags-table-file \7f1896,75999
- (defun list-tags \7f1906,76378
- (defun tags-apropos \7f1934,77331
- (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78157
- (defun select-tags-table \7f1964,78396
- (defvar select-tags-table-mode-map \7f2019,80523
- (define-derived-mode select-tags-table-mode \7f2030,80906
- (defun select-tags-table-select \7f2034,81090
- (defun select-tags-table-quit \7f2043,81456
- (defun complete-tag \7f2049,81611
- (defconst etags--xref-limit \7f2074,82552
- (defvar etags-xref-find-definitions-tag-order \7f2076,82587
- (defun etags-xref-find \7f2082,82877
- (defun etags--xref-find-definitions \7f2096,83406
- (defclass xref-etags-location \7f2129,85121
- (defun xref-make-etags-location \7f2135,85344
- (cl-defmethod xref-location-marker \7f2139,85499
- (cl-defmethod xref-location-line \7f2146,85743
+ (defun tags-loop-eval \7f1771,71313
+ (defun tags-loop-continue \7f1782,71642
+ (defun tags-search \7f1850,73948
+ (defun tags-query-replace \7f1871,74774
+ (defun tags-complete-tags-table-file \7f1896,75998
+ (defun list-tags \7f1906,76377
+ (defun tags-apropos \7f1934,77330
+ (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78156
+ (defun select-tags-table \7f1964,78395
+ (defvar select-tags-table-mode-map \7f2019,80522
+ (define-derived-mode select-tags-table-mode \7f2030,80905
+ (defun select-tags-table-select \7f2034,81089
+ (defun select-tags-table-quit \7f2043,81455
+ (defun complete-tag \7f2049,81610
+ (defconst etags--xref-limit \7f2074,82551
+ (defvar etags-xref-find-definitions-tag-order \7f2076,82586
+ (defun etags-xref-find \7f2082,82876
+ (defun etags--xref-find-definitions \7f2096,83405
+ (defclass xref-etags-location \7f2129,85120
+ (defun xref-make-etags-location \7f2135,85343
+ (cl-defmethod xref-location-marker \7f2139,85498
+ (cl-defmethod xref-location-line \7f2146,85742
  \f
  erl-src/gs_dialog.erl,98
  -define(VERSION\7f2,32
@@@ -3386,50 -3386,64 +3386,64 @@@ function MoveLayerBottom \7f223,507
  function MoveLayerBefore \7f236,5457
  function MoveLayerAfter \7f258,6090
  \f
+ lua-src/test.lua,442
+ function Rectangle.getPos \7f2,15
+ function Rectangle.getPos \7fgetPos\ 12,15
+ function Circle.getPos \7f6,61
+ function Circle.getPos \7fgetPos\ 16,61
+ function Cube.data.getFoo \7f10,102
+ function Cube.data.getFoo \7fgetFoo\ 110,102
+ function Square.something:Bar \7f14,148
+ function Square.something:Bar \7fBar\ 114,148
+    function test.me_22a(\7f22,241
+    function test.me_22a(\7fme_22a\ 122,241
+    local function test.me22b \7f25,297
+    local function test.me22b \7fme22b\ 125,297
\f
  make-src/Makefile,1156
  LATEST=\7f1,0
- NONSRCS=\7f35,1578
- CPPFLAGS=\7f49,2191
- LDFLAGS=\7f50,2260
- FASTCFLAGS=\7f55,2531
- FILTER=\7f58,2642
-       @-$(\7f$\ 172,3064
-       @-$(\7f$\ 173,3113
-       @-$(\7f$\ 174,3177
-       @-$(\7f$\ 175,3223
-       @-$(\7f$\ 176,3291
-       @-$(\7f$\ 177,3383
-       @$(\7f81,3466
-       @$(\7f82,3514
-       @$(\7f83,3577
-       @$(\7f84,3622
-       @$(\7f85,3689
-       @$(\7f86,3780
- ${CHECKOBJS}: CFLAGS=\7f88,3806
-       @env CHECKEROPTS=\7f92,3922
-       @$(\7f98,4094
-       @$(\7f106,4250
-       @$(\7f110,4374
-       @$(\7f114,4500
-       @for i in $(\7f140,5315
-       @for i in $(SRCS); do echo $$i;\7f140,5315
-       $(\7f160,6053
-       $(\7f163,6114
-       $(\7f166,6177
-       $(\7f169,6228
-       $(\7f172,6317
-       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6614
-       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6703
-       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6791
-       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6880
-       TEXTAGS=\7f204,7122
-       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7122
-       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7239
-       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7388
-       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7464
-       TEXTAGS=\7f219,7583
-       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7583
-       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7710
+ NONSRCS=\7f35,1577
+ CPPFLAGS=\7f49,2190
+ LDFLAGS=\7f50,2259
+ FASTCFLAGS=\7f55,2530
+ FILTER=\7f58,2641
+       @-$(\7f$\ 172,3063
+       @-$(\7f$\ 173,3112
+       @-$(\7f$\ 174,3176
+       @-$(\7f$\ 175,3222
+       @-$(\7f$\ 176,3290
+       @-$(\7f$\ 177,3382
+       @$(\7f81,3465
+       @$(\7f82,3513
+       @$(\7f83,3576
+       @$(\7f84,3621
+       @$(\7f85,3688
+       @$(\7f86,3779
+ ${CHECKOBJS}: CFLAGS=\7f88,3805
+       @env CHECKEROPTS=\7f92,3921
+       @$(\7f98,4093
+       @$(\7f106,4249
+       @$(\7f110,4373
+       @$(\7f114,4499
+       @for i in $(\7f140,5320
+       @for i in $(SRCS); do echo $$i;\7f140,5320
+       $(\7f160,6058
+       $(\7f163,6119
+       $(\7f166,6182
+       $(\7f169,6233
+       $(\7f172,6322
+       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6619
+       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6708
+       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6796
+       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6885
+       TEXTAGS=\7f204,7127
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7127
+       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7244
+       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7393
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7469
+       TEXTAGS=\7f219,7588
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7588
+       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7715
  \f
  objc-src/Subprocess.h,98
  #define Subprocess \7f41,1217
@@@ -4042,6 -4056,31 +4056,31 @@@ class Configure(\7f760,2487
      def save(\7f797,26022
      def nosave(\7f807,26310
  \f
+ ruby-src/test.rb,594
+ module ModuleExample\7f1,0
+     class ClassExample\7f2,21
+         def class_method\7f3,44
+         def ClassExample.singleton_class_method\7f6,116
+         def class_method_exclamation!\7f9,221
+         def class_method_question?\7f12,319
+         def class_method_equals=\7fclass_method_equals=\ 115,411
+         def `(\7f18,499
+         def +(\7f21,589
+         def [](\7f24,637
+         def []=(\7f[]=\ 127,687
+         def <<(\7f30,749
+         def ==(\7f==\ 133,799
+         def <=(\7f<=\ 136,869
+         def <=>(\7f<=>\ 139,940
+         def ===(\7f===\ 142,987
+     def module_method\7f46,1048
+     def ModuleExample.singleton_module_method\7f49,1110
\f
+ ruby-src/test1.ruby,37
+ class A\7f1,0
+  def a(\7f2,8
+  def b(\7f5,38
\f
  tex-src/testenv.tex,52
  \newcommand{\nm}\7f\nm\ 14,77
  \section{blah}\7fblah\ 18,139
index f3d17b10a3e58a366576d99d51f77908864d830e,39522dbdb9b406981e10dcc394113cb1684512ad..39522dbdb9b406981e10dcc394113cb1684512ad
@@@ -3113,32 -3113,32 +3113,32 @@@ class generic_object\7f13,52
      int where_in_registry;\7fgeneric_object::where_in_registry\ 115,547
      generic_object(\7fgeneric_object::generic_object\ 117,582
      ~generic_object(\7fgeneric_object::~generic_object\ 119,724
-     virtual void compute_next_state(\7fgeneric_object::compute_next_state\ 121,842
-     virtual void step(\7fgeneric_object::step\ 122,888
- const int max_num_directions \7f31,1219
- class location:\7flocation\ 133,1289
-     location(\7flocation::location\ 143,1642
-     ~location(\7flocation::~location\ 144,1661
- class irregular_location:\7firregular_location\ 147,1686
-     double x,\7firregular_location::x\ 149,1734
-     double x, y,\7firregular_location::y\ 149,1734
-     double x, y, z;\7firregular_location::z\ 149,1734
-     irregular_location(\7firregular_location::irregular_location\ 151,1762
-     ~irregular_location(\7firregular_location::~irregular_location\ 153,1854
- class discrete_location:\7fdiscrete_location\ 156,1889
-     int x,\7fdiscrete_location::x\ 158,1936
-     int x, y,\7fdiscrete_location::y\ 158,1936
-     int x, y, z;\7fdiscrete_location::z\ 158,1936
-     class location *neighbors[\7fdiscrete_location::neighbors\ 159,1953
-     void clear_neighbors(\7fdiscrete_location::clear_neighbors\ 160,2004
-     discrete_location(\7fdiscrete_location::discrete_location\ 162,2044
-     ~discrete_location(\7fdiscrete_location::~discrete_location\ 165,2154
-     void assign_neighbor(\7fdiscrete_location::assign_neighbor\ 166,2184
- class agent:\7fagent\ 175,2508
-     location *where;\7fagent::where\ 177,2549
-     agent(\7fagent::agent\ 179,2578
-     ~agent(\7fagent::~agent\ 180,2591
-     void move(\7fagent::move\ 181,2605
+     virtual void compute_next_state(\7fgeneric_object::compute_next_state\ 121,843
+     virtual void step(\7fgeneric_object::step\ 122,889
+ const int max_num_directions \7f31,1220
+ class location:\7flocation\ 133,1290
+     location(\7flocation::location\ 143,1643
+     ~location(\7flocation::~location\ 144,1662
+ class irregular_location:\7firregular_location\ 147,1687
+     double x,\7firregular_location::x\ 149,1735
+     double x, y,\7firregular_location::y\ 149,1735
+     double x, y, z;\7firregular_location::z\ 149,1735
+     irregular_location(\7firregular_location::irregular_location\ 151,1763
+     ~irregular_location(\7firregular_location::~irregular_location\ 153,1855
+ class discrete_location:\7fdiscrete_location\ 156,1890
+     int x,\7fdiscrete_location::x\ 158,1937
+     int x, y,\7fdiscrete_location::y\ 158,1937
+     int x, y, z;\7fdiscrete_location::z\ 158,1937
+     class location *neighbors[\7fdiscrete_location::neighbors\ 159,1954
+     void clear_neighbors(\7fdiscrete_location::clear_neighbors\ 160,2005
+     discrete_location(\7fdiscrete_location::discrete_location\ 162,2045
+     ~discrete_location(\7fdiscrete_location::~discrete_location\ 165,2155
+     void assign_neighbor(\7fdiscrete_location::assign_neighbor\ 166,2185
+ class agent:\7fagent\ 175,2509
+     location *where;\7fagent::where\ 177,2550
+     agent(\7fagent::agent\ 179,2579
+     ~agent(\7fagent::~agent\ 180,2592
+     void move(\7fagent::move\ 181,2606
  \f
  cp-src/fail.C,438
  struct A \7f7,263
@@@ -3268,28 -3268,28 +3268,28 @@@ el-src/emacs/lisp/progmodes/etags.el,51
  (defun next-file \7f1685,67976
  (defvar tags-loop-operate \7f1760,70890
  (defvar tags-loop-scan\7f1763,70984
- (defun tags-loop-eval \7f1771,71314
- (defun tags-loop-continue \7f1782,71643
- (defun tags-search \7f1850,73949
- (defun tags-query-replace \7f1871,74775
- (defun tags-complete-tags-table-file \7f1896,75999
- (defun list-tags \7f1906,76378
- (defun tags-apropos \7f1934,77331
- (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78157
- (defun select-tags-table \7f1964,78396
- (defvar select-tags-table-mode-map \7f2019,80523
- (define-derived-mode select-tags-table-mode \7f2030,80906
- (defun select-tags-table-select \7f2034,81090
- (defun select-tags-table-quit \7f2043,81456
- (defun complete-tag \7f2049,81611
- (defconst etags--xref-limit \7f2074,82552
- (defvar etags-xref-find-definitions-tag-order \7f2076,82587
- (defun etags-xref-find \7f2082,82877
- (defun etags--xref-find-definitions \7f2096,83406
- (defclass xref-etags-location \7f2129,85121
- (defun xref-make-etags-location \7f2135,85344
- (cl-defmethod xref-location-marker \7f2139,85499
- (cl-defmethod xref-location-line \7f2146,85743
+ (defun tags-loop-eval \7f1771,71313
+ (defun tags-loop-continue \7f1782,71642
+ (defun tags-search \7f1850,73948
+ (defun tags-query-replace \7f1871,74774
+ (defun tags-complete-tags-table-file \7f1896,75998
+ (defun list-tags \7f1906,76377
+ (defun tags-apropos \7f1934,77330
+ (define-button-type 'tags-select-tags-table\7ftags-select-tags-table\ 11957,78156
+ (defun select-tags-table \7f1964,78395
+ (defvar select-tags-table-mode-map \7f2019,80522
+ (define-derived-mode select-tags-table-mode \7f2030,80905
+ (defun select-tags-table-select \7f2034,81089
+ (defun select-tags-table-quit \7f2043,81455
+ (defun complete-tag \7f2049,81610
+ (defconst etags--xref-limit \7f2074,82551
+ (defvar etags-xref-find-definitions-tag-order \7f2076,82586
+ (defun etags-xref-find \7f2082,82876
+ (defun etags--xref-find-definitions \7f2096,83405
+ (defclass xref-etags-location \7f2129,85120
+ (defun xref-make-etags-location \7f2135,85343
+ (cl-defmethod xref-location-marker \7f2139,85498
+ (cl-defmethod xref-location-line \7f2146,85742
  \f
  erl-src/gs_dialog.erl,98
  -define(VERSION\7f2,32
@@@ -3386,50 -3386,64 +3386,64 @@@ function MoveLayerBottom \7f223,507
  function MoveLayerBefore \7f236,5457
  function MoveLayerAfter \7f258,6090
  \f
+ lua-src/test.lua,442
+ function Rectangle.getPos \7f2,15
+ function Rectangle.getPos \7fgetPos\ 12,15
+ function Circle.getPos \7f6,61
+ function Circle.getPos \7fgetPos\ 16,61
+ function Cube.data.getFoo \7f10,102
+ function Cube.data.getFoo \7fgetFoo\ 110,102
+ function Square.something:Bar \7f14,148
+ function Square.something:Bar \7fBar\ 114,148
+    function test.me_22a(\7f22,241
+    function test.me_22a(\7fme_22a\ 122,241
+    local function test.me22b \7f25,297
+    local function test.me22b \7fme22b\ 125,297
\f
  make-src/Makefile,1156
  LATEST=\7f1,0
- NONSRCS=\7f35,1578
- CPPFLAGS=\7f49,2191
- LDFLAGS=\7f50,2260
- FASTCFLAGS=\7f55,2531
- FILTER=\7f58,2642
-       @-$(\7f$\ 172,3064
-       @-$(\7f$\ 173,3113
-       @-$(\7f$\ 174,3177
-       @-$(\7f$\ 175,3223
-       @-$(\7f$\ 176,3291
-       @-$(\7f$\ 177,3383
-       @$(\7f81,3466
-       @$(\7f82,3514
-       @$(\7f83,3577
-       @$(\7f84,3622
-       @$(\7f85,3689
-       @$(\7f86,3780
- ${CHECKOBJS}: CFLAGS=\7f88,3806
-       @env CHECKEROPTS=\7f92,3922
-       @$(\7f98,4094
-       @$(\7f106,4250
-       @$(\7f110,4374
-       @$(\7f114,4500
-       @for i in $(\7f140,5315
-       @for i in $(SRCS); do echo $$i;\7f140,5315
-       $(\7f160,6053
-       $(\7f163,6114
-       $(\7f166,6177
-       $(\7f169,6228
-       $(\7f172,6317
-       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6614
-       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6703
-       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6791
-       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6880
-       TEXTAGS=\7f204,7122
-       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7122
-       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7239
-       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7388
-       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7464
-       TEXTAGS=\7f219,7583
-       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7583
-       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7710
+ NONSRCS=\7f35,1577
+ CPPFLAGS=\7f49,2190
+ LDFLAGS=\7f50,2259
+ FASTCFLAGS=\7f55,2530
+ FILTER=\7f58,2641
+       @-$(\7f$\ 172,3063
+       @-$(\7f$\ 173,3112
+       @-$(\7f$\ 174,3176
+       @-$(\7f$\ 175,3222
+       @-$(\7f$\ 176,3290
+       @-$(\7f$\ 177,3382
+       @$(\7f81,3465
+       @$(\7f82,3513
+       @$(\7f83,3576
+       @$(\7f84,3621
+       @$(\7f85,3688
+       @$(\7f86,3779
+ ${CHECKOBJS}: CFLAGS=\7f88,3805
+       @env CHECKEROPTS=\7f92,3921
+       @$(\7f98,4093
+       @$(\7f106,4249
+       @$(\7f110,4373
+       @$(\7f114,4499
+       @for i in $(\7f140,5320
+       @for i in $(SRCS); do echo $$i;\7f140,5320
+       $(\7f160,6058
+       $(\7f163,6119
+       $(\7f166,6182
+       $(\7f169,6233
+       $(\7f172,6322
+       sdiff --suppress-common-lines --width=\7fwidth\ 1186,6619
+       sdiff --suppress-common-lines --width=\7fwidth\ 1189,6708
+       sdiff --suppress-common-lines --width=\7fwidth\ 1192,6796
+       sdiff --suppress-common-lines --width=\7fwidth\ 1195,6885
+       TEXTAGS=\7f204,7127
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=\7fregex\ 1204,7127
+       ${RUN} etags12 --members -o $@ --regex=\7fregex\ 1207,7244
+       ${RUN} ./ctags -o $@ --regex=\7fregex\ 1213,7393
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=\7fregex\ 1216,7469
+       TEXTAGS=\7f219,7588
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex=\7fregex\ 1219,7588
+       ${RUN} ./extags -e --regex-c=\7fc\ 1222,7715
  \f
  objc-src/Subprocess.h,98
  #define Subprocess \7f41,1217
@@@ -4042,6 -4056,31 +4056,31 @@@ class Configure(\7f760,2487
      def save(\7f797,26022
      def nosave(\7f807,26310
  \f
+ ruby-src/test.rb,594
+ module ModuleExample\7f1,0
+     class ClassExample\7f2,21
+         def class_method\7f3,44
+         def ClassExample.singleton_class_method\7f6,116
+         def class_method_exclamation!\7f9,221
+         def class_method_question?\7f12,319
+         def class_method_equals=\7fclass_method_equals=\ 115,411
+         def `(\7f18,499
+         def +(\7f21,589
+         def [](\7f24,637
+         def []=(\7f[]=\ 127,687
+         def <<(\7f30,749
+         def ==(\7f==\ 133,799
+         def <=(\7f<=\ 136,869
+         def <=>(\7f<=>\ 139,940
+         def ===(\7f===\ 142,987
+     def module_method\7f46,1048
+     def ModuleExample.singleton_module_method\7f49,1110
\f
+ ruby-src/test1.ruby,37
+ class A\7f1,0
+  def a(\7f2,8
+  def b(\7f5,38
\f
  tex-src/testenv.tex,52
  \newcommand{\nm}\7f\nm\ 14,77
  \section{blah}\7fblah\ 18,139
index f5cf2aeb3b5f33ea8964e46341fe15aec7635ef5,00d5b9f52b215be1a30bf268c0e0dd9359e30db1..4d9f358c8ed8c748f8c9fc122f832a37bb81d074
@@@ -13,7 -13,7 +13,7 @@@ FORTHSRC=$(addprefix ./forth-src/,test-
  FSRC=$(addprefix ./f-src/,entry.for entry.strange_suffix entry.strange)
  HTMLSRC=$(addprefix ./html-src/,softwarelibero.html index.shtml algrthms.html software.html)
  #JAVASRC=$(addprefix ./java-src/, )
- LUASRC=$(addprefix ./lua-src/,allegro.lua)
+ LUASRC=$(addprefix ./lua-src/,allegro.lua test.lua)
  MAKESRC=$(addprefix ./make-src/,Makefile)
  OBJCSRC=$(addprefix ./objc-src/,Subprocess.h Subprocess.m PackInsp.h PackInsp.m)
  OBJCPPSRC=$(addprefix ./objcpp-src/,SimpleCalc.H SimpleCalc.M)
@@@ -23,16 -23,17 +23,17 @@@ PHPSRC=$(addprefix ./php-src/,lce_funct
  PSSRC=$(addprefix ./ps-src/,rfc1245.ps)
  PROLSRC=$(addprefix ./prol-src/,ordsets.prolog natded.prolog)
  PYTSRC=$(addprefix ./pyt-src/,server.py)
+ RBSRC=$(addprefix ./ruby-src/,test.rb test1.ruby)
  TEXSRC=$(addprefix ./tex-src/,testenv.tex gzip.texi texinfo.tex nonewline.tex)
  YSRC=$(addprefix ./y-src/,parse.y parse.c atest.y cccp.c cccp.y)
  SRCS=${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\
       ${FORTHSRC} ${HTMLSRC} ${JAVASRC} ${LUASRC} ${MAKESRC} ${OBJCSRC}\
       ${OBJCPPSRC} ${PASSRC} ${PHPSRC} ${PERLSRC} ${PSSRC} ${PROLSRC} ${PYTSRC}\
-      ${TEXSRC} ${YSRC}
+      ${RBSRC} ${TEXSRC} ${YSRC}
  NONSRCS=./f-src/entry.strange ./erl-src/lists.erl ./cp-src/clheir.hpp.gz
  
 -ETAGS_PROG=../../lib-src/etags
 -CTAGS_PROG=../../lib-src/ctags
 +ETAGS_PROG=../../../lib-src/etags
 +CTAGS_PROG=../../../lib-src/ctags
  
  REGEX=/[ \t]*DEFVAR_[A-Z_ \t\n(]+"\([^"]+\)"/
  xx="this line is here because of a fontlock bug
diff --combined test/manual/indent/js.js
index d897b9f81e77b7f407f3d8bced6e161dfce49520,9a1e0dc7ad5b3e141a75a787866d2232aa70f5e8..9a1e0dc7ad5b3e141a75a787866d2232aa70f5e8
@@@ -76,6 -76,20 +76,20 @@@ class A 
    }
  }
  
+ if (true)
+   1
+ else
+   2
+ Foobar
+   .find()
+   .catch((err) => {
+     return 2;
+   })
+   .then((num) => {
+     console.log(num);
+   });
  // Local Variables:
  // indent-tabs-mode: nil
  // js-indent-level: 2
diff --combined test/src/keymap-tests.el
index 973b24073913d4bf3fc6e119da7c5d0e1849642d,524563fea50c2d9a7eb08e7d3504c64fa348a675..524563fea50c2d9a7eb08e7d3504c64fa348a675
@@@ -23,7 -23,7 +23,7 @@@
  
  (require 'ert)
  
- (ert-deftest keymap-store_in_keymap-FASTINT-on-nonchars ()
+ (ert-deftest keymap-store_in_keymap-XFASTINT-on-non-characters ()
    "Check for bug fixed in \"Fix assertion violation in define-key\",
  commit 86c19714b097aa477d339ed99ffb5136c755a046."
    (let ((def (lookup-key Buffer-menu-mode-map [32])))