[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/android 2e644fc13cc: Merge remote-tracking branch 'origin/master
From: |
Po Lu |
Subject: |
feature/android 2e644fc13cc: Merge remote-tracking branch 'origin/master' into feature/android |
Date: |
Thu, 18 May 2023 20:56:03 -0400 (EDT) |
branch: feature/android
commit 2e644fc13cc46edb99424223bd9dd6da57d710ce
Merge: f59fd5fb27f 8c9377b6c4e
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Merge remote-tracking branch 'origin/master' into feature/android
---
admin/make-tarball.txt | 7 +--
doc/emacs/package.texi | 19 +++++---
doc/lispref/functions.texi | 7 +++
etc/refcards/orgcard.tex | 2 +-
lisp/emacs-lisp/bytecomp.el | 2 +-
lisp/emacs-lisp/comp.el | 2 +
lisp/emacs-lisp/package-vc.el | 13 +++--
lisp/emacs-lisp/package.el | 110 ++++++++++++++++++++++--------------------
lisp/erc/erc-fill.el | 4 +-
lisp/erc/erc.el | 40 +++++++--------
lisp/isearch.el | 6 +--
lisp/org/org-clock.el | 103 +++++++++++++++++++--------------------
lisp/org/org-version.el | 4 +-
lisp/org/org.el | 2 +-
lisp/progmodes/csharp-mode.el | 1 -
lisp/progmodes/python.el | 22 +++------
lisp/progmodes/vhdl-mode.el | 60 ++++++++++++++---------
lisp/simple.el | 23 +++++++--
lisp/tab-bar.el | 4 +-
lisp/treesit.el | 5 +-
src/nsterm.m | 3 +-
21 files changed, 246 insertions(+), 193 deletions(-)
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index 00516a0edd7..1cc97c883af 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -75,9 +75,10 @@ General steps (for each step, check for possible errors):
For the first pretest of a new major release, consider starting a
new top-level ChangeLog.N file if the last versioned ChangeLog.N
file is too large. A good point to start a new ChangeLog.N file
- is when the last one gets larger than 1.5 MiB. If so, start a new
- one by bumping N, and also update the line in top-level
- Makefile.in which says
+ is when the last one gets larger than 5 MiB, or when you make the
+ first pretest of a new major release, whichever happens later. If
+ so, start a new ChangeLog.N file by bumping N, and also update the
+ line in top-level Makefile.in which says
CHANGELOG_HISTORY_INDEX_MAX = N
diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi
index 1229557673d..f1f88ac7f58 100644
--- a/doc/emacs/package.texi
+++ b/doc/emacs/package.texi
@@ -207,7 +207,8 @@ from lower-priority archives
(@code{package-menu-toggle-hiding}).
@findex package-menu-filter-by-archive
Filter package list by archive (@code{package-menu-filter-by-archive}).
This prompts for a package archive (e.g., @samp{gnu}), then shows only
-packages from that archive.
+packages from that archive. You can specify several archives by
+typing their names separated by commas.
@item / d
@kindex / d @r{(Package Menu)}
@@ -222,7 +223,8 @@ matching that regexp.
@findex package-menu-filter-by-keyword
Filter package list by keyword (@code{package-menu-filter-by-keyword}).
This prompts for a keyword (e.g., @samp{games}), then shows only
-packages with that keyword.
+packages with that keyword. You can specify several keywords by
+typing them separated by commas.
@item / N
@kindex / N @r{(Package Menu)}
@@ -243,16 +245,19 @@ with names matching that regexp.
@kindex / s @r{(Package Menu)}
@findex package-menu-filter-by-status
Filter package list by status (@code{package-menu-filter-by-status}).
-This prompts for one or more statuses (e.g., @samp{available}), then
-shows only packages with matching status.
+This prompts for one or more statuses (e.g., @samp{available},
+@pxref{Package Statuses}), then shows only packages with matching
+status. You can specify several status values by typing them
+separated by commas.
@item / v
@kindex / v @r{(Package Menu)}
@findex package-menu-filter-by-version
Filter package list by version (@code{package-menu-filter-by-version}).
-This prompts first for one of the qualifiers @samp{<}, @samp{>} or
-@samp{=}, and then a package version, and shows packages that has a
-lower, equal or higher version than the one specified.
+This prompts first for one of the comparison symbols @samp{<},
+@samp{>} or @samp{=} and for a version string, and then shows packages
+whose versions are correspondingly lower, equal or higher than the
+version you typed.
@item / m
@kindex / m @r{(Package Menu)}
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index 80fdae04fab..a94fdee1d82 100644
--- a/doc/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -2365,6 +2365,11 @@ this:
(set-advertised-calling-convention
'sit-for '(seconds &optional nodisp) "22.1")
@end example
+
+@noindent
+The alternative to using this function is the
+@code{advertised-calling-convention} @code{declare} spec, see
+@ref{Declare Form}.
@end defun
@node Inline Functions
@@ -2541,6 +2546,7 @@ Each element in @var{specs} should have the form
@code{(@var{property}
following effects:
@table @code
+@cindex @code{advertised-calling-convention} (@code{declare} spec)
@item (advertised-calling-convention @var{signature} @var{when})
This acts like a call to @code{set-advertised-calling-convention}
(@pxref{Obsolete Functions}); @var{signature} specifies the correct
@@ -2566,6 +2572,7 @@ This is typically used for macros, though it works for
functions too.
Set the function's @code{interactive-only} property to @var{value}.
@xref{The interactive-only property}.
+@cindex @code{obsolete} (@code{declare} spec)
@item (obsolete @var{current-name} @var{when})
Mark the function or macro as obsolete, similar to a call to
@code{make-obsolete} (@pxref{Obsolete Functions}). @var{current-name}
diff --git a/etc/refcards/orgcard.tex b/etc/refcards/orgcard.tex
index 6ee77758e06..07463ee6a33 100644
--- a/etc/refcards/orgcard.tex
+++ b/etc/refcards/orgcard.tex
@@ -1,5 +1,5 @@
% Reference Card for Org Mode
-\def\orgversionnumber{9.6.5}
+\def\orgversionnumber{9.6.6}
\def\versionyear{2023} % latest update
\input emacsver.tex
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index a192d599d1d..deda4573229 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -3569,7 +3569,7 @@ lambda-expression."
;; Adding these functions causes many warnings;
;; evaluate how many of them are false first.
- ;;delq delete
+ delq delete
;;nconc plist-put
)))
(dolist (fn important-return-value-fns)
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 576cd26dba7..2e07b0b0e60 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -3732,6 +3732,7 @@ Prepare every function for final compilation and drive
the C back-end."
',native-comp-compiler-options
native-comp-driver-options
',native-comp-driver-options
+ byte-compile-warnings ',byte-compile-warnings
load-path ',load-path)
,native-comp-async-env-modifier-form
(message "Compiling %s..." ',output)
@@ -4004,6 +4005,7 @@ display a message."
native-comp-driver-options
load-path
backtrace-line-length
+ byte-compile-warnings
;; package-load-list
;; package-user-dir
;; package-directory-list
diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el
index 35acd493b36..f34cfb3120b 100644
--- a/lisp/emacs-lisp/package-vc.el
+++ b/lisp/emacs-lisp/package-vc.el
@@ -386,6 +386,7 @@ FILE can be an Org file, indicated by its \".org\"
extension,
otherwise it's assumed to be an Info file."
(let* ((pkg-name (package-desc-name pkg-desc))
(default-directory (package-desc-dir pkg-desc))
+ (docs-directory (expand-file-name (file-name-directory file)))
(output (expand-file-name (format "%s.info" pkg-name)))
clean-up)
(when (string-match-p "\\.org\\'" file)
@@ -400,7 +401,9 @@ otherwise it's assumed to be an Info file."
(erase-buffer)
(cond
((/= 0 (call-process "makeinfo" nil t nil
- "--no-split" file "-o" output))
+ "-I" docs-directory
+ "--no-split" file
+ "-o" output))
(message "Failed to build manual %s, see buffer %S"
file (buffer-name)))
((/= 0 (call-process "install-info" nil t nil
@@ -548,9 +551,11 @@ documentation and marking the package as installed."
(package--reload-previously-loaded new-desc)))
;; Mark package as selected
- (package--save-selected-packages
- (cons (package-desc-name pkg-desc)
- package-selected-packages))
+ (let ((name (package-desc-name pkg-desc)))
+ (unless (memq name package-selected-packages)
+ (package--save-selected-packages
+ (cons name package-selected-packages))))
+
(package--quickstart-maybe-refresh)
;; Confirm that the installation was successful
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 325c7b4e0a6..78017b77677 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -3597,7 +3597,8 @@ The regexp is added to the list in the user option
`package-hidden-regexps' and saved for future sessions.
To unhide a package, type
-`\\[customize-variable] RET package-hidden-regexps'.
+`\\[customize-variable] RET package-hidden-regexps', and then modify
+the regexp such that it no longer matches the package's name.
Type \\[package-menu-toggle-hiding] to toggle package hiding."
(declare (interactive-only "change `package-hidden-regexps' instead."))
@@ -3624,7 +3625,9 @@ Type \\[package-menu-toggle-hiding] to toggle package
hiding."
(defun package-menu-describe-package (&optional button)
"Describe the current package.
-If optional arg BUTTON is non-nil, describe its associated package."
+The current package is the package at point.
+If optional arg BUTTON is non-nil, describe its associated
+package(s); this is always nil in interactive invocations."
(interactive nil package-menu-mode)
(let ((pkg-desc (if button (button-get button 'package-desc)
(tabulated-list-get-id))))
@@ -3634,7 +3637,8 @@ If optional arg BUTTON is non-nil, describe its
associated package."
;; fixme numeric argument
(defun package-menu-mark-delete (&optional _num)
- "Mark a package for deletion and move to the next line."
+ "Mark the current package for deletion and move to the next line.
+The current package is the package at point."
(interactive "p" package-menu-mode)
(package--ensure-package-menu-mode)
(if (member (package-menu-get-status)
@@ -3643,7 +3647,8 @@ If optional arg BUTTON is non-nil, describe its
associated package."
(forward-line)))
(defun package-menu-mark-install (&optional _num)
- "Mark a package for installation and move to the next line."
+ "Mark the current package for installation and move to the next line.
+The current package is the package at point."
(interactive "p" package-menu-mode)
(package--ensure-package-menu-mode)
(if (member (package-menu-get-status) '("available" "avail-obso" "new"
"dependency"))
@@ -3651,13 +3656,14 @@ If optional arg BUTTON is non-nil, describe its
associated package."
(forward-line)))
(defun package-menu-mark-unmark (&optional _num)
- "Clear any marks on a package and move to the next line."
+ "Clear any marks on the current package and move to the next line.
+The current package is the package at point."
(interactive "p" package-menu-mode)
(package--ensure-package-menu-mode)
(tabulated-list-put-tag " " t))
(defun package-menu-backup-unmark ()
- "Back up one line and clear any marks on that package."
+ "Back up one line and clear any marks on that line's package."
(interactive nil package-menu-mode)
(package--ensure-package-menu-mode)
(forward-line -1)
@@ -3695,15 +3701,15 @@ If optional arg BUTTON is non-nil, describe its
associated package."
(package--prettify-quick-help-key (cons desc 0))))
(defun package-menu-quick-help ()
- "Show short key binding help for `package-menu-mode'.
-The full list of keys can be viewed with \\[describe-mode]."
+ "Show short help for key bindings in `package-menu-mode'.
+You can view the full list of keys with \\[describe-mode]."
(interactive nil package-menu-mode)
(package--ensure-package-menu-mode)
(message (mapconcat #'package--prettify-quick-help-key
package--quick-help-keys "\n")))
(defun package-menu-get-status ()
- "Return status text of package at point in Package Menu."
+ "Return status description of package at point in Package Menu."
(package--ensure-package-menu-mode)
(let* ((id (tabulated-list-get-id))
(entry (and id (assoc id tabulated-list-entries))))
@@ -3732,8 +3738,8 @@ consideration."
(defun package-menu--find-upgrades ()
"In Package Menu, return an alist of packages that can be upgraded.
The alist has the same form as `package-alist', namely a list
-of (PKG . DESCS), but where DESCS is the `package-desc' object
-corresponding to the newer version."
+of elements of the form (PKG . DESCS), but where DESCS is the `package-desc'
+object corresponding to the newer version."
(let (installed available upgrades)
;; Build list of installed/available packages in this buffer.
(dolist (entry tabulated-list-entries)
@@ -3784,10 +3790,10 @@ Implementation of `package-menu-mark-upgrades'."
(defun package-menu-mark-upgrades ()
"Mark all upgradable packages in the Package Menu.
-For each installed package with a newer version available, place
-an (I)nstall flag on the available version and a (D)elete flag on
-the installed version. A subsequent \\[package-menu-execute]
-call will upgrade the package.
+For each installed package for which a newer version is available,
+place an (I)nstall flag on the available version and a (D)elete flag
+on the installed version. A subsequent \\[package-menu-execute] command will
upgrade
+the marked packages.
If there's an async refresh operation in progress, the flags will
be placed as part of `package-menu--post-refresh' instead of
@@ -3906,17 +3912,19 @@ packages list, respectively."
(package--save-selected-packages package-selected-packages)))
(defun package-menu-execute (&optional noquery)
- "Perform marked Package Menu actions.
+ "Perform Package Menu actions on marked packages.
Packages marked for installation are downloaded and installed,
packages marked for deletion are removed, and packages marked for
upgrading are downloaded and upgraded.
If no packages are marked, the action taken depends on the state
-of the package under point. If it's not already installed, this
-command will install the package, and if it's installed, it will
-delete the package.
+of the current package, the one at point. If it's not already
+installed, this command will install the package; if it's installed,
+the command will delete the package.
-Optional argument NOQUERY non-nil means do not ask the user to confirm."
+Optional argument NOQUERY non-nil means do not ask the user to
+confirm the installations/deletions; this is always nil in interactive
+invocations."
(interactive nil package-menu-mode)
(package--ensure-package-menu-mode)
(let (install-list delete-list cmd pkg-desc)
@@ -4167,13 +4175,12 @@ the header line of the first column."
(defun package-menu-filter-by-archive (archive)
"Filter the \"*Packages*\" buffer by ARCHIVE.
Display only packages from package archive ARCHIVE.
+ARCHIVE can be the name of a single archive (a string), or
+a list of archive names. If ARCHIVE is nil or an empty
+string, show all packages.
-When called interactively, prompt for ARCHIVE, which can be a
-comma-separated string. If ARCHIVE is empty, show all packages.
-
-When called from Lisp, ARCHIVE can be a string or a list of
-strings. If ARCHIVE is nil or the empty string, show all
-packages."
+When called interactively, prompt for ARCHIVE. To specify
+several archives, type their names separated by commas."
(interactive (list (completing-read-multiple
"Filter by archive (comma separated): "
(mapcar #'car package-archives)))
@@ -4189,9 +4196,9 @@ packages."
(concat "archive:" (string-join archives ",")))))
(defun package-menu-filter-by-description (description)
- "Filter the \"*Packages*\" buffer by DESCRIPTION regexp.
-Display only packages with a description that matches regexp
-DESCRIPTION.
+ "Filter the \"*Packages*\" buffer by the regexp DESCRIPTION.
+Display only packages whose description matches the regexp
+given as DESCRIPTION.
When called interactively, prompt for DESCRIPTION.
@@ -4208,14 +4215,16 @@ If DESCRIPTION is nil or the empty string, show all
packages."
(defun package-menu-filter-by-keyword (keyword)
"Filter the \"*Packages*\" buffer by KEYWORD.
-Display only packages with specified KEYWORD.
+Display only packages whose keywords match the specified KEYWORD.
+KEYWORD can be a string or a list of strings. If KEYWORD is nil
+or the empty string, show all packages.
-When called interactively, prompt for KEYWORD, which can be a
-comma-separated string. If KEYWORD is empty, show all packages.
+In addition to package keywords, KEYWORD can include the name(s)
+of archive(s) and the package status, such as \"available\"
+or \"built-in\" or \"obsolete\".
-When called from Lisp, KEYWORD can be a string or a list of
-strings. If KEYWORD is nil or the empty string, show all
-packages."
+When called interactively, prompt for KEYWORD. To specify several
+keywords, type them separated by commas."
(interactive (list (completing-read-multiple
"Keywords (comma separated): "
(package-all-keywords)))
@@ -4233,8 +4242,8 @@ packages."
'package-menu-filter #'package-menu-filter-by-keyword "27.1")
(defun package-menu-filter-by-name-or-description (name-or-description)
- "Filter the \"*Packages*\" buffer by NAME-OR-DESCRIPTION regexp.
-Display only packages with a name-or-description that matches regexp
+ "Filter the \"*Packages*\" buffer by the regexp NAME-OR-DESCRIPTION.
+Display only packages whose name or description matches the regexp
NAME-OR-DESCRIPTION.
When called interactively, prompt for NAME-OR-DESCRIPTION.
@@ -4255,8 +4264,8 @@ packages."
(format "name-or-desc:%s" name-or-description))))
(defun package-menu-filter-by-name (name)
- "Filter the \"*Packages*\" buffer by NAME regexp.
-Display only packages with name that matches regexp NAME.
+ "Filter the \"*Packages*\" buffer by the regexp NAME.
+Display only packages whose name matches the regexp NAME.
When called interactively, prompt for NAME.
@@ -4274,13 +4283,11 @@ If NAME is nil or the empty string, show all packages."
(defun package-menu-filter-by-status (status)
"Filter the \"*Packages*\" buffer by STATUS.
Display only packages with specified STATUS.
+STATUS can be a single status, a string, or a list of strings.
+If STATUS is nil or the empty string, show all packages.
-When called interactively, prompt for STATUS, which can be a
-comma-separated string. If STATUS is empty, show all packages.
-
-When called from Lisp, STATUS can be a string or a list of
-strings. If STATUS is nil or the empty string, show all
-packages."
+When called interactively, prompt for STATUS. To specify
+several possible status values, type them seperated by commas."
(interactive (list (completing-read "Filter by status: "
'("avail-obso"
"available"
@@ -4309,12 +4316,12 @@ packages."
(defun package-menu-filter-by-version (version predicate)
"Filter the \"*Packages*\" buffer by VERSION and PREDICATE.
-Display only packages with a matching version.
+Display only packages whose version satisfies the condition
+defined by VERSION and PREDICATE.
-When called interactively, prompt for one of the qualifiers `<',
-`>' or `=', and a package version. Show only packages that has a
-lower (`<'), equal (`=') or higher (`>') version than the
-specified one.
+When called interactively, prompt for one of the comparison operators
+`<', `>' or `=', and for a version. Show only packages whose version
+is lower (`<'), equal (`=') or higher (`>') than the specified VERSION.
When called from Lisp, VERSION should be a version string and
PREDICATE should be the symbol `=', `<' or `>'.
@@ -4352,7 +4359,8 @@ If VERSION is nil or the empty string, show all packages."
(format "versions:%s%s" predicate version)))))
(defun package-menu-filter-marked ()
- "Filter \"*Packages*\" buffer by non-empty upgrade mark.
+ "Filter \"*Packages*\" buffer by non-empty mark.
+Show only the packages that have been marked for installation or deletion.
Unlike other filters, this leaves the marks intact."
(interactive nil package-menu-mode)
(package--ensure-package-menu-mode)
diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el
index 074e789f719..718e51a058c 100644
--- a/lisp/erc/erc-fill.el
+++ b/lisp/erc/erc-fill.el
@@ -125,10 +125,10 @@ configured. Its value should be larger than that of the
variable
:type '(choice (const nil) number))
(defcustom erc-fill-spaced-commands '(PRIVMSG NOTICE)
- "Types of mesages to add space between on graphical displays.
+ "Types of messages to add space between on graphical displays.
Only considered when `erc-fill-line-spacing' is non-nil."
:package-version '(ERC . "5.6") ; FIXME sync on release
- :type '(set integer symbol))
+ :type '(repeat (choice integer symbol)))
(defvar-local erc-fill--function nil
"Internal copy of `erc-fill-function'.
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index a104d7ad542..495e25212ce 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -6157,26 +6157,28 @@ If that function has never been called, the value is
0.")
"Minimum time, in seconds, before sending new lines via IRC.
If the value is a number, `erc-send-current-line' signals an error
if its previous invocation was fewer than this many seconds ago.
-This is useful so that if you accidentally enter large amounts of text
-into the ERC buffer, that text is not sent to the IRC server.
-
-This option only concerns the rapid submission of successive
-lines of prompt input from an \"external\" source, such as GNU
-screen or a desktop-automation script. For example, typing
-
- \\[kmacro-start-macro-or-insert-counter] \
-one \\`RET' two \\`RET' three \\`RET'
- \\[kmacro-end-or-call-macro] in the \"*scratch*\" buffer, \
-followed by a
- \\[kmacro-end-or-call-macro] again in a channel buffer,
-
-will send \"one\" to the server, leave \"two\" at the prompt, and
-insert \"three\" in an \"overflow\" buffer. For suppression
-involving input yanked from the clipboard or the kill ring, see
-`erc-inhibit-multiline-input' and `erc-warn-about-blank-lines'.
-
If the value is nil, `erc-send-current-line' always considers any
-submitted line to be intentional."
+submitted line to be intentional.
+
+This option mainly prevents text accidentally entered into Emacs
+from being sent to the server. Offending sources include
+terminal multiplexers, desktop-automation scripts, and anything
+capable of rapidly submitting successive lines of prompt input.
+For example, entering \"one\\ntwo\\nthree\\n\" will send \"one\"
+to the server, leave \"two\" at the prompt, and insert \"three\"
+into an \"overflow\" buffer. See `erc-inhibit-multiline-input'
+and `erc-warn-about-blank-lines' for suppression involving input
+yanked from the clipboard or the kill ring, which is a related
+but separate concern.
+
+Users of terminal multiplexers, in particular, should look into
+support for \"bracketed pasting\", provided on the Emacs side by
+libraries like `xterm' (and usually enabled by default). When
+everything's working smoothly, Emacs transparently arranges for
+pasted text to appear on the kill ring, regardless of any
+read-only warnings you may encounter. And when point is in the
+prompt area, ERC automatically yanks that text for previewing but
+holds off on submitting it, for obvious reasons."
:group 'erc
:version "26.1"
:type '(choice number (other :tag "disabled" nil)))
diff --git a/lisp/isearch.el b/lisp/isearch.el
index a17b22fd627..daf884d3d53 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -637,9 +637,9 @@ This is like `describe-bindings', but displays only Isearch
keys."
(define-key map "\M-\t" 'isearch-complete)
- ;; Pass frame events transparently so they won't exit the search.
- ;; In particular, if we have more than one display open, then a
- ;; switch-frame might be generated by someone typing at another keyboard.
+ ;; Frame events should exit the search, because such frame events
+ ;; as `switch-frame’ and `delete-frame’ change the current buffer.
+ ;; See Bug#41338 for details.
(define-key map [switch-frame] nil)
(define-key map [delete-frame] nil)
(define-key map [iconify-frame] nil)
diff --git a/lisp/org/org-clock.el b/lisp/org/org-clock.el
index f9daf3f14d8..d7fe14cd5e1 100644
--- a/lisp/org/org-clock.el
+++ b/lisp/org/org-clock.el
@@ -3062,57 +3062,58 @@ PROPERTIES: The list properties specified in the
`:properties' parameter
Otherwise, return nil."
(interactive)
(let ((origin (point))) ;; `save-excursion' may not work when deleting.
- (save-excursion
- (beginning-of-line 1)
- (skip-chars-forward " \t")
- (when (looking-at org-clock-string)
- (let ((re (concat "[ \t]*" org-clock-string
- " *[[<]\\([^]>]+\\)[]>]\\(-+[[<]\\([^]>]+\\)[]>]"
- "\\([ \t]*=>.*\\)?\\)?"))
- ts te h m s neg)
- (cond
- ((not (looking-at re))
- nil)
- ((not (match-end 2))
- (when (and (equal (marker-buffer org-clock-marker) (current-buffer))
- (> org-clock-marker (point))
- (<= org-clock-marker (line-end-position)))
- ;; The clock is running here
- (setq org-clock-start-time
- (org-time-string-to-time (match-string 1)))
- (org-clock-update-mode-line)))
- (t
- ;; Prevent recursive call from `org-timestamp-change'.
- (cl-letf (((symbol-function 'org-clock-update-time-maybe)
#'ignore))
- ;; Update timestamps.
- (save-excursion
- (goto-char (match-beginning 1)) ; opening timestamp
- (save-match-data (org-timestamp-change 0 'day)))
- ;; Refresh match data.
- (looking-at re)
- (save-excursion
- (goto-char (match-beginning 3)) ; closing timestamp
- (save-match-data (org-timestamp-change 0 'day))))
- ;; Refresh match data.
- (looking-at re)
- (and (match-end 4) (delete-region (match-beginning 4) (match-end
4)))
- (end-of-line 1)
- (setq ts (match-string 1)
- te (match-string 3))
- (setq s (- (org-time-string-to-seconds te)
- (org-time-string-to-seconds ts))
- neg (< s 0)
- s (abs s)
- h (floor (/ s 3600))
- s (- s (* 3600 h))
- m (floor (/ s 60))
- s (- s (* 60 s)))
- (insert " => " (format (if neg "-%d:%02d" "%2d:%02d") h m))
- t)))))
- ;; Move back to initial position, but never beyond updated
- ;; clock.
- (unless (< (point) origin)
- (goto-char origin))))
+ (prog1
+ (save-excursion
+ (beginning-of-line 1)
+ (skip-chars-forward " \t")
+ (when (looking-at org-clock-string)
+ (let ((re (concat "[ \t]*" org-clock-string
+ " *[[<]\\([^]>]+\\)[]>]\\(-+[[<]\\([^]>]+\\)[]>]"
+ "\\([ \t]*=>.*\\)?\\)?"))
+ ts te h m s neg)
+ (cond
+ ((not (looking-at re))
+ nil)
+ ((not (match-end 2))
+ (when (and (equal (marker-buffer org-clock-marker)
(current-buffer))
+ (> org-clock-marker (point))
+ (<= org-clock-marker (line-end-position)))
+ ;; The clock is running here
+ (setq org-clock-start-time
+ (org-time-string-to-time (match-string 1)))
+ (org-clock-update-mode-line)))
+ (t
+ ;; Prevent recursive call from `org-timestamp-change'.
+ (cl-letf (((symbol-function 'org-clock-update-time-maybe)
#'ignore))
+ ;; Update timestamps.
+ (save-excursion
+ (goto-char (match-beginning 1)) ; opening timestamp
+ (save-match-data (org-timestamp-change 0 'day)))
+ ;; Refresh match data.
+ (looking-at re)
+ (save-excursion
+ (goto-char (match-beginning 3)) ; closing timestamp
+ (save-match-data (org-timestamp-change 0 'day))))
+ ;; Refresh match data.
+ (looking-at re)
+ (and (match-end 4) (delete-region (match-beginning 4)
(match-end 4)))
+ (end-of-line 1)
+ (setq ts (match-string 1)
+ te (match-string 3))
+ (setq s (- (org-time-string-to-seconds te)
+ (org-time-string-to-seconds ts))
+ neg (< s 0)
+ s (abs s)
+ h (floor (/ s 3600))
+ s (- s (* 3600 h))
+ m (floor (/ s 60))
+ s (- s (* 60 s)))
+ (insert " => " (format (if neg "-%d:%02d" "%2d:%02d") h m))
+ t)))))
+ ;; Move back to initial position, but never beyond updated
+ ;; clock.
+ (unless (< (point) origin)
+ (goto-char origin)))))
(defun org-clock-save ()
"Persist various clock-related data to disk.
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index ef61dc9cbd6..8d93af2c20d 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -5,13 +5,13 @@
(defun org-release ()
"The release version of Org.
Inserted by installing Org mode or when a release is made."
- (let ((org-release "9.6.5"))
+ (let ((org-release "9.6.6"))
org-release))
;;;###autoload
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.6.5-3-g2993f4"))
+ (let ((org-git-version "release_9.6.6"))
org-git-version))
(provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index f4aa28cc486..d3e14fecec3 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -9,7 +9,7 @@
;; URL: https://orgmode.org
;; Package-Requires: ((emacs "26.1"))
-;; Version: 9.6.5
+;; Version: 9.6.6
;; This file is part of GNU Emacs.
;;
diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el
index d58d989f772..db036aab685 100644
--- a/lisp/progmodes/csharp-mode.el
+++ b/lisp/progmodes/csharp-mode.el
@@ -920,7 +920,6 @@ Return nil if there is no name or if NODE is not a defun
node."
"struct_declaration"
"enum_declaration"
"interface_declaration"
- "class_declaration"
"class_declaration")
(treesit-node-text
(treesit-node-child-by-field-name
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index f9b645cc3df..4f57eda3cfc 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -5029,11 +5029,6 @@ the if condition."
(not (python-syntax-comment-or-string-p))
python-skeleton-autoinsert)))
-(defun python--completion-predicate (_ buffer)
- (provided-mode-derived-p
- (buffer-local-value 'major-mode buffer)
- 'python-mode))
-
(defmacro python-skeleton-define (name doc &rest skel)
"Define a `python-mode' skeleton using NAME DOC and SKEL.
The skeleton will be bound to python-skeleton-NAME and will
@@ -5042,7 +5037,7 @@ be added to `python-mode-skeleton-abbrev-table'."
(let* ((name (symbol-name name))
(function-name (intern (concat "python-skeleton-" name))))
`(progn
- (put ',function-name 'completion-predicate
#'python--completion-predicate)
+ (function-put ',function-name 'command-modes '(python-base-mode))
(define-abbrev python-mode-skeleton-abbrev-table
,name "" ',function-name :system t)
(setq python-skeleton-available
@@ -5069,7 +5064,7 @@ The skeleton will be bound to python-skeleton-NAME."
`(< ,(format "%s:" name) \n \n
> _ \n)))
`(progn
- (put ',function-name 'completion-predicate #'ignore)
+ (function-put ',function-name 'completion-predicate #'ignore)
(define-skeleton ,function-name
,(or doc
(format "Auxiliary skeleton for %s statement." name))
@@ -6817,7 +6812,7 @@ implementations: `python-mode' and `python-ts-mode'."
(add-to-list 'interpreter-mode-alist '("python[0-9.]*" . python-ts-mode))))
;;; Completion predicates for M-x
-;; Commands that only make sense when editing Python code
+;; Commands that only make sense when editing Python code.
(dolist (sym '(python-add-import
python-check
python-fill-paragraph
@@ -6851,12 +6846,7 @@ implementations: `python-mode' and `python-ts-mode'."
python-shell-send-defun
python-shell-send-statement
python-sort-imports))
- (put sym 'completion-predicate #'python--completion-predicate))
-
-(defun python-shell--completion-predicate (_ buffer)
- (provided-mode-derived-p
- (buffer-local-value 'major-mode buffer)
- 'python-mode 'inferior-python-mode))
+ (function-put sym 'command-modes '(python-base-mode)))
;; Commands that only make sense in the Python shell or when editing
;; Python code.
@@ -6871,8 +6861,8 @@ implementations: `python-mode' and `python-ts-mode'."
python-shell-font-lock-turn-off
python-shell-font-lock-turn-on
python-shell-package-enable
- python-shell-completion-complete-or-indent ))
- (put sym 'completion-predicate #'python-shell--completion-predicate))
+ python-shell-completion-complete-or-indent))
+ (function-put sym 'command-modes '(python-base-mode inferior-python-mode)))
(provide 'python)
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index ee0ec63b6bc..77d862f1a17 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -16,7 +16,7 @@
;; Reto also said in Apr 2021 that he preferred to keep the XEmacs
;; compatibility code.
-(defconst vhdl-version "3.38.1"
+(defconst vhdl-version "3.38.5"
"VHDL Mode version number.")
(defconst vhdl-time-stamp "2015-03-12"
@@ -229,20 +229,20 @@ Overrides local variable `indent-tabs-mode'."
;; [Error] Assignment error: variable is illegal target of signal
assignment
("ADVance MS" "vacom" "-work \\1" "make" "-f \\1"
nil "valib \\1; vamap \\2 \\1" "./" "work/" "Makefile" "adms"
- ("^\\s-+\\([0-9]+\\):\\s-+" nil 1 nil) ("^Compiling file \\(.+\\)" 1)
+ ("^\\s-+\\([0-9]+\\):\\s-+" nil 1 nil nil) ("^Compiling file \\(.+\\)" 1)
("ENTI/\\1.vif" "ARCH/\\1-\\2.vif" "CONF/\\1.vif"
"PACK/\\1.vif" "BODY/\\1.vif" upcase))
;; Aldec
;; COMP96 ERROR COMP96_0018: "Identifier expected." "test.vhd" 66 3
("Aldec" "vcom" "-work \\1" "make" "-f \\1"
nil "vlib \\1; vmap \\2 \\1" "./" "work/" "Makefile" "aldec"
- ("^.* ERROR [^:]+: \".*\" \"\\([^ \t\n]+\\)\" \\([0-9]+\\) \\([0-9]+\\)"
1 2 3) ("" 0)
+ ("^.* ERROR [^:]+: \".*\" \"\\([^ \t\n]+\\)\" \\([0-9]+\\) \\([0-9]+\\)"
1 2 3 nil) ("" 0)
nil)
;; Cadence Leapfrog: cv -file test.vhd
;; duluth: *E,430 (test.vhd,13): identifier (POSITIV) is not declared
("Cadence Leapfrog" "cv" "-work \\1 -file" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "leapfrog"
- ("^duluth: \\*E,[0-9]+ (\\([^ \t\n]+\\),\\([0-9]+\\)):" 1 2 nil) ("" 0)
+ ("^duluth: \\*E,[0-9]+ (\\([^ \t\n]+\\),\\([0-9]+\\)):" 1 2 nil nil) (""
0)
("\\1/entity" "\\2/\\1" "\\1/configuration"
"\\1/package" "\\1/body" downcase))
;; Cadence Affirma NC vhdl: ncvhdl test.vhd
@@ -250,7 +250,7 @@ Overrides local variable `indent-tabs-mode'."
;; (PLL_400X_TOP) is not declared [10.3].
("Cadence NC" "ncvhdl" "-work \\1" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "ncvhdl"
- ("^ncvhdl_p: \\*E,\\w+ (\\([^ \t\n]+\\),\\([0-9]+\\)|\\([0-9]+\\)):" 1 2
3) ("" 0)
+ ("^ncvhdl_p: \\*E,\\w+ (\\([^ \t\n]+\\),\\([0-9]+\\)|\\([0-9]+\\)):" 1 2
3 nil) ("" 0)
("\\1/entity/pc.db" "\\2/\\1/pc.db" "\\1/configuration/pc.db"
"\\1/package/pc.db" "\\1/body/pc.db" downcase))
;; ghdl vhdl
@@ -258,21 +258,21 @@ Overrides local variable `indent-tabs-mode'."
;; bad_counter.vhdl:13:14: operator "=" is overloaded
("GHDL" "ghdl" "-i --workdir=\\1 --ieee=synopsys -fexplicit " "make" "-f
\\1"
nil "mkdir \\1" "./" "work/" "Makefile" "ghdl"
- ("^ghdl_p: \\*E,\\w+ (\\([^ \t\n]+\\),\\([0-9]+\\)|\\([0-9]+\\)):" 1 2 3)
("" 0)
+ ("^ghdl_p: \\*E,\\w+ (\\([^ \t\n]+\\),\\([0-9]+\\)|\\([0-9]+\\)):" 1 2 3
nil) ("" 0)
("\\1/entity" "\\2/\\1" "\\1/configuration"
"\\1/package" "\\1/body" downcase))
;; IBM Compiler
;; 00 COACHDL* | [CCHDL-1]: File: adder.vhd, line.column: 120.6
("IBM Compiler" "g2tvc" "-src" "precomp" "\\1"
nil "mkdir \\1" "./" "work/" "Makefile" "ibm"
- ("^[0-9]+ COACHDL.*: File: \\([^ \t\n]+\\), *line.column:
\\([0-9]+\\).\\([0-9]+\\)" 1 2 3) (" " 0)
+ ("^[0-9]+ COACHDL.*: File: \\([^ \t\n]+\\), *line.column:
\\([0-9]+\\).\\([0-9]+\\)" 1 2 3 nil) (" " 0)
nil)
;; Ikos Voyager: analyze test.vhd
;; analyze test.vhd
;; E L4/C5: this library unit is inaccessible
("Ikos" "analyze" "-l \\1" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "ikos"
- ("^E L\\([0-9]+\\)/C\\([0-9]+\\):" nil 1 2)
+ ("^E L\\([0-9]+\\)/C\\([0-9]+\\):" nil 1 2 nil)
("^analyze +\\(.+ +\\)*\\(.+\\)$" 2)
nil)
;; ModelSim, Model Technology: vcom test.vhd
@@ -294,7 +294,7 @@ Overrides local variable `indent-tabs-mode'."
;; test.vhd:34: error message
("LEDA ProVHDL" "provhdl" "-w \\1 -f" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "provhdl"
- ("^\\([^ \t\n:]+\\):\\([0-9]+\\): " 1 2 nil) ("" 0)
+ ("^\\([^ \t\n:]+\\):\\([0-9]+\\): " 1 2 nil nil) ("" 0)
("ENTI/\\1.vif" "ARCH/\\1-\\2.vif" "CONF/\\1.vif"
"PACK/\\1.vif" "BODY/BODY-\\1.vif" upcase))
;; Quartus compiler
@@ -305,21 +305,21 @@ Overrides local variable `indent-tabs-mode'."
;; Warning: VHDL Process Statement warning at dvi2sdi_tst.vhd(172): ...
("Quartus" "make" "-work \\1" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "quartus"
- ("^\\(Error\\|Warning\\): .* \\([^ \t\n]+\\)(\\([0-9]+\\))" 2 3 nil) (""
0)
+ ("^\\(Error\\|Warning\\): .* \\([^ \t\n]+\\)(\\([0-9]+\\))" 2 3 nil nil)
("" 0)
nil)
;; QuickHDL, Mentor Graphics: qvhcom test.vhd
;; ERROR: test.vhd(24): near "dnd": expecting: END
;; WARNING[4]: test.vhd(30): A space is required between ...
("QuickHDL" "qvhcom" "-work \\1" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "quickhdl"
- ("^\\(ERROR\\|WARNING\\)[^:]*: \\([^ \t\n]+\\)(\\([0-9]+\\)):" 2 3 nil)
("" 0)
+ ("^\\(ERROR\\|WARNING\\)[^:]*: \\([^ \t\n]+\\)(\\([0-9]+\\)):" 2 3 nil
nil) ("" 0)
("\\1/_primary.dat" "\\2/\\1.dat" "\\1/_primary.dat"
"\\1/_primary.dat" "\\1/body.dat" downcase))
;; Savant: scram -publish-cc test.vhd
;; test.vhd:87: _set_passed_through_out_port(IIR_Boolean) not defined for
("Savant" "scram" "-publish-cc -design-library-name \\1" "make" "-f \\1"
nil "mkdir \\1" "./" "work._savant_lib/" "Makefile" "savant"
- ("^\\([^ \t\n:]+\\):\\([0-9]+\\): " 1 2 nil) ("" 0)
+ ("^\\([^ \t\n:]+\\):\\([0-9]+\\): " 1 2 nil nil) ("" 0)
("\\1_entity.vhdl" "\\2_secondary_units._savant_lib/\\2_\\1.vhdl"
"\\1_config.vhdl" "\\1_package.vhdl"
"\\1_secondary_units._savant_lib/\\1_package_body.vhdl" downcase))
@@ -327,39 +327,39 @@ Overrides local variable `indent-tabs-mode'."
;; Error: CSVHDL0002: test.vhd: (line 97): Invalid prefix
("Simili" "vhdlp" "-work \\1" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "simili"
- ("^\\(Error\\|Warning\\): \\w+: \\([^ \t\n]+\\): (line \\([0-9]+\\)): " 2
3 nil) ("" 0)
+ ("^\\(Error\\|Warning\\): \\w+: \\([^ \t\n]+\\): (line \\([0-9]+\\)): " 2
3 nil nil) ("" 0)
("\\1/prim.var" "\\2/_\\1.var" "\\1/prim.var"
"\\1/prim.var" "\\1/_body.var" downcase))
;; Speedwave (Innoveda): analyze -libfile vsslib.ini -src test.vhd
;; ERROR[11]::File test.vhd Line 100: Use of undeclared identifier
("Speedwave" "analyze" "-libfile vsslib.ini -src" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "speedwave"
- ("^ *ERROR\\[[0-9]+]::File \\([^ \t\n]+\\) Line \\([0-9]+\\):" 1 2 nil)
("" 0)
+ ("^ *ERROR\\[[0-9]+]::File \\([^ \t\n]+\\) Line \\([0-9]+\\):" 1 2 nil
nil) ("" 0)
nil)
;; Synopsys, VHDL Analyzer (sim): vhdlan -nc test.vhd
;; **Error: vhdlan,703 test.vhd(22): OTHERS is not legal in this context.
("Synopsys" "vhdlan" "-nc -work \\1" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "synopsys"
- ("^\\*\\*Error: vhdlan,[0-9]+ \\([^ \t\n]+\\)(\\([0-9]+\\)):" 1 2 nil)
("" 0)
+ ("^\\*\\*Error: vhdlan,[0-9]+ \\([^ \t\n]+\\)(\\([0-9]+\\)):" 1 2 nil
nil) ("" 0)
("\\1.sim" "\\2__\\1.sim" "\\1.sim" "\\1.sim" "\\1__.sim" upcase))
;; Synopsys, VHDL Analyzer (syn): vhdlan -nc -spc test.vhd
;; **Error: vhdlan,703 test.vhd(22): OTHERS is not legal in this context.
("Synopsys Design Compiler" "vhdlan" "-nc -spc -work \\1" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "synopsys_dc"
- ("^\\*\\*Error: vhdlan,[0-9]+ \\([^ \t\n]+\\)(\\([0-9]+\\)):" 1 2 nil)
("" 0)
+ ("^\\*\\*Error: vhdlan,[0-9]+ \\([^ \t\n]+\\)(\\([0-9]+\\)):" 1 2 nil
nil) ("" 0)
("\\1.syn" "\\2__\\1.syn" "\\1.syn" "\\1.syn" "\\1__.syn" upcase))
;; Synplify:
;; @W:"test.vhd":57:8:57:9|Optimizing register bit count_x(5) to a
constant 0
("Synplify" "n/a" "n/a" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "synplify"
- ("^@[EWN]:\"\\([^ \t\n]+\\)\":\\([0-9]+\\):\\([0-9]+\\):" 1 2 3) ("" 0)
+ ("^@[EWN]:\"\\([^ \t\n]+\\)\":\\([0-9]+\\):\\([0-9]+\\):" 1 2 3 nil) (""
0)
nil)
;; Vantage: analyze -libfile vsslib.ini -src test.vhd
;; Compiling "test.vhd" line 1...
;; **Error: LINE 49 *** No aggregate value is valid in this context.
("Vantage" "analyze" "-libfile vsslib.ini -src" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "vantage"
- ("^\\*\\*Error: LINE \\([0-9]+\\) \\*\\*\\*" nil 1 nil)
+ ("^\\*\\*Error: LINE \\([0-9]+\\) \\*\\*\\*" nil 1 nil nil)
("^ *Compiling \"\\(.+\\)\" " 1)
nil)
;; VeriBest: vc vhdl test.vhd
@@ -369,26 +369,26 @@ Overrides local variable `indent-tabs-mode'."
;; [Error] Name BITA is unknown
("VeriBest" "vc" "vhdl" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "veribest"
- ("^ +\\([0-9]+\\): +[^ ]" nil 1 nil) ("" 0)
+ ("^ +\\([0-9]+\\): +[^ ]" nil 1 nil nil) ("" 0)
nil)
;; Viewlogic: analyze -libfile vsslib.ini -src test.vhd
;; Compiling "test.vhd" line 1...
;; **Error: LINE 49 *** No aggregate value is valid in this context.
("Viewlogic" "analyze" "-libfile vsslib.ini -src" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "viewlogic"
- ("^\\*\\*Error: LINE \\([0-9]+\\) \\*\\*\\*" nil 1 nil)
+ ("^\\*\\*Error: LINE \\([0-9]+\\) \\*\\*\\*" nil 1 nil nil)
("^ *Compiling \"\\(.+\\)\" " 1)
nil)
;; Xilinx XST:
;; ERROR:HDLParsers:164 - "test.vhd" Line 3. parse error
("Xilinx XST" "xflow" "" "make" "-f \\1"
nil "mkdir \\1" "./" "work/" "Makefile" "xilinx"
- ("^ERROR:HDLParsers:[0-9]+ - \"\\([^ \t\n]+\\)\" Line \\([0-9]+\\)\\." 1
2 nil) ("" 0)
+ ("^ERROR:HDLParsers:[0-9]+ - \"\\([^ \t\n]+\\)\" Line \\([0-9]+\\)\\." 1
2 nil nil) ("" 0)
nil)
;; Xilinx Vivado:
;; ERROR: [VRFC 10-1412] syntax error near o_idle [test.vhd:23]
("Xilinx Vivado" "xvhdl" "" "make" "-f \\1"
- nil "mkdir \\1" "./" "work" "Makefile" "vivado"
+ nil "mkdir \\1" "./" "work/" "Makefile" "vivado"
("^\\(?:\\(?1:ERROR\\)\\|\\(?2:WARNING\\)\\|\\(?3:INFO\\)\\): \\(.+\\)
\\[\\(?4:[^ \t\n]+\\):\\(?5:[0-9]+\\)\\]" 4 5 nil (2 . 3)) ("" 0)
("\\1/entity" "\\2/\\1" "\\1/configuration"
"\\1/package" "\\1/body" downcase))
@@ -414,6 +414,13 @@ Error message:
File subexp index: index of subexpression that matches the file name
Line subexp index: index of subexpression that matches the line number
Column subexp idx: index of subexpression that matches the column number
+ Type subexp : message type, can be nil for a real error, 1 for warning
+ or 0 for info. Type can also be detected using the form
+ (WARNING . INFO). In that case this will be equivalent to
+ 1 if the WARNING’th subexpression matched or else
+ equivalent to 0 if the INFO’th subexpression matched, or
+ else equivalent to nil if neither of them matched. See
+ also `compilation-error-regexp-alist'.
File message:
Regexp : regular expression to match a file name message
File subexp index: index of subexpression that matches the file name
@@ -483,7 +490,14 @@ NOTE: Activate new error and file message regexps and
reflect the new setting
(integer :tag "Line subexp index")
(choice :tag "Column subexp "
(integer :tag "Index")
- (const :tag "No column number" nil)))
+ (const :tag "No column number" nil))
+ (choice :tag "Type "
+ (const :tag "Info" 0)
+ (const :tag "Warning" 1)
+ (const :tag "Error" nil)
+ (cons :tag "Type detection"
+ (natnum :tag "Warning subexp index")
+ (natnum :tag "Info subexp index "))))
(list :tag "File message" :indent 4
(regexp :tag "Regexp ")
(integer :tag "File subexp index"))
diff --git a/lisp/simple.el b/lisp/simple.el
index e79fa3f84e5..698458c4bc7 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -4463,17 +4463,23 @@ whose `car' is BUFFER."
'(nil (inhibit-switch-frame . t)))))
(set-window-point win pos)))))))))
+;; Implementation note: the next function intentionally tries to use
+;; the same signature as 'shell-command', although the 3rd arg is
+;; currently ignored, to allow us to implement support for specifying
+;; ERROR-BUFFER in the future.
(defun async-shell-command (command &optional output-buffer error-buffer)
"Execute string COMMAND asynchronously in background.
Like `shell-command', but adds `&' at the end of COMMAND
to execute it asynchronously.
-The output appears in the buffer whose name is stored in the
-variable `shell-command-buffer-name-async'. That buffer is in
-shell mode.
+The output appears in OUTPUT-BUFFER, which could be a buffer or
+the name of a buffer, and defaults to `shell-command-buffer-name-async'
+if nil or omitted. That buffer is in shell mode. Note that, unlike
+with `shell-command', OUTPUT-BUFFER can only be a buffer, a buffer's
+name (a string), or nil.
-You can configure `async-shell-command-buffer' to specify what to do
+You can customize `async-shell-command-buffer' to specify what to do
when the buffer specified by `shell-command-buffer-name-async' is
already taken by another running shell command.
@@ -4482,6 +4488,10 @@ configure `display-buffer-alist' to use the action
`display-buffer-no-window' for the buffer given by
`shell-command-buffer-name-async'.
+Optional argument ERROR-BUFFER is for backward compatibility; it
+is ignored, and error output of the async command is always
+mingled with its regular output.
+
In Elisp, you will often be better served by calling `start-process'
directly, since it offers more control and does not impose the use of
a shell (with its need to quote arguments)."
@@ -4499,7 +4509,10 @@ a shell (with its need to quote arguments)."
((eq major-mode 'dired-mode)
(dired-get-filename nil t)))))
(and filename (file-relative-name filename))))
- current-prefix-arg
+ nil
+ ;; FIXME: the following argument is always ignored by 'shell-commnd',
+ ;; when the command is invoked asynchronously, except, perhaps, when
+ ;; 'default-directory' is remote.
shell-command-default-error-buffer))
(unless (string-match "&[ \t]*\\'" command)
(setq command (concat command " &")))
diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el
index 1a33eda0866..2471a90c8ad 100644
--- a/lisp/tab-bar.el
+++ b/lisp/tab-bar.el
@@ -1657,7 +1657,9 @@ After the tab is created, the hooks in
(delete-other-windows)
(if (eq tab-bar-new-tab-choice 'window)
;; Create new unique window from remaining window
- (window-state-put (window-state-get))
+ (progn
+ (set-window-parameter nil 'window-side nil)
+ (window-state-put (window-state-get)))
;; Create a new window to get rid of old window parameters
;; (e.g. prev/next buffers) of old window.
(split-window) (delete-window))))
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 2e6c77f64d5..49eeba64a14 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -2424,7 +2424,10 @@ instead of emitting a warning."
;; Check for each condition and set MSG.
(catch 'term
(when (not (treesit-available-p))
- (setq msg "tree-sitter library is not compiled with Emacs")
+ (setq msg (if (fboundp 'treesit-node-p)
+ ;; Windows loads tree-sitter dynakically.
+ "tree-sitter library is not available or failed to load"
+ "Emacs is not compiled with tree-sitter library"))
(throw 'term nil))
(when (> (position-bytes (max (point-min) (1- (point-max))))
treesit-max-buffer-size)
diff --git a/src/nsterm.m b/src/nsterm.m
index b9e3cbf81a1..3e089cc1ff1 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -2704,11 +2704,12 @@ ns_scroll_run (struct window *w, struct run *run)
{
NSRect srcRect = NSMakeRect (x, from_y, width, height);
NSPoint dest = NSMakePoint (x, to_y);
+ NSRect destRect = NSMakeRect (x, from_y, width, height);
EmacsView *view = FRAME_NS_VIEW (f);
[view copyRect:srcRect to:dest];
#ifdef NS_IMPL_COCOA
- [view setNeedsDisplayInRect:srcRect];
+ [view setNeedsDisplayInRect:destRect];
#endif
}