emacs-diffs
[Top][All Lists]
Advanced

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

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


From: Andrea Corallo
Subject: feature/native-comp 8cc8adb 2/2: Merge remote-tracking branch 'savannah/master' into HEAD
Date: Mon, 23 Mar 2020 16:58:57 -0400 (EDT)

branch: feature/native-comp
commit 8cc8adb04d2861fb1b1bbb38e53feccf3a2fc1c5
Merge: f8b07ff 5d5d5d4
Author: Andrea Corallo <address@hidden>
Commit: Andrea Corallo <address@hidden>

    Merge remote-tracking branch 'savannah/master' into HEAD
---
 admin/nt/dist-build/build-dep-zips.py  |   1 +
 doc/emacs/emacs.texi                   |   1 +
 doc/emacs/maintaining.texi             |  75 +++++++++++++++++++++++
 etc/NEWS                               |   6 ++
 etc/NEWS.27                            |   3 +
 lisp/dired-aux.el                      |   5 +-
 lisp/dired-x.el                        |   8 ++-
 lisp/dired.el                          | 105 ++++++++++++++++++++++++++++-----
 lisp/emacs-lisp/cl-extra.el            |   2 +-
 lisp/erc/erc-autoaway.el               |   2 +-
 lisp/erc/erc-backend.el                |   2 +-
 lisp/erc/erc-button.el                 |   2 +-
 lisp/erc/erc-capab.el                  |   2 +-
 lisp/erc/erc-compat.el                 |   2 +-
 lisp/erc/erc-dcc.el                    |   2 +-
 lisp/erc/erc-desktop-notifications.el  |   2 +-
 lisp/erc/erc-ezbounce.el               |   2 +-
 lisp/erc/erc-fill.el                   |   2 +-
 lisp/erc/erc-goodies.el                |   2 +-
 lisp/erc/erc-ibuffer.el                |   2 +-
 lisp/erc/erc-identd.el                 |   2 +-
 lisp/erc/erc-imenu.el                  |   2 +-
 lisp/erc/erc-join.el                   |   2 +-
 lisp/erc/erc-lang.el                   |   2 +-
 lisp/erc/erc-list.el                   |   2 +-
 lisp/erc/erc-log.el                    |   2 +-
 lisp/erc/erc-match.el                  |   2 +-
 lisp/erc/erc-menu.el                   |   2 +-
 lisp/erc/erc-netsplit.el               |   2 +-
 lisp/erc/erc-networks.el               |   2 +-
 lisp/erc/erc-notify.el                 |   2 +-
 lisp/erc/erc-page.el                   |   2 +-
 lisp/erc/erc-pcomplete.el              |   2 +-
 lisp/erc/erc-replace.el                |   2 +-
 lisp/erc/erc-ring.el                   |   2 +-
 lisp/erc/erc-services.el               |   2 +-
 lisp/erc/erc-sound.el                  |   2 +-
 lisp/erc/erc-speedbar.el               |   2 +-
 lisp/erc/erc-spelling.el               |   2 +-
 lisp/erc/erc-stamp.el                  |   2 +-
 lisp/erc/erc-track.el                  |   2 +-
 lisp/erc/erc-truncate.el               |   2 +-
 lisp/erc/erc-xdcc.el                   |   2 +-
 lisp/erc/erc.el                        |   2 +-
 lisp/progmodes/project.el              |  11 ++--
 lisp/svg.el                            |   3 +-
 lisp/tab-line.el                       |  22 +++++--
 lisp/vc/diff-mode.el                   |  49 +++++++--------
 lisp/vc/log-edit.el                    |  26 ++++----
 nt/gnulib-cfg.mk                       |   1 +
 src/data.c                             |   2 +-
 src/eval.c                             |   4 +-
 src/filelock.c                         |  10 ++--
 src/ftfont.c                           |   2 +-
 src/lisp.h                             |   1 +
 test/lisp/emacs-lisp/cl-extra-tests.el |   8 +++
 56 files changed, 306 insertions(+), 109 deletions(-)

diff --git a/admin/nt/dist-build/build-dep-zips.py 
b/admin/nt/dist-build/build-dep-zips.py
index 9d19fe0..b0345a4 100755
--- a/admin/nt/dist-build/build-dep-zips.py
+++ b/admin/nt/dist-build/build-dep-zips.py
@@ -31,6 +31,7 @@ EMACS_MAJOR_VERSION="28"
 # This list derives from the features we want Emacs to compile with.
 PKG_REQ='''mingw-w64-x86_64-giflib
 mingw-w64-x86_64-gnutls
+mingw-w64-x86_64-harfbuzz
 mingw-w64-x86_64-lcms2
 mingw-w64-x86_64-libjpeg-turbo
 mingw-w64-x86_64-libpng
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index c3cb37e..6ef4ca6 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -785,6 +785,7 @@ GDB Graphical Interface
 Maintaining Large Programs
 
 * Version Control::     Using version control systems.
+* Projects::            Commands for handling source files in a project.
 * Change Log::          Maintaining a change history for your program.
 * Xref::                Find definitions and references of any function,
                           method, struct, macro, @dots{} in your program.
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index a6f66f6..ebcdddf 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -14,6 +14,9 @@ Unified interface to Support for Version Control Systems
 (@acronym{VCS}) that record the history of changes to source files.
 
 @item
+Commands for handling programming projects.
+
+@item
 A specialized mode for maintaining @file{ChangeLog} files that provide
 a chronological log of program changes.
 
@@ -38,6 +41,7 @@ Lisp Regression Testing}).
 
 @menu
 * Version Control::     Using version control systems.
+* Projects::            Commands for handling source files in a project.
 * Change Log::          Maintaining a change history for your program.
 * Xref::                Find definitions and references of any function,
                           method, struct, macro, @dots{} in your program.
@@ -1630,6 +1634,77 @@ different revision with @kbd{C-u C-x v v}.
 @include vc1-xtra.texi
 @end ifnottex
 
+@node Projects
+@section Working with Projects
+@cindex projects
+
+@cindex project root
+  A @dfn{project} is a collection of files used for producing one or
+more programs.  Files that belong to a project are typically stored in
+a hierarchy of directories; the top-level directory of the hierarchy
+is known as the @dfn{project root}.
+
+@cindex project back-end
+  Whether a given directory is a root of some project is determined by
+the project-specific infrastructure, known as @dfn{project back-end}.
+Emacs currently supports two such back-ends: VC (@pxref{Version
+Control}), whereby a VCS repository is considered a project; and EDE
+(@pxref{EDE}).  This is expected to be extended in the future to
+support additional types of projects.
+
+  Which files do or don't belong to a project is also determined by
+the project back-end.  For example, the VC back-end doesn't consider
+``ignored'' files (@pxref{VC Ignore}) to be part of the project.
+
+  Emacs provides commands for handling project files conveniently.
+This section describes these commands.
+
+@cindex current project
+  All of the commands described here share the notion of the
+@dfn{current project}.  The current project is determined by the
+@code{default-directory} (@pxref{File Names}) of the buffer that is
+the current buffer when the command is invoked.  If that directory
+doesn't seem to belong to a recognizable project, these commands
+prompt you for the project directory.
+
+@findex project-find-file
+  The command @code{project-find-file} is a convenient way of visiting
+files (@pxref{Visiting}) that belong to the current project.  Unlike
+@kbd{C-x C-f}, this command doesn't require to type the full file name
+of the file to visit, you can type only the file's base name (i.e.,
+omit the leading directories).  In addition, the completion candidates
+considered by the command include only the files belonging to the
+current project, and nothing else.  If there's a file name at point,
+this command offers that file as the default to visit.
+
+@findex project-find-regexp
+  The command @code{project-find-regexp} is similar to @code{rgrep}
+(@pxref{Grep Searching}), but it searches only the files that belong
+to the current project.  The command prompts for the regular
+expression to search, and pops up an Xref mode buffer with the search
+results, where you can select a match using the Xref mode commands
+(@pxref{Xref Commands}).  When invoked with a prefix argument, this
+command additionally prompts for the base directory from which to
+start the search; this allows, for example, to limit the search only
+to project files under a certain subdirectory of the project root.
+
+@findex project-search
+  @kbd{M-x project-search} is an interactive variant of
+@code{project-find-regexp}.  It prompts for a regular expression to
+search in the current project's files, but instead of finding all the
+matches and displaying them, it stops when it finds a match and visits
+the matched file at the locus of the match, allowing you to edit the
+matched file.  To find the rest of the matches, type @w{@kbd{M-x
+fileloop-continue @key{RET}}}.
+
+@findex project-query-replace-regexp
+  @kbd{M-x project-query-replace-regexp} is similar to
+@code{project-search}, but it prompts you for whether to replace each
+match it finds, like @code{query-replace} does (@pxref{Query
+Replace}), and continues to the next match after you respond.  If your
+response causes Emacs to exit the query-replace loop, you can later
+continue with @w{@kbd{M-x fileloop-continue @key{RET}}}.
+
 @node Change Log
 @section Change Logs
 
diff --git a/etc/NEWS b/etc/NEWS
index 92173b7..ba3e691 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -101,6 +101,12 @@ shows equivalent key bindings for all commands that have 
them.
 
 ** Dired
 
+*** New option 'dired-mark-region' affects all Dired commands that mark files.
+When non-nil and the region is active in Transient Mark mode,
+then Dired commands operate only on files in the active region.
+The values 'exclusive' and 'inclusive' of this option define
+the details of marking the last file at the end of the region.
+
 *** State changing VC operations are supported in dired-mode on files
 (but still not on directories).
 
diff --git a/etc/NEWS.27 b/etc/NEWS.27
index b41541c..d3f27e3 100644
--- a/etc/NEWS.27
+++ b/etc/NEWS.27
@@ -978,7 +978,10 @@ The mode is automatically enabled in files that start with 
the
 
 ** project.el
 
++++
 *** New commands 'project-search' and 'project-query-replace-regexp'.
+
+---
 *** New user option 'project-read-file-name-function'.
 
 ** Etags
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 8f00317..6f50a3d 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -205,7 +205,10 @@ Examples of PREDICATE:
     (not (and (= (file-attribute-user-id fa1) - mark files with different UID
                  (file-attribute-user-id fa2))
               (= (file-attribute-group-id fa1) - and GID.
-                 (file-attribute-group-id fa2))))"
+                 (file-attribute-group-id fa2))))
+
+If the region is active in Transient Mark mode, mark files
+only in the active region if `dired-mark-region' is non-nil."
   (interactive
    (list
     (let* ((target-dir (dired-dwim-target-directory))
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index 623a1dd..873d586 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -623,7 +623,9 @@ interactively, prompt for REGEXP.
 With prefix argument, unflag all those files.
 Optional fourth argument LOCALP is as in `dired-get-filename'.
 Optional fifth argument CASE-FOLD-P specifies the value of
-`case-fold-search' used for matching REGEXP."
+`case-fold-search' used for matching REGEXP.
+If the region is active in Transient Mark mode, operate only on
+files in the active region if `dired-mark-region' is non-nil."
   (interactive
    (list (read-regexp
          "Mark unmarked files matching regexp (default all): "
@@ -1386,7 +1388,9 @@ present for some values of `ls-lisp-emulation'.
 
 This function operates only on the buffer content and does not
 refer at all to the underlying file system.  Contrast this with
-`find-dired', which might be preferable for the task at hand."
+`find-dired', which might be preferable for the task at hand.
+If the region is active in Transient Mark mode, mark files
+only in the active region if `dired-mark-region' is non-nil."
   ;; Using sym="" instead of nil avoids the trap of
   ;; (string-match "foo" sym) into which a user would soon fall.
   ;; Give `equal' instead of `=' in the example, as this works on
diff --git a/lisp/dired.el b/lisp/dired.el
index a4de51f..438f5e7 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -296,6 +296,34 @@ new Dired buffers."
   :version "26.1"
   :group 'dired)
 
+(defcustom dired-mark-region 'exclusive
+  "Defines what commands that mark files do with the active region.
+
+When nil, marking commands don't operate on all files in the
+active region.  They process their prefix arguments as usual.
+
+When the value of this option is non-nil, then all Dired commands
+that mark or unmark files will operate on all files in the region
+if the region is active in Transient Mark mode.
+
+When `exclusive', don't mark the file if the end of the region is
+before the file name displayed on the Dired line, so the file name
+is visually outside the region.  This behavior is consistent with
+marking files without the region using the key `m' that advances
+point to the next line after marking the file.  Thus the number
+of keys used to mark files is the same as the number of keys
+used to select the region, e.g. `M-2 m' marks 2 files, and
+`C-SPC M-2 n m' marks 2 files, and `M-2 S-down m' marks 2 files.
+
+When `inclusive', include the file into marking if the end of the region
+is anywhere on its Dired line, except the beginning of the line."
+  :type '(choice
+          (const :tag "Don't mark files in active region" nil)
+          (const :tag "Exclude file name outside of region" exclusive)
+          (const :tag "Include the file at region end line" inclusive))
+  :group 'dired
+  :version "28.1")
+
 ;; Internal variables
 
 (defvar dired-marker-char ?*           ; the answer is 42
@@ -612,12 +640,31 @@ Subexpression 2 must end right before the \\n.")
 PREDICATE is evaluated on each line, with point at beginning of line.
 MSG is a noun phrase for the type of files being marked.
 It should end with a noun that can be pluralized by adding `s'.
+
+In Transient Mark mode, if the mark is active, operate on the contents
+of the region if `dired-mark-region' is non-nil.  Otherwise, operate
+on the whole buffer.
+
 Return value is the number of files marked, or nil if none were marked."
-  `(let ((inhibit-read-only t) count)
+  `(let ((inhibit-read-only t) count
+         (beg (if (and dired-mark-region (use-region-p))
+                  (save-excursion
+                    (goto-char (region-beginning))
+                    (line-beginning-position))
+                (point-min)))
+         (end (if (and dired-mark-region (use-region-p))
+                  (save-excursion
+                    (goto-char (region-end))
+                    (if (if (eq dired-mark-region 'inclusive)
+                            (not (bolp))
+                          (get-text-property (1- (point)) 'dired-filename))
+                        (line-end-position)
+                      (line-beginning-position)))
+                (point-max))))
     (save-excursion
       (setq count 0)
       (when ,msg
-       (message "%s %ss%s..."
+       (message "%s %ss%s%s..."
                 (cond ((eq dired-marker-char ?\s) "Unmarking")
                       ((eq dired-del-marker dired-marker-char)
                        "Flagging")
@@ -625,22 +672,28 @@ Return value is the number of files marked, or nil if 
none were marked."
                 ,msg
                 (if (eq dired-del-marker dired-marker-char)
                     " for deletion"
-                  "")))
-      (goto-char (point-min))
-      (while (not (eobp))
+                  "")
+                 (if (and dired-mark-region (use-region-p))
+                     " in region"
+                   "")))
+      (goto-char beg)
+      (while (< (point) end)
         (when ,predicate
           (unless (= (following-char) dired-marker-char)
             (delete-char 1)
             (insert dired-marker-char)
             (setq count (1+ count))))
         (forward-line 1))
-      (when ,msg (message "%s %s%s %s%s"
+      (when ,msg (message "%s %s%s %s%s%s"
                         count
                         ,msg
                         (dired-plural-s count)
                         (if (eq dired-marker-char ?\s) "un" "")
                         (if (eq dired-marker-char dired-del-marker)
-                            "flagged" "marked"))))
+                            "flagged" "marked")
+                        (if (and dired-mark-region (use-region-p))
+                            " in region"
+                          ""))))
     (and (> count 0) count)))
 
 (defmacro dired-map-over-marks (body arg &optional show-progress
@@ -3580,7 +3633,8 @@ no ARGth marked file is found before this line."
 
 (defun dired-mark (arg &optional interactive)
   "Mark the file at point in the Dired buffer.
-If the region is active, mark all files in the region.
+If the region is active in Transient Mark mode, mark all files
+in the region if `dired-mark-region' is non-nil.
 Otherwise, with a prefix arg, mark files on the next ARG lines.
 
 If on a subdir headerline, mark all its files except `.' and `..'.
@@ -3591,13 +3645,18 @@ this subdir."
   (interactive (list current-prefix-arg t))
   (cond
    ;; Mark files in the active region.
-   ((and interactive (use-region-p))
+   ((and dired-mark-region interactive (use-region-p))
     (save-excursion
       (let ((beg (region-beginning))
            (end (region-end)))
        (dired-mark-files-in-region
         (progn (goto-char beg) (line-beginning-position))
-        (progn (goto-char end) (line-beginning-position))))))
+        (progn (goto-char end)
+                (if (if (eq dired-mark-region 'inclusive)
+                        (not (bolp))
+                      (get-text-property (1- (point)) 'dired-filename))
+                    (line-end-position)
+                  (line-beginning-position)))))))
    ;; Mark subdir files from the subdir headerline.
    ((dired-get-subdir)
     (save-excursion (dired-mark-subdir-files)))
@@ -3678,6 +3737,9 @@ As always, hidden subdirs are not affected."
 A prefix argument means to unmark them instead.
 `.' and `..' are never marked.
 
+If the region is active in Transient Mark mode, mark files
+only in the active region if `dired-mark-region' is non-nil.
+
 REGEXP is an Emacs regexp, not a shell wildcard.  Thus, use `\\.o$' for
 object files--just `.o' will mark more than you might think."
   (interactive
@@ -3729,6 +3791,9 @@ object files--just `.o' will mark more than you might 
think."
 A prefix argument means to unmark them instead.
 `.' and `..' are never marked.
 
+If the region is active in Transient Mark mode, mark files
+only in the active region if `dired-mark-region' is non-nil.
+
 Note that if a file is visited in an Emacs buffer, and
 `dired-always-read-filesystem' is nil, this command will
 look in the buffer without revisiting the file, so the results might
@@ -3773,14 +3838,18 @@ The match is against the non-directory part of the 
filename.  Use `^'
 
 (defun dired-mark-symlinks (unflag-p)
   "Mark all symbolic links.
-With prefix argument, unmark or unflag all those files."
+With prefix argument, unmark or unflag all those files.
+If the region is active in Transient Mark mode, mark files
+only in the active region if `dired-mark-region' is non-nil."
   (interactive "P")
   (let ((dired-marker-char (if unflag-p ?\s dired-marker-char)))
     (dired-mark-if (looking-at-p dired-re-sym) "symbolic link")))
 
 (defun dired-mark-directories (unflag-p)
   "Mark all directory file lines except `.' and `..'.
-With prefix argument, unmark or unflag all those files."
+With prefix argument, unmark or unflag all those files.
+If the region is active in Transient Mark mode, mark files
+only in the active region if `dired-mark-region' is non-nil."
   (interactive "P")
   (let ((dired-marker-char (if unflag-p ?\s dired-marker-char)))
     (dired-mark-if (and (looking-at-p dired-re-dir)
@@ -3789,7 +3858,9 @@ With prefix argument, unmark or unflag all those files."
 
 (defun dired-mark-executables (unflag-p)
   "Mark all executable files.
-With prefix argument, unmark or unflag all those files."
+With prefix argument, unmark or unflag all those files.
+If the region is active in Transient Mark mode, mark files
+only in the active region if `dired-mark-region' is non-nil."
   (interactive "P")
   (let ((dired-marker-char (if unflag-p ?\s dired-marker-char)))
     (dired-mark-if (looking-at-p dired-re-exe) "executable file")))
@@ -3799,7 +3870,9 @@ With prefix argument, unmark or unflag all those files."
 
 (defun dired-flag-auto-save-files (&optional unflag-p)
   "Flag for deletion files whose names suggest they are auto save files.
-A prefix argument says to unmark or unflag those files instead."
+A prefix argument says to unmark or unflag those files instead.
+If the region is active in Transient Mark mode, flag files
+only in the active region if `dired-mark-region' is non-nil."
   (interactive "P")
   (let ((dired-marker-char (if unflag-p ?\s dired-del-marker)))
     (dired-mark-if
@@ -3839,7 +3912,9 @@ A prefix argument says to unmark or unflag those files 
instead."
 
 (defun dired-flag-backup-files (&optional unflag-p)
   "Flag all backup files (names ending with `~') for deletion.
-With prefix argument, unmark or unflag these files."
+With prefix argument, unmark or unflag these files.
+If the region is active in Transient Mark mode, flag files
+only in the active region if `dired-mark-region' is non-nil."
   (interactive "P")
   (let ((dired-marker-char (if unflag-p ?\s dired-del-marker)))
     (dired-mark-if
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 323bbbb..f8336d3 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -555,7 +555,7 @@ too large if positive or too small if negative)."
 (defun cl-concatenate (type &rest sequences)
   "Concatenate, into a sequence of type TYPE, the argument SEQUENCEs.
 \n(fn TYPE SEQUENCE...)"
-  (seq-concatenate type sequences))
+  (apply #'seq-concatenate type sequences))
 
 ;;; List functions.
 
diff --git a/lisp/erc/erc-autoaway.el b/lisp/erc/erc-autoaway.el
index be7baca..0950cec 100644
--- a/lisp/erc/erc-autoaway.el
+++ b/lisp/erc/erc-autoaway.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002-2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; URL: https://www.emacswiki.org/emacs/ErcAutoAway
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index b1a829c..57c8e73 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -4,7 +4,7 @@
 
 ;; Filename: erc-backend.el
 ;; Author: Lawrence Mitchell <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Created: 2004-05-7
 ;; Keywords: IRC chat client internet
 
diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el
index cb1b71b..5e6f7c8 100644
--- a/lisp/erc/erc-button.el
+++ b/lisp/erc/erc-button.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1996-2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: irc, button, url, regexp
 ;; URL: https://www.emacswiki.org/emacs/ErcButton
 
diff --git a/lisp/erc/erc-capab.el b/lisp/erc/erc-capab.el
index 129f502..fc45725 100644
--- a/lisp/erc/erc-capab.el
+++ b/lisp/erc/erc-capab.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2006-2020 Free Software Foundation, Inc.
 
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 
 ; This file is part of GNU Emacs.
 
diff --git a/lisp/erc/erc-compat.el b/lisp/erc/erc-compat.el
index f433abc..c77d5ab 100644
--- a/lisp/erc/erc-compat.el
+++ b/lisp/erc/erc-compat.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002-2003, 2005-2020 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; URL: https://www.emacswiki.org/emacs/ERC
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el
index e121003..26701ce 100644
--- a/lisp/erc/erc-dcc.el
+++ b/lisp/erc/erc-dcc.el
@@ -6,7 +6,7 @@
 ;; Author: Ben A. Mesander <address@hidden>
 ;;         Noah Friedman <address@hidden>
 ;;         Per Persson <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm, processes
 ;; Created: 1994-01-23
 
diff --git a/lisp/erc/erc-desktop-notifications.el 
b/lisp/erc/erc-desktop-notifications.el
index 7c32429..1e65f8f 100644
--- a/lisp/erc/erc-desktop-notifications.el
+++ b/lisp/erc/erc-desktop-notifications.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2012-2020 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-ezbounce.el b/lisp/erc/erc-ezbounce.el
index a2d58e9..5c2faff 100644
--- a/lisp/erc/erc-ezbounce.el
+++ b/lisp/erc/erc-ezbounce.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002, 2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el
index 6abbe39..39a8be5 100644
--- a/lisp/erc/erc-fill.el
+++ b/lisp/erc/erc-fill.el
@@ -4,7 +4,7 @@
 
 ;; Author: Andreas Fuchs <address@hidden>
 ;;         Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; URL: https://www.emacswiki.org/emacs/ErcFilling
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el
index 809f8f0..94d5de2 100644
--- a/lisp/erc/erc-goodies.el
+++ b/lisp/erc/erc-goodies.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2001-2020 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 
 ;; Most code is taken verbatim from erc.el, see there for the original
 ;; authors.
diff --git a/lisp/erc/erc-ibuffer.el b/lisp/erc/erc-ibuffer.el
index 7a04ff1..7aee770 100644
--- a/lisp/erc/erc-ibuffer.el
+++ b/lisp/erc/erc-ibuffer.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002, 2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-identd.el b/lisp/erc/erc-identd.el
index 70a0917..e2115f5 100644
--- a/lisp/erc/erc-identd.el
+++ b/lisp/erc/erc-identd.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2003, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm, processes
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-imenu.el b/lisp/erc/erc-imenu.el
index 3fb91ec..c05633a 100644
--- a/lisp/erc/erc-imenu.el
+++ b/lisp/erc/erc-imenu.el
@@ -4,7 +4,7 @@
 ;; Inc.
 
 ;; Author: Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm
 ;; URL: https://www.emacswiki.org/emacs/ErcImenu
 
diff --git a/lisp/erc/erc-join.el b/lisp/erc/erc-join.el
index 7bc4f00..280d6bf 100644
--- a/lisp/erc/erc-join.el
+++ b/lisp/erc/erc-join.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002-2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: irc
 ;; URL: https://www.emacswiki.org/emacs/ErcAutoJoin
 
diff --git a/lisp/erc/erc-lang.el b/lisp/erc/erc-lang.el
index 3ab1f03..95b94f6 100644
--- a/lisp/erc/erc-lang.el
+++ b/lisp/erc/erc-lang.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002, 2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Old-Version: 1.0.0
 ;; URL: https://www.emacswiki.org/emacs/ErcLang
 ;; Keywords: comm languages processes
diff --git a/lisp/erc/erc-list.el b/lisp/erc/erc-list.el
index 4fba9f4..5faeabb 100644
--- a/lisp/erc/erc-list.el
+++ b/lisp/erc/erc-list.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2008-2020 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Old-Version: 0.1
 ;; URL: https://www.emacswiki.org/emacs/ErcList
 ;; Keywords: comm
diff --git a/lisp/erc/erc-log.el b/lisp/erc/erc-log.el
index e53f3c0..1bad6d1 100644
--- a/lisp/erc/erc-log.el
+++ b/lisp/erc/erc-log.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2003-2020 Free Software Foundation, Inc.
 
 ;; Author: Lawrence Mitchell <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; URL: https://www.emacswiki.org/emacs/ErcLogging
 ;; Keywords: IRC, chat, client, Internet, logging
 
diff --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el
index c0f3bf1..3107ff2 100644
--- a/lisp/erc/erc-match.el
+++ b/lisp/erc/erc-match.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002-2020 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm, faces
 ;; URL: https://www.emacswiki.org/emacs/ErcMatch
 
diff --git a/lisp/erc/erc-menu.el b/lisp/erc/erc-menu.el
index 4bc758a..9c02899 100644
--- a/lisp/erc/erc-menu.el
+++ b/lisp/erc/erc-menu.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2001-2002, 2004-2020 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm, processes, menu
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-netsplit.el b/lisp/erc/erc-netsplit.el
index 2816acd..e3dc52b 100644
--- a/lisp/erc/erc-netsplit.el
+++ b/lisp/erc/erc-netsplit.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002-2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-networks.el b/lisp/erc/erc-networks.el
index 0696993..1234962 100644
--- a/lisp/erc/erc-networks.el
+++ b/lisp/erc/erc-networks.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002, 2004-2020 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-notify.el b/lisp/erc/erc-notify.el
index 80ae0c3..1b092c8 100644
--- a/lisp/erc/erc-notify.el
+++ b/lisp/erc/erc-notify.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002-2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; URL: https://www.emacswiki.org/emacs/ErcNotify
 ;; Keywords: comm
 
diff --git a/lisp/erc/erc-page.el b/lisp/erc/erc-page.el
index c6eca51..339beb0 100644
--- a/lisp/erc/erc-page.el
+++ b/lisp/erc/erc-page.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2002, 2004, 2006-2020 Free Software Foundation, Inc.
 
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/erc/erc-pcomplete.el b/lisp/erc/erc-pcomplete.el
index 65b0f66..7643fa8 100644
--- a/lisp/erc/erc-pcomplete.el
+++ b/lisp/erc/erc-pcomplete.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002-2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Sacha Chua <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm, convenience
 ;; URL: https://www.emacswiki.org/emacs/ErcCompletion
 
diff --git a/lisp/erc/erc-replace.el b/lisp/erc/erc-replace.el
index dfb2062..8bd97be 100644
--- a/lisp/erc/erc-replace.el
+++ b/lisp/erc/erc-replace.el
@@ -4,7 +4,7 @@
 ;; Inc.
 
 ;; Author: Andreas Fuchs <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; URL: https://www.emacswiki.org/emacs/ErcReplace
 ;; Keywords: IRC, client, Internet
 
diff --git a/lisp/erc/erc-ring.el b/lisp/erc/erc-ring.el
index 7594b8e..bc5f0ed 100644
--- a/lisp/erc/erc-ring.el
+++ b/lisp/erc/erc-ring.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2001-2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm
 ;; URL: https://www.emacswiki.org/emacs/ErcHistory
 
diff --git a/lisp/erc/erc-services.el b/lisp/erc/erc-services.el
index 2d1d855..c0011f9 100644
--- a/lisp/erc/erc-services.el
+++ b/lisp/erc/erc-services.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2002-2004, 2006-2020 Free Software Foundation, Inc.
 
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; URL: https://www.emacswiki.org/emacs/ErcNickserv
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-sound.el b/lisp/erc/erc-sound.el
index 96d41a6..91ce1c6 100644
--- a/lisp/erc/erc-sound.el
+++ b/lisp/erc/erc-sound.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2002-2003, 2006-2020 Free Software Foundation, Inc.
 
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; URL: https://www.emacswiki.org/emacs/ErcSound
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-speedbar.el b/lisp/erc/erc-speedbar.el
index 1c0635c..b64e42b 100644
--- a/lisp/erc/erc-speedbar.el
+++ b/lisp/erc/erc-speedbar.el
@@ -4,7 +4,7 @@
 
 ;; Author: Mario Lang <address@hidden>
 ;; Contributor: Eric M. Ludlam <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; URL: https://www.emacswiki.org/emacs/ErcSpeedbar
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-spelling.el b/lisp/erc/erc-spelling.el
index 4632329..cedffbc 100644
--- a/lisp/erc/erc-spelling.el
+++ b/lisp/erc/erc-spelling.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2005-2020 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: irc
 ;; URL: https://www.emacswiki.org/emacs/ErcSpelling
 
diff --git a/lisp/erc/erc-stamp.el b/lisp/erc/erc-stamp.el
index 3717dc0..cbab2f9 100644
--- a/lisp/erc/erc-stamp.el
+++ b/lisp/erc/erc-stamp.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002-2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm, processes, timestamp
 ;; URL: https://www.emacswiki.org/emacs/ErcStamp
 
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index f8c80d2..db8ccbb 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2002-2020 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm, faces
 ;; URL: https://www.emacswiki.org/emacs/ErcChannelTracking
 
diff --git a/lisp/erc/erc-truncate.el b/lisp/erc/erc-truncate.el
index 9de33ff..fff073a 100644
--- a/lisp/erc/erc-truncate.el
+++ b/lisp/erc/erc-truncate.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2003-2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; URL: https://www.emacswiki.org/emacs/ErcTruncation
 ;; Keywords: IRC, chat, client, Internet, logging
 
diff --git a/lisp/erc/erc-xdcc.el b/lisp/erc/erc-xdcc.el
index 61087de..2a236d2 100644
--- a/lisp/erc/erc-xdcc.el
+++ b/lisp/erc/erc-xdcc.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2003-2004, 2006-2020 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: comm, processes
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 81325df..5c63382 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -10,7 +10,7 @@
 ;;               Gergely Nagy (address@hidden)
 ;;               David Edmondson (address@hidden)
 ;;               Kelvin White (address@hidden)
-;; Maintainer: Amin Bandali <address@hidden>
+;; Maintainer: Amin Bandali <address@hidden>
 ;; Keywords: IRC, chat, client, Internet
 
 ;; Version: 5.3
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index ccd8cc0..f467868 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -437,6 +437,7 @@ triggers completion when entering a pattern, including it
 requires quoting, e.g. `\\[quoted-insert]<space>'."
   (interactive (list (project--read-regexp)))
   (require 'xref)
+  (require 'grep)
   (let* ((pr (project-current t))
          (files
           (if (not current-prefix-arg)
@@ -606,7 +607,8 @@ PREDICATE, HIST, and DEFAULT have the same meaning as in
 (defun project-search (regexp)
   "Search for REGEXP in all the files of the project.
 Stops when a match is found.
-To continue searching for next match, use command \\[fileloop-continue]."
+To continue searching for the next match, use the
+command \\[fileloop-continue]."
   (interactive "sSearch (regexp): ")
   (fileloop-initialize-search
    regexp (project-files (project-current t)) 'default)
@@ -614,9 +616,10 @@ To continue searching for next match, use command 
\\[fileloop-continue]."
 
 ;;;###autoload
 (defun project-query-replace-regexp (from to)
-  "Search for REGEXP in all the files of the project.
-Stops when a match is found.
-To continue searching for next match, use command \\[fileloop-continue]."
+  "Query-replace REGEXP in all the files of the project.
+Stops when a match is found and prompts for whether to replace it.
+If you exit the query-replace, you can later continue the query-replace
+loop using the command \\[fileloop-continue]."
   (interactive
    (pcase-let ((`(,from ,to)
                 (query-replace-read-args "Query replace (regexp)" t t)))
diff --git a/lisp/svg.el b/lisp/svg.el
index 6a2fc4c..370c9c0 100644
--- a/lisp/svg.el
+++ b/lisp/svg.el
@@ -70,7 +70,8 @@ any further elements added."
              (height . ,height)
              (version . "1.1")
              (xmlns . "http://www.w3.org/2000/svg";)
-             ,@(svg--arguments nil args))))
+              (xmlns:xlink . "http://www.w3.org/1999/xlink";)
+              ,@(svg--arguments nil args))))
 
 (defun svg-gradient (svg id type stops)
   "Add a gradient with ID to SVG.
diff --git a/lisp/tab-line.el b/lisp/tab-line.el
index 53fa984..eb279de 100644
--- a/lisp/tab-line.el
+++ b/lisp/tab-line.el
@@ -142,11 +142,19 @@
 (defcustom tab-line-new-tab-choice t
   "Defines what to show in a new tab.
 If t, display a selection menu with all available buffers.
-If the value is a function, call it with no arguments.
-If nil, don't show the new tab button."
+If the value is a function, call it with no arguments."
   :type '(choice (const     :tag "Buffer menu" t)
-                 (function  :tag "Function")
-                 (const     :tag "No button" nil))
+                 (function  :tag "Function"))
+  :group 'tab-line
+  :version "27.1")
+
+(defcustom tab-line-new-button-show t
+  "If non-nil, show the \"New tab\" button in the tab line."
+  :type 'boolean
+  :initialize 'custom-initialize-default
+  :set (lambda (sym val)
+         (set-default sym val)
+         (force-mode-line-update))
   :group 'tab-line
   :version "27.1")
 
@@ -211,7 +219,8 @@ If nil, don't show it at all."
               'help-echo "Click to scroll right")
   "Button for scrolling horizontally to the right.")
 
-(defvar tab-line-separator nil)
+(defvar tab-line-separator nil
+  "String that delimits tabs.")
 
 
 (defcustom tab-line-tab-name-function #'tab-line-tab-name-buffer
@@ -455,7 +464,8 @@ variable `tab-line-tabs-function'."
      (if hscroll (nthcdr (truncate hscroll) strings) strings)
      (list separator)
      (when (and (eq tab-line-tabs-function #'tab-line-tabs-window-buffers)
-                tab-line-new-tab-choice)
+                tab-line-new-button-show
+                tab-line-new-button)
        (list tab-line-new-button)))))
 
 (defvar tab-line-auto-hscroll)
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index d61c363..8171a58 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -2247,29 +2247,32 @@ The elements of the alist are of the form (FILE . 
(DEFUN...)),
 where DEFUN... is a list of function names found in FILE."
   (save-excursion
     (goto-char (point-min))
-    (let ((defuns nil)
-          (hunk-end nil)
-          (hunk-mismatch-files nil)
-          (make-defun-context-follower
-           (lambda (goline)
-             (let ((eodefun nil)
-                   (defname nil))
-               (list
-                (lambda () ;; Check for end of current defun.
-                  (when (and eodefun
-                             (funcall goline)
-                             (>= (point) eodefun))
-                    (setq defname nil)
-                    (setq eodefun nil)))
-                (lambda (&optional get-current) ;; Check for new defun.
-                  (if get-current
-                      defname
-                    (when-let* ((def (and (not eodefun)
-                                          (funcall goline)
-                                          (add-log-current-defun)))
-                                (eof (save-excursion (end-of-defun) (point))))
-                      (setq eodefun eof)
-                      (setq defname def)))))))))
+    (let* ((defuns nil)
+           (hunk-end nil)
+           (hunk-mismatch-files nil)
+           (make-defun-context-follower
+            (lambda (goline)
+              (let ((eodefun nil)
+                    (defname nil))
+                (list
+                 (lambda () ;; Check for end of current defun.
+                   (when (and eodefun
+                              (funcall goline)
+                              (>= (point) eodefun))
+                     (setq defname nil)
+                     (setq eodefun nil)))
+                 (lambda (&optional get-current) ;; Check for new defun.
+                   (if get-current
+                       defname
+                     (when-let* ((def (and (not eodefun)
+                                           (funcall goline)
+                                           (add-log-current-defun)))
+                                 (eof (save-excursion
+                                        (condition-case ()
+                                            (progn (end-of-defun) (point))
+                                          (scan-error hunk-end)))))
+                       (setq eodefun eof)
+                       (setq defname def)))))))))
       (while
           ;; Might need to skip over file headers between diff
           ;; hunks (e.g., "diff --git ..." etc).
diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el
index 8b61688..d5d4614 100644
--- a/lisp/vc/log-edit.el
+++ b/lisp/vc/log-edit.el
@@ -788,18 +788,20 @@ This command will generate a ChangeLog entries listing the
 functions.  You can then add a description where needed, and use
 \\[fill-paragraph] to join consecutive function names."
   (interactive)
-  (let* ((diff-buf nil)
-         ;; Unfortunately, `log-edit-show-diff' doesn't have a NO-SHOW
-         ;; option, so we try to work around it via display-buffer
-         ;; machinery.
-         (display-buffer-overriding-action
-          `(,(lambda (buf alist)
-               (setq diff-buf buf)
-               (display-buffer-no-window buf alist))
-            . ((allow-no-window . t)))))
-    (change-log-insert-entries
-     (with-current-buffer (progn (log-edit-show-diff) diff-buf)
-       (diff-add-log-current-defuns)))))
+  (change-log-insert-entries
+   (with-current-buffer
+       (let* ((diff-buf nil)
+              ;; Unfortunately, `log-edit-show-diff' doesn't have a
+              ;; NO-SHOW option, so we try to work around it via
+              ;; display-buffer machinery.
+              (display-buffer-overriding-action
+               `(,(lambda (buf alist)
+                    (setq diff-buf buf)
+                    (display-buffer-no-window buf alist))
+                 . ((allow-no-window . t)))))
+         (log-edit-show-diff)
+         diff-buf)
+     (diff-add-log-current-defuns))))
 
 (defun log-edit-insert-changelog (&optional use-first)
   "Insert a log message by looking at the ChangeLog.
diff --git a/nt/gnulib-cfg.mk b/nt/gnulib-cfg.mk
index e3b9457..b84626d 100644
--- a/nt/gnulib-cfg.mk
+++ b/nt/gnulib-cfg.mk
@@ -63,6 +63,7 @@ OMIT_GNULIB_MODULE_sys_time = true
 OMIT_GNULIB_MODULE_sys_types = true
 OMIT_GNULIB_MODULE_unistd = true
 OMIT_GNULIB_MODULE_canonicalize-lgpl = true
+OMIT_GNULIB_MODULE_utimens = true
 OMIT_GNULIB_MODULE_fchmodat = true
 OMIT_GNULIB_MODULE_lchmod = true
 OMIT_GNULIB_MODULE_futimens = true
diff --git a/src/data.c b/src/data.c
index 173b92c..2820f64 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1602,7 +1602,7 @@ notify_variable_watchers (Lisp_Object symbol,
 /* Return the default value of SYMBOL, but don't check for voidness.
    Return Qunbound if it is void.  */
 
-static Lisp_Object
+Lisp_Object
 default_value (Lisp_Object symbol)
 {
   struct Lisp_Symbol *sym;
diff --git a/src/eval.c b/src/eval.c
index e5c850a..6de81e5 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3825,7 +3825,7 @@ backtrace_eval_unrewind (int distance)
          {
            Lisp_Object sym = specpdl_symbol (tmp);
            Lisp_Object old_value = specpdl_old_value (tmp);
-           set_specpdl_old_value (tmp, Fdefault_value (sym));
+           set_specpdl_old_value (tmp, default_value (sym));
            Fset_default (sym, old_value);
          }
          break;
@@ -3841,7 +3841,7 @@ backtrace_eval_unrewind (int distance)
            if (!NILP (Flocal_variable_p (symbol, where)))
              {
                set_specpdl_old_value
-                 (tmp, Fbuffer_local_value (symbol, where));
+                 (tmp, buffer_local_value (symbol, where));
                 set_internal (symbol, old_value, where, SET_INTERNAL_UNBIND);
              }
          }
diff --git a/src/filelock.c b/src/filelock.c
index 73202f0..2b734ee 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -680,6 +680,9 @@ lock_file (Lisp_Object fn)
   dostounix_filename (SSDATA (fn));
 #endif
   encoded_fn = ENCODE_FILE (fn);
+  if (create_lockfiles)
+    /* Create the name of the lock-file for file fn */
+    MAKE_LOCK_NAME (lfname, encoded_fn);
 
   /* See if this file is visited and has changed on disk since it was
      visited.  */
@@ -690,7 +693,8 @@ lock_file (Lisp_Object fn)
 
     if (!NILP (subject_buf)
        && NILP (Fverify_visited_file_modtime (subject_buf))
-       && !NILP (Ffile_exists_p (fn)))
+        && !NILP (Ffile_exists_p (fn))
+        && (!create_lockfiles || current_lock_owner (NULL, lfname) != -2))
       call1 (intern ("userlock--ask-user-about-supersession-threat"), fn);
 
   }
@@ -698,10 +702,6 @@ lock_file (Lisp_Object fn)
   /* Don't do locking if the user has opted out.  */
   if (create_lockfiles)
     {
-
-      /* Create the name of the lock-file for file fn */
-      MAKE_LOCK_NAME (lfname, encoded_fn);
-
       /* Try to lock the lock.  FIXME: This ignores errors when
         lock_if_free returns a positive errno value.  */
       if (lock_if_free (&lock_info, lfname) < 0)
diff --git a/src/ftfont.c b/src/ftfont.c
index 2b442ea..6b549c3 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -119,7 +119,7 @@ static struct
     { "jisx0213.2004-1", { 0x20B9F }},
     { "viscii1.1-1", { 0x1EA0, 0x1EAE, 0x1ED2 }, "vi"},
     { "tis620.2529-1", { 0x0E01 }, "th"},
-    { "windows-1251", { 0x0401, 0x0490 }, "ru"},
+    { "microsoft-cp1251", { 0x0401, 0x0490 }, "ru"},
     { "koi8-r", { 0x0401, 0x2219 }, "ru"},
     { "mulelao-1", { 0x0E81 }, "lo"},
     { "unicode-sip", { 0x20000 }},
diff --git a/src/lisp.h b/src/lisp.h
index 9695976..f86b488 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -595,6 +595,7 @@ extern void char_table_set (Lisp_Object, int, Lisp_Object);
 
 /* Defined in data.c.  */
 extern AVOID wrong_type_argument (Lisp_Object, Lisp_Object);
+extern Lisp_Object default_value (Lisp_Object symbol);
 
 
 /* Defined in emacs.c.  */
diff --git a/test/lisp/emacs-lisp/cl-extra-tests.el 
b/test/lisp/emacs-lisp/cl-extra-tests.el
index 2d20ba7..7546c14 100644
--- a/test/lisp/emacs-lisp/cl-extra-tests.el
+++ b/test/lisp/emacs-lisp/cl-extra-tests.el
@@ -99,4 +99,12 @@
     ;; Test for Bug#33731.
     (should-not (eq s (cl-make-random-state s)))))
 
+(ert-deftest cl-concatenate ()
+  (should (equal (cl-concatenate 'list '(1 2 3) '(4 5 6))
+                 '(1 2 3 4 5 6)))
+  (should (equal (cl-concatenate 'vector [1 2 3] [4 5 6])
+                 [1 2 3 4 5 6]))
+  (should (equal (cl-concatenate 'string "123" "456")
+                 "123456")))
+
 ;;; cl-extra-tests.el ends here



reply via email to

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