Merge from origin/emacs-31

2c2f1c00ac ; * lisp/vc/vc-dir.el (vc-dir-update): Add an assertion.
51f823a3af ; * etc/NEWS: Fix annotation.
271cc5c76c More tests for fill-paragraph-handle-comment.erts
cc9f35c54b ; * etc/PROBLEMS: Minor fixes of last change.
2727a6f4e8 ; Document problems caused by validation of *.eln files o...
f1dd84bec9 ; * lisp/play/doctor.el (doctor-death): Fix Samaritans UR...
0bfbe06090 Update to Org 9.8.5
aac5e0457a Eglot: replace eglot-prefer-plaintext with eglot-document...
ec3d662de0 Make HTML button elements tab-stoppable in eww (bug#81107)

# Conflicts:
#	etc/NEWS
This commit is contained in:
Sean Whitton 2026-06-01 11:52:53 +01:00
commit b64d163979
20 changed files with 145 additions and 40 deletions

View file

@ -996,6 +996,18 @@ same language server. That file is still outside your project
will consider it to be part of the workspace. The default is will consider it to be part of the workspace. The default is
@code{nil}. @code{nil}.
@cindex markdown renderer
@item eglot-documentation-renderer
This variable controls how Eglot renders at-point documentation
imported from the server (@pxref{Eglot Features}). By default, the
variable's value is set during startup to a markdown renderer if
available, either @code{markdown-ts-view-mode} or
@code{gfm-view-mode}. These utilities visually enhance the
documentation content through fontification and other formatting. If
you set it to @code{t}, plain text will be requested from the server
and no rendering is attempted. If the variable's value is @code{nil},
Eglot will attempt to find a suitable renderer every time.
@item eglot-mode-map @item eglot-mode-map
This variable is the keymap for binding Eglot-related command. It is in This variable is the keymap for binding Eglot-related command. It is in
effect only as long as the buffer is managed by Eglot. By default, it effect only as long as the buffer is managed by Eglot. By default, it

View file

@ -32,11 +32,15 @@ New key bindings: 'k' shuts down, 'r' reconnects, 'e' visits the events
buffer, 'w' shows workspace configuration, and 'RET' invokes buffer, 'w' shows workspace configuration, and 'RET' invokes
'eglot-describe-connection'. 'eglot-describe-connection'.
** Eglot uses new built-in 'markdown-ts-mode' of Emacs 31 (bug#80127) ** New LSP documentation rendering backends (bug#80127)
This means that on newer versions of Emacs the external Eglot uses new built-in 'markdown-ts-mode' of Emacs 31, which means that
'markdown-mode.el' package does not need to be installed to render on newer versions of Emacs the external 'markdown-mode.el' package does
Markdown content. not need to be installed to render Markdown content.
The variable 'eglot-documentation-renderer' replaces the now-obsolete
'eglot-prefer-plaintext'. By default, the variable selects a markdown
renderer to use throughout the session.
* Changes in Eglot 1.23 (2/4/2026) * Changes in Eglot 1.23 (2/4/2026)

View file

@ -3005,7 +3005,7 @@ In addition, the Git backend has been fixed to display missing files as
There is still some further work to do to rationalize VC's handling of There is still some further work to do to rationalize VC's handling of
file removal. file removal.
--- +++
*** New user option 'vc-dir-auto-hide-up-to-date'. *** New user option 'vc-dir-auto-hide-up-to-date'.
If you customize this option to 'revert', the 'g' command to refresh If you customize this option to 'revert', the 'g' command to refresh
the VC Directory buffer also has the effect of the 'x' command. the VC Directory buffer also has the effect of the 'x' command.

View file

@ -3646,6 +3646,41 @@ file; for example:
"/usr/local/opt/libgccjit/lib/gcc/11" "/usr/local/opt/libgccjit/lib/gcc/11"
"/usr/local/opt/gcc/lib/gcc/11/gcc/x86_64-apple-darwin20/11.2.0") ":")) "/usr/local/opt/gcc/lib/gcc/11/gcc/x86_64-apple-darwin20/11.2.0") ":"))
** Stuttering and missed keypresses during Native Compilation on macOS
Natively compiled modules are validated by macOS the first time that
they are loaded. On some machines, this can cause Emacs to be
temporarily less responsive while a large number of '*.eln' files are
being compiled and loaded.
One can force the first load of the module to happen in the async
compilation worker by adding this to their early-init.el:
(setq native-comp-async-env-modifier-form
'(progn
(defun c/native-comp--preload-eln-after-compile
(compile function-or-file &optional with-late-load output)
"Preload async native-comp output in the compiler child."
(prog1 (funcall compile function-or-file with-late-load output)
(when (and (stringp function-or-file) with-late-load)
(with-demoted-errors "Async native .eln preload: %S"
(let ((eln-file (comp-el-to-eln-filename function-or-file)))
(when (file-exists-p eln-file)
(native-elisp-load eln-file t)))))))
(advice-add 'comp--native-compile
:around #'c/native-comp--preload-eln-after-compile)))
Alternatively, if one is willing to accept the associated security
risks, one could disable library validation on their Emacs binary:
codesign --force --sign - \
--entitlements macos-disable-library-validation.entitlements \
src/emacs
Disabling validation might expose you to security risks, so please
consider that before using this recipe.
** Text dictation doesn't work on macOS ** Text dictation doesn't work on macOS
The indication is that the macOS keyboard shortcut for dictation is ignored. The indication is that the macOS keyboard shortcut for dictation is ignored.

View file

@ -1,5 +1,5 @@
% Reference Card for Org Mode % Reference Card for Org Mode
\def\orgversionnumber{9.8.3} \def\orgversionnumber{9.8.5}
\def\versionyear{2026} % latest update \def\versionyear{2026} % latest update
\input emacsver.tex \input emacsver.tex

View file

@ -1771,7 +1771,10 @@ just re-display the HTML already fetched."
(put-text-property start (point) 'keymap eww-submit-map) (put-text-property start (point) 'keymap eww-submit-map)
;; Pretend to touch-screen.el that this is a button. ;; Pretend to touch-screen.el that this is a button.
(put-text-property start (point) 'button t) (put-text-property start (point) 'button t)
(insert " "))) (insert " ")
(put-text-property start (1+ start) 'help-echo "Button")
;; Mark this as an element we can TAB to.
(put-text-property start (1+ start) 'shr-tab-stop t)))
(defun eww-form-checkbox (dom) (defun eww-form-checkbox (dom)
(let ((start (point))) (let ((start (point)))
@ -1991,7 +1994,8 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
:value (or (dom-attr dom 'value) ""))))))) :value (or (dom-attr dom 'value) "")))))))
(t (t
(eww-form-text dom))) (eww-form-text dom)))
(unless (= start (point)) (unless (or (= start (point))
(equal type "submit"))
(put-text-property start (1+ start) 'help-echo "Input field") (put-text-property start (1+ start) 'help-echo "Input field")
;; Mark this as an element we can TAB to. ;; Mark this as an element we can TAB to.
(put-text-property start (1+ start) 'shr-tab-stop t)))) (put-text-property start (1+ start) 'shr-tab-stop t))))

View file

@ -7875,7 +7875,7 @@ in the agenda."
"Rebuild possibly ALL agenda view(s) in the current buffer." "Rebuild possibly ALL agenda view(s) in the current buffer."
(interactive "P") (interactive "P")
(defvar org-agenda-tag-filter-while-redo) ;FIXME: Where is this var used? (defvar org-agenda-tag-filter-while-redo) ;FIXME: Where is this var used?
(let* ((p (or (and (looking-at "\\'") (1- (point))) (point))) (let* ((p (or (and (/= 1 (point)) (looking-at "\\'") (1- (point))) (point)))
(cpa (unless (eq all t) current-prefix-arg)) (cpa (unless (eq all t) current-prefix-arg))
(org-agenda-doing-sticky-redo org-agenda-sticky) (org-agenda-doing-sticky-redo org-agenda-sticky)
(org-agenda-sticky nil) (org-agenda-sticky nil)

View file

@ -1991,13 +1991,15 @@ Optional argument N tells to change by that many units."
(user-error "No active clock")) (user-error "No active clock"))
(save-excursion ; Do not replace this with `with-current-buffer'. (save-excursion ; Do not replace this with `with-current-buffer'.
(with-no-warnings (set-buffer (org-clocking-buffer))) (with-no-warnings (set-buffer (org-clocking-buffer)))
(goto-char org-clock-marker) (save-restriction
(if (looking-back (concat "^[ \t]*" org-clock-string ".*") (widen)
(line-beginning-position)) (goto-char org-clock-marker)
(progn (delete-region (1- (line-beginning-position)) (line-end-position)) (if (looking-back (concat "^[ \t]*" org-clock-string ".*")
(org-remove-empty-drawer-at (point))) (line-beginning-position))
(message "Clock gone, cancel the timer anyway") (progn (delete-region (1- (line-beginning-position)) (line-end-position))
(sit-for 2))) (org-remove-empty-drawer-at (point)))
(message "Clock gone, cancel the timer anyway")
(sit-for 2))))
(move-marker org-clock-marker nil) (move-marker org-clock-marker nil)
(move-marker org-clock-hd-marker nil) (move-marker org-clock-hd-marker nil)
(setq org-clock-current-task nil) (setq org-clock-current-task nil)

View file

@ -3,6 +3,7 @@
;; Copyright (C) 2004-2026 Free Software Foundation, Inc. ;; Copyright (C) 2004-2026 Free Software Foundation, Inc.
;; Author: Carsten Dominik <carsten.dominik@gmail.com> ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
;; Maintainer: Slawomir Grochowski <slawomir.grochowski@gmail.com>
;; Keywords: outlines, hypermedia, calendar, text ;; Keywords: outlines, hypermedia, calendar, text
;; URL: https://orgmode.org ;; URL: https://orgmode.org
;; ;;

View file

@ -2953,6 +2953,8 @@ known that the table will be realigned a little later anyway."
(log-first-time (current-time)) (log-first-time (current-time))
(log-last-time log-first-time) (log-last-time log-first-time)
(cnt 0) (cnt 0)
(table-beg org-table-current-begin-pos)
(table-end (org-table-end))
beg end eqlcol eqlfield) beg end eqlcol eqlfield)
;; Insert constants in all formulas. ;; Insert constants in all formulas.
(when eqlist (when eqlist
@ -2989,8 +2991,8 @@ existing formula for column %s"
;; Get the correct line range to process. ;; Get the correct line range to process.
(if all (if all
(progn (progn
(setq end (copy-marker (org-table-end))) (setq end (copy-marker table-end))
(goto-char (setq beg org-table-current-begin-pos)) (goto-char (setq beg table-beg))
(cond (cond
((re-search-forward org-table-calculate-mark-regexp end t) ((re-search-forward org-table-calculate-mark-regexp end t)
;; This is a table with marked lines, compute selected ;; This is a table with marked lines, compute selected
@ -3005,7 +3007,7 @@ existing formula for column %s"
(t nil))) (t nil)))
(setq beg (line-beginning-position) (setq beg (line-beginning-position)
end (copy-marker (line-beginning-position 2)))) end (copy-marker (line-beginning-position 2))))
(org-combine-change-calls beg end (org-combine-change-calls table-beg table-end
(goto-char beg) (goto-char beg)
;; Mark named fields untouchable. Also check if several ;; Mark named fields untouchable. Also check if several
;; field/range formulas try to set the same field. ;; field/range formulas try to set the same field.

View file

@ -436,7 +436,7 @@ using three \\[universal-argument] prefix arguments."
(and (not (equal opt '(64))) (and (not (equal opt '(64)))
effort-minutes effort-minutes
(number-to-string effort-minutes)) (number-to-string effort-minutes))
(and (consp opt) default-timer) (and (consp opt) (not (equal opt '(64))) default-timer)
(and (stringp opt) opt) (and (stringp opt) opt)
(read-from-minibuffer (read-from-minibuffer
"How much time left? (minutes or h:mm:ss) " "How much time left? (minutes or h:mm:ss) "

View file

@ -5,13 +5,13 @@
(defun org-release () (defun org-release ()
"The release version of Org. "The release version of Org.
Inserted by installing Org mode or when a release is made." Inserted by installing Org mode or when a release is made."
(let ((org-release "9.8.3")) (let ((org-release "9.8.5"))
org-release)) org-release))
;;;###autoload ;;;###autoload
(defun org-git-version () (defun org-git-version ()
"The Git version of Org mode. "The Git version of Org mode.
Inserted by installing Org or when a release is made." Inserted by installing Org or when a release is made."
(let ((org-git-version "release_9.8.3")) (let ((org-git-version "release_9.8.5"))
org-git-version)) org-git-version))
(provide 'org-version) (provide 'org-version)

View file

@ -9,7 +9,7 @@
;; URL: https://orgmode.org ;; URL: https://orgmode.org
;; Package-Requires: ((emacs "28.2")) ;; Package-Requires: ((emacs "28.2"))
;; Version: 9.8.3 ;; Version: 9.8.5
;; This file is part of GNU Emacs. ;; This file is part of GNU Emacs.
;; ;;

View file

@ -6,7 +6,6 @@
;; Alan Schmitt <alan.schmitt AT polytechnique DOT org> ;; Alan Schmitt <alan.schmitt AT polytechnique DOT org>
;; Viktor Rosenfeld <listuser36 AT gmail DOT com> ;; Viktor Rosenfeld <listuser36 AT gmail DOT com>
;; Rasmus Pank Roulund <emacs AT pank DOT eu> ;; Rasmus Pank Roulund <emacs AT pank DOT eu>
;; Maintainer: Marco Wahl <marcowahlsoft@gmail.com>
;; Keywords: org, text, tex ;; Keywords: org, text, tex
;; This file is part of GNU Emacs. ;; This file is part of GNU Emacs.

View file

@ -3,7 +3,7 @@
;; Copyright (C) 2011-2026 Free Software Foundation, Inc. ;; Copyright (C) 2011-2026 Free Software Foundation, Inc.
;; Author: Nicolas Goaziou <n.goaziou at gmail dot com> ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
;; Maintainer: Daniel Fleischer <danflscr@gmail.com> ;; Maintainer: Pedro A. Aranda<paaguti aT gmail DoT com>
;; Keywords: outlines, hypermedia, calendar, text ;; Keywords: outlines, hypermedia, calendar, text
;; This file is part of GNU Emacs. ;; This file is part of GNU Emacs.

View file

@ -2869,7 +2869,7 @@ Style is a symbol among `quoted', `centered' and nil."
(org-element-lineage (org-element-lineage
paragraph paragraph
'(center-block quote-block section))) '(center-block quote-block section)))
(center-block 'center) (center-block 'centered)
(quote-block 'quoted))) (quote-block 'quoted)))
(defun org-odt--format-paragraph (paragraph contents info default center quote) (defun org-odt--format-paragraph (paragraph contents info default center quote)

View file

@ -1606,7 +1606,7 @@ Hack on previous word, setting global variable DOCTOR-OWNER to correct result."
(setq doctor--suicide-flag t) (setq doctor--suicide-flag t)
(doctor-type '( If you are really suicidal\, you might (doctor-type '( If you are really suicidal\, you might
want to contact the Samaritans via want to contact the Samaritans via
e-mail: jo@samaritans.org \. https://www.samaritans.org/how-we-can-help/contact-samaritan/ \.
or find a Befrienders crisis center at or find a Befrienders crisis center at
https://www.befrienders.org/\ \. https://www.befrienders.org/\ \.
you can also find other suicide crisis lines at you can also find other suicide crisis lines at

View file

@ -149,6 +149,8 @@
'eglot-managed-mode-hook "1.6") 'eglot-managed-mode-hook "1.6")
(define-obsolete-variable-alias 'eglot-confirm-server-initiated-edits (define-obsolete-variable-alias 'eglot-confirm-server-initiated-edits
'eglot-confirm-server-edits "1.16") 'eglot-confirm-server-edits "1.16")
(define-obsolete-variable-alias 'eglot-prefer-plaintext
'eglot-documentation-renderer "1.24")
(make-obsolete-variable 'eglot-events-buffer-size (make-obsolete-variable 'eglot-events-buffer-size
'eglot-events-buffer-config "1.16") 'eglot-events-buffer-config "1.16")
(define-obsolete-function-alias 'eglot--uri-to-path #'eglot-uri-to-path "1.16") (define-obsolete-function-alias 'eglot--uri-to-path #'eglot-uri-to-path "1.16")
@ -535,10 +537,21 @@ or file operation kinds not in the alist."
"If non-nil, activate Eglot in cross-referenced non-project files." "If non-nil, activate Eglot in cross-referenced non-project files."
:type 'boolean) :type 'boolean)
(defcustom eglot-prefer-plaintext nil (defcustom eglot-documentation-renderer (cond ((eglot--builtin-mdown-p)
"If non-nil, always request plaintext responses to hover requests." 'markdown-ts-view-mode)
:type 'boolean ((fboundp 'gfm-view-mode)
:package-version '(Eglot . "1.17.30")) 'gfm-view-mode)
(t
nil))
"Control rendering of LSP documentation fragments.
If set to a major mode symbol `gfm-view-mode' or `markdown-ts-view-mode'
request markdown-snippets and use the corresponding Markdown renderer.
If t, always request and render plain text snippets. If set to nil,
decide dynamically."
:type '(choice (const :tag "Plain text" t)
(const :tag "Auto-detect" nil)
(function :tag "Renderer"))
:package-version '(Eglot . "1.24"))
(defcustom eglot-report-progress t (defcustom eglot-report-progress t
"If non-nil, show progress of long running LSP server work. "If non-nil, show progress of long running LSP server work.
@ -733,7 +746,7 @@ This can be useful when using docker to run a language server.")
(treesit-grammar-location 'markdown))) (treesit-grammar-location 'markdown)))
(defun eglot--accepted-formats () (defun eglot--accepted-formats ()
(if (and (not eglot-prefer-plaintext) (if (and (not (eq t eglot-documentation-renderer))
(or (fboundp 'gfm-view-mode) (eglot--builtin-mdown-p))) (or (fboundp 'gfm-view-mode) (eglot--builtin-mdown-p)))
["markdown" "plaintext"] ["markdown" "plaintext"]
["plaintext"])) ["plaintext"]))
@ -2263,12 +2276,14 @@ If MODE, force MODE to be used for fontifying MARKUP."
finally return (buffer-string))) finally return (buffer-string)))
(calc2 (forced-mode) (calc2 (forced-mode)
(cond (cond
(forced-mode `(,forced-mode)) (forced-mode forced-mode)
((eglot--builtin-mdown-p) `(,#'markdown-ts-view-mode)) ((fboundp eglot-documentation-renderer) eglot-documentation-renderer)
((fboundp 'gfm-view-mode) `(,#'gfm-view-mode ,#'gfm-extract)) ((eglot--builtin-mdown-p) #'markdown-ts-view-mode)
(t `(#'text-mode)))) ((fboundp 'gfm-view-mode) #'gfm-view-mode)
(t #'text-mode)))
(calc (s &optional (forced-mode mode) &aux (x (calc2 forced-mode))) (calc (s &optional (forced-mode mode) &aux (x (calc2 forced-mode)))
(setq string s render (car x) extract (or (cadr x) #'buffer-string)))) (setq string s render x
extract (if (eq x 'gfm-view-mode) #'gfm-extract #'buffer-string))))
(cond ((stringp markup) (calc markup)) ; plain string (cond ((stringp markup) (calc markup)) ; plain string
((setq lang (plist-get markup :language)) ; deprecated MarkedString ((setq lang (plist-get markup :language)) ; deprecated MarkedString
(calc (format "```%s\n%s\n```" lang (plist-get markup :value)))) (calc (format "```%s\n%s\n```" lang (plist-get markup :value))))

View file

@ -646,7 +646,8 @@ Also update some VC file properties from ENTRIES."
(or (null next) (or (null next)
(vc-dir-fileinfo->directory (ewoc-data next))))) (vc-dir-fileinfo->directory (ewoc-data next)))))
(ewoc-delete vc-ewoc crt))) (ewoc-delete vc-ewoc crt)))
(setq crt prev)))))) (setq crt prev))))
(cl-assert (null to-remove))))
;; Update VC file properties. ;; Update VC file properties.
(pcase-dolist (`(,file ,state ,_extra) entries) (pcase-dolist (`(,file ,state ,_extra) entries)
(vc-file-setprop file 'vc-backend (vc-file-setprop file 'vc-backend

View file

@ -1,6 +1,6 @@
Point-Char: | Point-Char: |
Name: fill-paragraph-handle-comment - non-comment line before comment line Name: fill-paragraph-handle-comment - current non-comment line before comment line
Code: Code:
(lambda () (lambda ()
(setq-local comment-start "# ") (setq-local comment-start "# ")
@ -21,7 +21,22 @@ not part of the comment
=-=-= =-=-=
Name: fill-paragraph-handle-comment - non-comment line after comment line Name: fill-paragraph-handle-comment - non-comment line before current comment line
=-=
this is not part of the comment this is not part of the comment
# this is a comment this is a comment this is a comment|
=-=
this is not part of the comment this is not part of the comment
# this is a comment this is a comment this
# is a comment
=-=-=
Name: fill-paragraph-handle-comment - comment line before current non-comment line
=-= =-=
@ -35,3 +50,18 @@ this is not part of the comment this is
not part of the comment not part of the comment
=-=-= =-=-=
Name: fill-paragraph-handle-comment - current comment line before non-comment line
=-=
# this is a comment this is a comment this is a comment|
this is not part of the comment this is not part of the comment
=-=
# this is a comment this is a comment this
# is a comment
this is not part of the comment this is not part of the comment
=-=-=