summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2026-06-01 11:52:53 +0100
committerSean Whitton <spwhitton@spwhitton.name>2026-06-01 11:52:53 +0100
commitb64d1639799fb0f3ec812325eea6384b3231c5e9 (patch)
treea8cdd4722053f9dd21f01d489d2ed4cbbb1a1eee
parent75d8e5773dede1d6c429bd08a4b8d5a0d87fe87b (diff)
parent2c2f1c00accb7672bea7fa98d5314bfb11edfd7f (diff)
Merge from origin/emacs-31
2c2f1c00acc ; * lisp/vc/vc-dir.el (vc-dir-update): Add an assertion. 51f823a3afa ; * etc/NEWS: Fix annotation. 271cc5c76c0 More tests for fill-paragraph-handle-comment.erts cc9f35c54ba ; * etc/PROBLEMS: Minor fixes of last change. 2727a6f4e8d ; Document problems caused by validation of *.eln files o... f1dd84bec99 ; * lisp/play/doctor.el (doctor-death): Fix Samaritans UR... 0bfbe06090c Update to Org 9.8.5 aac5e0457ae Eglot: replace eglot-prefer-plaintext with eglot-document... ec3d662de0b Make HTML button elements tab-stoppable in eww (bug#81107) # Conflicts: # etc/NEWS
-rw-r--r--doc/misc/eglot.texi12
-rw-r--r--etc/EGLOT-NEWS12
-rw-r--r--etc/NEWS.312
-rw-r--r--etc/PROBLEMS35
-rw-r--r--etc/refcards/orgcard.tex2
-rw-r--r--lisp/net/eww.el8
-rw-r--r--lisp/org/org-agenda.el2
-rw-r--r--lisp/org/org-clock.el16
-rw-r--r--lisp/org/org-colview.el1
-rw-r--r--lisp/org/org-table.el8
-rw-r--r--lisp/org/org-timer.el2
-rw-r--r--lisp/org/org-version.el4
-rw-r--r--lisp/org/org.el2
-rw-r--r--lisp/org/ox-koma-letter.el1
-rw-r--r--lisp/org/ox-latex.el2
-rw-r--r--lisp/org/ox-odt.el2
-rw-r--r--lisp/play/doctor.el2
-rw-r--r--lisp/progmodes/eglot.el35
-rw-r--r--lisp/vc/vc-dir.el3
-rw-r--r--test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts34
20 files changed, 145 insertions, 40 deletions
diff --git a/doc/misc/eglot.texi b/doc/misc/eglot.texi
index d501fe32d5d..c7c296c24ff 100644
--- a/doc/misc/eglot.texi
+++ b/doc/misc/eglot.texi
@@ -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
@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
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
diff --git a/etc/EGLOT-NEWS b/etc/EGLOT-NEWS
index eb4040d107e..f0f595fa500 100644
--- a/etc/EGLOT-NEWS
+++ b/etc/EGLOT-NEWS
@@ -32,11 +32,15 @@ New key bindings: 'k' shuts down, 'r' reconnects, 'e' visits the events
buffer, 'w' shows workspace configuration, and 'RET' invokes
'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
-'markdown-mode.el' package does not need to be installed to render
-Markdown content.
+Eglot uses new built-in 'markdown-ts-mode' of Emacs 31, which means that
+on newer versions of Emacs the external 'markdown-mode.el' package does
+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)
diff --git a/etc/NEWS.31 b/etc/NEWS.31
index 95bc966d47d..dc45122a6db 100644
--- a/etc/NEWS.31
+++ b/etc/NEWS.31
@@ -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
file removal.
----
++++
*** New user option 'vc-dir-auto-hide-up-to-date'.
If you customize this option to 'revert', the 'g' command to refresh
the VC Directory buffer also has the effect of the 'x' command.
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index 655bfd6c173..54302968e6d 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -3646,6 +3646,41 @@ file; for example:
"/usr/local/opt/libgccjit/lib/gcc/11"
"/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
The indication is that the macOS keyboard shortcut for dictation is ignored.
diff --git a/etc/refcards/orgcard.tex b/etc/refcards/orgcard.tex
index dcd3208d132..8b38b98897e 100644
--- a/etc/refcards/orgcard.tex
+++ b/etc/refcards/orgcard.tex
@@ -1,5 +1,5 @@
% Reference Card for Org Mode
-\def\orgversionnumber{9.8.3}
+\def\orgversionnumber{9.8.5}
\def\versionyear{2026} % latest update
\input emacsver.tex
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 9acbaa52fa9..542afa41180 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -1771,7 +1771,10 @@ just re-display the HTML already fetched."
(put-text-property start (point) 'keymap eww-submit-map)
;; Pretend to touch-screen.el that this is a button.
(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)
(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) "")))))))
(t
(eww-form-text dom)))
- (unless (= start (point))
+ (unless (or (= start (point))
+ (equal type "submit"))
(put-text-property start (1+ start) 'help-echo "Input field")
;; Mark this as an element we can TAB to.
(put-text-property start (1+ start) 'shr-tab-stop t))))
diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el
index dd86a716ac7..481eba50313 100644
--- a/lisp/org/org-agenda.el
+++ b/lisp/org/org-agenda.el
@@ -7875,7 +7875,7 @@ in the agenda."
"Rebuild possibly ALL agenda view(s) in the current buffer."
(interactive "P")
(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))
(org-agenda-doing-sticky-redo org-agenda-sticky)
(org-agenda-sticky nil)
diff --git a/lisp/org/org-clock.el b/lisp/org/org-clock.el
index ce2d23a9b97..b803d0fe874 100644
--- a/lisp/org/org-clock.el
+++ b/lisp/org/org-clock.el
@@ -1991,13 +1991,15 @@ Optional argument N tells to change by that many units."
(user-error "No active clock"))
(save-excursion ; Do not replace this with `with-current-buffer'.
(with-no-warnings (set-buffer (org-clocking-buffer)))
- (goto-char org-clock-marker)
- (if (looking-back (concat "^[ \t]*" org-clock-string ".*")
- (line-beginning-position))
- (progn (delete-region (1- (line-beginning-position)) (line-end-position))
- (org-remove-empty-drawer-at (point)))
- (message "Clock gone, cancel the timer anyway")
- (sit-for 2)))
+ (save-restriction
+ (widen)
+ (goto-char org-clock-marker)
+ (if (looking-back (concat "^[ \t]*" org-clock-string ".*")
+ (line-beginning-position))
+ (progn (delete-region (1- (line-beginning-position)) (line-end-position))
+ (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-hd-marker nil)
(setq org-clock-current-task nil)
diff --git a/lisp/org/org-colview.el b/lisp/org/org-colview.el
index 8b97aa2ad01..6eed2351ceb 100644
--- a/lisp/org/org-colview.el
+++ b/lisp/org/org-colview.el
@@ -3,6 +3,7 @@
;; Copyright (C) 2004-2026 Free Software Foundation, Inc.
;; Author: Carsten Dominik <carsten.dominik@gmail.com>
+;; Maintainer: Slawomir Grochowski <slawomir.grochowski@gmail.com>
;; Keywords: outlines, hypermedia, calendar, text
;; URL: https://orgmode.org
;;
diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el
index ba33f6724a0..32cea3e4b0b 100644
--- a/lisp/org/org-table.el
+++ b/lisp/org/org-table.el
@@ -2953,6 +2953,8 @@ known that the table will be realigned a little later anyway."
(log-first-time (current-time))
(log-last-time log-first-time)
(cnt 0)
+ (table-beg org-table-current-begin-pos)
+ (table-end (org-table-end))
beg end eqlcol eqlfield)
;; Insert constants in all formulas.
(when eqlist
@@ -2989,8 +2991,8 @@ existing formula for column %s"
;; Get the correct line range to process.
(if all
(progn
- (setq end (copy-marker (org-table-end)))
- (goto-char (setq beg org-table-current-begin-pos))
+ (setq end (copy-marker table-end))
+ (goto-char (setq beg table-beg))
(cond
((re-search-forward org-table-calculate-mark-regexp end t)
;; This is a table with marked lines, compute selected
@@ -3005,7 +3007,7 @@ existing formula for column %s"
(t nil)))
(setq beg (line-beginning-position)
end (copy-marker (line-beginning-position 2))))
- (org-combine-change-calls beg end
+ (org-combine-change-calls table-beg table-end
(goto-char beg)
;; Mark named fields untouchable. Also check if several
;; field/range formulas try to set the same field.
diff --git a/lisp/org/org-timer.el b/lisp/org/org-timer.el
index 8c9df9d379f..d6d7cfaa43b 100644
--- a/lisp/org/org-timer.el
+++ b/lisp/org/org-timer.el
@@ -436,7 +436,7 @@ using three \\[universal-argument] prefix arguments."
(and (not (equal opt '(64)))
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)
(read-from-minibuffer
"How much time left? (minutes or h:mm:ss) "
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index b6a6d1d4eec..f0a212f2ef0 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.8.3"))
+ (let ((org-release "9.8.5"))
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.8.3"))
+ (let ((org-git-version "release_9.8.5"))
org-git-version))
(provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index 84b4f245f8e..ba31ad67bd1 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -9,7 +9,7 @@
;; URL: https://orgmode.org
;; Package-Requires: ((emacs "28.2"))
-;; Version: 9.8.3
+;; Version: 9.8.5
;; This file is part of GNU Emacs.
;;
diff --git a/lisp/org/ox-koma-letter.el b/lisp/org/ox-koma-letter.el
index 61b624e870d..3a17dceb2fb 100644
--- a/lisp/org/ox-koma-letter.el
+++ b/lisp/org/ox-koma-letter.el
@@ -6,7 +6,6 @@
;; Alan Schmitt <alan.schmitt AT polytechnique DOT org>
;; Viktor Rosenfeld <listuser36 AT gmail DOT com>
;; Rasmus Pank Roulund <emacs AT pank DOT eu>
-;; Maintainer: Marco Wahl <marcowahlsoft@gmail.com>
;; Keywords: org, text, tex
;; This file is part of GNU Emacs.
diff --git a/lisp/org/ox-latex.el b/lisp/org/ox-latex.el
index b4d1ada8d5e..1feddac37cd 100644
--- a/lisp/org/ox-latex.el
+++ b/lisp/org/ox-latex.el
@@ -3,7 +3,7 @@
;; Copyright (C) 2011-2026 Free Software Foundation, Inc.
;; 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
;; This file is part of GNU Emacs.
diff --git a/lisp/org/ox-odt.el b/lisp/org/ox-odt.el
index 232a643738f..03a47c86995 100644
--- a/lisp/org/ox-odt.el
+++ b/lisp/org/ox-odt.el
@@ -2869,7 +2869,7 @@ Style is a symbol among `quoted', `centered' and nil."
(org-element-lineage
paragraph
'(center-block quote-block section)))
- (center-block 'center)
+ (center-block 'centered)
(quote-block 'quoted)))
(defun org-odt--format-paragraph (paragraph contents info default center quote)
diff --git a/lisp/play/doctor.el b/lisp/play/doctor.el
index 54bdf799f95..7808278518d 100644
--- a/lisp/play/doctor.el
+++ b/lisp/play/doctor.el
@@ -1606,7 +1606,7 @@ Hack on previous word, setting global variable DOCTOR-OWNER to correct result."
(setq doctor--suicide-flag t)
(doctor-type '( If you are really suicidal\, you might
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
https://www.befrienders.org/\ \.
you can also find other suicide crisis lines at
diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index e945dfb9739..504a5e12112 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -149,6 +149,8 @@
'eglot-managed-mode-hook "1.6")
(define-obsolete-variable-alias 'eglot-confirm-server-initiated-edits
'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
'eglot-events-buffer-config "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."
:type 'boolean)
-(defcustom eglot-prefer-plaintext nil
- "If non-nil, always request plaintext responses to hover requests."
- :type 'boolean
- :package-version '(Eglot . "1.17.30"))
+(defcustom eglot-documentation-renderer (cond ((eglot--builtin-mdown-p)
+ 'markdown-ts-view-mode)
+ ((fboundp 'gfm-view-mode)
+ '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
"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)))
(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)))
["markdown" "plaintext"]
["plaintext"]))
@@ -2263,12 +2276,14 @@ If MODE, force MODE to be used for fontifying MARKUP."
finally return (buffer-string)))
(calc2 (forced-mode)
(cond
- (forced-mode `(,forced-mode))
- ((eglot--builtin-mdown-p) `(,#'markdown-ts-view-mode))
- ((fboundp 'gfm-view-mode) `(,#'gfm-view-mode ,#'gfm-extract))
- (t `(#'text-mode))))
+ (forced-mode forced-mode)
+ ((fboundp eglot-documentation-renderer) eglot-documentation-renderer)
+ ((eglot--builtin-mdown-p) #'markdown-ts-view-mode)
+ ((fboundp 'gfm-view-mode) #'gfm-view-mode)
+ (t #'text-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
((setq lang (plist-get markup :language)) ; deprecated MarkedString
(calc (format "```%s\n%s\n```" lang (plist-get markup :value))))
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index 98c69b48691..2cb56aac715 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -646,7 +646,8 @@ Also update some VC file properties from ENTRIES."
(or (null next)
(vc-dir-fileinfo->directory (ewoc-data next)))))
(ewoc-delete vc-ewoc crt)))
- (setq crt prev))))))
+ (setq crt prev))))
+ (cl-assert (null to-remove))))
;; Update VC file properties.
(pcase-dolist (`(,file ,state ,_extra) entries)
(vc-file-setprop file 'vc-backend
diff --git a/test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts b/test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts
index c7c9e96ea50..5e46ca35817 100644
--- a/test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts
+++ b/test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts
@@ -1,6 +1,6 @@
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:
(lambda ()
(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
=-=-=
+
+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
+
+=-=-=