Merge from origin/emacs-29

79a886ba36 (package-upgrade): Don't remove the package from 'package...
c0ab4e9ca9 Eglot: re-rename eglot-upgrade to eglot-upgrade-eglot
b4e90070f9 Fix arguments of xml.c functions as displayed in Help buf...
b1bda8228e More fixes for NetBSD/vax
a2d4cd06f4 Improve VHDL mode highlighting
2f3a514b6d Clarify documentation wrt floating point division by zero...
94e984e670 Make loaddefs-generate slightly more tolerant
aba41d2c4b ; Minor doc cleanups in go-ts-mode.el
b42ccb2e5c ; Minor grammar fix in treesit manual.
ab44c8a6f9 Fix order of rcirc-connect arguments
8eb6e33691 Fix rcirc messages printing in the wrong place
2901a3443c Prevent unnecessary modifications of 'package-vc-selected...
eaad302bd6 Rename eglot-update to eglot-upgrade
eaf25b9c6a go-ts-mode: Use iota query only if supported (Bug#63086)
cc090294d7 (rng-complete-tag): Add the (ignored) argument to the :co...
21ec6c1d5c Update to Transient v0.3.7-219-g3ded15b
8d5aa8df4a Fix inserting selection data into Mozilla programs
57562c3fd0 Recognize defstruct slot names in various eieio functions
b93eb68cc3 Use 'calendar-buffer' instead of fixed string

# Conflicts:
#	etc/EGLOT-NEWS
This commit is contained in:
Dmitry Gutov 2023-05-06 03:41:54 +03:00
commit 0c6311386a
19 changed files with 125 additions and 63 deletions

View file

@ -4155,7 +4155,7 @@ Other keywords are optional:
@end multitable
Lisp programs mark patterns in @var{query} with capture names (names
that starts with @code{@@}), and tree-sitter will return matched nodes
that start with @code{@@}), and tree-sitter will return matched nodes
tagged with those same capture names. For the purpose of
fontification, capture names in @var{query} should be face names like
@code{font-lock-keyword-face}. The captured node will be fontified

View file

@ -219,17 +219,25 @@ creates huge integers.
@cindex @acronym{IEEE} floating point
Floating-point numbers are useful for representing numbers that are
not integral. The range of floating-point numbers is
the same as the range of the C data type @code{double} on the machine
you are using. On all computers supported by Emacs, this is
@acronym{IEEE} binary64 floating point format, which is standardized by
@url{https://standards.ieee.org/standard/754-2019.html,,IEEE Std 754-2019}
and is discussed further in David Goldberg's paper
not integral. The range of floating-point numbers is the same as the
range of the C data type @code{double} on the machine you are using.
On almost all computers supported by Emacs, this is @acronym{IEEE}
binary64 floating point format, which is standardized by
@url{https://standards.ieee.org/standard/754-2019.html,,IEEE Std
754-2019} and is discussed further in David Goldberg's paper
``@url{https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html,
What Every Computer Scientist Should Know About Floating-Point Arithmetic}''.
On modern platforms, floating-point operations follow the IEEE-754
standard closely; however, results are not always rounded correctly on
some obsolescent platforms, notably 32-bit x86.
What Every Computer Scientist Should Know About Floating-Point
Arithmetic}''. On modern platforms, floating-point operations follow
the IEEE-754 standard closely; however, results are not always rounded
correctly on some systems, notably 32-bit x86.
On some old computer systems, Emacs may not use IEEE floating-point.
We know of one such system on which Emacs runs correctly, but does not
follow IEEE-754: the VAX running NetBSD using GCC 10.4.0, where the
VAX @samp{D_Floating} format is used instead. IBM System/370-derived
mainframes and their XL/C compiler are also capable of utilizing a
hexadecimal floating point format, but Emacs has not yet been built in
such a configuration.
The read syntax for floating-point numbers requires either a decimal
point, an exponent, or both. Optional signs (@samp{+} or @samp{-})
@ -262,6 +270,10 @@ two NaNs as equal when their
signs and significands agree. Significands of NaNs are
machine-dependent, as are the digits in their string representation.
NaNs are not available on systems which do not use IEEE
floating-point arithmetic; if the read syntax for a NaN is used on a
VAX, for example, the reader signals an error.
When NaNs and signed zeros are involved, non-numeric functions like
@code{eql}, @code{equal}, @code{sxhash-eql}, @code{sxhash-equal} and
@code{gethash} determine whether values are indistinguishable, not
@ -742,9 +754,10 @@ by rounding the quotient towards zero after each division.
@cindex @code{arith-error} in division
If you divide an integer by the integer 0, Emacs signals an
@code{arith-error} error (@pxref{Errors}). Floating-point division of
a nonzero number by zero yields either positive or negative infinity
(@pxref{Float Basics}).
@code{arith-error} error (@pxref{Errors}). On systems using IEEE-754
floating-point, floating-point division of a nonzero number by zero
yields either positive or negative infinity (@pxref{Float Basics});
otherwise, an @code{arith-error} is signaled as usual.
@end defun
@defun % dividend divisor

View file

@ -1307,8 +1307,8 @@ Eglot, use @kbd{M-x package-install}.
Often, a newer Eglot version exists that has fixed a longstanding bug,
has more LSP features, or just better supports a particular language
server. Recent Eglot versions can self-update via the command
@kbd{M-x eglot-update}. This will replace any currently installed
version with the newest one available from the ELPA archives
@kbd{M-x eglot-upgrade-eglot}. This will replace any currently
installed version with the newest one available from the ELPA archives
configured in @code{package-archives}.
You can also update Eglot through other methods, such as

View file

@ -96,6 +96,16 @@ been added to 'eglot-stay-out-of'.
** ELPA installations on Emacs 26.3 are supported again.
* Changes in Eglot 1.12.29 (Eglot bundled with Emacs 29.1)
** Eglot can upgrade itself to the latest version.
The new command 'eglot-upgrade-eglot' works around behaviour in the
existing 'package-install' command and the new 'package-upgrade'
command which would prevent the user from easily grabbing the latest
version as usual.
* Changes in Eglot 1.12 (13/03/2023)

View file

@ -147,7 +147,7 @@ letters, digits, plus or minus signs or colons."
;;;###autoload(put 'parse-time-rules 'risky-local-variable t)
;;;###autoload
(defun parse-time-string (string)
(defun parse-time-string (string &optional form)
"Parse the time in STRING into (SEC MIN HOUR DAY MON YEAR DOW DST TZ).
STRING should be an ISO 8601 time string, e.g., \"2020-01-15T16:12:21-08:00\",
or something resembling an RFC 822 (or later) date-time, e.g.,
@ -156,9 +156,11 @@ somewhat liberal in what format it accepts, and will attempt to
return a \"likely\" value even for somewhat malformed strings.
The values returned are identical to those of `decode-time', but
any unknown values other than DST are returned as nil, and an
unknown DST value is returned as -1."
unknown DST value is returned as -1.
See `decode-time' for the meaning of FORM."
(condition-case ()
(iso8601-parse string)
(iso8601-parse string form)
(wrong-type-argument
(let ((time (list nil nil nil nil nil nil nil -1 nil))
(temp (parse-time-tokenize (downcase string))))
@ -199,12 +201,14 @@ unknown DST value is returned as -1."
(setf (nth (pop slots) time) new-val))))))))
time))))
(defun parse-iso8601-time-string (date-string)
(defun parse-iso8601-time-string (date-string &optional form)
"Parse an ISO 8601 time string, such as \"2020-01-15T16:12:21-08:00\".
Fall back on parsing something resembling an RFC 822 (or later) date-time.
This function is like `parse-time-string' except that it returns
a Lisp timestamp when successful."
(when-let ((time (parse-time-string date-string)))
a Lisp timestamp when successful.
See `decode-time' for the meaning of FORM."
(when-let ((time (parse-time-string date-string form)))
(encode-time time)))
(provide 'parse-time)

View file

@ -176,6 +176,7 @@ supertypes from the most specific to least specific.")
(i 0)
(offset (if type 0 1)))
(dolist (slot slots)
(put (car slot) 'slot-name t)
(let* ((props (cl--plist-to-alist (cddr slot)))
(typep (assq :type props))
(type (if (null typep) t

View file

@ -635,9 +635,12 @@ instead of just updating them with the new/changed autoloads."
(progn
(goto-char (point-max))
(search-backward "\f\n" nil t))
;; Delete the old version of the section.
;; Delete the old version of the section. Strictly
;; speaking this should search for "\n\f\n;;;", but
;; there are loaddefs files in the wild that only
;; have two ';;'. (Bug#63236)
(delete-region (match-beginning 0)
(and (search-forward "\n\f\n;;;")
(and (search-forward "\n\f\n;;")
(match-beginning 0)))
(forward-line -2)))
(insert head)

View file

@ -167,7 +167,7 @@ archive."
(:vc-backend symbol)))))
:version "29.1")
(defvar package-vc--archive-spec-alist nil
(defvar package-vc--archive-spec-alists nil
"List of package specifications for each archive.
The list maps each package name, as a string, to a plist as
specified in `package-vc-selected-packages'.")
@ -199,15 +199,15 @@ name for PKG-DESC."
(not (alist-get name package-vc-selected-packages
nil nil #'string=)))
(alist-get (intern (package-desc-archive pkg-desc))
package-vc--archive-spec-alist)
package-vc--archive-spec-alists)
;; Consult both our local list of package specifications, as well
;; as the lists provided by the archives.
(apply #'append (cons package-vc-selected-packages
(mapcar #'cdr package-vc--archive-spec-alist))))
(mapcar #'cdr package-vc--archive-spec-alists))))
'() nil #'string=))
(defun package-vc--read-archive-data (archive)
"Update `package-vc--archive-spec-alist' for ARCHIVE.
"Update `package-vc--archive-spec-alists' for ARCHIVE.
This function is meant to be used as a hook for `package-read-archive-hook'."
(let ((contents-file (expand-file-name
(format "archives/%s/elpa-packages.eld" archive)
@ -224,7 +224,7 @@ This function is meant to be used as a hook for `package-read-archive-hook'."
(let ((spec (read (current-buffer))))
(when (eq package-vc--elpa-packages-version
(plist-get (cdr spec) :version))
(setf (alist-get (intern archive) package-vc--archive-spec-alist)
(setf (alist-get (intern archive) package-vc--archive-spec-alists)
(car spec)))
(setf (alist-get (intern archive) package-vc--archive-data-alist)
(cdr spec))
@ -235,7 +235,7 @@ This function is meant to be used as a hook for `package-read-archive-hook'."
(defun package-vc--download-and-read-archives (&optional async)
"Download specifications of all `package-archives' and read them.
Populate `package-vc--archive-spec-alist' with the result.
Populate `package-vc--archive-spec-alists' with the result.
If optional argument ASYNC is non-nil, perform the downloads
asynchronously."
@ -583,7 +583,7 @@ Emacs Lisp files.")
(defun package-vc--unpack (pkg-desc pkg-spec &optional rev)
"Install the package described by PKG-DESC.
PKG-SPEC is a package specification, a property list describing
how to fetch and build the package. See `package-vc--archive-spec-alist'
how to fetch and build the package. See `package-vc--archive-spec-alists'
for details. The optional argument REV specifies a specific revision to
checkout. This overrides the `:branch' attribute in PKG-SPEC."
(unless (eq (package-desc-kind pkg-desc) 'vc)
@ -632,7 +632,8 @@ abort installation?" name))
(throw 'done (setq lisp-dir name)))))
;; Ensure we have a copy of the package specification
(unless (equal (alist-get name (mapcar #'cdr package-vc--archive-spec-alist)) pkg-spec)
(unless (seq-some (lambda (alist) (equal (alist-get name (cdr alist)) pkg-spec))
package-vc--archive-spec-alists)
(customize-save-variable
'package-vc-selected-packages
(cons (cons name pkg-spec)

View file

@ -2278,7 +2278,7 @@ newer version from ELPA by using `\\<package-menu-mode-map>\\[package-menu-mark-
(pkg-desc (cadr (assq package package-alist))))
(if (package-vc-p pkg-desc)
(package-vc-upgrade pkg-desc)
(package-delete pkg-desc 'force)
(package-delete pkg-desc 'force 'dont-unselect)
(package-install package 'dont-select))))
(defun package--upgradeable-packages ()

View file

@ -584,7 +584,7 @@ If ARG is non-nil, instead prompt for connection parameters."
(condition-case nil
(let ((process (rcirc-connect server port nick user-name
full-name channels password encryption
client-cert server-alias)))
server-alias client-cert)))
(when rcirc-display-server-buffer
(pop-to-buffer-same-window (process-buffer process))))
(quit (message "Quit connecting to %s"
@ -680,7 +680,7 @@ See `rcirc-connect' for more details on these variables.")
;;;###autoload
(defun rcirc-connect (server &optional port nick user-name
full-name startup-channels password encryption
certfp server-alias)
server-alias certfp)
"Connect to SERVER.
The arguments PORT, NICK, USER-NAME, FULL-NAME, PASSWORD,
ENCRYPTION, CERTFP, SERVER-ALIAS are interpreted as in
@ -1233,9 +1233,9 @@ If SILENT is non-nil, do not print the message in any irc buffer."
(let ((response (if noticep "NOTICE" "PRIVMSG")))
(rcirc-get-buffer-create process target)
(dolist (msg (rcirc-split-message message))
(rcirc-send-string process response target : msg)
(unless silent
(rcirc-print process (rcirc-nick process) response target msg)))))
(rcirc-print process (rcirc-nick process) response target msg))
(rcirc-send-string process response target : msg))))
(defvar-local rcirc-input-ring nil
"Ring object for input.")
@ -2034,7 +2034,7 @@ connection."
(not (string= sender (rcirc-nick process))))
(let* ((buffer (rcirc-target-buffer process sender response target text))
(time (if-let ((time (rcirc-get-tag "time")))
(parse-iso8601-time-string time)
(parse-iso8601-time-string time t)
(current-time)))
(inhibit-read-only t))
(with-current-buffer buffer
@ -2204,7 +2204,7 @@ The message is logged in `rcirc-log', and is later written to
disk. PROCESS is the process object for the current connection."
(let ((filename (funcall rcirc-log-filename-function process target))
(time (and-let* ((time (rcirc-get-tag "time")))
(parse-iso8601-time-string time))))
(parse-iso8601-time-string time t))))
(unless (null filename)
(let ((cell (assoc-string filename rcirc-log-alist))
(line (concat (format-time-string rcirc-time-format time)
@ -2998,7 +2998,7 @@ If ARG is given, opens the URL in a new browser window."
"Insert a timestamp."
(goto-char (point-min))
(let ((time (and-let* ((time (rcirc-get-tag "time")))
(parse-iso8601-time-string time))))
(parse-iso8601-time-string time t))))
(insert (rcirc-facify (format-time-string rcirc-time-format time)
'rcirc-timestamp))))

View file

@ -180,7 +180,7 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil."
(insert " "))))
((member completion extra-strings)
(insert ">"))))
:company-kind ,(lambda () 'property))))))
:company-kind ,(lambda (_) 'property))))))
(defconst rng-in-end-tag-name-regex
(replace-regexp-in-string

View file

@ -2003,7 +2003,7 @@ If it is activated, also signal textDocument/didOpen."
(interactive) (info "(eglot)"))
;;;###autoload
(defun eglot-update (&rest _) "Update Eglot."
(defun eglot-upgrade-eglot (&rest _) "Update Eglot to latest version."
(interactive)
(with-no-warnings
(require 'package)
@ -2012,6 +2012,9 @@ If it is activated, also signal textDocument/didOpen."
(package-delete existing t))
(package-install (cadr (assoc 'eglot package-archive-contents)))))
;;;###autoload
(define-obsolete-function-alias 'eglot-update 'eglot-upgrade-eglot "29.1")
(easy-menu-define eglot-menu nil "Eglot"
`("Eglot"
;; Commands for getting information and customization.

View file

@ -106,6 +106,11 @@
">>" "%=" ">>=" "--" "!" "..." "&^" "&^=" "~")
"Go operators for tree-sitter font-locking.")
(defun go-ts-mode--iota-query-supported-p ()
"Return t if the iota query is supported by the tree-sitter-go grammar."
(ignore-errors
(or (treesit-query-string "" '((iota) @font-lock-constant-face) 'go) t)))
(defvar go-ts-mode--font-lock-settings
(treesit-font-lock-rules
:language 'go
@ -118,7 +123,9 @@
:language 'go
:feature 'constant
'([(false) (iota) (nil) (true)] @font-lock-constant-face
`([(false) (nil) (true)] @font-lock-constant-face
,@(when (go-ts-mode--iota-query-supported-p)
'((iota) @font-lock-constant-face))
(const_declaration
(const_spec name: (identifier) @font-lock-constant-face)))
@ -296,7 +303,7 @@ Methods are prefixed with the receiver name, unless SKIP-PREFIX is t."
(treesit-search-subtree node "type_alias" nil nil 1)))
(defun go-ts-mode--other-type-node-p (node)
"Return t if NODE is a type, other than interface, struct or alias."
"Return t if NODE is a type other than interface, struct, or alias."
(and
(string-equal "type_declaration" (treesit-node-type node))
(not (go-ts-mode--interface-node-p node))
@ -351,7 +358,7 @@ comment already exists, jump to it."
"Tree-sitter indent rules for `go-mod-ts-mode'.")
(defun go-mod-ts-mode--in-directive-p ()
"Return non-nil if inside a directive.
"Return non-nil if point is inside a directive.
When entering an empty directive or adding a new entry to one, no node
will be present meaning none of the indentation rules will match,
because there is no parent to match against. This function determines

View file

@ -286,7 +286,7 @@ Overrides local variable `indent-tabs-mode'."
;; counter_rtl.vhd(29):Conditional signal assignment line__29
("ModelSim" "vcom" "-93 -work \\1" "make" "-f \\1"
nil "vlib \\1; vmap \\2 \\1" "./" "work/" "Makefile" "modelsim"
("^\\(ERROR\\|WARNING\\|\\*\\* Error\\|\\*\\* Warning\\)[^:]*:\\( *\\[[0-9]+]\\| ([^)]+)\\)? \\([^ \t\n]+\\)(\\([0-9]+\\)):" 3 4 nil)
("^\\(?:\\(?1:ERROR\\|\\*\\* Error\\)\\|\\(?2:WARNING\\|\\*\\* Warning\\)\\|\\(?3:NOTE\\|\\*\\* Note\\)\\)[^:]*:\\( *\\[[0-9]+]\\| ([^)]+)\\)? \\(?4:[^ \t\n]+\\)(\\(?5:[0-9]+\\)):" 4 5 nil (2 . 3))
("" 0)
("\\1/_primary.dat" "\\2/\\1.dat" "\\1/_primary.dat"
"\\1/_primary.dat" "\\1/body.dat" downcase))
@ -385,6 +385,13 @@ Overrides local variable `indent-tabs-mode'."
nil "mkdir \\1" "./" "work/" "Makefile" "xilinx"
("^ERROR:HDLParsers:[0-9]+ - \"\\([^ \t\n]+\\)\" Line \\([0-9]+\\)\\." 1 2 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"
("^\\(?:\\(?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))
)
"List of available VHDL compilers and their properties.
Each list entry specifies the following items for a compiler:

View file

@ -807,19 +807,24 @@ This function returns the string \"emacs\"."
(defun xselect-convert-to-username (_selection _type _value)
(user-real-login-name))
(defun xselect-convert-to-text-uri-list (_selection _type value)
(let ((string
(if (stringp value)
(xselect--encode-string 'TEXT
(concat (url-encode-url value) "\n"))
(when (vectorp value)
(with-temp-buffer
(cl-loop for tem across value
do (progn
(insert (url-encode-url tem))
(insert "\n")))
(xselect--encode-string 'TEXT (buffer-string)))))))
(cons 'text/uri-list (cdr string))))
(defun xselect-convert-to-text-uri-list (selection _type value)
;; While `xselect-uri-list-available-p' ensures that this target
;; will not be reported in the TARGETS of non-drag-and-drop
;; selections, Firefox stupidly converts to it anyway. Check that
;; the conversion request is being made for the correct selection.
(and (eq selection 'XdndSelection)
(let ((string
(if (stringp value)
(xselect--encode-string 'TEXT
(concat (url-encode-url value) "\n"))
(when (vectorp value)
(with-temp-buffer
(cl-loop for tem across value
do (progn
(insert (url-encode-url tem))
(insert "\n")))
(xselect--encode-string 'TEXT (buffer-string)))))))
(cons 'text/uri-list (cdr string)))))
(defun xselect-convert-to-xm-file (selection _type value)
(when (and (stringp value)

View file

@ -1885,8 +1885,8 @@ be a list of the form returned by `event-start' and `event-end'."
(set-advertised-calling-convention 'unintern '(name obarray) "23.3")
(set-advertised-calling-convention 'indirect-function '(object) "25.1")
(set-advertised-calling-convention 'redirect-frame-focus '(frame focus-frame) "24.3")
(set-advertised-calling-convention 'libxml-parse-xml-region '(start end &optional base-url) "27.1")
(set-advertised-calling-convention 'libxml-parse-html-region '(start end &optional base-url) "27.1")
(set-advertised-calling-convention 'libxml-parse-xml-region '(&optional start end base-url) "27.1")
(set-advertised-calling-convention 'libxml-parse-html-region '(&optional start end base-url) "27.1")
(set-advertised-calling-convention 'time-convert '(time form) "29.1")
;;;; Obsolescence declarations for variables, and aliases.

View file

@ -1071,7 +1071,8 @@ example, sets a variable, use `transient-define-infix' instead.
(if (and desc (or (stringp desc) (symbolp desc)))
desc
(plist-get args :key)))))))
(setq args (plist-put args :command `(defalias ',sym ,cmd)))))
(setq args (plist-put args :command
`(defalias ',sym ,(macroexp-quote cmd))))))
((or (stringp car)
(and car (listp car)))
(let ((arg pop))

View file

@ -2005,7 +2005,9 @@ init_signals (void)
signal (SIGPIPE, SIG_IGN);
sigaction (SIGQUIT, &process_fatal_action, 0);
#ifndef __vax__
sigaction (SIGILL, &thread_fatal_action, 0);
#endif /* __vax__ */
sigaction (SIGTRAP, &thread_fatal_action, 0);
/* Typically SIGFPE is thread-specific and is fatal, like SIGILL.
@ -2018,6 +2020,11 @@ init_signals (void)
{
emacs_sigaction_init (&action, deliver_arith_signal);
sigaction (SIGFPE, &action, 0);
#ifdef __vax__
/* NetBSD/vax generates SIGILL upon some floating point errors,
such as taking the log of 0.0. */
sigaction (SIGILL, &action, 0);
#endif /* __vax__ */
}
#ifdef SIGUSR1

View file

@ -47,7 +47,7 @@
(progn
(calendar)
,@body)
(kill-buffer "*Calendar*"))))
(kill-buffer calendar-buffer))))
(ert-deftest cal-julian-test-goto-date ()
(with-cal-julian-test