emacs-diffs
[Top][All Lists]
Advanced

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

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


From: Andrea Corallo
Subject: feature/native-comp d432cbe 2/2: Merge remote-tracking branch 'savannah/master' into HEAD
Date: Thu, 16 Apr 2020 12:48:22 -0400 (EDT)

branch: feature/native-comp
commit d432cbeb27c1f0a2e59c6853b61ecba3615f645e
Merge: 886ded1 0127118
Author: Andrea Corallo <address@hidden>
Commit: Andrea Corallo <address@hidden>

    Merge remote-tracking branch 'savannah/master' into HEAD
---
 ChangeLog.3                          | 1090 +++++++++++++++++++++++++++++++++-
 admin/authors.el                     |   31 +-
 configure.ac                         |    2 +-
 doc/lispref/windows.texi             |   39 +-
 etc/AUTHORS                          |  108 ++--
 etc/NEWS                             |    3 +-
 etc/NEWS.27                          |   10 +
 lisp/arc-mode.el                     |    2 +-
 lisp/auth-source-pass.el             |    2 +-
 lisp/calendar/todo-mode.el           |   14 +-
 lisp/cedet/semantic/db-ebrowse.el    |    5 +-
 lisp/cedet/semantic/texi.el          |    2 +-
 lisp/cedet/srecode/map.el            |    2 +-
 lisp/dired.el                        |    8 +-
 lisp/emacs-lisp/autoload.el          |    2 +-
 lisp/emacs-lisp/shadow.el            |    3 +-
 lisp/erc/erc-dcc.el                  |   14 +-
 lisp/erc/erc-track.el                |   32 +-
 lisp/erc/erc.el                      |   47 +-
 lisp/files.el                        |   11 +-
 lisp/finder.el                       |    2 +-
 lisp/generic-x.el                    |    8 +-
 lisp/gnus/gnus-agent.el              |    7 +-
 lisp/gnus/gnus-cache.el              |    2 +-
 lisp/gnus/gnus-score.el              |    2 +-
 lisp/gnus/gnus-util.el               |    2 +-
 lisp/gnus/gnus-uu.el                 |    2 +-
 lisp/gnus/nndraft.el                 |    2 +-
 lisp/gnus/nnmh.el                    |   10 +-
 lisp/gnus/nnspool.el                 |    2 +-
 lisp/gnus/spam-stat.el               |    4 +-
 lisp/help-fns.el                     |    2 +-
 lisp/help.el                         |    2 +-
 lisp/htmlfontify.el                  |  109 +---
 lisp/international/quail.el          |    2 +-
 lisp/international/titdic-cnv.el     |    2 +-
 lisp/mail/mspools.el                 |    4 +-
 lisp/mail/rmail.el                   |    5 +-
 lisp/net/ange-ftp.el                 |    4 +-
 lisp/net/puny.el                     |    2 +-
 lisp/net/tramp.el                    |    2 +-
 lisp/obsolete/gulp.el                |    2 +-
 lisp/obsolete/vc-arch.el             |    9 +-
 lisp/org/ob-core.el                  |    3 +-
 lisp/org/org-table.el                |    2 +-
 lisp/progmodes/ebnf2ps.el            |    4 +-
 lisp/progmodes/executable.el         |    2 +-
 lisp/progmodes/gdb-mi.el             |    2 +-
 lisp/progmodes/scheme.el             |    2 +-
 lisp/simple.el                       |    9 +-
 lisp/startup.el                      |    4 +-
 lisp/textmodes/refer.el              |    2 +-
 lisp/textmodes/sgml-mode.el          |    5 +-
 lisp/url/url-about.el                |    2 +-
 lisp/vc/diff-mode.el                 |    2 +-
 lisp/vc/vc-rcs.el                    |    5 +-
 src/image.c                          |    9 +-
 src/indent.c                         |   12 +-
 src/nsterm.m                         |   15 +
 src/w32.c                            |    2 -
 src/w32.h                            |    1 +
 src/w32fns.c                         |    1 -
 src/w32image.c                       |   68 ++-
 src/xdisp.c                          |   16 +-
 test/lisp/net/tramp-archive-tests.el |    2 +-
 test/lisp/net/tramp-tests.el         |    2 +-
 66 files changed, 1469 insertions(+), 318 deletions(-)

diff --git a/ChangeLog.3 b/ChangeLog.3
index fc41c1f..c5bc7b3 100644
--- a/ChangeLog.3
+++ b/ChangeLog.3
@@ -1,3 +1,1091 @@
+2020-04-14  Mattias Engdegård  <address@hidden>
+
+       Fix edge case errors in filename-matching regexps
+
+       These changes fix actual or latent bugs in regexps that match
+       file names, such as PATTERN arguments to 'directory-files'.  See
+       https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg00265.html
+
+       * admin/authors.el (authors-obsolete-files-regexps)
+       (authors-renamed-files-regexps):
+       * lisp/auth-source-pass.el (auth-source-pass-entries):
+       * lisp/calendar/todo-mode.el (todo-show, todo-find-filtered-items-file)
+       (todo-filter-items, todo-reset-nondiary-marker, todo-reset-done-string)
+       (todo-reset-comment-string, todo-reset-highlight-item):
+       * lisp/cedet/semantic/db-ebrowse.el (semanticdb-load-ebrowse-caches):
+       * lisp/cedet/semantic/texi.el (semantic-texi-associated-files):
+       * lisp/cedet/srecode/map.el (srecode-map-update-map):
+       * lisp/dired.el (dired-re-no-dot):
+       * lisp/emacs-lisp/autoload.el (update-directory-autoloads):
+       * lisp/emacs-lisp/shadow.el (load-path-shadows-find):
+       * lisp/files.el (auto-mode-alist, directory-files-no-dot-files-regexp):
+       * lisp/finder.el (finder-compile-keywords):
+       * lisp/generic-x.el (inetd-conf-generic-mode, named-boot-generic-mode)
+       (resolve-conf-generic-mode, etc-modules-conf-generic-mode):
+       * lisp/gnus/gnus-agent.el (gnus-agent-read-agentview)
+       (gnus-agent-regenerate-group, 
gnus-agent-update-files-total-fetched-for):
+       * lisp/gnus/gnus-cache.el (gnus-cache-articles-in-group):
+       * lisp/gnus/gnus-score.el (gnus-score-search-global-directories):
+       * lisp/gnus/gnus-util.el (gnus-delete-directory):
+       * lisp/gnus/gnus-uu.el (gnus-uu-dir-files):
+       * lisp/gnus/nndraft.el (nndraft-request-group):
+       * lisp/gnus/nnmh.el (nnmh-request-group, nnmh-request-create-group):
+       (nnmh-request-delete-group, nnmh-active-number, 
nnmh-update-gnus-unreads):
+       * lisp/gnus/nnspool.el (nnspool-request-group):
+       * lisp/gnus/spam-stat.el (spam-stat-process-directory)
+       (spam-stat-test-directory):
+       * lisp/help-fns.el (help-fns--first-release):
+       * lisp/help.el (view-emacs-news):
+       * lisp/international/quail.el (quail-update-leim-list-file):
+       * lisp/international/titdic-cnv.el (batch-titdic-convert):
+       * lisp/mail/mspools.el (mspools-set-vm-spool-files)
+       (mspools-get-spool-files):
+       * lisp/mail/rmail.el (rmail-secondary-file-regexp)
+       (rmail-speedbar-match-folder-regexp):
+       * lisp/net/ange-ftp.el (ange-ftp-delete-directory):
+       * lisp/net/tramp.el (tramp-use-absolute-autoload-file-names):
+       * lisp/obsolete/gulp.el (gulp-send-requests):
+       * lisp/obsolete/vc-arch.el (vc-arch-trim-revlib):
+       * lisp/org/ob-core.el (org-babel-remove-temporary-directory):
+       * lisp/progmodes/ebnf2ps.el (ebnf-file-suffix-regexp, 
ebnf-style-database):
+       * lisp/progmodes/executable.el (executable-command-find-posix-p):
+       * lisp/startup.el (command-line):
+       * lisp/textmodes/refer.el (refer-get-bib-files):
+       * lisp/url/url-about.el (url-probe-protocols):
+       * lisp/vc/vc-rcs.el (vc-rcs-register, vc-rcs-unregister):
+       * test/lisp/net/tramp-archive-tests.el
+       (tramp-archive-test19-directory-files-and-attributes):
+       * test/lisp/net/tramp-tests.el 
(tramp-test19-directory-files-and-attributes):
+       Replace ^ and $ with \` and \', respectively.
+       Use (rx (or (not ".") "...")), translated into "[^.]\\|\\.\\.\\.",
+       to match anything but "." and "..", instead of several incorrect
+       regexps.
+
+2020-04-14  Eli Zaretskii  <address@hidden>
+
+       Clarify the doc string of 'yank'
+
+       * lisp/simple.el (yank): Mention 'current-kill' in the doc string,
+       so that people could find all the gory details of what is "the most
+       recent kill" for this purpose.  (Bug#40375)
+
+2020-04-14  Amin Bandali  <address@hidden>
+
+       New function erc-track-switch-buffer-other-window
+
+       * lisp/erc/erc-track.el (erc-track-switch-buffer): Factor out the
+       implementation from here ...
+       (erc-track--switch-buffer): ... to here.
+       (erc-track-switch-buffer-other-window): New function, like
+       `erc-track-switch-buffer', but uses `switch-to-buffer-other-window'
+       instead, to open the buffer in another window.
+
+2020-04-14  Amin Bandali  <address@hidden>
+
+       New function erc-switch-to-buffer-other-window
+
+       * lisp/erc/erc.el (erc-switch-to-buffer): Factor out the buffer choice
+       implementation from here ...
+       (erc--switch-to-buffer): ... to here.
+       (erc-switch-to-buffer-other-window): New function, like
+       `erc-switch-to-buffer', but uses `switch-to-buffer-other-window'
+       instead, to open the buffer in another window.
+
+2020-04-13  Štěpán Němec  <address@hidden>
+
+       Clarify documentation on inhibit-modification-hooks intended usage
+
+       Cf. bug#40332 and the discussion at
+       https://lists.gnu.org/archive/html/emacs-devel/2020-03/msg00921.html
+
+       * doc/lispref/text.texi (Change Hooks):
+       * src/insdel.c (syms_of_insdel): Clarify the intended usage of
+       'inhibit-modification-hooks'.
+
+2020-04-13  Štěpán Němec  <address@hidden>
+
+       gnus-shorten-url: Improve and avoid args-out-of-range error
+
+       'gnus-shorten-url' (used by 'gnus-summary-browse-url') ignored
+       fragment identifiers and didn't check substring bounds, in some cases
+       leading to runtime errors, e.g.:
+
+         (gnus-shorten-url "https://some.url.with/path/and#also_a_long_target"; 
40)
+         ;; => Lisp error: (args-out-of-range "/path/and" -18 nil)
+
+       This commit makes it account for #fragments and fixes faulty string
+       computation.  (bug#39980)
+
+       Do not merge to master, where the helper is put to subr-x.el.
+
+       * lisp/gnus/gnus-sum.el (gnus--string-truncate-left): New helper
+       function (copied from 'ediff-truncate-string-left').
+       (gnus-shorten-url): Use it and don't drop #fragments.
+
+2020-04-13  Eli Zaretskii  <address@hidden>
+
+       Minor wording change in Introduction to Programming in Emacs Lisp
+
+       * doc/lispintro/emacs-lisp-intro.texi (Prevent confusion): Mention
+       that dynamic scoping is only the default in Emacs Lisp, not the
+       only scoping rule.  (Bug#40594)
+
+2020-04-13  Eli Zaretskii  <address@hidden>
+
+       Fix 'flymake-show-diagnostics-buffer' when line numbers are displayed
+
+       * lisp/progmodes/flymake.el (flymake--diagnostics-buffer-entries):
+       Do nothing if 'flymake--diagnostics-buffer-source' is not a
+       buffer.  (Bug#40529)
+
+2020-04-12  Eli Zaretskii  <address@hidden>
+
+       Fix last changes describing mail commands
+
+       * doc/emacs/sending.texi (Sending Mail): Fix the description of
+       the behavior of 'C-x m' without prefix argument.  (Bug#40561)
+
+2020-04-12  João Távora  <address@hidden>
+
+       Do setup Flymake in file-less Elisp buffers
+
+       (Bug#40573)
+
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode): Change
+       condition for setting flymake-diagnostic-functions.
+
+2020-04-12  Philipp Stephani  <address@hidden>
+
+       Fix error message for ‘cl-struct-unknown-slot’ (bug#39995)
+
+       * lisp/emacs-lisp/cl-macs.el (cl-struct-unknown-slot): Remove spurious
+       format specifiers.
+
+2020-04-12  Eli Zaretskii  <address@hidden>
+
+       Fix and improve documentation of mail-related features
+
+       * lisp/simple.el (compose-mail): Clarify the effect of the
+       CONTINUE argument.
+       * lisp/mail/sendmail.el (mail-from-style): Update the RFC value in
+       the obsolescence warning text.
+
+       * doc/emacs/sending.texi (Sending Mail): Fix the description of
+       the behavior of 'C-x m' wrt prefix argument.
+       (Mail Headers): Remove the description of 'mail-from-style'.
+
+       * etc/NEWS: Mention that 'mail-from-style' is obsolete.
+
+       (Bug#40561)
+
+2020-04-12  Martin Rudalics  <address@hidden>
+
+       Fix build failure with Fx_gtk_debug
+
+       * src/xfns.c (Fx_gtk_debug, Sx_gtk_debug): Define only for GTK
+       versions >= 3.14.0 so gtk_window_set_interactive_debugging is
+       defined.  Reported by Andreas Schwab  <address@hidden>.
+
+2020-04-11  Alan Mackenzie  <address@hidden>
+
+       Mention jit-lock deferred as an alternative to 
fast-but-imprecise-scrolling
+
+       * doc/emacs/display.texi (Scrolling): Add a paragraph on using jit-lock
+       deferred fontification as a way of obviating Emacs hanging after
+       auto-repeated scrolling.
+
+2020-04-10  Stefan Monnier  <address@hidden>
+
+       * doc/lispref/keymaps.texi (Extended Menu Items): Tweak :key-sequence
+
+       Don't make it sound like `:key-sequence nil` is any different than the
+       absence of `:key-sequence`.  And the performance advantage of
+       `:key-sequence` disappeared long ago.
+
+2020-04-10  Eli Zaretskii  <address@hidden>
+
+       Fix redisplay when scrolling under redisplay-dont-pause
+
+       * src/dispnew.c (update_window): Reset the window's
+       'must_be_updated_p' flag if the window's update was completed
+       without interruption.  This fixes redisplay glitches when
+       'redisplay-dont-pause' is nil, at least on MS-Windows, because
+       'expose_window' doesn't redraw the exposed rectangle when the
+       window's 'must_be_updated_p' flag is set.
+
+2020-04-09  Eli Zaretskii  <address@hidden>
+
+       Fix face extension in pulse.el
+
+       * lisp/cedet/pulse.el (pulse-reset-face): Propagate the :extend
+       attribute of FACE to the face used for displaying the pulse.
+       Reported by Adam Porter <address@hidden>.
+
+2020-04-09  Michael Albinus  <address@hidden>
+
+       * doc/misc/tramp.texi (Bug Reports): Avoid line breaks in traces.
+
+2020-04-09  Eli Zaretskii  <address@hidden>
+
+       Avoid assertion violation in intervals.c
+
+       * src/intervals.c (delete_interval): Allow negative values of
+       LENGTH (i).  This happens when delete_interval is called from
+       set_intervals_multibyte_1, because the caller zeroes out the
+       total_length field of the interval to be deleted.  See
+       https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg00131.html
+       for more details.  See also a related old discussion at
+       https://lists.gnu.org/archive/html/emacs-devel/2012-07/msg00399.html.
+
+2020-04-08  Eli Zaretskii  <address@hidden>
+
+       Improve documentation of 'jit-lock-contextually'
+
+       * lisp/jit-lock.el (jit-lock-contextually): Clarify the jit-lock
+       operation when 'jit-lock-contextually' is non-nil and non-t.
+
+       * doc/lispref/modes.texi (Syntactic Font Lock)
+       (Other Font Lock Variables): Document the relation between
+       'jit-lock-register', 'font-lock-keywords-only', and syntactic
+       refontification.
+
+2020-04-08  Dmitry Gutov  <address@hidden>
+
+       Speed up 'resize-mode' child frames a little
+
+       * src/gtkutil.c (xg_frame_set_char_size): Skip resizing if the
+       target dimensions are unchanged for child frames with
+       'resize-mode' resize policy as well.
+
+2020-04-06  Martin Rudalics  <address@hidden>
+
+       Fix some problems with moving and resizing child frames
+
+       (1) Provide new option 'x-gtk-resize-child-frames' which allows
+       to either hide a child frame during resizing or asks GTK to
+       resize it "immediately".  This is needed because desktops like
+       GNOME shell otherwise won't allow resizing child frames at all.
+       (2) Do not try to synchronize the position of a child frame
+       after moving it.  Needed because the present implementation
+       introduces a 0.5 secs delay which makes dragging child frames
+       virtually impossible with Lucid and Motif toolkits on desktops
+       like GNOME shell that use invisible outer frame borders.
+
+       For further information see the thread starting with
+       https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00343.html
+
+       * src/frame.c (syms_of_frame): New symbol Qxg_frame_set_char_size_4.
+       * src/gtkutil.c (xg_frame_set_char_size): Hide child frame
+       during resizing when 'x-gtk-resize-child-frames' equals 'hide'.
+       * src/xfns.c (x_set_parent_frame, Fx_create_frame): Set
+       gtk_container_resize_mode to GTK_RESIZE_IMMEDIATE for child
+       frames when'x-gtk-resize-child-frames' equals 'resize-mode'.
+       (Fx_gtk_debug): New function to toggle interactive GTK debugging
+       from within Emacs.
+       (syms_of_xfns): New symbols Qhide and Qresize_mode.
+       (x-gtk-resize-child-frames): New option that allows to resize
+       child frames on desktops like GNOME shell (with the mutter WM)
+       that otherwise refuse to resize them.
+       * src/xterm.c (x_set_offset): Don't x_sync_with_move for child
+       frames, it makes moving child frames virtually impossible with
+       the Lucid and Motif toolkits.
+
+2020-04-05  Philipp Stephani  <address@hidden>
+
+       Fix syntax error in man page.
+
+       * doc/man/emacs.1.in: Fix syntax of --script argument.  The Info
+       manual states that --script has to be followed by a space, and the
+       syntax with the equals sign doesn't actually work.
+
+2020-04-05  Noam Postavsky  <address@hidden>
+
+       Handle filling of indented ChangeLog function entries
+
+       * lisp/vc/log-edit.el (log-edit-fill-entry): Relax regexp a bit to
+       recognize function entries with leading blanks.
+       * test/lisp/vc/log-edit-tests.el: New test.
+
+2020-04-05  Noam Postavsky  <address@hidden>
+
+       Fix void-variable n-reb in re-builder (Bug#40409)
+
+       * lisp/emacs-lisp/re-builder.el (reb-while): Take the current value of
+       the counter instead of its name.
+       (reb-mark-non-matching-parenthesis): Bind n-reb to 0 at the start and
+       don't wrongly treat it as dynamicly bound.
+
+2020-04-03  Philipp Stephani  <address@hidden>
+
+       Fix small bug in copy_string_contents.
+
+       * src/emacs-module.c (module_copy_string_contents): Fix incorrect
+       variable use.  In this branch 'lisp_str_utf8' is always nil, so it
+       makes little sense to add it as error data.
+
+2020-04-03  Eli Zaretskii  <address@hidden>
+
+       Fix invocations of gpg from Gnus
+
+       * lisp/epg-config.el (epg-config--make-gpg-configuration): Bind
+       coding-system-for-read/write to 'undecided', to countermand
+       possible values of 'no-conversion' or somesuch by the callers.
+       (Bug#40248)
+
+2020-04-03  Martin Rudalics  <address@hidden>
+
+       Don't draw GTK's internal border and tab bar on top of each other
+
+       * src/xterm.c (x_clear_under_internal_border): For GTK builds
+       have 'margin' count in the height of the tab bar to avoid that
+       tab bar and internal border are drawn on top of each other.
+
+2020-04-03  Amin Bandali  <address@hidden>
+
+       Tweak htmlfontify's generated output
+
+       * lisp/htmlfontify.el (hfy-default-header): declare the character
+       encoding for the generated HTML file.  This helps browsers display
+       UTF-8 characters like the copyright symbol correctly.
+       (hfy-sprintf-stylesheet): apply the default style to all of the text
+       consistently, so that unstyled bits (which are not wrapped in span
+       tags and are directly part of the surrounding pre tag's "innerHTML")
+       have a look consistent with the rest of the document.
+
+2020-03-30  Dmitry Gutov  <address@hidden>
+
+       Handle project--files-in-directory finding no files better
+
+       * lisp/progmodes/project.el (project--find-regexp-in-files):
+       Signal user-error when passed an empty list of files.
+
+       * lisp/progmodes/xref.el (xref-matches-in-files):
+       Make sure FILES is not empty.
+
+2020-03-30  Alan Mackenzie  <address@hidden>
+
+       Let imenu to work on the menu bar when its list is a single non-nested 
member.
+
+       * lisp/imenu.el (imenu-update-menubar): No longer accept a list of 
length 1 as
+       being sufficient evidence for a nested list structure.  Instead, 
additionally
+       check whether or not certain elements are atoms.
+
+2020-03-30  Juri Linkov  <address@hidden>
+
+       * lisp/image/image-converter.el: Fix customization of image-converter.
+
+       * lisp/image/image-converter.el (image-convert-p): Update
+       image-converter-regexp when image-converter was customized (bug#39994).
+
+2020-03-29  Andreas Schwab  <address@hidden>
+
+       Fix url-cookie.el for lexical binding
+
+       * lisp/url/url-cookie.el (url-cookie-handle-set-cookie): Use setq
+       instead of set to modify lexical binding.
+
+2020-03-29  Noam Postavsky  <address@hidden>
+
+       Don't suggest setting face-remapping-alist to a literal (Bug#39812)
+
+       * src/xfaces.c (syms_of_xfaces) <face-remapping-alist>: Use copy-tree
+       in the costring example code, and note why.
+
+2020-03-27  Mattias Engdegård  <address@hidden>
+
+       Calc: don't treat nil as an integer (bug#40155)
+
+       Make Math-num-integerp return false for nil, following Math-integerp
+       which was changed in the bignum reform.  This fixes a crash in
+       calc-graph-fast.
+
+       Reported by Narendra Joshi.
+
+       * lisp/calc/calc-macs.el (Math-num-integerp): Not true for nil.
+       * test/lisp/calc/calc-tests.el (calc-Math-integerp): New tests.
+
+2020-03-25  Eli Zaretskii  <address@hidden>
+
+       * lisp/files.el (directory-files-recursively): Doc fix.  (Bug#40202)
+
+2020-03-25  Michael Albinus  <address@hidden>
+
+       Document how to disable Tramp file archives
+
+       * doc/misc/tramp.texi (Archive file names): Explain how to disable
+       file archives.
+
+2020-03-24  Lars Ingebrigtsen  <address@hidden>
+
+       Don't add repeated xlmns:xlink declarations in svg-create
+
+       * lisp/svg.el (svg-create): Fix previous unconditional addition of
+       the xmlns:xlink declaration -- callers may already add one, and
+       having it twice is something most svg libraries doesn't like.
+
+2020-03-23  Mattias Engdegård  <address@hidden>
+
+       Calc: Declare dynamic variable bound in lexbind code (bug#40185)
+
+       * lisp/calc/calc.el: Declare math-comp-selected as dynamic.
+
+2020-03-23  Eli Zaretskii  <address@hidden>
+
+       Don't build the Gnulib 'utimens' module on MinGW
+
+       * nt/gnulib-cfg.mk (OMIT_GNULIB_MODULE_utimens): Omit the
+       'utimens' module in the MinGW build: 'utimens' is not used by
+       Emacs, and 'fdutimens' is implemented in w32.c.
+
+2020-03-23  Phillip Lord  <address@hidden>
+
+       Add Harfbuzz dependency
+
+       * admin/nt/dist-build/build-dep-zips.py: Add harfbuzz as a dependency.
+
+2020-03-23  Noam Postavsky  <address@hidden>
+
+       Don't signal during backtrace unrewind (Bug#40088)
+
+       backtrace_eval_unrewind is used to temporarily reverse
+       let-bindings (it's called with a positive argument to reverse
+       bindings, and then a negative argument to re-apply them) by
+       backtrace--locals and backtrace-eval.  For the SPECPDL_LET_DEFAULT and
+       SPECPDL_LET_LOCAL cases (which occur for let-bindings on buffer-local
+       variables), the code calls Fdefault_value and Fbuffer_local_value on
+       the symbol.
+
+       For symbols which are unbound at top-level, the first (with positive
+       argument) call to backtrace_eval_unrewind will set the symbol's value
+       to unbound (putting the current value in the specpdl's "old value"
+       slot).  On the second (with negative argument) call,
+       backtrace_eval_unrewind attempts to retrieve the symbol's value with
+       Fdefault_value or Fbuffer_local_value, but that raises a void-variable
+       signal.  This interrupts the restoration of the let-bindings, so any
+       other variables more recent on the stack will now have the wrong
+       value.
+
+       * src/data.c (default_value): Make non-static.
+       * src/lisp.h: Declare it.
+       * src/eval.c (backtrace_eval_unrewind): Replace the calls to
+       Fdefault_value and Fbuffer_local_value with default_value and
+       buffer_local_value, respectively.  The latter do exactly the same as
+       the former, except if the symbol's value is Qunbound they just return
+       it instead of signaling void-variable.
+
+2020-03-23  Noam Postavsky  <address@hidden>
+
+       Fix a couple of problems in changelog generating functions
+
+       * lisp/vc/diff-mode.el (diff-add-log-current-defuns): If there is a
+       scan-error when calling end-of-defun, go to end of hunk.  This can
+       easily happen since we are calling end-of-defun on a partial code
+       fragment from a diff.
+       * lisp/vc/log-edit.el (log-edit-generate-changelog-from-diff): Bind
+       display-buffer-overriding-action around the log-edit-show-diff call
+       only.  Otherwise, it can affect, for example, debugger windows
+       triggered by the diff-add-log-current-defuns call.
+
+2020-03-23  Noam Postavsky  <address@hidden>
+
+       Fix cl-concatenate (Bug#40180)
+
+       * lisp/emacs-lisp/cl-extra.el (cl-concatenate): Use apply, to avoid
+       adding extra nesting of args.
+       * test/lisp/emacs-lisp/cl-extra-tests.el (cl-concatenate): New test.
+
+2020-03-21  Eli Zaretskii  <address@hidden>
+
+       Improve documentation of project.el commands
+
+       * lisp/progmodes/project.el (project-find-regexp): Require 'grep'
+       to be able to call 'grep-read-files'.
+       (project-search, project-query-replace-regexp): Doc fixes.
+
+       * doc/emacs/maintaining.texi (Projects): New section.
+       * doc/emacs/emacs.texi (Top): Add "Projects" to the detailed menu.
+
+2020-03-20  Zhu Zihao  <address@hidden>  (tiny change)
+
+       Make svg images with links valid
+
+       * lisp/svg.el (svg-create): Specify xlink namespace for svg images
+       (bug#40010).
+
+2020-03-20  Juri Linkov  <address@hidden>
+
+       * lisp/tab-line.el (tab-line-new-button-show): New defcustom.
+
+       * lisp/tab-line.el (tab-line-format-template): Use 
tab-line-new-button-show.
+       (tab-line-new-tab-choice): Remove choice 'nil' with "No button".
+       (tab-line-separator): Add docstring.
+
+2020-03-19  Lars Ingebrigtsen  <address@hidden>
+
+       Don't have exif bugging out on short strings
+
+       * lisp/image/exif.el (exif--direct-ascii-value): New function
+       (bug#40127).
+       (exif--parse-directory): Use it to get the correct values for
+       in-directory (i.e., shorter than 4 octets) strings.
+
+2020-03-19  Robert Pluim  <address@hidden>
+
+       Use correct registry name for windows-1251 charset
+
+       * src/ftfont.c (fc_charset_table): The registry to use to lookup
+       windows-1251 charset is microsoft-cp1251, not windows-1251.
+       (Bug#40097)
+
+2020-03-19  Amin Bandali  <address@hidden>
+
+       ERC: Update maintainer address
+
+2020-03-18  Philipp Stephani  <address@hidden>
+
+       Remove raw carriage return characters from test file.
+
+       This protects against tools that mangle newline characters in text
+       files.
+
+       * test/lisp/electric-tests.el 
(electric-pair-mode-newline-between-parens)
+       (electric-layout-mode-newline-between-parens-without-e-p-m)
+       (electric-layout-mode-newline-between-parens-without-e-p-m-2): Escape
+       carriage return characters.
+
+2020-03-17  Robert Pluim  <address@hidden>
+
+       Recalculate default font when switching font backend
+
+       This is an updated version of the patch by Dmitry Antipov
+       <address@hidden> in
+       <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=23386#43>.
+
+       Fixes Bug#23386
+
+       * src/dispextern.h (struct redisplay_interface): New member
+       default_font_parameter.
+       * src/xterm.h: Add prototype for x_default_font_parameter.
+       * src/xterm.c (x_redisplay_interface): Initialize
+       default_font_parameter member.
+       * src/xfns.c (x_default_font_parameter): Make non-static.
+       * src/w32term.h: Add prototype for w32_default_font_parameter
+       * src/w32fns.c (w32_default_font_parameter): Make non-static.
+       * src/w32term.c (w32_redisplay_interface): Initialize
+       default_font_parameter member.
+       * src/nsterm.m (ns_redisplay_interface): Add dummy
+       ns_default_font_parameter (there is currently only one possible font
+       backend on macOS).  Initialize default_font_parameter member.
+       * src/frame.c (gui_set_font_backend): Recalculate default font using
+       RIF default_font_parameter to avoid crash when changing font backend.
+
+2020-03-17  Juri Linkov  <address@hidden>
+
+       * lisp/tab-line.el: Fix tab-line-format and tab-line-format-template.
+
+       * lisp/tab-line.el (tab-line-format): Use buffer-name in the cache key
+       instead of just buffer object to invalidate the cache on buffer 
renaming.
+       (tab-line-format-template): Always leave the separator after the last 
tab
+       like tab-bar.el already does.
+
+2020-03-16  Stefan Monnier  <address@hidden>
+
+       * etc/NEWS: Make the `--eval` example slightly more precise
+
+2020-03-15  Juri Linkov  <address@hidden>
+
+       * lisp/image/image-converter.el: Support more ImageMagick versions 
(bug#39994)
+
+       * lisp/image/image-converter.el (image-converter--probe): Match
+       a possible additional second column in some ImageMagick versions
+       of "convert -list format".
+
+2020-03-14  Eli Zaretskii  <address@hidden>
+
+       Support Unicode 13.0
+
+       * admin/unidata/BidiBrackets.txt:
+       * admin/unidata/BidiMirroring.txt:
+       * admin/unidata/Blocks.txt:
+       * admin/unidata/NormalizationTest.txt:
+       * admin/unidata/SpecialCasing.txt:
+       * admin/unidata/UnicodeData.txt:
+       * admin/unidata/copyright.html:
+       * test/manual/BidiCharacterTest.txt: Updated files imported from
+       Unicode v13.0.
+
+       * admin/unidata/blocks.awk: Add "Symbols for Legacy Computing" to
+       known aliases.
+
+       * lisp/international/fontset.el (script-representative-chars)
+       (setup-default-fontset): Add new scripts.
+       * lisp/international/characters.el: Set syntax for Symbols for
+       Legacy Computing characters.  Update setting of char-width-table.
+       * lisp/international/mule-cmds.el (ucs-names): Update ranges of
+       characters for which we want names in 'ucs-names'.
+
+       * test/lisp/international/ucs-normalize-tests.el
+       (ucs-normalize-tests--failing-lines-part1)
+       (ucs-normalize-tests--failing-lines-part2): Update according to
+       'ucs-normalize-check-failing-lines'.
+
+2020-03-14  Lars Ingebrigtsen  <address@hidden>
+
+       Fix regression in wisent-total-conflicts
+
+       * lisp/cedet/semantic/wisent/comp.el (wisent-total-conflicts):
+       There may not be a current source file.  In that case, don't try
+       to keep track of the number of expected conflicts (bug#39911).
+
+2020-03-14  Alan Mackenzie  <address@hidden>
+
+       * lisp/progmodes/cc-defs.el (c-version): update to 5.34.1 for Emacs 27.1
+
+       Don't merge to master.
+
+2020-03-14  Philipp Stephani  <address@hidden>
+
+       * lisp/textmodes/fill.el (fill-nobreak-predicate): Fix documentation.
+
+2020-03-14  Stefan Kangas  <address@hidden>
+
+       Improve Package Menu hiding docstrings
+
+       * lisp/emacs-lisp/package.el (package-menu-toggle-hiding): Add
+       reference to 'package-menu-hidden-regexps'.
+       * lisp/emacs-lisp/package.el (package-menu-hide-package): Improve
+       docstring to say that hiding is saved in a user option.  Fix a
+       typo.  (Bug#39436)
+
+2020-03-14  Eli Zaretskii  <address@hidden>
+
+       Fix display of Big5 characters when using Fontconfig
+
+       * src/ftfont.c (fc_charset_table): Fix the value of the big-5
+       representative codepoint.  Reported by Brian Schack
+       <address@hidden>.  (Bug#40057)
+
+       * src/macfont.m (cf_charset_table): Adjust the comment.
+
+2020-03-13  Eli Zaretskii  <address@hidden>
+
+       Fix a recent documentation change
+
+       * doc/emacs/frames.texi (Mouse Commands): More detailed
+       description of how tilting the mouse-wheel works.
+
+       * lisp/mwheel.el (mouse-wheel-tilt-scroll)
+       (mouse-wheel-flip-direction): Fix the wording of doc strings.
+       (Bug#39979)
+
+2020-03-13  Eli Zaretskii  <address@hidden>
+
+       Fix last change
+
+       * lisp/tab-bar.el (tab-bar-new-button-show): Fix wording of the
+       doc string.
+
+2020-03-13  Juri Linkov  <address@hidden>
+
+       * lisp/tab-bar.el: Last-minute changes.
+
+       * lisp/tab-bar.el (tab-bar-mode): Check for non-nil
+       tab-bar-new-button and tab-bar-close-button.
+       (tab-bar-new-button-show): New defcustom.
+       (tab-bar-make-keymap-1): Check for tab-bar-new-button-show.
+       (tab-bar-separator): Add docstring.
+
+2020-03-12  Stefan Monnier  <address@hidden>
+
+       * lisp/subr.el (cancel-change-group): Fix bug#39680
+
+       Don't re-use an existing `pending-undo-list` even if (eq last-command 
'undo)
+       since there might have been changes to the buffer since that `undo` 
command
+       and the `pending-undo-list` can hence be invalid for the current
+       buffer contents.
+
+2020-03-12  İ. Göktuğ Kayaalp  <address@hidden>
+
+       Improve docs for horizontal scrolling with mouse and touchpad 
(Bug#39979)
+
+       * lisp/mwheel.el (mouse-wheel-tilt-scroll,
+       mouse-wheel-flip-direction): Improve docstrings.
+       * doc/emacs/frames.texi (Mouse Commands): Mention touchpads.
+
+2020-03-10  Juri Linkov  <address@hidden>
+
+       * lisp/emacs-lisp/package.el (package-install): Fix typo in docstring.
+
+2020-03-09  Paul Eggert  <address@hidden>
+
+       Port .gdbinit to clang with -gdwarf-4
+
+       * src/.gdbinit (xgetsym): Port to clang with -gdwarf-4, which
+       doesn’t output the type of lispsym anywhere other than emacs.o
+       (Bug#39962).
+
+2020-03-09  Mattias Engdegård  <address@hidden>
+
+       Simplify rx example in manual
+
+       * doc/lispref/searching.texi (Rx Notation):
+       Use the 'not' shorthand introduced in Emacs 27.
+
+2020-03-09  Paul Eggert  <address@hidden>
+
+       * src/timefns.c: Add comments.
+
+2020-03-08  Paul Eggert  <address@hidden>
+
+       * src/timefns.c: Add comments.
+
+2020-03-08  Andrew Eggenberger  <address@hidden>  (tiny change)
+
+       Eliminate use of cl-concatenate in 'seq' package
+
+       Fixes (Bug#39761) by making cl-extra dependent on seq rather than
+       vice versa.
+       * lisp/emacs-lisp/seq.el (seq-concatenate): Move cl-concatenate's
+       code here instead of calling it.
+       * lisp/emacs-lisp/cl-extra.el (cl-concatenate): Use cl-concatenate.
+
+2020-03-07  Paul Eggert  <address@hidden>
+
+       Fix bug with JIT stealth timers
+
+       * lisp/emacs-lisp/timer.el (run-at-time): Don’t assume that Lisp
+       time values must be conses (Bug#39944).
+
+2020-03-07  Paul Eggert  <address@hidden>
+
+       * doc/lispref/os.texi (time-subtract): Doc fix.
+
+2020-03-07  Alan Third  <address@hidden>
+
+       NS port documentation updates
+
+       * doc/emacs/macos.texi (Mac / GNUstep Customization): Document some
+       more of the ns- variables and remove incorrect font back-end
+       information.
+       * etc/NEWS: Update the documentation status of macOS news entries.
+
+2020-03-07  João Távora  <address@hidden>
+
+       Let fido-mode users force a minibuffer-exit
+
+       * lisp/icomplete.el (icomplete-fido-exit):
+       Add FORCE arg.  Rewrite docstring. (bug#38992)
+
+2020-03-07  Dmitry Gutov  <address@hidden>
+
+       icomplete-fido-exit: New command for the M-j binding
+
+       * lisp/icomplete.el (icomplete-fido-exit): New command.
+       (icomplete-fido-mode-map): Use it (bug#38992).
+
+2020-03-07  Dmitry Gutov  <address@hidden>
+
+       minibuffer-force-complete-and-exit: Allow input with no matches
+
+       * lisp/minibuffer.el (minibuffer--require-match): New variable.
+       (completing-read-default): Bind it to the REQUIRE-MATCH value.
+       (minibuffer-force-complete-and-exit): Consult it to allow input
+       with no matches when a match is not required (bug#38992).
+
+       * lisp/icomplete.el (icomplete-exhibit): Use it to render the
+       correct parens around matches.
+
+2020-03-07  Eli Zaretskii  <address@hidden>
+
+       Document that 'byte-compile-dynamic' is obsolete
+
+       * doc/lispref/compile.texi (Dynamic Loading): Document that this
+       is deprecated.
+
+       * etc/NEWS: mark the 'byte-compile-dynamic' entry as documented.
+
+2020-03-07  Eli Zaretskii  <address@hidden>
+
+       Document the changes in 'read-answer'
+
+       * doc/lispref/minibuf.texi (Multiple Queries): Document the
+       fact that 'read-answer' can now accept non-character input
+       events.
+
+2020-03-07  Eli Zaretskii  <address@hidden>
+
+       Document changes in lexical-binding
+
+       * doc/lispref/variables.texi (Using Lexical Binding): Document
+       that lexical-binding is now turned on by default in more cases.
+
+       * etc/NEWS: Fix wording of the NEWS entry about the above, and mark it
+       as fully documented.
+
+2020-03-06  Amin Bandali  <address@hidden>
+
+       Update ERC mailing list address
+
+       * lisp/erc/erc.el (erc-official-location): As part of bringing ERC
+       under the Emacs umbrella, erc-discuss has been renamed to emacs-erc,
+       and will be *the* mailing list for discussions and announcements about
+       ERC going forward.  The other two lists, erc-announce and erc-commit,
+       are now retired.  For more details, see the announcement at
+       <https://lists.gnu.org/archive/html/emacs-erc/2020-03/msg00001.html>.
+
+2020-03-06  Roland Winkler  <address@hidden>
+
+       Use regexp-opt to define bibtex-autokey-transcriptions.  (Bug#39686)
+
+2020-03-06  Eli Zaretskii  <address@hidden>
+
+       Improve documentation of 'table-generate-source'
+
+       * lisp/textmodes/table.el (table-generate-source): Doc fix.
+       (Bug#39935)
+
+       * etc/NEWS: Fix wording of the 'table-generate-source' entry and
+       mark it as documented.
+
+2020-03-06  Eli Zaretskii  <address@hidden>
+
+       Attempt to avoid rare segfaults in show_mouse_face
+
+       * src/xdisp.c (show_mouse_face): Don't display the active region
+       if called on a frame different from the one recorded in HLINFO.
+       (Bug#37671)
+
+2020-03-05  Eli Zaretskii  <address@hidden>
+
+       Avoid crashes when a fontset has strange entries
+
+       * src/fontset.c (reorder_font_vector): Skip nil entries in the
+       loop that assigns scores to rfont_def's.
+       (fontset_compare_rfontdef): Cope with nil.  This has the effect of
+       moving any nil entries to the end of the font-group, and avoids
+       crashing if an element other than the last in the font-group is
+       nil.  (Bug#39892)
+
+2020-03-05  Mattias Engdegård  <address@hidden>
+
+       Fix rx error with ? and ??
+
+       The ? and ?? rx operators are special in that they can be written as
+       characters (space and '?' respectively).  This confused the definition
+       look-up mechanism in rare cases.
+
+       * lisp/emacs-lisp/rx.el (rx--expand-def): Don't look up non-symbols.
+       * test/lisp/emacs-lisp/rx-tests.el (rx-charset-or): Test.
+
+2020-03-05  Mattias Engdegård  <address@hidden>
+
+       * lisp/emacs-lisp/rx.el (rx--string-to-intervals): Fix error string.
+
+2020-03-05  Justin Burkett  <address@hidden>  (tiny change)
+
+       Fix args in 'window-text-pixel-size' call in 'fit-window-to-buffer'
+
+       * lisp/window.el (fit-window-to-buffer): Fix arguments in
+       'window-text-pixel-size' call.
+
+2020-03-04  João Távora  <address@hidden>
+
+       Have pulse.el preserve existing overlay priorities
+
+       (Bug#39821)
+
+       * lisp/cedet/pulse.el (pulse-momentary-highlight-overlay): Save
+       overlay priority.
+       (pulse-momentary-unhighlight): Restore.
+
+2020-03-04  Alan Mackenzie  <address@hidden>
+
+       CC Mode: Fix the handling of two adjacent after-change-functionses.
+
+       The bug involved failing to set c-new-END correctly, which lead to an
+       args-out-of-range error when after-change-functions was invoked twice 
without
+       an intervening invocation of before-change-functions.
+
+       * lisp/progmodes/cc-mode.el (c-after-change): Correct a coding error in 
the
+       handling of c-just-done-before-change.
+
+2020-03-04  Alan Mackenzie  <address@hidden>
+
+       Fix combine-change-calls-1 for when buffer-undo-list is t
+
+       * lisp/subr.el (combine-change-calls-1): Bind 
before/after-change-functions to
+       nil also when buffer-undo-list is t.
+
+2020-03-04  Mattias Engdegård  <address@hidden>
+
+       Don't misinterpret doc string as initial value
+
+       * lisp/loadhist.el (loadhist--restore-autoload):
+       * lisp/progmodes/vhdl-mode.el (vhdl-font-lock-keywords-0):
+       Prevent the doc string from being used as initial value.
+
+2020-03-04  Stefan Kangas  <address@hidden>
+
+       Bump checkdoc-version to match library header
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-version): Bump version.
+
+2020-03-04  Noam Postavsky  <address@hidden>
+
+       Explain how to unset mode bindings (Bug#39802)
+
+       * doc/emacs/custom.texi (Init Rebinding): Explain that passing nil to
+       define-key will unbind keys, and extend the example accordingly.
+
+2020-03-04  Noam Postavsky  <address@hidden>
+
+       Fix describe-variable on values with circular syntax (Bug#39805)
+
+       * lisp/help-fns.el (describe-variable): Set syntax tables before
+       calling pp-buffer.
+
+2020-03-04  Juri Linkov  <address@hidden>
+
+       Improve documentation of next-error-highlight-no-select (bug#38778)
+
+       * doc/emacs/building.texi (Compilation Mode):
+       Mention next-error-highlight-no-select.
+
+       * lisp/simple.el (next-error-highlight): Add reference to
+       next-error-highlight-no-select.
+       (next-error-highlight-no-select): Add reference to
+       next-error-highlight.
+
+2020-03-03  Andreas Schwab  <address@hidden>
+
+       Fix implicit declaration of getenv and atol
+
+       * src/gtkutil.c: Include <stdlib.h>.
+
+2020-03-03  Eli Zaretskii  <address@hidden>
+
+       Fix handling MS-Windows keyboard input above the BMP
+
+       * src/w32term.c (w32_read_socket): If we get a WM_UNICHAR message
+       with a surrogate codepoint, assemble the corresponding character
+       code above the BMP from its UTF-16 encoding, communicated in two
+       consecutive WM_UNICHAR messages.
+
+2020-03-03  Mattias Engdegård  <address@hidden>
+
+       * etc/NEWS: More complete description of rx 'not' changes.
+
+2020-03-02  Juri Linkov  <address@hidden>
+
+       * doc/emacs/mini.texi (Yes or No Prompts): 'y-or-n-p' now uses the 
minibuffer.
+
+2020-03-02  Robert Pluim  <address@hidden>
+
+       Don't attempt to cache glyph metrics for FONT_INVALID_CODE
+
+       This was causing massive slowdown in redisplay when eg #xfe0f
+       (VARIATION SELECTOR-16) was present, as the cache ended up very large,
+       unused, and being recreated on every call to font_fill_lglyph_metrics
+       (Bug#39133).
+
+       * src/composite.c (fill_gstring_body): Hoist FONT_OBJECT_P check out
+       of loop.  Calculate glyph code and check for FONT_INVALID_CODE before
+       calling font_fill_lglyph_metrics.  Pass glyph code to it.
+
+       * src/font.c (font_fill_lglyph_metrics): Add code parameter, move
+       glyph code calculation up the call stack into fill_gstring_body.
+
+       * src/font.h: Adjust font_fill_lglyph_metrics prototype.
+
+2020-03-01  Sergey Trofimov  <address@hidden>  (tiny change)
+
+       Fix fit-frame-to-buffer for multi-monitor setup
+
+       * lisp/window.el (fit-frame-to-buffer): Call
+       'frame-monitor-attributes' instead of
+       'display-monitor-attributes-list'.  Fix geometry calculations for
+       multiple monitors.
+
+2020-03-01  Mattias Engdegård  <address@hidden>
+
+       rx: Improve 'or' compositionality (bug#37659)
+
+       Perform 'regexp-opt' on nested 'or' forms, and after expansion of
+       user-defined and 'eval' forms.  Characters are now turned into strings
+       for wider 'regexp-opt' scope.  This preserves the longest-match
+       semantics for string in 'or' forms over composition.
+
+       * doc/lispref/searching.texi (Rx Constructs): Document.
+       * lisp/emacs-lisp/rx.el (rx--normalise-or-arg)
+       (rx--all-string-or-args): New.
+       (rx--translate-or): Normalise arguments first, and check for strings
+       in subforms.
+       (rx--expand-eval): Extracted from rx--translate-eval.
+       (rx--translate-eval): Call rx--expand-eval.
+       * test/lisp/emacs-lisp/rx-tests.el (rx-or, rx-def-in-or): Add tests.
+       * etc/NEWS: Announce.
+
+2020-02-29  Juri Linkov  <address@hidden>
+
+       * lisp/tab-line.el: Fix auto-hscrolling (bug#39649)
+
+       Distinguish offsets between manual-vs-automatic scrolling
+       as integers-vs-floats instead of positive-vs-negative integers.
+
+       * lisp/tab-line.el (tab-line-format-template): Use 'numberp'
+       instead of 'integerp', and 'truncate' instead of 'abs'.
+       (tab-line-format): When the window-buffer was updated, set 
window-parameter
+       to float to enable auto-hscroll after it was disabled on manual 
scrolling.
+       (tab-line-auto-hscroll-buffer): New variable with internal buffer.
+       (tab-line-auto-hscroll): Erase in tab-line-auto-hscroll-buffer.
+       Use 'numberp' instead of 'integerp', 'truncate' instead of 'abs',
+       and 'float' instead of '-'.
+       (tab-line-hscroll): Use 'numberp' instead of 'integerp',
+       and 'truncate' instead of 'abs'.
+
+2020-02-29  Mattias Engdegård  <address@hidden>
+
+       Fix rx charset generation
+
+       * lisp/emacs-lisp/rx.el (rx--charset-p): Don't overquote.
+       (rx--generate-alt): Generate '.' for negated newline.
+       * test/lisp/emacs-lisp/rx-tests.el (rx-any, rx-charset-or): Test.
+
+2020-02-28  Mattias Engdegård  <address@hidden>
+
+       Fix overquoting in mule.el
+
+       * lisp/international/mule.el (sgml-xml-auto-coding-function):
+       Remove accidental quote.
+
+2020-02-28  Paul Eggert  <address@hidden>
+
+       * src/timefns.c (time_arith): Omit incorrect comment.
+
+2020-02-28  Mattias Engdegård  <address@hidden>
+
+       * lisp/vc/vc-cvs.el (vc-cvs-ignore): Copy-edit doc string
+
+2020-02-28  Štěpán Němec  <address@hidden>
+
+       checkdoc: Don't mistake "cf." for sentence end
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-sentencespace-region-engine):
+       Recognize "cf." as an abbreviation, not a sentence end.
+
+2020-02-27  Nicolas Petton  <address@hidden>
+
+       Bump Emacs version to 27.0.90
+
+       * README:
+       * configure.ac:
+       * msdos/sed2v2.inp:
+       * nt/README.W32: Bump Emacs version.
+
+2020-02-27  Nicolas Petton  <address@hidden>
+
+       * etc/AUTHORS: Update.
+
 2020-02-27  Nicolas Petton  <address@hidden>
 
        * admin/authors.el (authors-ignored-files): Fix entries.
@@ -139450,7 +140538,7 @@
 
 This file records repository revisions from
 commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
-commit 9261b1ed49755284bb9dc194b6c2a9b407151ee5 (inclusive).
+commit 4acdd7fe58ae9f94102afeca67b0383141d597da (inclusive).
 See ChangeLog.2 for earlier changes.
 
 ;; Local Variables:
diff --git a/admin/authors.el b/admin/authors.el
index dc42bc7..13b203b 100644
--- a/admin/authors.el
+++ b/admin/authors.el
@@ -207,6 +207,11 @@ files.")
     ("Yoshinori Koseki" "KOSEKI Yoshinori" "小関 吉則")
     ("Yutaka NIIBE" "NIIBE Yutaka")
     (nil "stardiviner")
+    (nil "lin.sun")
+    ("Nitish Chinta" "nitishch")
+    ("Carlos Pita" "memeplex")
+    ("Vinicius Jose Latorre" "viniciusjl")
+    ("Gaby Launay" "galaunay")
     )
   "Alist of author aliases.
 
@@ -278,9 +283,9 @@ If REALNAME is nil, ignore that author.")
 
 
 (defvar authors-obsolete-files-regexps
-  '(".*loaddefs.el$"                   ; not obsolete, but auto-generated
-    "\\.\\(bzr\\|cvs\\|git\\)ignore$"          ; obsolete or uninteresting
-    "\\.arch-inventory$"
+  '(".*loaddefs\\.el\\'"               ; not obsolete, but auto-generated
+    "\\.\\(bzr\\|cvs\\|git\\)ignore\\'"                ; obsolete or 
uninteresting
+    "\\.arch-inventory\\'"
     "ChangeLog\\(\\.[0-9]+\\)?\\'"
     "\\(automated\\|test\\)/data/"     ; not interesting
     "cedet/tests/"
@@ -288,9 +293,9 @@ If REALNAME is nil, ignore that author.")
     "\\`\\(indent\\|automated\\)\\'" "indent/" "mod-test/"
     "-resources/"
     "unidata/.*\\.txt\\'"
-    "BidiCharacterTest.txt"
+    "BidiCharacterTest\\.txt"
     ;; TODO lib/? Matches other things?
-    "build-aux/" "m4/" "Emacs.xcodeproj" "mapfiles" "\\.map\\'"
+    "build-aux/" "m4/" "Emacs\\.xcodeproj" "mapfiles" "\\.map\\'"
     "preferences\\.\\(nib\\|gorm\\)"
     ;; Generated files that have since been removed.
     "\\(refcard\\(-de\\|-pl\\)?\\|calccard\\|dired-ref\\|orgcard\\|\
@@ -1135,7 +1140,7 @@ Elements are (OLDNAME . NEWNAME).")
 \\(\\(cs\\|fr\\|sk\\)-\\)?survival\\)\\.tex\\'" "refcards/\\&")
     ("\\`refcard-\\(de\\|pl\\)\\.tex\\'" "refcards/\\1-refcard.tex")
     ("\\`\\(refcards/\\)?fr-drdref\\.tex\\'" "refcards/fr-dired-ref.tex")
-    ("^\\(TUTORIAL[^/]*\\)" "tutorials/\\1")
+    ("\\`\\(TUTORIAL[^/]*\\)" "tutorials/\\1")
     ("\\`themes/dev-\\(tsdh-\\(?:light\\|dark\\)-theme\\.el\\)\\'"
      "themes/\\1")
     ;; Moved from lisp/toolbar to etc/images.
@@ -1160,9 +1165,9 @@ 
remove\\|run\\|until\\|up\\|watch\\)\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
     ("\\`\\(toolbar/gud-\\|images/gud/\\)s\\(i\\)?\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
      "images/gud/step\\2\\3")
     ("\\`toolbar/lc-\\([-a-z]+\\.xpm\\)\\'" "images/low-color/\\1")
-    ("^\\(tree-widget/\\(?:default\\|folder\\)/[-a-z]+\\.\\(png\\|xpm\\)\\)$"
+    
("\\`\\(tree-widget/\\(?:default\\|folder\\)/[-a-z]+\\.\\(png\\|xpm\\)\\)\\'"
      "images/\\1")
-    ("^\\(images/icons/\\)mac\\(emacs\\)_\\([0-9]+\\)\\(\\.png\\)"
+    ("\\`\\(images/icons/\\)mac\\(emacs\\)_\\([0-9]+\\)\\(\\.png\\)"
      "\\1\\2\\3_mac\\4")
     ("\\(images/icons/\\)emacs_\\([0-9][0-9]\\)\\.png"
      "\\1hicolor/\\2x\\2/apps/emacs.png")
@@ -1183,7 +1188,7 @@ 
ediff\\|emerge\\|log-edit\\|log-view\\|pcvs\\|smerge-mode\\|vc\\)\\.el\\'"
     ("\\`org-\\(ascii\\|beamer\\|html\\|icalendar\\|jsinfo\\|latex\
 \\|odt\\|publish\\)\\.el\\'" "ox-\\1.el")
     ;; From test/ to test/automated/.
-    ("comint-testsuite.el" "automated/\\&")
+    ("comint-testsuite\\.el" "automated/\\&")
     ("\\`\\(bytecomp\\|font-parse\\|icalendar\\|occur\\|newsticker\\)\
 -testsuite\\.el" "\\1-tests.el")
     ("automated/flymake/warnpred/\\(Makefile\\|test\\.\\(?:c\\|pl\\)\\)\\'"
@@ -1193,10 +1198,10 @@ 
ediff\\|emerge\\|log-edit\\|log-view\\|pcvs\\|smerge-mode\\|vc\\)\\.el\\'"
     ;; Maybe not the exact new name, but disambiguates from lisp/.
     ("automated/\\([^/]*\\)\\.el\\'" "\\1-tests.el")
     ;; NB lax rules should come last.
-    ("^m/m-\\(.*\\.h\\)$" "m/\\1" t)
-    ("^m-\\(.*\\.h\\)$" "\\1" t)
-    ("^s/s-\\(.*\\.h\\)$" "s/\\1" t)
-    ("^s-\\(.*\\.h\\)$" "\\1" t)
+    ("\\`m/m-\\(.*\\.h\\)\\'" "m/\\1" t)
+    ("\\`m-\\(.*\\.h\\)\\'" "\\1" t)
+    ("\\`s/s-\\(.*\\.h\\)\\'" "s/\\1" t)
+    ("\\`s-\\(.*\\.h\\)\\'" "\\1" t)
     ("\\.\\(el\\|[ch]\\|x[pb]m\\|pbm\\)\\'" t t)
     )
   "List of regexps and rewriting rules for renamed files.
diff --git a/configure.ac b/configure.ac
index 7b97203..e6ed723 100644
--- a/configure.ac
+++ b/configure.ac
@@ -433,7 +433,7 @@ OPTION_DEFAULT_ON([libsystemd],[don't compile with 
libsystemd support])
 OPTION_DEFAULT_ON([cairo],[don't compile with Cairo drawing])
 OPTION_DEFAULT_ON([xml2],[don't compile with XML parsing support])
 OPTION_DEFAULT_OFF([imagemagick],[compile with ImageMagick image support])
-OPTION_DEFAULT_ON([native-image-api], [use native image APIs (GDI+ on 
Windows)])
+OPTION_DEFAULT_ON([native-image-api], [don't use native image APIs (GDI+ on 
Windows)])
 OPTION_DEFAULT_ON([json], [don't compile with native JSON support])
 
 OPTION_DEFAULT_ON([xft],[don't use XFT for anti aliased fonts])
diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi
index af2f3ac..5ec23a9 100644
--- a/doc/lispref/windows.texi
+++ b/doc/lispref/windows.texi
@@ -5871,25 +5871,26 @@ which window parameters (if any) are saved by this 
function.
 
 @defun set-window-configuration configuration
 This function restores the configuration of windows and buffers as
-specified by @var{configuration}, for the frame that @var{configuration}
-was created for.
-
-The argument @var{configuration} must be a value that was previously
-returned by @code{current-window-configuration}.  The configuration is
-restored in the frame from which @var{configuration} was made, whether
-that frame is selected or not.  In some rare cases this may trigger
-execution of the @code{window-size-change-functions} (@pxref{Window
-Hooks}) even if the size of windows did not change at all.  The
-@code{window-configuration-change-hook} functions will be called if and
-only if at least one window was added to or deleted from the frame.
-
-If the frame from which @var{configuration} was saved is dead, all this
-function does is restore the three variables @code{window-min-height},
-@code{window-min-width} and @code{minibuffer-scroll-window}.  In this
-case, the function returns @code{nil}.  Otherwise, it returns @code{t}.
-
-Here is a way of using this function to get the same effect
-as @code{save-window-excursion}:
+specified by @var{configuration}, for the frame that
+@var{configuration} was created for, regardless of whether that frame
+is selected or not.  The argument @var{configuration} must be a value
+that was previously returned by @code{current-window-configuration}
+for that frame.
+
+If the frame from which @var{configuration} was saved is dead, all
+this function does is to restore the value of the variable
+@code{minibuffer-scroll-window} and to adjust the value returned by
+@code{minibuffer-selected-window}.  In this case, the function returns
+@code{nil}.  Otherwise, it returns @code{t}.
+
+If the buffer of a window of @var{configuration} has been killed since
+@var{configuration} was made, that window is, as a rule, removed from
+the restored configuration.  However, if that window is the last
+window remaining in the restored configuration, another live buffer is
+shown in it.
+
+Here is a way of using this function to get the same effect as
+@code{save-window-excursion}:
 
 @example
 @group
diff --git a/etc/AUTHORS b/etc/AUTHORS
index ab0cbee..aff24a8 100644
--- a/etc/AUTHORS
+++ b/etc/AUTHORS
@@ -97,11 +97,11 @@ Alakazam Petrofsky: changed hanoi.el
 Alan Mackenzie: wrote cc-awk.el
 and co-wrote cc-align.el cc-cmds.el cc-defs.el cc-engine.el cc-fonts.el
   cc-langs.el cc-mode.el cc-styles.el cc-vars.el
-and changed cc-mode.texi bytecomp.el follow.el display.texi subr.el
+and changed cc-mode.texi bytecomp.el display.texi follow.el subr.el
   edebug.el progmodes/compile.el programs.texi syntax.texi modes.texi
   font-lock.el isearch.el text.texi help.el ispell.el lread.c syntax.c
   windows.texi .dir-locals.el control.texi cus-start.el
-  and 147 other files
+  and 148 other files
 
 Alan Modra: changed unexelf.c
 
@@ -113,9 +113,9 @@ Alan Shutko: changed diary-lib.el calendar.el bindings.el 
cal-hebrew.el
 
 Alan Third: wrote dabbrev-tests.el image-transforms-tests.el
 and changed nsterm.m nsterm.h nsfns.m nsmenu.m ns-win.el nsimage.m
-  image.c macfont.m configure.ac frame.el xdisp.c display.texi image.el
-  macos.texi xterm.c Info.plist.in conf_post.h dispextern.h frame.c
-  frame.h frames.texi and 21 other files
+  image.c macfont.m configure.ac frame.el xdisp.c macos.texi display.texi
+  image.el xterm.c Info.plist.in conf_post.h dispextern.h frame.c frame.h
+  frames.texi and 21 other files
 
 Alastair Burt: changed gnus-art.el smiley.el
 
@@ -235,12 +235,11 @@ Alp Aker: changed nsfont.m nsterm.m buff-menu.el nsfns.m 
nsmenu.m
 Ami Fischman: changed bindings.el calendar.el diary-lib.el print.c
   savehist.el vc-git.el
 
-Amin Bandali: changed erc-button.el erc-desktop-notifications.el
-  erc-autoaway.el erc-compat.el erc-fill.el erc-ibuffer.el erc-imenu.el
-  erc-join.el erc-lang.el erc-list.el erc-log.el erc-match.el
-  erc-notify.el erc-pcomplete.el erc-replace.el erc-ring.el
-  erc-services.el erc-sound.el erc-speedbar.el erc-spelling.el
-  erc-stamp.el and 4 other files
+Amin Bandali: changed erc.el erc-button.el erc-desktop-notifications.el
+  erc-track.el erc-autoaway.el erc-compat.el erc-fill.el erc-ibuffer.el
+  erc-imenu.el erc-join.el erc-lang.el erc-list.el erc-log.el
+  erc-match.el erc-notify.el erc-pcomplete.el erc-replace.el erc-ring.el
+  erc-services.el erc-sound.el erc-speedbar.el and 5 other files
 
 Anand Mitra: changed gnus-sum.el
 
@@ -298,7 +297,7 @@ Andreas Rottmann: changed emacsclient.1 emacsclient.c 
misc.texi server.el
 Andreas Schwab: changed configure.ac lisp.h xdisp.c process.c alloc.c
   coding.c Makefile.in files.el fileio.c keyboard.c lread.c xterm.c fns.c
   editfns.c emacs.c src/Makefile.in print.c eval.c font.c xfns.c sysdep.c
-  and 650 other files
+  and 651 other files
 
 Andreas Seltenreich: changed nnweb.el gnus.texi message.el gnus-sum.el
   gnus.el nnslashdot.el gnus-srvr.el gnus-util.el mm-url.el mm-uu.el
@@ -332,6 +331,8 @@ and changed nnir.el gnus-sum.el nnimap.el gnus-msg.el 
gnus.texi
 
 Andrew Csillag: wrote m4-mode.el
 
+Andrew Eggenberger: changed cl-extra.el seq.el
+
 Andrew G Cohen: changed gnus-sum.el gnus-art.el
 
 Andrew Hall: changed paren.el
@@ -695,8 +696,8 @@ Carl Edman: co-wrote ns-win.el
 
 Carl Henrik Lunde: changed format-spec.el
 
-Carlos Pita: changed erc-pcomplete.el image-mode.el progmodes/python.el
-  sh-script.el
+Carlos Pita: changed progmodes/python.el erc-pcomplete.el fringe.c
+  gtkutil.c image-mode.el keyboard.c sh-script.el
 
 Carsten Bormann: changed ibmrs6000.h latin-post.el
 
@@ -1354,9 +1355,9 @@ Dmitry Gutov: wrote elisp-mode-tests.el jit-lock-tests.el 
json-tests.el
   vc-hg-tests.el xref-tests.el
 and changed ruby-mode.el xref.el project.el vc-git.el elisp-mode.el
   etags.el ruby-mode-tests.el js.el package.el vc-hg.el vc.el
-  symref/grep.el log-edit.el dired-aux.el simple.el menu-bar.el
-  minibuffer.el package-test.el progmodes/grep.el vc-svn.el eldoc.el
-  and 110 other files
+  symref/grep.el log-edit.el dired-aux.el simple.el minibuffer.el
+  menu-bar.el package-test.el progmodes/grep.el vc-svn.el eldoc.el
+  and 111 other files
 
 Dmitry Kurochkin: changed isearch.el
 
@@ -1444,7 +1445,7 @@ Eli Zaretskii: wrote [bidirectional display in xdisp.c]
 and changed xdisp.c msdos.c w32.c display.texi w32fns.c simple.el
   files.el fileio.c keyboard.c w32term.c w32proc.c emacs.c files.texi
   text.texi dispnew.c frames.texi lisp.h dispextern.h window.c process.c
-  term.c and 1184 other files
+  term.c and 1187 other files
 
 Emanuele Giaquinta: changed configure.ac rxvt.el charset.c etags.c
   fontset.c frame.el gnus-faq.texi loadup.el lread.c sh-script.el
@@ -2039,7 +2040,7 @@ Ian Lance Taylor: changed sco4.h
 Ian T Zimmerman: wrote gametree.el
 and changed ange-ftp.el desktop.el tex-mode.el
 
-İ. Göktuğ Kayaalp: changed eww.el vc-rcs.el
+İ. Göktuğ Kayaalp: changed eww.el frames.texi mwheel.el vc-rcs.el
 
 Igor Kuzmin: wrote cconv.el
 
@@ -2433,7 +2434,7 @@ and changed flymake.el flymake-proc.el icomplete.el 
minibuffer.el
   flymake-tests.el flymake.texi elisp-mode.el flymake-elisp.el
   electric.el flymake-ui.el text.texi json-tests.el tex-mode.el
   errors-and-warnings.c json.c xref.el auth-source-pass.el linum.el
-  maintaining.texi message.el progmodes/python.el and 29 other files
+  maintaining.texi message.el progmodes/python.el and 30 other files
 
 Jochen Hein: changed gnus-art.el
 
@@ -2713,13 +2714,15 @@ Juri Linkov: wrote files-x.el misearch.el 
replace-tests.el tab-bar.el
 and changed isearch.el info.el simple.el replace.el dired.el dired-aux.el
   progmodes/grep.el progmodes/compile.el startup.el subr.el diff-mode.el
   files.el menu-bar.el faces.el bindings.el display.texi image-mode.el
-  desktop.el comint.el minibuffer.el search.texi and 418 other files
+  desktop.el comint.el minibuffer.el search.texi and 419 other files
 
 Jussi Lahdenniemi: changed w32fns.c ms-w32.h msdos.texi w32.c w32.h
   w32console.c w32heap.c w32inevt.c w32term.h
 
 Justin Bogner: changed fortune.el
 
+Justin Burkett: changed window.el
+
 Justin Gordon: changed ox-md.el
 
 Justin Sheehy: changed gnus-sum.el nntp.el
@@ -3119,8 +3122,6 @@ Liam Stitt: changed url-file.el url-vars.el
 
 Liang Wang: changed etags.el
 
-Lin Sun: changed makefile-edit.el
-
 Lixin Chin: changed bibtex.el
 
 Lloyd Zusman: changed mml.el pgg-gpg.el
@@ -3348,9 +3349,9 @@ Martin Neitzel: changed supercite.el
 Martin Pohlack: changed iimage.el pc-select.el
 
 Martin Rudalics: changed window.el window.c windows.texi frame.c xdisp.c
-  w32fns.c frames.texi xterm.c w32term.c frame.el xfns.c display.texi
+  w32fns.c xterm.c frames.texi w32term.c xfns.c frame.el display.texi
   help.el buffer.c window.h cus-start.el frame.h dispnew.c mouse.el
-  nsfns.m dired.el and 209 other files
+  nsfns.m gtkutil.c and 209 other files
 
 Martin Stjernholm: wrote cc-bytecomp.el
 and co-wrote cc-align.el cc-cmds.el cc-compat.el cc-defs.el cc-engine.el
@@ -3450,10 +3451,10 @@ Matt Hodges: changed textmodes/table.el faces.el 
iswitchb.el simple.el
   locate.el paragraphs.el pcomplete.el repeat.el and 3 other files
 
 Mattias Engdegård: changed rx.el searching.texi rx-tests.el autorevert.el
-  regexp-opt.el calc-tests.el filenotify.el subr.el progmodes/compile.el
-  files.el mouse.el bytecomp.el compile-tests.el autorevert-tests.el
-  byte-opt.el bytecomp-tests.el calc-alg.el compilation.txt font.c
-  regex-emacs.c regexp-opt-tests.el and 121 other files
+  calc-tests.el regexp-opt.el filenotify.el subr.el files.el
+  progmodes/compile.el mouse.el bytecomp.el compile-tests.el
+  autorevert-tests.el byte-opt.el bytecomp-tests.el calc-alg.el
+  compilation.txt dired.el font.c regex-emacs.c and 161 other files
 
 Matt Lundin: changed org-agenda.el org.el org-bibtex.el org-footnote.el
   ox-publish.el org-bbdb.el org-datetree.el org-gnus.el
@@ -3854,7 +3855,7 @@ Nil Geisweiller: changed flymake.el
 
 Nils Ackermann: changed message.el nnmh.el reftex-vars.el
 
-Nitish Chandra: changed simple.el
+Nitish Chinta: changed progmodes/python.el sendmail.el simple.el
 
 N. Jackson: changed emacs.texi forms.texi
 
@@ -3870,10 +3871,10 @@ Noah Lavine: changed tramp.el
 Noah Swainland: changed calc.el
 
 Noam Postavsky: changed progmodes/python.el lisp-mode.el bytecomp.el
-  lisp-mode-tests.el term.el xdisp.c cl-macs.el eval.c
-  emacs-lisp/debug.el simple.el data.c modes.texi subr.el elisp-mode.el
-  ert.el help-fns.el isearch.el processes.texi cl-print.el ffap.el
-  print.c and 357 other files
+  lisp-mode-tests.el term.el xdisp.c eval.c cl-macs.el data.c
+  emacs-lisp/debug.el simple.el help-fns.el modes.texi subr.el
+  elisp-mode.el ert.el isearch.el processes.texi cl-print.el diff-mode.el
+  ffap.el and 359 other files
 
 Nobuyoshi Nakada: co-wrote ruby-mode.el
 and changed ruby-mode-tests.el
@@ -4168,15 +4169,15 @@ Philipp Stephani: wrote callint-tests.el 
checkdoc-tests.el
   lread-tests.el mouse-tests.el xt-mouse-tests.el
 and changed emacs-module.c emacs-module-tests.el json.c json-tests.el
   eval.c mod-test.c lisp.h lread.c nsterm.m configure.ac bytecomp.el
-  internals.texi gtkutil.c emacs-module.h.in files.el alloc.c electric.el
-  test/Makefile.in editfns.c electric-tests.el emacs.c
-  and 126 other files
+  internals.texi gtkutil.c emacs-module.h.in files.el alloc.c
+  electric-tests.el electric.el test/Makefile.in editfns.c emacs.c
+  and 127 other files
 
 Phillip Lord: wrote ps-print-tests.el
-and changed build-zips.sh lisp/Makefile.in undo.c simple.el
-  build-dep-zips.py test/Makefile.in Makefile Makefile.in emacs.nsi
-  keyboard.c viper-cmd.el README-windows-binaries README.W32
-  elisp-mode-tests.el ldefs-clean.el loadup.el README-scripts autoload.el
+and changed build-zips.sh lisp/Makefile.in undo.c build-dep-zips.py
+  simple.el test/Makefile.in Makefile Makefile.in emacs.nsi keyboard.c
+  viper-cmd.el README-windows-binaries README.W32 elisp-mode-tests.el
+  ldefs-clean.el loadup.el README-scripts autoload.el
   automated/Makefile.in cmds.c dired.el and 171 other files
 
 Phil Sainty: wrote autoload-longlines-mode-tests.el
@@ -4412,11 +4413,11 @@ Roberto Rodríguez: changed glossary.texi widget.texi
 Robert P. Goldman: changed org.texi ob-exp.el org.el ox-latex.el
 
 Robert Pluim: wrote nsm-tests.el
-and changed process.c gtkutil.c processes.texi vc-git.el configure.ac
-  ftfont.c network-stream.el nsm.el process-tests.el files.texi font.c
-  ftcrfont.c gnus-icalendar.el gnutls.el gtkutil.h
-  network-stream-tests.el text.texi w32.c xfns.c xftfont.c auth.texi
-  and 83 other files
+and changed process.c ftfont.c gtkutil.c processes.texi vc-git.el
+  configure.ac font.c network-stream.el nsm.el process-tests.el xfns.c
+  dispextern.h files.texi ftcrfont.c gnus-icalendar.el gnutls.el
+  gtkutil.h network-stream-tests.el nsterm.m text.texi w32.c
+  and 90 other files
 
 Robert Thorpe: changed cus-start.el indent.el
 
@@ -4649,6 +4650,8 @@ and changed ob-maxima.el ob-octave.el
 
 Sergey Poznyakoff: changed rmail.el mh-mime.el rmail.texi smtpmail.el
 
+Sergey Trofimov: changed window.el
+
 Sergey Vinokurov: changed emacs-module-tests.el emacs-module.c mod-test.c
 
 Sergio Durigan Junior: changed eudcb-bbdb.el gdb-mi.el
@@ -4772,7 +4775,7 @@ Stefan Kangas: wrote bookmark-tests.el delim-col-tests.el 
morse-tests.el
 and changed bookmark.el package.el efaq.texi package.texi ibuffer.el
   mwheel.el cperl-mode.el fns.c gud.el simple.el subr.el autoinsert.el
   comint-tests.el cus-edit.el delim-col.el dired-aux.el dired-x.el
-  em-term.el ert.texi flow-fill.el frames.texi and 146 other files
+  em-term.el ert.texi flow-fill.el frames.texi and 147 other files
 
 Stefan Merten: co-wrote rst.el
 
@@ -4806,10 +4809,11 @@ Stefan Wiens: changed gnus-sum.el
 
 Steinar Bang: changed gnus-setup.el imap.el
 
-Štěpán Němec: changed INSTALL calc-ext.el cl.texi comint.el edebug.texi
-  font-lock.el functions.texi leim-ext.el loading.texi maps.texi
-  mark.texi message.texi mini.texi minibuf.texi misc.texi programs.texi
-  subr.el tips.texi url-vars.el url.texi vc-git.el and 3 other files
+Štěpán Němec: changed INSTALL calc-ext.el checkdoc.el cl.texi comint.el
+  edebug.texi font-lock.el functions.texi gnus-sum.el insdel.c
+  leim-ext.el loading.texi maps.texi mark.texi message.texi mini.texi
+  minibuf.texi misc.texi programs.texi subr.el text.texi
+  and 7 other files
 
 Stephan Stahl: changed which-func.el buff-menu.el buffer.c dired-x.texi
   ediff-mult.el
@@ -5567,6 +5571,8 @@ Zhang Weize: wrote ob-plantuml.el
 
 Zhongwei Yao: changed tramp-adb.el
 
+Zhu Zihao: changed svg.el
+
 Zoltan Kemenczy: changed gud.el
 
 Zoran Milojevic: changed avoid.el
diff --git a/etc/NEWS b/etc/NEWS
index 1bfaf65..396c757 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -390,8 +390,7 @@ current IME activation status.
 ** On MS-Windows, Emacs can now use the native image API to display images.
 Emacs can now use the MS-Windows GDI+ library to load and display
 images in JPEG, PNG, GIF and TIFF formats.  This support is enabled
-with --with-native-image-api, which automatically disables the use of
-optional third party libraries for those formats.
+unless Emacs was configured --without-native-image-api.
 
 This feature is experimental, and needs to be turned on to be used.
 To turn this on, set the variable 'w32-use-native-image-API' to a
diff --git a/etc/NEWS.27 b/etc/NEWS.27
index f4edfaf..aba3028 100644
--- a/etc/NEWS.27
+++ b/etc/NEWS.27
@@ -1647,6 +1647,16 @@ adjacent to an apostrophe, like "nick's".
 *** Set 'erc-button-url-regexp' to 'browse-url-button-regexp'
 which better handles surrounding pair of parentheses.
 
+---
+*** New function 'erc-switch-to-buffer-other-window'
+which is like 'erc-switch-to-buffer', but opens the buffer in another
+window.
+
+---
+*** New function 'erc-track-switch-buffer-other-window'
+which is like 'erc-track-switch-buffer', but opens the buffer in
+another window.
+
 ** EUDC
 
 ---
diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el
index 4d36667..c918f06 100644
--- a/lisp/arc-mode.el
+++ b/lisp/arc-mode.el
@@ -2032,7 +2032,7 @@ This doesn't recover lost files, it just undoes changes 
in the buffer itself."
           (call-process "lsar" nil t nil "-l" (or file copy))
         (if copy (delete-file copy)))
       (goto-char (point-min))
-      (re-search-forward "^\\(\s+=+\s*\\)+\n")
+      (re-search-forward "^\\(?:\s+=+\\)+\s*\n")
       (while (looking-at (concat "^\s+[0-9.]+\s+D?-+\s+"   ; Flags
                                  "\\([0-9-]+\\)\s+"        ; Size
                                  "\\([-0-9.]+\\)%?\s+"      ; Ratio
diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el
index e2a6bfe..ba66d0b 100644
--- a/lisp/auth-source-pass.el
+++ b/lisp/auth-source-pass.el
@@ -190,7 +190,7 @@ CONTENTS is the contents of a password-store formatted 
file."
   (let ((store-dir (expand-file-name auth-source-pass-filename)))
     (mapcar
      (lambda (file) (file-name-sans-extension (file-relative-name file 
store-dir)))
-     (directory-files-recursively store-dir "\\.gpg$"))))
+     (directory-files-recursively store-dir "\\.gpg\\'"))))
 
 (defun auth-source-pass--find-match (host user port)
   "Return password-store entry data matching HOST, USER and PORT.
diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el
index 6d8fe9c..a49f428 100644
--- a/lisp/calendar/todo-mode.el
+++ b/lisp/calendar/todo-mode.el
@@ -707,7 +707,7 @@ and done items are always shown on visiting a category."
                                    shortf todo-show-first)))
                     (when (eq todo-show-first 'regexp)
                       (let ((rxfiles (directory-files todo-directory t
-                                                      ".*\\.todr$" t)))
+                                                      "\\.todr\\'" t)))
                         (when (and rxfiles (> (length rxfiles) 1))
                           (let ((rxf (mapcar #'todo-short-file-name rxfiles)))
                             (setq fi-file (todo-absolute-file-name
@@ -4054,7 +4054,7 @@ regexp items."
 (defun todo-find-filtered-items-file ()
   "Choose a filtered items file and visit it."
   (interactive)
-  (let ((files (directory-files todo-directory t "\\.tod[rty]$" t))
+  (let ((files (directory-files todo-directory t "\\.tod[rty]\\'" t))
        falist file)
     (dolist (f files)
       (let ((sf-name (todo-short-file-name f))
@@ -4187,7 +4187,7 @@ multifile commands for further details."
                                (regexp ".todr")))))
         (multi (> (length flist) 1))
         (rxfiles (when regexp
-                   (directory-files todo-directory t ".*\\.todr$" t)))
+                   (directory-files todo-directory t "\\.todr\\'" t)))
         (file-exists (or (file-exists-p fname) rxfiles))
         bufname)
     (cond ((and top new (natnump new))
@@ -6154,7 +6154,7 @@ the empty string (i.e., no time string)."
   "The :set function for user option `todo-nondiary-marker'."
   (let* ((oldvalue (symbol-value symbol))
         (files (append todo-files todo-archives
-                       (directory-files todo-directory t "\\.tod[rty]$" t))))
+                       (directory-files todo-directory t "\\.tod[rty]\\'" t))))
     (custom-set-default symbol value)
     ;; Need to reset these to get font-locking right.
     (setq todo-nondiary-start (nth 0 todo-nondiary-marker)
@@ -6207,7 +6207,7 @@ the empty string (i.e., no time string)."
   "The :set function for user option `todo-done-string'."
   (let ((oldvalue (symbol-value symbol))
        (files (append todo-files todo-archives
-                      (directory-files todo-directory t "\\.todr$" t))))
+                      (directory-files todo-directory t "\\.todr\\'" t))))
     (custom-set-default symbol value)
     ;; Need to reset this to get font-locking right.
     (setq todo-done-string-start
@@ -6236,7 +6236,7 @@ the empty string (i.e., no time string)."
   "The :set function for user option `todo-comment-string'."
   (let ((oldvalue (symbol-value symbol))
        (files (append todo-files todo-archives
-                      (directory-files todo-directory t "\\.todr$" t))))
+                      (directory-files todo-directory t "\\.todr\\'" t))))
     (custom-set-default symbol value)
     (when (not (equal value oldvalue))
       (dolist (f files)
@@ -6262,7 +6262,7 @@ the empty string (i.e., no time string)."
   "The :set function for user option `todo-highlight-item'."
   (let ((oldvalue (symbol-value symbol))
        (files (append todo-files todo-archives
-                      (directory-files todo-directory t "\\.tod[rty]$" t))))
+                      (directory-files todo-directory t "\\.tod[rty]\\'" t))))
     (custom-set-default symbol value)
     (when (not (equal value oldvalue))
       (dolist (f files)
diff --git a/lisp/cedet/semantic/db-ebrowse.el 
b/lisp/cedet/semantic/db-ebrowse.el
index 2142917..d63e5bc 100644
--- a/lisp/cedet/semantic/db-ebrowse.el
+++ b/lisp/cedet/semantic/db-ebrowse.el
@@ -181,7 +181,10 @@ is specified by `semanticdb-default-save-directory'."
   "Load all semanticdb controlled EBROWSE caches."
   (interactive)
   (let ((f (directory-files semanticdb-default-save-directory
-                           t (concat semanticdb-ebrowse-default-file-name 
"-load.el$") t)))
+                           t (concat (regexp-quote
+                                       semanticdb-ebrowse-default-file-name)
+                                      "-load\\.el\\'")
+                            t)))
     (while f
       (load (car f) nil t)
       (setq f (cdr f)))
diff --git a/lisp/cedet/semantic/texi.el b/lisp/cedet/semantic/texi.el
index 760cb19..8e8d362 100644
--- a/lisp/cedet/semantic/texi.el
+++ b/lisp/cedet/semantic/texi.el
@@ -495,7 +495,7 @@ that start with that symbol."
               (setq tabs (cdr tabs)))
             r))
          (t
-          (directory-files default-directory nil "\\.texi$"))
+          (directory-files default-directory nil "\\.texi\\'"))
          )))
 
 ;; Turns out this might not be useful.
diff --git a/lisp/cedet/srecode/map.el b/lisp/cedet/srecode/map.el
index 784ebff..dc94920 100644
--- a/lisp/cedet/srecode/map.el
+++ b/lisp/cedet/srecode/map.el
@@ -327,7 +327,7 @@ if that file is NEW, otherwise assume the mode has not 
changed."
     ;; 4) - Find new files and add them to the map.
     (dolist (dir srecode-map-load-path)
       (when (file-exists-p dir)
-       (dolist (f (directory-files dir t "\\.srt$"))
+       (dolist (f (directory-files dir t "\\.srt\\'"))
          (when (and (not (backup-file-name-p f))
                     (not (auto-save-file-name-p f))
                     (file-readable-p f))
diff --git a/lisp/dired.el b/lisp/dired.el
index 62e232b..14bbb28 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -3235,8 +3235,8 @@ Any other value means to ask for each directory."
                 (const :tag "Confirm for each top directory only" top))
   :group 'dired)
 
-;; Match anything but `.' and `..'.
-(defvar dired-re-no-dot "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*")
+(define-obsolete-variable-alias 'dired-re-no-dot
+  'directory-files-no-dot-files-regexp "28.1")
 
 ;; Delete file, possibly delete a directory and all its files.
 ;; This function is useful outside of dired.  One could change its name
@@ -3258,7 +3258,9 @@ TRASH non-nil means to trash the file instead of 
deleting, provided
        ;; but more efficient
        (if (not (eq t (car (file-attributes file))))
            (delete-file file trash)
-         (let* ((empty-dir-p (null (directory-files file t dired-re-no-dot))))
+         (let* ((empty-dir-p (null (directory-files
+                                    file t
+                                    directory-files-no-dot-files-regexp))))
            (if (and recursive (not empty-dir-p))
                (unless (eq recursive 'always)
                  (let ((prompt
diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el
index d9a43c2..d9da365 100644
--- a/lisp/emacs-lisp/autoload.el
+++ b/lisp/emacs-lisp/autoload.el
@@ -1049,7 +1049,7 @@ write its autoloads into the specified file instead."
                        ;; what is the suffix for the underlying OS.
                       (unless (string-match "\\.\\(elc\\|eln\\|so\\|dll\\)" 
suf)
                          (push suf tmp)))
-                     (concat "^[^=.].*" (regexp-opt tmp t) "\\'")))
+                     (concat "\\`[^=.].*" (regexp-opt tmp t) "\\'")))
         (files (apply #'nconc
                       (mapcar (lambda (dir)
                                 (directory-files (expand-file-name dir)
diff --git a/lisp/emacs-lisp/shadow.el b/lisp/emacs-lisp/shadow.el
index f0a4870..4ff129e 100644
--- a/lisp/emacs-lisp/shadow.el
+++ b/lisp/emacs-lisp/shadow.el
@@ -99,7 +99,8 @@ See the documentation for `list-load-path-shadows' for 
further information."
        (setq true-names (append true-names (list dir)))
        (setq dir (directory-file-name (or pp ".")))
        (setq curr-files (if (file-accessible-directory-p dir)
-                            (directory-files dir nil ".\\.elc?\\(\\.gz\\)?$" 
t)))
+                            (directory-files dir nil
+                                              "\\.elc?\\(?:\\.gz\\)?\\'" t)))
        (and curr-files
             (not noninteractive)
             (message "Checking %d files in %s..." (length curr-files) dir))
diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el
index 26701ce..8ccceec 100644
--- a/lisp/erc/erc-dcc.el
+++ b/lisp/erc/erc-dcc.el
@@ -627,11 +627,11 @@ that subcommand."
        ?q query ?n nick ?u login ?h host))))
 
 (defconst erc-dcc-ctcp-query-send-regexp
-  (concat "^DCC SEND \\("
+  (concat "^DCC SEND \\(?:"
           ;; Following part matches either filename without spaces
           ;; or filename enclosed in double quotes with any number
           ;; of escaped double quotes inside.
-          "\"\\(\\(.*?\\(\\\\\"\\)?\\)+?\\)\"\\|\\([^ ]+\\)"
+          "\"\\(\\(?:\\\\\"\\|[^\"\\]\\)+\\)\"\\|\\([^ ]+\\)"
           "\\) \\([0-9]+\\) \\([0-9]+\\) *\\([0-9]*\\)"))
 
 (define-inline erc-dcc-unquote-filename (filename)
@@ -653,11 +653,11 @@ It extracts the information about the dcc request and 
adds it to
        ?r "SEND" ?n nick ?u login ?h host))
      ((string-match erc-dcc-ctcp-query-send-regexp query)
       (let ((filename
-             (or (match-string 5 query)
-                 (erc-dcc-unquote-filename (match-string 2 query))))
-            (ip       (erc-decimal-to-ip (match-string 6 query)))
-            (port     (match-string 7 query))
-            (size     (match-string 8 query)))
+             (or (match-string 2 query)
+                 (erc-dcc-unquote-filename (match-string 1 query))))
+            (ip       (erc-decimal-to-ip (match-string 3 query)))
+            (port     (match-string 4 query))
+            (size     (match-string 5 query)))
         ;; FIXME: a warning really should also be sent
         ;; if the ip address != the host the dcc sender is on.
         (erc-display-message
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index db8ccbb..41d8fc1 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -921,11 +921,7 @@ is relative to `erc-track-switch-direction'."
           (setq offset 0)))
     (car (nth offset erc-modified-channels-alist))))
 
-(defun erc-track-switch-buffer (arg)
-  "Switch to the next active ERC buffer, or if there are no active buffers,
-switch back to the last non-ERC buffer visited.  Next is defined by
-`erc-track-switch-direction', a negative argument will reverse this."
-  (interactive "p")
+(defun erc-track--switch-buffer (fun arg)
   (if (not erc-track-mode)
       (message (concat "Enable the ERC track module if you want to use the"
                       " tracking minor mode"))
@@ -934,12 +930,30 @@ switch back to the last non-ERC buffer visited.  Next is 
defined by
           (unless (eq major-mode 'erc-mode)
             (setq erc-track-last-non-erc-buffer (current-buffer)))
           ;; and jump to the next active channel
-          (switch-to-buffer (erc-track-get-active-buffer arg)))
+          (funcall fun (erc-track-get-active-buffer arg)))
          ;; if no active channels, switch back to what we were doing before
          ((and erc-track-last-non-erc-buffer
-               erc-track-switch-from-erc
-               (buffer-live-p erc-track-last-non-erc-buffer))
-          (switch-to-buffer erc-track-last-non-erc-buffer)))))
+               erc-track-switch-from-erc
+               (buffer-live-p erc-track-last-non-erc-buffer))
+          (funcall fun erc-track-last-non-erc-buffer)))))
+
+(defun erc-track-switch-buffer (arg)
+  "Switch to the next active ERC buffer.
+If there are no active ERC buffers, switch back to the last
+non-ERC buffer visited.  The order of buffers is defined by
+`erc-track-switch-direction', and a negative argument will
+reverse it."
+  (interactive "p")
+  (erc-track--switch-buffer 'switch-to-buffer arg))
+
+(defun erc-track-switch-buffer-other-window (arg)
+  "Switch to the next active ERC buffer in another window.
+If there are no active ERC buffers, switch back to the last
+non-ERC buffer visited.  The order of buffers is defined by
+`erc-track-switch-direction', and a negative argument will
+reverse it."
+  (interactive "p")
+  (erc-track--switch-buffer 'switch-to-buffer-other-window arg))
 
 (provide 'erc-track)
 
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 5c63382..cc5226b 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -1762,29 +1762,38 @@ nil."
        res)))
 
 (define-obsolete-function-alias 'erc-iswitchb 'erc-switch-to-buffer "25.1")
+(defun erc--switch-to-buffer (&optional arg)
+  (read-buffer "Switch to ERC buffer: "
+              (when (boundp 'erc-modified-channels-alist)
+                (buffer-name (caar (last erc-modified-channels-alist))))
+              t
+              ;; Only allow ERC buffers in the same session.
+              (let ((proc (unless arg erc-server-process)))
+                (lambda (bufname)
+                  (let ((buf (if (consp bufname)
+                                 (cdr bufname) (get-buffer bufname))))
+                    (when buf
+                      (erc--buffer-p buf (lambda () t) proc)
+                      (with-current-buffer buf
+                        (and (derived-mode-p 'erc-mode)
+                             (or (null proc)
+                                 (eq proc erc-server-process))))))))))
 (defun erc-switch-to-buffer (&optional arg)
-  "Prompt for a ERC buffer to switch to.
-When invoked with prefix argument, use all erc buffers.  Without prefix
-ARG, allow only buffers related to same session server.
+  "Prompt for an ERC buffer to switch to.
+When invoked with prefix argument, use all ERC buffers.  Without
+prefix ARG, allow only buffers related to same session server.
 If `erc-track-mode' is in enabled, put the last element of
 `erc-modified-channels-alist' in front of the buffer list."
   (interactive "P")
-  (switch-to-buffer
-   (read-buffer "Switch to ERC buffer: "
-               (when (boundp 'erc-modified-channels-alist)
-                 (buffer-name (caar (last erc-modified-channels-alist))))
-               t
-               ;; Only allow ERC buffers in the same session.
-               (let ((proc (unless arg erc-server-process)))
-                 (lambda (bufname)
-                   (let ((buf (if (consp bufname)
-                                  (cdr bufname) (get-buffer bufname))))
-                     (when buf
-                       (erc--buffer-p buf (lambda () t) proc)
-                       (with-current-buffer buf
-                         (and (derived-mode-p 'erc-mode)
-                              (or (null proc)
-                                  (eq proc erc-server-process)))))))))))
+  (switch-to-buffer (erc--switch-to-buffer arg)))
+(defun erc-switch-to-buffer-other-window (&optional arg)
+  "Prompt for an ERC buffer to switch to in another window.
+When invoked with prefix argument, use all ERC buffers.  Without
+prefix ARG, allow only buffers related to same session server.
+If `erc-track-mode' is in enabled, put the last element of
+`erc-modified-channels-alist' in front of the buffer list."
+  (interactive "P")
+  (switch-to-buffer-other-window (erc--switch-to-buffer arg)))
 
 (defun erc-channel-list (proc)
   "Return a list of channel buffers.
diff --git a/lisp/files.el b/lisp/files.el
index f49be4f..fa72e51 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2668,7 +2668,7 @@ since only a single case-insensitive search through the 
alist is made."
      ("\\.pas\\'" . pascal-mode)
      ("\\.\\(dpr\\|DPR\\)\\'" . delphi-mode)
      ("\\.ad[abs]\\'" . ada-mode)
-     ("\\.ad[bs].dg\\'" . ada-mode)
+     ("\\.ad[bs]\\.dg\\'" . ada-mode)
      ("\\.\\([pP]\\([Llm]\\|erl\\|od\\)\\|al\\)\\'" . perl-mode)
      ("Imakefile\\'" . makefile-imake-mode)
      ("Makeppfile\\(?:\\.mk\\)?\\'" . makefile-makepp-mode) ; Put this before 
.mk
@@ -2819,7 +2819,7 @@ 
ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|CBR\\|7Z\\)\\'" . archive-mo
      ("\\.properties\\(?:\\.[a-zA-Z0-9._-]+\\)?\\'" . conf-javaprop-mode)
      ("\\.toml\\'" . conf-toml-mode)
      ("\\.desktop\\'" . conf-desktop-mode)
-     ("/\\.redshift.conf\\'" . conf-windows-mode)
+     ("/\\.redshift\\.conf\\'" . conf-windows-mode)
      
("\\`/etc/\\(?:DIR_COLORS\\|ethers\\|.?fstab\\|.*hosts\\|lesskey\\|login\\.?de\\(?:fs\\|vperm\\)\\|magic\\|mtab\\|pam\\.d/.*\\|permissions\\(?:\\.d/.+\\)?\\|protocols\\|rpc\\|services\\)\\'"
 . conf-space-mode)
      
("\\`/etc/\\(?:acpid?/.+\\|aliases\\(?:\\.d/.+\\)?\\|default/.+\\|group-?\\|hosts\\..+\\|inittab\\|ksysguarddrc\\|opera6rc\\|passwd-?\\|shadow-?\\|sysconfig/.+\\)\\'"
 . conf-mode)
      ;; ChangeLog.old etc.  Other change-log-mode entries are above;
@@ -5753,8 +5753,11 @@ If called interactively, then PARENTS is non-nil."
   (write-region "" nil filename nil 0))
 
 (defconst directory-files-no-dot-files-regexp
-  "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"
-  "Regexp matching any file name except \".\" and \"..\".")
+  "[^.]\\|\\.\\.\\."
+  "Regexp matching any file name except \".\" and \"..\".
+More precisely, it matches parts of any nonempty string except those two.
+It is useful as the regexp argument to `directory-files' and
+`directory-files-and-attributes'.")
 
 (defun files--force (no-such fn &rest args)
   "Use NO-SUCH to affect behavior of function FN applied to list ARGS.
diff --git a/lisp/finder.el b/lisp/finder.el
index dc14b27..f04d73e 100644
--- a/lisp/finder.el
+++ b/lisp/finder.el
@@ -188,7 +188,7 @@ from; the default is `load-path'."
   ;; Allow compressed files also.
   (setq package--builtins nil)
   (setq finder-keywords-hash (make-hash-table :test 'eq))
-  (let* ((el-file-regexp "^\\([^=].*\\)\\.el\\(\\.\\(gz\\|Z\\)\\)?$")
+  (let* ((el-file-regexp "\\`\\([^=].*\\)\\.el\\(\\.\\(gz\\|Z\\)\\)?\\'")
          (file-count 0)
          (files (cl-loop for d in (or dirs load-path)
                          when (file-exists-p (directory-file-name d))
diff --git a/lisp/generic-x.el b/lisp/generic-x.el
index d49193c..cd24f49 100644
--- a/lisp/generic-x.el
+++ b/lisp/generic-x.el
@@ -1430,7 +1430,7 @@ like an INI file.  You can add this hook to 
`find-file-hook'."
     "nowait"
     "internal")
   '(("^\\([-A-Za-z0-9_]+\\)" 1 font-lock-type-face))
-  '("/etc/inetd.conf\\'")
+  '("/etc/inetd\\.conf\\'")
   (list
    (function
     (lambda ()
@@ -1630,7 +1630,7 @@ like an INI file.  You can add this hook to 
`find-file-hook'."
      (2 font-lock-variable-name-face)
      (3 font-lock-constant-face)))
   ;; List of additional automode-alist expressions
-  '("/etc/named.boot\\'")
+  '("/etc/named\\.boot\\'")
   ;; List of set up functions to call
   nil))
 
@@ -1667,7 +1667,7 @@ like an INI file.  You can add this hook to 
`find-file-hook'."
   ;; List of additional font-lock-expressions
   nil
   ;; List of additional auto-mode-alist expressions
-  '("/etc/resolv[e]?.conf\\'")
+  '("/etc/resolve?\\.conf\\'")
   ;; List of set up functions to call
   nil))
 
@@ -1803,7 +1803,7 @@ like an INI file.  You can add this hook to 
`find-file-hook'."
   ;; List of additional font-lock-expressions
   nil
   ;; List of additional automode-alist expressions
-  '("/etc/modules.conf" "/etc/conf.modules")
+  '("/etc/modules\\.conf" "/etc/conf\\.modules")
   ;; List of set up functions to call
   nil))
 
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index 80bf21b..1ed5000 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -2074,7 +2074,7 @@ doesn't exist, to valid the overview buffer."
                  (file-attributes (directory-files-and-attributes
                                    (gnus-agent-article-name
                                     "" gnus-agent-read-agentview)
-                                   nil "^[0-9]+$" t)))
+                                   nil "\\`[0-9]+\\'" t)))
             (while file-attributes
               (let ((fa (pop file-attributes)))
                 (unless (file-attribute-type (cdr fa))
@@ -3850,7 +3850,8 @@ If REREAD is not nil, downloaded articles are marked as 
unread."
                           (sort (delq nil (mapcar (lambda (name)
                                                     (and (not 
(file-directory-p (nnheader-concat dir name)))
                                                          (string-to-number 
name)))
-                                                  (directory-files dir nil 
"^[0-9]+$" t)))
+                                                  (directory-files
+                                                    dir nil "\\`[0-9]+\\'" t)))
                                 '>)
                         (progn (gnus-make-directory dir) nil)))
            nov-arts
@@ -4110,7 +4111,7 @@ agent has fetched."
                 (setq delta sum))
             (let ((sum (- (nth 2 entry)))
                   (info (directory-files-and-attributes
-                         path nil "^-?[0-9]+$" t))
+                         path nil "\\`-?[0-9]+\\'" t))
                   file)
               (while (setq file (pop info))
                 (cl-incf sum (float (or (file-attribute-size (cdr file)) 0))))
diff --git a/lisp/gnus/gnus-cache.el b/lisp/gnus/gnus-cache.el
index 8b9acfe..02a8ea7 100644
--- a/lisp/gnus/gnus-cache.el
+++ b/lisp/gnus/gnus-cache.el
@@ -501,7 +501,7 @@ Returns the list of articles removed."
     (when (file-exists-p dir)
       (setq articles
            (sort (mapcar (lambda (name) (string-to-number name))
-                         (directory-files dir nil "^[0-9]+$" t))
+                         (directory-files dir nil "\\`[0-9]+\\'" t))
                  '<))
       ;; Update the cache active file, just to synch more.
       (if articles
diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el
index 41b63e2..46b70ea 100644
--- a/lisp/gnus/gnus-score.el
+++ b/lisp/gnus/gnus-score.el
@@ -2981,7 +2981,7 @@ The list is determined from the variable 
`gnus-score-file-alist'."
       (if (file-directory-p (car files))
          (setq out (nconc (directory-files
                            (car files) t
-                           (concat (gnus-score-file-regexp) "$"))))
+                           (concat (gnus-score-file-regexp) "\\'"))))
        (push (car files) out))
       (setq files (cdr files)))
     (setq gnus-internal-global-score-files out)))
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 83a8516..8d8956f 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -768,7 +768,7 @@ nil.  See also `gnus-bind-print-variables'."
 If there's no subdirectory, delete DIRECTORY as well."
   (when (file-directory-p directory)
     (let ((files (directory-files
-                 directory t "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))
+                 directory t directory-files-no-dot-files-regexp))
          file dir)
       (while files
        (setq file (pop files))
diff --git a/lisp/gnus/gnus-uu.el b/lisp/gnus/gnus-uu.el
index 4037221..70aeac0 100644
--- a/lisp/gnus/gnus-uu.el
+++ b/lisp/gnus/gnus-uu.el
@@ -1674,7 +1674,7 @@ Gnus might fail to display all of it.")
     did-unpack))
 
 (defun gnus-uu-dir-files (dir)
-  (let ((dirs (directory-files dir t "[^/][^\\.][^\\.]?$"))
+  (let ((dirs (directory-files dir t directory-files-no-dot-files-regexp))
        files file)
     (while dirs
       (if (file-directory-p (setq file (car dirs)))
diff --git a/lisp/gnus/nndraft.el b/lisp/gnus/nndraft.el
index e5dda99..a3c26ea 100644
--- a/lisp/gnus/nndraft.el
+++ b/lisp/gnus/nndraft.el
@@ -219,7 +219,7 @@ are generated if and only if they are also in 
`message-draft-headers'."
       (nnheader-re-read-dir pathname)
       (setq dir (mapcar (lambda (name) (string-to-number (substring name 1)))
                        (ignore-errors (directory-files
-                                       pathname nil "^#[0-9]+#$" t))))
+                                       pathname nil "\\`#[0-9]+#\\'" t))))
       (dolist (n dir)
        (unless (file-exists-p
                 (setq file (expand-file-name (int-to-string n) pathname)))
diff --git a/lisp/gnus/nnmh.el b/lisp/gnus/nnmh.el
index d2f63bd..581a408 100644
--- a/lisp/gnus/nnmh.el
+++ b/lisp/gnus/nnmh.el
@@ -172,7 +172,7 @@ as unread by Gnus.")
        (setq dir
              (sort
               (mapcar 'string-to-number
-                      (directory-files pathname nil "^[0-9]+$" t))
+                      (directory-files pathname nil "\\`[0-9]+\\'" t))
               '<))
        (cond
         (dir
@@ -360,7 +360,7 @@ as unread by Gnus.")
       (nnmh-possibly-change-directory group server)
       (let ((articles (mapcar 'string-to-number
                              (directory-files
-                              nnmh-current-directory nil "^[0-9]+$"))))
+                              nnmh-current-directory nil "\\`[0-9]+\\'"))))
        (when articles
          (setcar active (apply 'min articles))
          (setcdr active (apply 'max articles))))))
@@ -371,7 +371,7 @@ as unread by Gnus.")
   ;; Delete all articles in GROUP.
   (if (not force)
       ()                               ; Don't delete the articles.
-    (let ((articles (directory-files nnmh-current-directory t "^[0-9]+$")))
+    (let ((articles (directory-files nnmh-current-directory t "\\`[0-9]+\\'")))
       (while articles
        (when (file-writable-p (car articles))
          (nnheader-message 5 "Deleting article %s in %s..."
@@ -485,7 +485,7 @@ as unread by Gnus.")
       ;; Find the highest number in the group.
       (let ((files (sort
                    (mapcar 'string-to-number
-                           (directory-files dir nil "^[0-9]+$"))
+                           (directory-files dir nil "\\`[0-9]+\\'"))
                    '>)))
        (when files
          (setcdr active (car files)))))
@@ -509,7 +509,7 @@ as unread by Gnus.")
   (let* ((dir nnmh-current-directory)
         (files (sort (mapcar 'string-to-number
                              (directory-files nnmh-current-directory
-                                              nil "^[0-9]+$" t))
+                                              nil "\\`[0-9]+\\'" t))
                      '<))
         (nnmh-file (concat dir ".nnmh-articles"))
         new articles)
diff --git a/lisp/gnus/nnspool.el b/lisp/gnus/nnspool.el
index da13a56..33b68fa 100644
--- a/lisp/gnus/nnspool.el
+++ b/lisp/gnus/nnspool.el
@@ -260,7 +260,7 @@ there.")
            t)
        ;; Yes, completely empty spool directories *are* possible.
        ;; Fix by Sudish Joseph <address@hidden>
-       (when (setq dir (directory-files pathname nil "^[0-9]+$" t))
+       (when (setq dir (directory-files pathname nil "\\`[0-9]+\\'" t))
          (setq dir (sort (mapcar 'string-to-number dir) '<)))
        (if dir
            (nnheader-insert
diff --git a/lisp/gnus/spam-stat.el b/lisp/gnus/spam-stat.el
index 2e03608..3da45a2 100644
--- a/lisp/gnus/spam-stat.el
+++ b/lisp/gnus/spam-stat.el
@@ -557,7 +557,7 @@ check the variable `spam-stat-score-data'."
 
 (defun spam-stat-process-directory (dir func)
   "Process all the regular files in directory DIR using function FUNC."
-  (let* ((files (directory-files dir t "^[^.]"))
+  (let* ((files (directory-files dir t "\\`[^.]"))
         (max (/ (length files) 100.0))
         (count 0))
     (with-temp-buffer
@@ -601,7 +601,7 @@ If VERBOSE is non-nil display names of files detected as 
spam or
 non-spam in a temporary buffer.  If it is the symbol `ham',
 display non-spam files; otherwise display spam files."
   (interactive "DDirectory: ")
-  (let* ((files (directory-files dir t "^[^.]"))
+  (let* ((files (directory-files dir t "\\`[^.]"))
         display-files
         buffer-score
         (total (length files))
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index ecda62e..f9f25d4 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -630,7 +630,7 @@ FILE is the file where FUNCTION was probably defined."
   ;; of the *packages* in which the function is defined.
   (let* ((name (symbol-name symbol))
          (re (concat "\\_<" (regexp-quote name) "\\_>"))
-         (news (directory-files data-directory t "\\`NEWS.[1-9]"))
+         (news (directory-files data-directory t "\\`NEWS\\.[1-9]"))
          (place nil)
          (first nil))
     (with-temp-buffer
diff --git a/lisp/help.el b/lisp/help.el
index e40ed47..b7d867e 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -361,7 +361,7 @@ With argument, display info only for the selected version."
                     (setq res (cons (match-string-no-properties 1) res)))))
               (cons "NEWS"
                     (directory-files data-directory nil
-                                     "^NEWS\\.[0-9][-0-9]*$" nil)))
+                                     "\\`NEWS\\.[0-9][-0-9]*\\'" nil)))
              (sort (delete-dups res) #'string>)))
           (current (car all-versions)))
       (setq version (completing-read
diff --git a/lisp/htmlfontify.el b/lisp/htmlfontify.el
index 1d98b63..7a5d88c 100644
--- a/lisp/htmlfontify.el
+++ b/lisp/htmlfontify.el
@@ -136,8 +136,8 @@ main-content <=MAIN_CONTENT;\\n\" rtfm-section file style 
rtfm-section file))
    \"s section[eg- emacs / p4-blame]:\\nD source-dir: \\nD output-dir: \")
   (require \\='htmlfontify)
   (hfy-load-tags-cache srcdir)
-  (let ((hfy-page-header  \\='rtfm-build-page-header)
-        (hfy-page-footer  \\='rtfm-build-page-footer)
+  (let ((hfy-page-header  #\\='rtfm-build-page-header)
+        (hfy-page-footer  #\\='rtfm-build-page-footer)
         (rtfm-section                     section)
         (hfy-index-file                   \"index\"))
     (htmlfontify-run-etags srcdir)
@@ -151,7 +151,7 @@ main-content <=MAIN_CONTENT;\\n\" rtfm-section file style 
rtfm-section file))
   :link '(info-link "(htmlfontify) Customization")
   :prefix "hfy-")
 
-(defcustom hfy-page-header 'hfy-default-header
+(defcustom hfy-page-header #'hfy-default-header
   "Function called to build the header of the HTML source.
 This is called with two arguments (the filename relative to the top
 level source directory being etag'd and fontified), and a string containing
@@ -159,7 +159,6 @@ the <style>...</style> text to embed in the document.
 It should return a string that will be used as the header for the
 htmlfontified version of the source file.\n
 See also `hfy-page-footer'."
-  :group 'htmlfontify
   ;; FIXME: Why place such a :tag everywhere?  Isn't it imposing your
   ;; own Custom preference on your users?  --Stef
   :tag   "page-header"
@@ -170,32 +169,27 @@ See also `hfy-page-footer'."
 If non-nil, the index is split on the first letter of each tag.
 Useful when the index would otherwise be large and take
 a long time to render or be difficult to navigate."
-  :group 'htmlfontify
   :tag   "split-index"
   :type  '(boolean))
 
-(defcustom hfy-page-footer 'hfy-default-footer
+(defcustom hfy-page-footer #'hfy-default-footer
   "As `hfy-page-header', but generates the output footer.
 It takes only one argument, the filename."
-  :group 'htmlfontify
   :tag   "page-footer"
   :type  '(function))
 
 (defcustom hfy-extn ".html"
   "File extension used for output files."
-  :group 'htmlfontify
   :tag   "extension"
   :type  '(string))
 
 (defcustom hfy-src-doc-link-style "text-decoration: underline;"
   "String to add to the `<style> a' variant of an htmlfontify CSS class."
-  :group 'htmlfontify
   :tag   "src-doc-link-style"
   :type  '(string))
 
 (defcustom hfy-src-doc-link-unstyle " text-decoration: none;"
   "Regex to remove from the `<style> a' variant of an htmlfontify CSS class."
-  :group 'htmlfontify
   :tag   "src-doc-link-unstyle"
   :type  '(regexp))
 
@@ -204,32 +198,28 @@ It takes only one argument, the filename."
 Useful where the htmlfontify output files are going to be processed
 again, with a resulting change in file extension.  If nil, then any
 code using this should fall back to `hfy-extn'."
-  :group 'htmlfontify
   :tag   "link-extension"
   :type  '(choice string (const nil)))
 
-(defcustom hfy-link-style-fun 'hfy-link-style-string
+(defcustom hfy-link-style-fun #'hfy-link-style-string
   "Function to customize the appearance of hyperlinks.
 Set this to a function, which will be called with one argument
 \(a \"{ foo: bar; ...}\" CSS style-string) - it should return a copy of
 its argument, altered so as to make any changes you want made for text which
 is a hyperlink, in addition to being in the class to which that style would
 normally be applied."
-  :group 'htmlfontify
   :tag   "link-style-function"
   :type  '(function))
 
 (defcustom hfy-index-file "hfy-index"
   "Name (sans extension) of the tag definition index file produced during
 fontification-and-hyperlinking."
-  :group 'htmlfontify
   :tag   "index-file"
   :type  '(string))
 
 (defcustom hfy-instance-file "hfy-instance"
   "Name (sans extension) of the tag usage index file produced during
 fontification-and-hyperlinking."
-  :group 'htmlfontify
   :tag   "instance-file"
   :type  '(string))
 
@@ -237,25 +227,13 @@ fontification-and-hyperlinking."
   "Regex to match (with a single back-reference per match) strings in HTML
 which should be quoted with `hfy-html-quote' (and `hfy-html-quote-map')
 to make them safe."
-  :group 'htmlfontify
   :tag   "html-quote-regex"
   :type  '(regexp))
 
-(define-obsolete-variable-alias 'hfy-init-kludge-hooks 'hfy-init-kludge-hook
-  "23.2")
-(defcustom hfy-init-kludge-hook '(hfy-kludge-cperl-mode)
-  "List of functions to call when starting `htmlfontify-buffer' to do any
-kludging necessary to get highlighting modes to behave as you want, even
-when not running under a window system."
-  :group 'htmlfontify
-  :tag   "init-kludge-hooks"
-  :type  '(hook))
-
 (define-obsolete-variable-alias 'hfy-post-html-hooks 'hfy-post-html-hook 
"24.3")
 (defcustom hfy-post-html-hook nil
   "List of functions to call after creating and filling the HTML buffer.
 These functions will be called with the HTML buffer as the current buffer."
-  :group   'htmlfontify
   :tag     "post-html-hooks"
   :options '(set-auto-mode)
   :type    '(hook))
@@ -267,7 +245,6 @@ potentially non-current face information doesn't 
necessarily work for
 `default').\n
 Example: I customize this to:\n
 \((t :background \"black\" :foreground \"white\" :family \"misc-fixed\"))"
-  :group   'htmlfontify
   :tag     "default-face-definition"
   :type    '(alist))
 
@@ -281,7 +258,6 @@ in order, to:\n
    1 - The tag
    2 - The line
    3 - The char (point) at which the tag occurs."
-  :group 'htmlfontify
   :tag   "etag-regex"
   :type  '(regexp))
 
@@ -290,7 +266,6 @@ in order, to:\n
                                 ("&"  "&amp;" )
                                 (">"  "&gt;"  ))
   "Alist of char -> entity mappings used to make the text HTML-safe."
-  :group 'htmlfontify
   :tag   "html-quote-map"
   :type  '(alist :key-type (string)))
 (defconst hfy-e2x-etags-cmd "for src in `find . -type f`;
@@ -332,7 +307,6 @@ done;")
   hfy-etags-cmd-alist-default
   "Alist of possible shell commands that will generate etags output that
 `htmlfontify' can use.  `%s' will be replaced by `hfy-etags-bin'."
-  :group 'htmlfontify
   :tag   "etags-cmd-alist"
   :type  '(alist :key-type (string) :value-type (string)))
 
@@ -340,13 +314,11 @@ done;")
   "Location of etags binary (we begin by assuming it's in your path).\n
 Note that if etags is not in your path, you will need to alter the shell
 commands in `hfy-etags-cmd-alist'."
-  :group 'htmlfontify
   :tag   "etags-bin"
   :type  '(file))
 
 (defcustom hfy-shell-file-name "/bin/sh"
   "Shell (Bourne or compatible) to invoke for complex shell operations."
-  :group 'htmlfontify
   :tag   "shell-file-name"
   :type  '(file))
 
@@ -358,7 +330,6 @@ commands in `hfy-etags-cmd-alist'."
                                     point-entered
                                     point-left)
   "Properties to omit when copying a fontified buffer for HTML transformation."
-  :group 'htmlfontify
   :tag   "ignored-properties"
   :type '(repeat symbol))
 
@@ -387,7 +358,6 @@ file for the whole source tree from there on down.  The 
command should emit
 the etags output on stdout.\n
 Two canned commands are provided - they drive Emacs's etags and
 exuberant-ctags' etags respectively."
-  :group 'htmlfontify
   :tag   "etags-command"
   :type (let ((clist (list '(string))))
           (dolist (C hfy-etags-cmd-alist)
@@ -398,14 +368,12 @@ exuberant-ctags' etags respectively."
   "Command to run with the name of a file, to see whether it is a text file
 or not.  The command should emit a string containing the word `text' if
 the file is a text file, and a string not containing `text' otherwise."
-  :group 'htmlfontify
   :tag   "istext-command"
   :type  '(string))
 
 (defcustom hfy-find-cmd
   "find . -type f \\! -name \\*~ \\! -name \\*.flc \\! -path \\*/CVS/\\*"
   "Find command used to harvest a list of files to attempt to fontify."
-  :group 'htmlfontify
   :tag   "find-command"
   :type  '(string))
 
@@ -434,7 +402,6 @@ of these values in the specification key constitutes a 
match, eg:\n
   ((type  tty) (class color))\n
 and so on."
   :type    '(alist :key-type (symbol) :value-type (symbol))
-  :group   'htmlfontify
   :tag     "display-class"
   :options '((type       (choice (const :tag "X11"           x-toolkit)
                                  (const :tag "Terminal"      tty      )
@@ -481,7 +448,6 @@ which can never slow you down, but may result in incomplete 
fontification."
                (const :tag "div-wrapper"          div-wrapper         )
                (const :tag "keep-overlays"        keep-overlays       )
                (const :tag "body-text-only"       body-text-only      ))
-  :group 'htmlfontify
   :tag   "optimizations")
 
 (defvar hfy-tags-cache nil
@@ -599,13 +565,14 @@ If a window system is unavailable, calls 
`hfy-fallback-color-values'."
           (x-color-values color))
       ;; blarg - tty colors are no good - go fetch some X colors:
       (hfy-fallback-color-values color))))
-(define-obsolete-function-alias 'hfy-colour-vals 'hfy-color-vals "27.1")
+(define-obsolete-function-alias 'hfy-colour-vals #'hfy-color-vals "27.1")
 
 (defvar hfy-cperl-mode-kludged-p nil)
 
 (defun hfy-kludge-cperl-mode ()
   "CPerl mode does its damnedest not to do some of its fontification when not
 in a windowing system - try to trick it..."
+  (declare (obsolete nil "28.1"))
   (if (not hfy-cperl-mode-kludged-p)
       (progn (if (not window-system)
                  (let ((window-system 'htmlfontify))
@@ -728,7 +695,7 @@ STYLE is the inline CSS stylesheet (or tag referring to an 
external sheet)."
 --> </script>
   </head>
   <body onload=\"stripe('index'); return true;\">\n"
-          (mapconcat 'hfy-html-quote (mapcar 'char-to-string file) "") style))
+          (mapconcat #'hfy-html-quote (mapcar #'char-to-string file) "") 
style))
 
 (defun hfy-default-footer (_file)
   "Default value for `hfy-page-footer'.
@@ -766,24 +733,24 @@ may happen."
   (let ((white (mapcar (lambda (I) (float (1+ I))) (hfy-color-vals "white")))
         (rgb16 (mapcar (lambda (I) (float (1+ I))) (hfy-color-vals  color))))
     (if rgb16
-        ;;(apply 'format "rgb(%d, %d, %d)"
+        ;;(apply #'format "rgb(%d, %d, %d)"
         ;; Use #rrggbb instead, it is smaller
-        (apply 'format "#%02x%02x%02x"
+        (apply #'format "#%02x%02x%02x"
                (mapcar (lambda (X)
                          (* (/ (nth X rgb16)
-                               (nth X white)) 255))
+                               (nth X white))
+                            255))
                        '(0 1 2))))))
 
 (defun hfy-family (family) (list (cons "font-family"  family)))
 (defun hfy-bgcol  (color) (list (cons "background"   (hfy-triplet color))))
 (defun hfy-color (color) (list (cons "color"        (hfy-triplet color))))
-(define-obsolete-function-alias 'hfy-colour 'hfy-color "27.1")
+(define-obsolete-function-alias 'hfy-colour #'hfy-color "27.1")
 (defun hfy-width  (width)  (list (cons "font-stretch" (symbol-name  width))))
 
 (defcustom hfy-font-zoom 1.05
   "Font scaling from Emacs to HTML."
-  :type 'float
-  :group 'htmlfontify)
+  :type 'float)
 
 (defun hfy-size (height)
   "Derive a CSS font-size specifier from an Emacs font :height attribute 
HEIGHT.
@@ -1062,7 +1029,7 @@ haven't encountered them yet.  Returns a 
`hfy-style-assoc'."
             (when (string-match "pt" (cdr css)) (setq x t)))
         (setq r (nconc r (list css)))))
     ;;(message "r: %S" r)
-    (setq  n (apply '* m))
+    (setq  n (apply #'* m))
     (nconc r (hfy-size (if x (round n) (* n 1.0)))) ))
 
 (defun hfy-face-resolve-face (fn)
@@ -1152,9 +1119,9 @@ See also `hfy-face-to-css'."
                    (push (car E) seen)
                    (format " %s: %s; " (car E) (cdr E)))))
            css-list)))
-    (cons (hfy-css-name fn) (format "{%s}" (apply 'concat css-text)))) )
+    (cons (hfy-css-name fn) (format "{%s}" (apply #'concat css-text)))) )
 
-(defvar hfy-face-to-css 'hfy-face-to-css-default
+(defvar hfy-face-to-css #'hfy-face-to-css-default
   "Handler for mapping faces  to styles.
 The signature of the handler is of the form \(lambda (FN) ...).
 FN is a font or `defface' specification (cf
@@ -1510,7 +1477,7 @@ Uses `hfy-link-style-fun' to do this."
           ;; Fix-me: Add handling of page breaks here + scan for ^L
           ;; where appropriate.
           (format "body, pre %s\n" (cddr (assq 'default css)))
-          (apply 'concat
+          (apply #'concat
                  (mapcar
                   (lambda (style)
                     (format
@@ -1611,7 +1578,7 @@ Insert \"</span>\".  See `hfy-end-span-handler' for more
 information."
   (insert "</span>"))
 
-(defvar hfy-begin-span-handler 'hfy-begin-span
+(defvar hfy-begin-span-handler #'hfy-begin-span
   "Handler to begin a span of text.
 The signature of the handler is \(lambda (STYLE TEXT-BLOCK
 TEXT-ID TEXT-BEGINS-BLOCK-P) ...).  The handler must insert
@@ -1640,7 +1607,7 @@ behavior.
 
 The default handler is `hfy-begin-span'.")
 
-(defvar hfy-end-span-handler 'hfy-end-span
+(defvar hfy-end-span-handler #'hfy-end-span
   "Handler to end a span of text.
 The signature of the handler is \(lambda () ...).  The handler
 must insert appropriate tags to end a span of text.
@@ -1821,32 +1788,7 @@ fontified.  This is a simple convenience wrapper around
       (htmlfontify-buffer)
       (buffer-string))))
 
-(defun hfy-force-fontification ()
-  "Try to force font-locking even when it is optimized away."
-  (run-hooks 'hfy-init-kludge-hook)
-  (eval-and-compile (require 'font-lock))
-  (if (boundp 'font-lock-cache-position)
-      (or font-lock-cache-position
-          (setq font-lock-cache-position (make-marker))))
-  (cond
-   (noninteractive
-    (message "hfy batch mode (%s:%S)"
-             (or (buffer-file-name) (buffer-name)) major-mode)
-    (if (fboundp 'font-lock-ensure)     ; Emacs >= 25.1
-        (font-lock-ensure)
-      (when font-lock-defaults
-        ; Silence "interactive use only" warning on Emacs >= 25.1.
-        (with-no-warnings (font-lock-fontify-buffer)))))
-   ((fboundp #'jit-lock-fontify-now)
-    (message "hfy jit-lock mode (%S %S)" window-system major-mode)
-    (jit-lock-fontify-now))
-   (t
-    (message "hfy interactive mode (%S %S)" window-system major-mode)
-    ;; If jit-lock is not in use, then the buffer is already fontified!
-    ;; (when (and font-lock-defaults
-    ;;            font-lock-mode)
-    ;;   (font-lock-fontify-region (point-min) (point-max) nil))
-    )))
+(define-obsolete-function-alias 'hfy-force-fontification #'font-lock-ensure 
"28.1")
 
 ;;;###autoload
 (defun htmlfontify-buffer (&optional srcdir file)
@@ -1874,8 +1816,7 @@ hyperlinks as appropriate."
                  (setq file (match-string 1 file)))) )
 
   (if (not (hfy-opt 'skip-refontification))
-      (save-excursion ;; Keep region
-        (hfy-force-fontification)))
+      (font-lock-ensure))
   (if (called-interactively-p 'any) ;; display the buffer in interactive mode:
       (switch-to-buffer (hfy-fontify-buffer srcdir file))
     (hfy-fontify-buffer srcdir file)))
@@ -1933,7 +1874,7 @@ adding an extension of `hfy-extn'.  Fontification is 
actually done by
       ;; FIXME: Shouldn't this use expand-file-name?  --Stef
       (setq target (concat dstdir "/" file))
       (hfy-make-directory (hfy-dirname target))
-      (if (not (hfy-opt 'skip-refontification)) (hfy-force-fontification))
+      (if (not (hfy-opt 'skip-refontification)) (font-lock-ensure))
       (if (or (hfy-fontified-p) (hfy-text-p srcdir file))
           (progn (setq html  (hfy-fontify-buffer srcdir file))
                  (set-buffer  html)
@@ -2391,7 +2332,7 @@ You may also want to set `hfy-page-header' and 
`hfy-page-footer'."
 ;;     (custom-save-delete 'hfy-set-hooks)
 ;;     (let ((standard-output (current-buffer)))
 ;;       (princ "(hfy-set-hooks\n;;auto-generated, only one copy allowed\n")
-;;       (mapatoms 'hfy-pp-hook)
+;;       (mapatoms #'hfy-pp-hook)
 ;;       (insert "\n)")
 ;;       )
 ;;     )
@@ -2418,7 +2359,7 @@ You may also want to set `hfy-page-header' and 
`hfy-page-footer'."
       ;; FIXME: This saving&restoring of global customization
       ;; variables can interfere with other customization settings for
       ;; those vars (in .emacs or in Customize).
-      (mapc 'hfy-save-initvar
+      (mapc #'hfy-save-initvar
             '(auto-mode-alist interpreter-mode-alist))
       (princ ")\n")
       (indent-region start-pos (point) nil))
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index 193b1d7..3299cc5 100644
--- a/lisp/international/quail.el
+++ b/lisp/international/quail.el
@@ -3059,7 +3059,7 @@ of each directory."
     (while quail-dirs
       (setq dirname (car quail-dirs))
       (when dirname
-       (setq pkg-list (directory-files dirname 'full "\\.el$"))
+       (setq pkg-list (directory-files dirname 'full "\\.el\\'"))
        (while pkg-list
          (with-temp-buffer
            (insert-file-contents (car pkg-list))
diff --git a/lisp/international/titdic-cnv.el b/lisp/international/titdic-cnv.el
index eec20ee..a6dcd02 100644
--- a/lisp/international/titdic-cnv.el
+++ b/lisp/international/titdic-cnv.el
@@ -553,7 +553,7 @@ To get complete usage, invoke \"emacs -batch -f 
batch-titdic-convert -h\"."
        (if (file-directory-p filename)
            (progn
              (message "Converting all tit files in the directory %s" filename)
-             (setq files (directory-files filename t "\\.tit$")))
+             (setq files (directory-files filename t "\\.tit\\'")))
          (setq files (list filename)))
        (while files
          (setq file (expand-file-name (car files)))
diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el
index 9c0c3fe..94b0886 100644
--- a/lisp/mail/mspools.el
+++ b/lisp/mail/mspools.el
@@ -223,7 +223,7 @@ your primary spool is.  If this fails, set it to something 
like
            ;; So I create a vm-spool-files entry for each of those mail drops
            (mapcar 'file-name-sans-extension
                    (directory-files mspools-folder-directory nil
-                                    (format "^[^.]+\\.%s" mspools-suffix)))
+                                    (format "\\`[^.]+\\.%s" mspools-suffix)))
            ))
    ))
 
@@ -357,7 +357,7 @@ nil."
     (if (null mspools-folder-directory)
        (error "Set `mspools-folder-directory' to where the spool files are"))
     (setq folders (directory-files mspools-folder-directory nil
-                                  (format "^[^.]+\\.%s$" mspools-suffix)))
+                                  (format "\\`[^.]+\\.%s\\'" mspools-suffix)))
     (setq folders (mapcar 'mspools-size-folder folders))
     (setq folders (delq nil folders))
     (setq mspools-files folders)
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 40d3470..44cde7c 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -474,7 +474,7 @@ the frame where you have the RMAIL buffer displayed."
   :type 'directory
   :group 'rmail-files)
 ;;;###autoload
-(defcustom rmail-secondary-file-regexp (purecopy "\\.xmail$")
+(defcustom rmail-secondary-file-regexp (purecopy "\\.xmail\\'")
   "Regexp for which files are secondary Rmail files."
   :type 'regexp
   :group 'rmail-files)
@@ -4364,7 +4364,8 @@ This has an effect only if a summary buffer exists."
            (font-lock-fontify-region (point-min) (point-max)))))))
 
 ;;; Speedbar support for RMAIL files.
-(defcustom rmail-speedbar-match-folder-regexp "^[A-Z0-9]+\\(\\.[A-Z0-9]+\\)?$"
+(defcustom rmail-speedbar-match-folder-regexp
+  "\\`[A-Z0-9]+\\(\\.[A-Z0-9]+\\)?\\'"
   "Regexp matching Rmail folder names to be displayed in Speedbar.
 Enabling this permits Speedbar to display your folders for easy
 browsing, and moving of messages."
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index e2d4d7d..0cb8d7c 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -4169,9 +4169,7 @@ directory, so that Emacs will know its current contents."
               (if (file-directory-p file)
                   (ange-ftp-delete-directory file recursive trash)
                 (delete-file file trash)))
-            ;; We do not want to delete "." and "..".
-            (directory-files
-             dir 'full "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*")))
+            (directory-files dir 'full directory-files-no-dot-files-regexp)))
        (if parsed
            (let* ((host (nth 0 parsed))
                   (user (nth 1 parsed))
diff --git a/lisp/net/puny.el b/lisp/net/puny.el
index 60a6c12..6987d25 100644
--- a/lisp/net/puny.el
+++ b/lisp/net/puny.el
@@ -35,7 +35,7 @@
 For instance, \"fśf.org\" => \"xn--ff-2sa.org\"."
   ;; The vast majority of domain names are not IDNA domain names, so
   ;; add a check first to avoid doing unnecessary work.
-  (if (string-match "\\'[[:ascii:]]+\\'" domain)
+  (if (string-match "\\`[[:ascii:]]+\\'" domain)
       domain
     (mapconcat 'puny-encode-string (split-string domain "[.]") ".")))
 
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index a16085d..c8fdc5d 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -2464,7 +2464,7 @@ remote file names."
           (regexp-opt
            (mapcar
             #'file-name-sans-extension
-            (directory-files dir nil "^tramp.+\\.elc?$"))
+            (directory-files dir nil "\\`tramp.+\\.elc?\\'"))
            'paren))))
     (mapatoms
      (lambda (atom)
diff --git a/lisp/obsolete/gulp.el b/lisp/obsolete/gulp.el
index 6589ede..08ab388 100644
--- a/lisp/obsolete/gulp.el
+++ b/lisp/obsolete/gulp.el
@@ -94,7 +94,7 @@ is left in the `*gulp*' buffer at the end."
   (interactive "DRequest updates for Lisp directory: \nP")
   (with-current-buffer (get-buffer-create gulp-tmp-buffer)
     (let ((m-p-alist (gulp-create-m-p-alist
-                     (directory-files dir nil "^[^=].*\\.el$" t)
+                     (directory-files dir nil "\\`[^=].*\\.el\\'" t)
                      dir))
          ;; Temporarily inhibit undo in the *gulp* buffer.
          (buffer-undo-list t)
diff --git a/lisp/obsolete/vc-arch.el b/lisp/obsolete/vc-arch.el
index b186a5c..93bd991 100644
--- a/lisp/obsolete/vc-arch.el
+++ b/lisp/obsolete/vc-arch.el
@@ -597,18 +597,21 @@ CALLBACK expects (ENTRIES &optional MORE-TO-COME); see
     (unless (file-writable-p rl-dir)
       (error "No writable revlib directory found"))
     (message "Revlib at %s" rl-dir)
-    (let* ((archives (directory-files rl-dir 'full "[^.]\\|..."))
+    (let* ((archives (directory-files rl-dir 'full
+                                      directory-files-no-dot-files-regexp))
            (categories
             (apply 'append
                    (mapcar (lambda (dir)
                              (when (file-directory-p dir)
-                               (directory-files dir 'full "[^.]\\|...")))
+                               (directory-files
+                                dir 'full 
directory-files-no-dot-files-regexp)))
                            archives)))
            (branches
             (apply 'append
                    (mapcar (lambda (dir)
                              (when (file-directory-p dir)
-                               (directory-files dir 'full "[^.]\\|...")))
+                               (directory-files
+                                dir 'full 
directory-files-no-dot-files-regexp)))
                            categories)))
            (versions
             (apply 'append
diff --git a/lisp/org/ob-core.el b/lisp/org/ob-core.el
index a5ad97a..fe9af1c 100644
--- a/lisp/org/ob-core.el
+++ b/lisp/org/ob-core.el
@@ -3053,9 +3053,8 @@ of `org-babel-temporary-directory'."
                  (if (eq t (car (file-attributes file)))
                      (delete-directory file)
                    (delete-file file)))
-               ;; We do not want to delete "." and "..".
                (directory-files org-babel-temporary-directory 'full
-                                "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))
+                                 directory-files-no-dot-files-regexp))
          (delete-directory org-babel-temporary-directory))
       (error
        (message "Failed to remove temporary Org-babel directory %s"
diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el
index 98702fe..8927b1c 100644
--- a/lisp/org/org-table.el
+++ b/lisp/org/org-table.el
@@ -2005,7 +2005,7 @@ the table and kill the editing buffer."
        text)
     (goto-char (point-min))
     (while (re-search-forward "^#.*\n?" nil t) (replace-match ""))
-    (while (re-search-forward "\\([ \t]*\n[ \t]*\\)+" nil t)
+    (while (re-search-forward "[ \t]*\\(?:\n[ \t]*\\)+" nil t)
       (replace-match " "))
     (setq text (org-trim (buffer-string)))
     (set-window-configuration cw)
diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el
index f7ac9d3..28e7667 100644
--- a/lisp/progmodes/ebnf2ps.el
+++ b/lisp/progmodes/ebnf2ps.el
@@ -1883,7 +1883,7 @@ It's only used when `ebnf-syntax' is `iso-ebnf'."
   :group 'ebnf-syntactic)
 
 
-(defcustom ebnf-file-suffix-regexp "\\.[Bb][Nn][Ff]$"
+(defcustom ebnf-file-suffix-regexp "\\.[Bb][Nn][Ff]\\'"
   "Specify file name suffix that contains EBNF.
 
 See `ebnf-eps-directory' command."
@@ -2715,7 +2715,7 @@ Used in functions `ebnf-reset-style', `ebnf-push-style' 
and
       (ebnf-syntax                      . 'ebnf)
       (ebnf-iso-alternative-p           . nil)
       (ebnf-iso-normalize-p             . nil)
-      (ebnf-file-suffix-regexp          . "\\.[Bb][Nn][Ff]$")
+      (ebnf-file-suffix-regexp          . "\\.[Bb][Nn][Ff]\\'")
       (ebnf-eps-prefix                  . "ebnf--")
       (ebnf-eps-header-font             . '(11 Helvetica "Black" "White" bold))
       (ebnf-eps-header                  . nil)
diff --git a/lisp/progmodes/executable.el b/lisp/progmodes/executable.el
index b42e6f7..bae2bb6 100644
--- a/lisp/progmodes/executable.el
+++ b/lisp/progmodes/executable.el
@@ -155,7 +155,7 @@ See `compilation-error-regexp-alist'.")
 If PROGRAM is non-nil, use that instead of \"find\"."
   ;;  Pick file to search from location we know
   (let* ((dir (file-truename data-directory))
-         (file (car (directory-files dir nil "^[^.]"))))
+         (file (car (directory-files dir nil "\\`[^.]"))))
     (with-temp-buffer
       (call-process (or program "find")
                     nil
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index ba58698..c118421 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -1867,7 +1867,7 @@ static char *magick[] = {
    "\\|def\\(i\\(ne?\\)?\\)?\\|doc\\(u\\(m\\(e\\(nt?\\)?\\)?\\)?\\)?\\|"
    gdb-python-guile-commands-regexp
    "\\|while-stepping\\|stepp\\(i\\(ng?\\)?\\)?\\|ws\\|actions"
-   "\\|expl\\(o\\(r\\e?\\)?\\)?"
+   "\\|expl\\(o\\(re?\\)?\\)?"
    "\\)\\([[:blank:]]+\\([^[:blank:]]*\\)\\)*$")
   "Regexp matching GDB commands that enter a recursive reading loop.
 As long as GDB is in the recursive reading loop, it does not expect
diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el
index 751d7da..33ba0d1 100644
--- a/lisp/progmodes/scheme.el
+++ b/lisp/progmodes/scheme.el
@@ -116,7 +116,7 @@
 
 (defvar scheme-imenu-generic-expression
       '((nil
-         
"^(define\\(\\|-\\(generic\\(\\|-procedure\\)\\|method\\)\\)*\\s-+(?\\(\\sw+\\)"
 4)
+         
"^(define\\(?:-\\(?:generic\\(?:-procedure\\)?\\|method\\)\\)?\\s-+(?\\(\\sw+\\)"
 1)
         ("Types"
          "^(define-class\\s-+(?\\(\\sw+\\)" 1)
         ("Macros"
diff --git a/lisp/simple.el b/lisp/simple.el
index 7c8ac41..abf5ee2 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -5146,10 +5146,11 @@ property, in the way that `yank' does."
 
 (defun yank (&optional arg)
   "Reinsert (\"paste\") the last stretch of killed text.
-More precisely, reinsert the most recent kill, which is the
-stretch of killed text most recently killed OR yanked.  Put point
-at the end, and set mark at the beginning without activating it.
-With just \\[universal-argument] as argument, put point at beginning, and mark 
at end.
+More precisely, reinsert the most recent kill, which is the stretch of
+text most recently killed OR yanked, as returned by `current-kill' (which
+see).  Put point at the end, and set mark at the beginning without
+activating it. With just \\[universal-argument] as argument, put point
+at beginning, and mark at end.
 With argument N, reinsert the Nth most recent kill.
 
 This command honors the `yank-handled-properties' and
diff --git a/lisp/startup.el b/lisp/startup.el
index 1f545c6..5af264e 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1373,10 +1373,10 @@ please check its value")
         ((not (eq system-type 'windows-nt))
          (concat "~" init-file-user "/.emacs"))
         ;; Else deal with the Windows situation.
-        ((directory-files "~" nil "^\\.emacs\\(\\.elc?\\)?$")
+        ((directory-files "~" nil "\\`\\.emacs\\(\\.elc?\\)?\\'")
          ;; Prefer .emacs on Windows.
          "~/.emacs")
-        ((directory-files "~" nil "^_emacs\\(\\.elc?\\)?$")
+        ((directory-files "~" nil "\\`_emacs\\(\\.elc?\\)?\\'")
          ;; Also support _emacs for compatibility, but warn about it.
          (push `(initialization
                  ,(format-message
diff --git a/lisp/textmodes/refer.el b/lisp/textmodes/refer.el
index 2865b42..8d8223a 100644
--- a/lisp/textmodes/refer.el
+++ b/lisp/textmodes/refer.el
@@ -377,7 +377,7 @@ found on the last `refer-find-entry' or 
`refer-find-next-entry'."
                    dir files)
                (while (setq dir (car dirs))
                  (setq files
-                       (append (directory-files dir t "\\.bib$")
+                       (append (directory-files dir t "\\.bib\\'")
                                files))
                  (setq dirs (cdr dirs)))
                files))
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 6152a8a..9b29b84 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -286,7 +286,10 @@ separated by a space."
 (defconst sgml-namespace-re "[_[:alpha:]][-_.[:alnum:]]*")
 (defconst sgml-name-re "[_:[:alpha:]][-_.:[:alnum:]]*")
 (defconst sgml-tag-name-re (concat "<\\([!/?]?" sgml-name-re "\\)"))
-(defconst sgml-attrs-re "\\(?:[^\"'/><]\\|\"[^\"]*\"\\|'[^']*'\\)*")
+(defconst sgml-attrs-re
+  ;; This pattern cannot begin with a character matched by the end of
+  ;; `sgml-name-re' above.
+  "\\(?:[^_.:\"'/><[:alnum:]-]\\(?:[^\"'/><]\\|\"[^\"]*\"\\|'[^']*'\\)*\\)?")
 (defconst sgml-start-tag-regex (concat "<" sgml-name-re sgml-attrs-re)
   "Regular expression that matches a non-empty start tag.
 Any terminating `>' or `/' is not matched.")
diff --git a/lisp/url/url-about.el b/lisp/url/url-about.el
index 59c233b..5fe817c 100644
--- a/lisp/url/url-about.el
+++ b/lisp/url/url-about.el
@@ -37,7 +37,7 @@
                          (mapc (lambda (f)
                                  (if (string-match "url-\\(.*\\).el$" f)
                                      (push (match-string 1 f) schemes)))
-                               (directory-files d nil "^url-.*\\.el$")))
+                               (directory-files d nil "\\`url-.*\\.el\\'")))
                        load-path)
                  (put 'url-extension-protocols 'schemes schemes)
                  schemes)))))
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index da2d5ed..d194d6c 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -484,7 +484,7 @@ and the face `diff-added' for added lines.")
   ;; Prefer second name as first is most likely to be a backup or
   ;; version-control name.  The [\t\n] at the end of the unidiff pattern
   ;; catches Debian source diff files (which lack the trailing date).
-  '((nil "\\+\\+\\+\\ \\([^\t\n]+\\)[\t\n]" 1) ; unidiffs
+  '((nil "\\+\\+\\+ \\([^\t\n]+\\)[\t\n]" 1) ; unidiffs
     (nil "^--- \\([^\t\n]+\\)\t.*\n\\*" 1))) ; context diffs
 
 ;;;;
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index 00796e5..23f088b 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -247,7 +247,7 @@ to the RCS command."
                 (setq subdir (expand-file-name "RCS"
                                                (file-name-directory file)))))
           (not (directory-files (file-name-directory file)
-                                nil ".*,v$" t))
+                                nil ",v\\'" t))
           (yes-or-no-p "Create RCS subdirectory? ")
           (make-directory subdir))
       (apply #'vc-do-command "*vc*" 0 "ci" file
@@ -312,8 +312,7 @@ whether to remove it."
       (and (string= (file-name-nondirectory (directory-file-name dir)) "RCS")
           ;; check whether RCS dir is empty, i.e. it does not
           ;; contain any files except "." and ".."
-          (not (directory-files dir nil
-                                "^\\([^.]\\|\\.[^.]\\|\\.\\.[^.]\\).*"))
+          (not (directory-files dir nil directory-files-no-dot-files-regexp))
           (yes-or-no-p (format "Directory %s is empty; remove it? " dir))
           (delete-directory dir)))))
 
diff --git a/src/image.c b/src/image.c
index aacaf0b..acb1e9d 100644
--- a/src/image.c
+++ b/src/image.c
@@ -6236,22 +6236,17 @@ pbm_load (struct frame *f, struct image *img)
                            NATIVE IMAGE HANDLING
  ***********************************************************************/
 
+#if HAVE_NATIVE_IMAGE_API
 static bool
 image_can_use_native_api (Lisp_Object type)
 {
-#if HAVE_NATIVE_IMAGE_API
 # ifdef HAVE_NTGUI
   return w32_can_use_native_image_api (type);
 # else
   return false;
 # endif
-#else
-  return false;
-#endif
 }
 
-#if HAVE_NATIVE_IMAGE_API
-
 /*
  * These functions are actually defined in the OS-native implementation
  * file.  Currently, for Windows GDI+ interface, w32image.c, but other
@@ -10224,8 +10219,10 @@ initialize_image_type (struct image_type const *type)
 #ifdef WINDOWSNT
   Lisp_Object typesym = builtin_lisp_symbol (type->type);
 
+# if HAVE_NATIVE_IMAGE_API
   if (image_can_use_native_api (typesym))
     return true;
+# endif
 
   Lisp_Object tested = Fassq (typesym, Vlibrary_cache);
   /* If we failed to load the library before, don't try again.  */
diff --git a/src/indent.c b/src/indent.c
index f7db427..06f11a2 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -2091,15 +2091,15 @@ whether or not it is currently displayed in some 
window.  */)
   struct it it;
   struct text_pos pt;
   struct window *w;
-  Lisp_Object lcols;
+  Lisp_Object lcols = Qnil;
   void *itdata = NULL;
   ptrdiff_t count = SPECPDL_INDEX ();
 
   /* Allow LINES to be of the form (HPOS . VPOS) aka (COLUMNS . LINES).  */
-  bool lcols_given = CONSP (lines);
-  if (lcols_given)
+  if (CONSP (lines))
     {
       lcols = XCAR (lines);
+      CHECK_NUMBER (lcols);
       lines = XCDR (lines);
     }
 
@@ -2279,9 +2279,9 @@ whether or not it is currently displayed in some window.  
*/)
 
          overshoot_handled = 1;
        }
-      if (lcols_given)
+      if (!NILP (lcols))
        to_x =
-         window_column_x (w, window, extract_float (lcols), lcols)
+         window_column_x (w, window, XFLOATINT (lcols), lcols)
          + lnum_pixel_width;
       if (nlines <= 0)
        {
@@ -2332,7 +2332,7 @@ whether or not it is currently displayed in some window.  
*/)
       /* Move to the goal column, if one was specified.  If the window
         was originally hscrolled, the goal column is interpreted as
         an addition to the hscroll amount.  */
-      if (lcols_given)
+      if (!NILP (lcols))
        {
          move_it_in_display_line (&it, ZV, first_x + to_x, MOVE_TO_X);
          /* If we find ourselves in the middle of an overlay string
diff --git a/src/nsterm.m b/src/nsterm.m
index 3ce2233..2f181ea 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -5837,6 +5837,21 @@ ns_term_shutdown (int sig)
 #endif
 
 #ifdef NS_IMPL_COCOA
+  /* Some functions/methods in CoreFoundation/Foundation increase the
+     maximum number of open files for the process in their first call.
+     We make dummy calls to them and then reduce the resource limit
+     here, since pselect cannot handle file descriptors that are
+     greater than or equal to FD_SETSIZE.  */
+  CFSocketGetTypeID ();
+  CFFileDescriptorGetTypeID ();
+  [[NSFileHandle alloc] init];
+  struct rlimit rlim;
+  if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+      && rlim.rlim_cur > FD_SETSIZE)
+    {
+      rlim.rlim_cur = FD_SETSIZE;
+      setrlimit (RLIMIT_NOFILE, &rlim);
+    }
   if ([NSApp activationPolicy] == NSApplicationActivationPolicyProhibited) {
     /* Set the app's activation policy to regular when we run outside
        of a bundle.  This is already done for us by Info.plist when we
diff --git a/src/w32.c b/src/w32.c
index 8017802..42c832a 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -3441,8 +3441,6 @@ is_fat_volume (const char * name, const char ** pPath)
 /* Convert all slashes in a filename to backslashes, and map filename
    to a valid 8.3 name if necessary.  The result is a pointer to a
    static buffer, so CAVEAT EMPTOR!  */
-const char *map_w32_filename (const char *, const char **);
-
 const char *
 map_w32_filename (const char * name, const char ** pPath)
 {
diff --git a/src/w32.h b/src/w32.h
index cf1dadf..1afb8ad 100644
--- a/src/w32.h
+++ b/src/w32.h
@@ -194,6 +194,7 @@ extern void syms_of_ntproc (void);
 extern void syms_of_ntterm (void);
 extern void dostounix_filename (register char *);
 extern void unixtodos_filename (register char *);
+extern const char *map_w32_filename (const char *, const char **);
 extern int  filename_from_ansi (const char *, char *);
 extern int  filename_to_ansi (const char *, char *);
 extern int  filename_from_utf16 (const wchar_t *, char *);
diff --git a/src/w32fns.c b/src/w32fns.c
index 4f7cbed..e595b02 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -80,7 +80,6 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 extern int w32_console_toggle_lock_key (int, Lisp_Object);
 extern void w32_menu_display_help (HWND, HMENU, UINT, UINT);
 extern void w32_free_menu_strings (HWND);
-extern const char *map_w32_filename (const char *, const char **);
 
 #ifndef IDC_HAND
 #define IDC_HAND MAKEINTRESOURCE(32649)
diff --git a/src/w32image.c b/src/w32image.c
index 6a3e37c..0a2a55d 100644
--- a/src/w32image.c
+++ b/src/w32image.c
@@ -32,6 +32,9 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <shlwapi.h>
 #include "w32common.h"
 #include "w32term.h"
+#ifdef WINDOWSNT
+#include "w32.h"       /* for map_w32_filename, filename_to_utf16 */
+#endif
 #include "frame.h"
 #include "coding.h"
 
@@ -200,6 +203,43 @@ w32_can_use_native_image_api (Lisp_Object type)
   return gdiplus_startup ();
 }
 
+enum PropertyItem_type {
+  PI_BYTE = 1,
+  PI_ASCIIZ = 2,
+  PI_USHORT = 3,
+  PI_ULONG = 4,
+  PI_ULONG_PAIR = 5,
+  PI_BYTE_ANY = 6,
+  PI_LONG = 7,
+  PI_LONG_PAIR = 10
+};
+
+static unsigned long
+decode_delay (PropertyItem *propertyItem, int frame)
+{
+  enum PropertyItem_type type = propertyItem[0].type;
+  unsigned long delay;
+
+  switch (type)
+    {
+    case PI_BYTE:
+    case PI_BYTE_ANY:
+      delay = ((unsigned char *)propertyItem[0].value)[frame];
+      break;
+    case PI_USHORT:
+      delay = ((unsigned short *)propertyItem[0].value)[frame];
+      break;
+    case PI_ULONG:
+    case PI_LONG:      /* delay should always be positive */
+      delay = ((unsigned long *)propertyItem[0].value)[frame];
+      break;
+    default:
+      emacs_abort ();
+    }
+
+  return delay;
+}
+
 static double
 w32_frame_delay (GpBitmap *pBitmap, int frame)
 {
@@ -217,13 +257,14 @@ w32_frame_delay (GpBitmap *pBitmap, int frame)
     {
       /* Get the property item.  */
       GdipGetPropertyItem (pBitmap, PropertyTagFrameDelay, size, propertyItem);
-      delay = propertyItem[frame].length / 100.0;
-      if (delay == 0)
+      delay = decode_delay (propertyItem, frame);
+      if (delay <= 0)
         {
           /* In GIF files, unfortunately, delay is only specified for the first
              frame.  */
-          delay = propertyItem[0].length / 100.0;
+          delay = decode_delay (propertyItem, 0);
         }
+      delay /= 100.0;
       free (propertyItem);
     }
   return delay;
@@ -242,6 +283,11 @@ w32_select_active_frame (GpBitmap *pBitmap, int frame, int 
*nframes,
   *delay = 0.0;
   if (count)
     {
+      /* The following call will fill pDimensionIDs[0] with the
+        FrameDimensionTime GUID for GIF images, and
+        FrameDimensionPage GUID for other image types.  Multi-page
+        GIF and TIFF images expect these values in the
+        GdipImageSelectActiveFrame call below.  */
       status = GdipImageGetFrameDimensionsList (pBitmap, pDimensionIDs, 1);
       status = GdipImageGetFrameCount (pBitmap, &pDimensionIDs[0], 
&frameCount);
       if (status == Ok && frameCount > 1)
@@ -296,17 +342,11 @@ w32_load_image (struct frame *f, struct image *img,
      and succeeded.  We have a valid token and GDI+ is active.  */
   if (STRINGP (spec_file))
     {
-      if (w32_unicode_filenames)
-        {
-         wchar_t filename[MAX_PATH];
-          filename_to_utf16 (SSDATA (spec_file), filename);
-          status = GdipCreateBitmapFromFile (filename, &pBitmap);
-        }
-      else
-        {
-          add_to_log ("GDI+ requires w32-unicode-filenames to be T");
-          status = GenericError;
-        }
+      spec_file = ENCODE_FILE (spec_file);
+      const char *fn = map_w32_filename (SSDATA (spec_file), NULL);
+      wchar_t filename_w[MAX_PATH];
+      filename_to_utf16 (fn, filename_w);
+      status = GdipCreateBitmapFromFile (filename_w, &pBitmap);
     }
   else if (STRINGP (spec_data))
     {
diff --git a/src/xdisp.c b/src/xdisp.c
index 193cc37..cce434e 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -9662,9 +9662,13 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int 
to_x, int to_y, int to_vpos
   int line_height, line_start_x = 0, reached = 0;
   int max_current_x = 0;
   void *backup_data = NULL;
+  ptrdiff_t orig_charpos = -1;
+  enum it_method orig_method = NUM_IT_METHODS;
 
   for (;;)
     {
+      orig_charpos = IT_CHARPOS (*it);
+      orig_method = it->method;
       if (op & MOVE_TO_VPOS)
        {
          /* If no TO_CHARPOS and no TO_X specified, stop at the
@@ -9898,7 +9902,17 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int 
to_x, int to_y, int to_vpos
                }
            }
          else
-           it->continuation_lines_width += it->current_x;
+           {
+             /* Make sure we do advance, otherwise we might infloop.
+                This could happen when the first display element is
+                wider than the window, or if we have a wrap-prefix
+                that doesn't leave enough space after it to display
+                even a single character.  */
+             if (IT_CHARPOS (*it) == orig_charpos
+                 && it->method == orig_method)
+               set_iterator_to_next (it, false);
+             it->continuation_lines_width += it->current_x;
+           }
          break;
 
        default:
diff --git a/test/lisp/net/tramp-archive-tests.el 
b/test/lisp/net/tramp-archive-tests.el
index b3fc129..8c75d91 100644
--- a/test/lisp/net/tramp-archive-tests.el
+++ b/test/lisp/net/tramp-archive-tests.el
@@ -668,7 +668,7 @@ This tests also `access-file', `file-readable-p' and 
`file-regular-p'."
          (setq attr (directory-files-and-attributes tmp-name 'full))
          (dolist (elt attr)
            (should (equal (file-attributes (car elt)) (cdr elt))))
-         (setq attr (directory-files-and-attributes tmp-name nil "^b"))
+         (setq attr (directory-files-and-attributes tmp-name nil "\\`b"))
          (should (equal (mapcar #'car attr) '("bar"))))
 
       ;; Cleanup.
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 7db9ad4..4966825 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -3350,7 +3350,7 @@ They might differ only in time attributes or directory 
size."
               (tramp--test-file-attributes-equal-p
                (file-attributes (car elt)) (cdr elt))))
 
-           (setq attr (directory-files-and-attributes tmp-name2 nil "^b"))
+           (setq attr (directory-files-and-attributes tmp-name2 nil "\\`b"))
            (should (equal (mapcar #'car attr) '("bar" "boz"))))
 
        ;; Cleanup.



reply via email to

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