commit 810e9d675ba484dabade1a9f30201d2848c5e2ea Author: Roi Martin Date: Sun Jul 19 09:58:15 2026 +0200 Fix `void-function' error after `edebug-remove-instrumentation' After using `edebug-remove-instrumentation' to remove Edebug instrumentation from a command, calling that command interactively produces a `void-function' error. This happens because Edebug does not unwrap the command's interactive form. * lisp/emacs-lisp/edebug.el (edebug-unwrap*): Unwrap the interactive form of an `interpreted-function'. (Bug#81438) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index d7645f7c91e..29cb0350415 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -1318,7 +1318,7 @@ infinite loops when the code/environment contains a circular object.") (aref sexp 0) (mapcar #'edebug-unwrap* (aref sexp 1)) (mapcar (lambda (x) (if (consp x) (cons (car x) (edebug-unwrap* (cdr x))) x)) (aref sexp 2)) - (documentation sexp 'raw) (interactive-form sexp))) + (documentation sexp 'raw) (edebug-unwrap* (interactive-form sexp)))) (t sexp))) commit 59f402717aa35c4e6d5ad5a88de4eb61922c27ea Merge: 6e4dee5bf40 b5119ab9209 Author: Sean Whitton Date: Sun Jul 26 12:42:46 2026 +0100 Merge from origin/emacs-31 b5119ab9209 ; * etc/PROBLEMS: Document problems with pasting on Windo... 6bd90deb269 ; Fix fallout from 'image-dired-display-image-mode' chang... 39cb1e483fd ; * lisp/bookmark.el (bookmark-alist): Doc fix (bug#81461). 296869994e4 ; Remove 'sit-for' treesit parser workaround (bug#81019) 633a998bcfd ; Improve documentation of text properties for strings commit 6e4dee5bf40c3f73fda8ca25a238e90416688293 Merge: 187e1d80481 30539fe149b Author: Sean Whitton Date: Sun Jul 26 12:42:46 2026 +0100 ; Merge from origin/emacs-31 The following commits were skipped: 30539fe149b Backport: ; Fix last change, again 7cc260dddd9 Backport: ; Fix last change 0448b4e09af Backport: Fix 'with-tramp-progress-reporter' (bug#81455) commit 187e1d80481e21feafd93a6c4d698350ba60cd2f Merge: 69a193bc0e4 2771f99c722 Author: Sean Whitton Date: Sun Jul 26 12:42:46 2026 +0100 Merge from origin/emacs-31 2771f99c722 ; * admin/MAINTAINERS: Mark Amin as maintaining some more... 19eeda16a4a ; Fix recent changes in treesit documentation 29bbd02347d Fix treesit_cursor_helper_1 for zero-width nodes (bug#81436) 6b670907fa9 Update tree-sitter manual for embed level 0f6d977a88f ; * test/src/xdisp-tests.el (xdisp-test-format-mode-line)... commit 69a193bc0e478fa30a9356b57a296cc1565dd37e Merge: d3bc86023b6 6f992eaa49b Author: Sean Whitton Date: Sun Jul 26 12:42:46 2026 +0100 ; Merge from origin/emacs-31 The following commit was skipped: 6f992eaa49b vc--count-outgoing: Set process query on exit flag to nil commit d3bc86023b6ee5846cc4f4eed360763566d51992 Merge: 57ab505007c 1bdbdade6ba Author: Sean Whitton Date: Sun Jul 26 12:42:45 2026 +0100 Merge from origin/emacs-31 1bdbdade6ba Merge branch 'emacs-31' of git.savannah.gnu.org:/srv/git/... f8d7f87e73e ; * ChangeLog.5: Remove an entry which shouldn't have bee... 1c042fa0b1e Fix discarding user edits after async commit completes (b... commit 57ab505007c6b4d78f5632f11beffa9bda1c45cf Author: Eli Zaretskii Date: Sat Jul 25 19:53:33 2026 +0300 ; * lisp/net/eww.el (eww--alternate-urls): Doc fix. diff --git a/lisp/net/eww.el b/lisp/net/eww.el index a7c7e267583..631440706e9 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -3068,8 +3068,8 @@ Otherwise, the restored buffer will contain a prompt to do so by using (defun eww--alternate-urls (dom &optional base) "Return a list of alternate links in DOM. -Each element is a string URL, which is the the href attribute of the -link, expanded relative to BASE. Each URL has text properties \\+`type' +Each element is a string URL, which is the href attribute of the link, +expanded relative to BASE. Each URL string has text properties \\+`type' which is the link's type attribute, and \\+`title', its title attribute." (seq-keep (lambda (link) commit aee0e67a73707d14aa005124c478edbc20439030 Author: Eshel Yaron Date: Fri Jul 24 13:47:34 2026 +0200 Fix 'eww-read-alternate-url' completion annotations The 'annotation-function' used by 'eww-read-alternate-url' assumed, for alignment purposes, that completions are shown in one column, one completion per line. But that doesn't hold with the default value of 'completions-format'. This commit fixes the issue by using ':width' space specs for alignment instead of ':align-to'. While we're at it, simplify a bit and switch to an 'affixation-function', so alignment adapts to the current completions (those that match the current input string). * lisp/net/eww.el: Move 'provide' form to bottom. (eww--alternate-urls): Simplify using 'seq-keep'. Return propertized strings instead of an alist. (eww--alternate-urls-affixation): New function. (eww-read-alternate-url): Use it. diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 908df6e3333..a7c7e267583 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -3063,28 +3063,57 @@ Otherwise, the restored buffer will contain a prompt to do so by using (put 'eww-bookmark-jump 'bookmark-handler-type "EWW") -(provide 'eww) - ;;; Alternate links (RSS and Atom feeds, etc.) (defun eww--alternate-urls (dom &optional base) - "Return an alist of alternate links in DOM. - -Each element is a list of the form (URL TYPE TITLE) where URL is -the href attribute of the link expanded relative to BASE, TYPE is -its type attribute, and TITLE is its title attribute. If any of -these attributes is absent, the corresponding element is nil." - (let ((alternates - (seq-filter - (lambda (attrs) (string= (alist-get 'rel attrs) - "alternate")) - (mapcar #'dom-attributes (dom-by-tag dom 'link))))) - (mapcar (lambda (alternate) - (list (url-expand-file-name (alist-get 'href alternate) - base) - (alist-get 'type alternate) - (alist-get 'title alternate))) - alternates))) + "Return a list of alternate links in DOM. + +Each element is a string URL, which is the the href attribute of the +link, expanded relative to BASE. Each URL has text properties \\+`type' +which is the link's type attribute, and \\+`title', its title attribute." + (seq-keep + (lambda (link) + (let ((attrs (dom-attributes link))) + (when (equal (alist-get 'rel attrs) "alternate") + (propertize + (url-expand-file-name (alist-get 'href attrs) base) + 'type (alist-get 'type attrs) + 'title (or (alist-get 'title attrs) ""))))) + (dom-by-tag dom 'link))) + +(defun eww--alternate-urls-affixation (urls) + (let ((url-max-width + (seq-max (cons 0 (mapcar #'string-pixel-width urls)))) + (title-max-width + (seq-max + (cons 0 (mapcar + (lambda (url) + (string-pixel-width (get-text-property 0 'title url))) + urls)))) + (sep-width (string-pixel-width " "))) + (mapcar + (lambda (url) + (let ((title (get-text-property 0 'title url))) + (list + url "" + (propertize + (concat + (propertize + " " 'display + `( space :width + (,(+ sep-width + (- url-max-width (string-pixel-width url)))))) + title + (when-let* ((type (get-text-property 0 'type url))) + (concat + (propertize + " " 'display + `( space :width + (,(+ sep-width + (- title-max-width (string-pixel-width title)))))) + "[" type "]"))) + 'face 'completions-annotations)))) + urls))) (defun eww-read-alternate-url () "Get the URL of an alternate link of this page. @@ -3092,46 +3121,17 @@ these attributes is absent, the corresponding element is nil." If there is just one alternate link, return its URL. If there are multiple alternate links, prompt for one in the minibuffer with completion. If there are none, return nil." - (when-let* ((alternates (eww--alternate-urls - (plist-get eww-data :dom) - (plist-get eww-data :url)))) - (let ((url-max-width - (seq-max (mapcar #'string-pixel-width - (mapcar #'car alternates)))) - (title-max-width - (seq-max (mapcar #'string-pixel-width - (mapcar #'caddr alternates)))) - (sep-width (string-pixel-width " "))) - (if (cdr alternates) - (completing-read - "Alternate URL: " - (completion-table-with-metadata - alternates - `((annotation-function - . ,(lambda (feed) - (let* ((attrs (alist-get feed - alternates - nil - nil - #'string=)) - (type (car attrs)) - (title (cadr attrs))) - (concat - (propertize " " 'display - `(space :align-to - (,(+ sep-width - url-max-width)))) - title - (when type - (concat - (propertize " " 'display - `(space :align-to - (,(+ (* 2 sep-width) - url-max-width - title-max-width)))) - "[" type "]")))))))) - nil t) - (caar alternates))))) + (when-let* ((alts (eww--alternate-urls (plist-get eww-data :dom) + (plist-get eww-data :url)))) + (if (cdr alts) + ;; Multiple alternate links, prompt the user to select one. + (completing-read + "Alternate URL: " + (completion-table-with-metadata + alts `((affixation-function . eww--alternate-urls-affixation))) + nil t) + ;; Just one alternate link, return it without prompting. + (caar alts)))) (defun eww-copy-alternate-url () "Copy the alternate URL of the current page into the kill ring. @@ -3147,4 +3147,5 @@ version or an RSS feed." (message "Copied %s to kill ring" url)) (user-error "No alternate links found on this page!"))) +(provide 'eww) ;;; eww.el ends here commit 6f5bcd19b27839a0fab530d9a6a33037d132a4df Author: Eli Zaretskii Date: Sat Jul 25 08:31:29 2026 +0300 ; * etc/NEWS: Fix typo and wording of recently-added entry. diff --git a/etc/NEWS b/etc/NEWS index 653dedda04b..92033851c74 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -151,11 +151,11 @@ customize the new user option 'vc-dir-process-output-limit' to control how early to stop, and to disable this feature. --- -*** M-x VC-Dir resolves symbolic link only if the directory has no backend -When called interatively, 'vc-dir' checks if the passed directory has no -VC backend. And if its truename does and 'vc-follow-symlinks' is -non-nil, the truename is used instead. Before this change, the truename -was used unconditionally. +*** VC-Dir resolves symbolic links only if the directory has no backend. +When called interactively, 'M-x vc-dir' checks if the passed directory +has a VC backend. If it doesn't, but the directory's truename does +have a backend, and 'vc-follow-symlinks' is non-nil, the truename is +used instead. Previously, the truename was used unconditionally. +++ *** Improved creation of commit log entry from ChangeLog. commit b5119ab9209b7f203f794fc315b5a9a3673a0b24 Author: Eli Zaretskii Date: Sun Jul 26 14:04:09 2026 +0300 ; * etc/PROBLEMS: Document problems with pasting on Windows TTY (bug#81495). diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 8c88c9e391a..c9b01e65ea4 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -3187,6 +3187,25 @@ XKeymacs Version 3.47, deactivating XKeymacs when Emacs is active is not enough to avoid its messing with the keyboard input. Exiting XKeymacs completely is reported to solve the problem. +** Pasting non-ASCII characters into "emacs -nw" doesn't work. + +This happens if you paste using the Windows shortcuts, such as +S- and C-v or C-S-v. Evidently, these paste methods support +only ASCII text, at least in some Windows configurations. + +Instead, use the Emacs C-y key to paste from the clipboard, which on +Windows works on text-only frames as well. Make sure your +customizations don't affect the value of 'interprogram-paste-function', +which should be 'gui-selection-value', even in -nw sessions. In +addition, you should make sure the font used by the Windows Terminal +supports the characters you paste (the default font set by Windows +should be okay). For best results, we also recommend to set the console +codepage to 65001, which is the UTF-8 codepage. You can do that with +the following command, which should be done _before_ running Emacs on +the Windows Terminal: + + c:\> chcp 65001 + ** Pasting from Windows clipboard into Emacs doesn't work. This was reported to be the result of an anti-virus software blocking commit 6bd90deb269d74f13f6129d2c2ae656cf129b288 Author: Eli Zaretskii Date: Sun Jul 26 12:24:48 2026 +0300 ; Fix fallout from 'image-dired-display-image-mode' changes in 2021 * lisp/image/image-dired.el (image-dired-display-this): Make the optional argument be ignored, and don't pass it to 'image-dired-display-image'. Doc fix. (Bug#81491) diff --git a/lisp/image/image-dired.el b/lisp/image/image-dired.el index cba090e7c85..1a8fb1007f4 100644 --- a/lisp/image/image-dired.el +++ b/lisp/image/image-dired.el @@ -1296,10 +1296,10 @@ which is based on `image-mode'." (when buf (pop-to-buffer buf)) (select-window cur-win))) -(defun image-dired-display-this (&optional arg) +(defun image-dired-display-this (&optional _ignore) "Display current thumbnail's original image in display buffer. -See documentation for `image-dired-display-image' for more information. -With prefix argument ARG, display image in its original size." +See documentation for `image-dired-display-image' for more information." + (declare (advertised-calling-convention () "29.1")) (interactive "P" image-dired-thumbnail-mode) (unless (string-equal major-mode "image-dired-thumbnail-mode") (user-error "Not in `image-dired-thumbnail-mode'")) @@ -1309,7 +1309,7 @@ With prefix argument ARG, display image in its original size." ((not file) (message "No original file name found")) (t - (image-dired-display-image file arg))))) + (image-dired-display-image file))))) (defun image-dired-display-next (&optional arg) "Move to the next image in the thumbnail buffer and display it.