commit 5b07a81bedaddbe2874b37c79ef6c4c80da7707e (HEAD, refs/remotes/origin/master) Author: Sean Whitton Date: Sun Nov 30 21:35:23 2025 +0000 New display of outgoing revisions count in VC-Dir This relies on how vc--incoming-revision now caches incoming revisions. * lisp/vc/vc.el (vc--count-outgoing): New function. * lisp/vc/vc-dir.el (vc-dir-header-urgent-value): New face. (vc-dir-outgoing-revisions-map): New keymap. (vc-dir-headers): Use them. * etc/NEWS: Document the change. diff --git a/etc/NEWS b/etc/NEWS index 7e67f84ef86..5623f1f5825 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2529,6 +2529,11 @@ bindings: - 'C-x v O L' is bound to 'vc-log-outgoing' - 'C-x v O D' is bound to 'vc-root-diff-outgoing'. +--- +*** New display of outgoing revisions count in VC-Dir. +If there are outgoing revisions, VC-Dir now includes a count of how many +in its headers, to remind you to push them. + +++ *** New user option 'vc-async-checkin' to enable async checkin operations. Currently only supported by the Git and Mercurial backends. diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el index ef5aa5dbda2..0b237e91974 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -64,6 +64,11 @@ See `run-hooks'." :group 'vc :version "28.1") +(defface vc-dir-header-urgent-value '((t :inherit font-lock-warning-face)) + "Face for urgent header values in VC-Dir buffers." + :group 'vc + :version "31.1") + (defface vc-dir-directory '((t :inherit font-lock-comment-delimiter-face)) "Face for directories in VC-Dir buffers." :group 'vc @@ -1328,19 +1333,31 @@ the *vc-dir* buffer. (hack-dir-local-variables-non-file-buffer) (vc-dir-refresh))) +(defvar-keymap vc-dir-outgoing-revisions-map + :doc "Local keymap for viewing outgoing revisions." + "" #'vc-log-outgoing) + (defun vc-dir-headers (backend dir) - "Display the headers in the *VC dir* buffer. + "Display the headers in the *VC-Dir* buffer. It calls the `dir-extra-headers' backend method to display backend specific headers." (concat - ;; First layout the common headers. (propertize "VC backend : " 'face 'vc-dir-header) (propertize (format "%s\n" backend) 'face 'vc-dir-header-value) (propertize "Working dir: " 'face 'vc-dir-header) (propertize (format "%s\n" (abbreviate-file-name dir)) 'face 'vc-dir-header-value) - ;; Then the backend specific ones. (vc-call-backend backend 'dir-extra-headers dir) + (and-let* ((count (ignore-errors (vc--count-outgoing backend))) + (_ (plusp count))) + (concat (propertize "\nOutgoing : " + 'face 'vc-dir-header) + (propertize (format "%d unpushed revisions\n" count) + 'face 'vc-dir-header-urgent-value + 'mouse-face 'highlight + 'keymap vc-dir-outgoing-revisions-map + 'help-echo "\\\ +\\[vc-log-outgoing]: List outgoing revisions"))) "\n")) (defun vc-dir-refresh-files (files) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index afe3f4ebbda..6547e5ebfbd 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -4077,6 +4077,17 @@ can be a remote branch name." "" (vc-call-backend backend 'mergebase incoming))))) +(defun vc--count-outgoing (backend) + "Return number of changes that will be sent with a `vc-push'." + (with-temp-buffer + (let ((display-buffer-overriding-action + '(display-buffer-no-window (allow-no-window . t)))) + (vc-incoming-outgoing-internal backend nil + (current-buffer) 'log-outgoing)) + (let ((proc (get-buffer-process (current-buffer)))) + (while (accept-process-output proc))) + (how-many log-view-message-re))) + ;;;###autoload (defun vc-log-search (pattern) "Search the VC log of changes for PATTERN and show log of matching changes. commit 77a57041d06adf9f6981028bd210c142b5ce8981 Author: Stephen Gildea Date: Sun Nov 30 12:36:12 2025 -0800 time-stamp: Add test of multi-line start regexp * test/lisp/time-stamp-tests.el: (time-stamp-custom-start-multiline): New test, inspired by Amin Bandali. diff --git a/test/lisp/time-stamp-tests.el b/test/lisp/time-stamp-tests.el index c589c5b4b14..20385fe336b 100644 --- a/test/lisp/time-stamp-tests.el +++ b/test/lisp/time-stamp-tests.el @@ -164,7 +164,7 @@ (iter-yield-from (time-stamp-test-pattern-sequential)) (iter-yield-from (time-stamp-test-pattern-multiply))) -(ert-deftest time-stamp-custom-start () +(ert-deftest time-stamp-custom-start-0 () "Test that `time-stamp' isn't stuck by a start matching 0 characters." (with-time-stamp-test-env (with-time-stamp-test-time ref-time1 @@ -189,6 +189,18 @@ (time-stamp) (should (equal (buffer-string) "::05::05"))))))) +(ert-deftest time-stamp-custom-start-multiline () + "Test `time-stamp-start' matching across multiple lines." + (with-time-stamp-test-env + (with-time-stamp-test-time ref-time1 + (let ((time-stamp-pattern "l.1\n%Y-%m-%d<-TS")) ;start includes newline + (with-temp-buffer + (insert "l.1\n<-TS\n") + ;; we should look for the end on the line where the start ends, + ;; not the line where the start starts + (time-stamp) + (should (equal (buffer-string) "l.1\n2006-01-02<-TS\n"))))))) + (ert-deftest time-stamp-custom-pattern () "Test that `time-stamp-pattern' is parsed correctly." (iter-do (pattern-parts (time-stamp-test-pattern-all)) commit c2e2a86d1bbbca9419ba2f9c89c6996f51b34d20 Author: Juri Linkov Date: Sun Nov 30 20:40:12 2025 +0200 Make goto-address/bug-reference buttons TAB-navigable in 'button-mode' * lisp/net/goto-addr.el (goto-address-fontify): Set overlay property 'button' to 'this-overlay', and 'category' to 'goto-address'. * lisp/progmodes/bug-reference.el (bug-reference-fontify): Set overlay property 'button' to 'ov' (bug#74792). diff --git a/lisp/net/goto-addr.el b/lisp/net/goto-addr.el index fa346a5d944..349d73eba0e 100644 --- a/lisp/net/goto-addr.el +++ b/lisp/net/goto-addr.el @@ -187,6 +187,8 @@ and `goto-address-fontify-p'." 'help-echo "mouse-2, C-c RET: follow URL") (overlay-put this-overlay 'keymap goto-address-highlight-keymap) + (overlay-put this-overlay 'button this-overlay) + (overlay-put this-overlay 'category 'goto-address) (overlay-put this-overlay 'goto-address t)))) (goto-char (or start (point-min))) (while (re-search-forward goto-address-mail-regexp end t) diff --git a/lisp/progmodes/bug-reference.el b/lisp/progmodes/bug-reference.el index b6ce135be3e..753718efa63 100644 --- a/lisp/progmodes/bug-reference.el +++ b/lisp/progmodes/bug-reference.el @@ -187,6 +187,7 @@ subexpression 10." (let ((ov (make-overlay (car bounds) (cdr bounds) nil t nil))) (overlay-put ov 'category 'bug-reference) + (overlay-put ov 'button ov) ov)))) ;; Don't put a link if format is undefined. (when bug-reference-url-format commit 0f90cc033d24ce64e116d7920ec3a1f2b08a370f Author: Sean Whitton Date: Sun Nov 30 18:32:51 2025 +0000 ; * lisp/progmodes/project.el (project-compile): Fix last change. diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 38ca44bc1fb..8a128df0d16 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -1659,8 +1659,9 @@ If non-nil, it overrides `compilation-buffer-name-function' for (when orig-current-buffer (kill-local-variable 'compile-command)) (unwind-protect (call-interactively #'compile) - (with-current-buffer orig-current-buffer - (setq-local compile-command orig-compile-command))))) + (when orig-current-buffer + (with-current-buffer orig-current-buffer + (setq-local compile-command orig-compile-command)))))) ;;;###autoload (defun project-recompile (&optional edit-command) commit 30e178e7cbf56ae8f97a0a465328eb744ca2758c Author: Sean Whitton Date: Sun Nov 30 18:31:37 2025 +0000 * lisp/vc/vc.el (vc-push): Clear cached incoming revision. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 7447fab0888..afe3f4ebbda 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -4258,7 +4258,10 @@ It also signals an error in a Bazaar bound branch." (backend (car vc-fileset))) ;;; (files (cadr vc-fileset))) (if (vc-find-backend-function backend 'push) - (vc-call-backend backend 'push arg) + (progn (vc-call-backend backend 'push arg) + ;; FIXME: Ideally we would only clear out the + ;; REMOTE-LOCATION to which we are pushing. + (vc--repo-setprop 'vc-incoming-revision nil)) (user-error "VC push is unsupported for `%s'" backend)))) ;;;###autoload commit 2abad90dced05f41bdc9f96966abe40effd9313e Author: Sean Whitton Date: Sun Nov 30 18:28:55 2025 +0000 * lisp/vc/vc.el (vc--incoming-revision): Don't cache 'nil'. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index a8a11f07db6..7447fab0888 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -4029,8 +4029,8 @@ The command prompts for the branch whose change log to show." (or (and (not refresh) (cdr (assoc upstream-location (vc--repo-getprop 'vc-incoming-revision)))) - (let ((res (vc-call-backend backend 'incoming-revision - upstream-location refresh))) + (and-let* ((res (vc-call-backend backend 'incoming-revision + upstream-location refresh))) (if-let* ((alist (vc--repo-getprop 'vc-incoming-revision))) (setf (alist-get upstream-location alist nil nil #'equal) res) commit 0f9dd5b3a127b757caf67ed5b1928fc2a1d7d55a Author: Juri Linkov Date: Sun Nov 30 20:23:28 2025 +0200 Show Flymake diagnostics on clicking mouse-1 on the mode-line indicator * lisp/progmodes/flymake.el (flymake--mode-line-counter-map): Bind [mode-line mouse-1] to 'flymake-show-buffer-diagnostics' (bug#76254). diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index e9d25876cda..07a3e7785a3 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -1891,6 +1891,8 @@ correctly.") #'flymake--mode-line-counter-scroll-next) (define-key map [mode-line wheel-up] #'flymake--mode-line-counter-scroll-prev)) + (define-key map [mode-line mouse-1] + #'flymake-show-buffer-diagnostics) map)) (defun flymake--mode-line-counter-1 (type) commit 5167989b2a32711bb3d9c0f00836b52e74c071b3 Author: Sean Whitton Date: Sun Nov 30 18:20:50 2025 +0000 Cache VC incoming revisions * lisp/vc/vc-hooks.el (vc-file-setprop): Use cl-pushnew. (vc--repo-setprop, vc--repo-getprop, vc--repo-clearprops): New functions. * lisp/vc/vc.el (vc--incoming-revision): Cache incoming revisions. * src/fns.c (Fput): State that VALUE is returned. diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 1a114ed38ba..38ca44bc1fb 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -576,6 +576,8 @@ project backend implementation of `project-external-roots'.") See `project-vc-extra-root-markers' for the marker value format.") +;; FIXME: Should perhaps use `vc--repo-*prop' functions +;; (after promoting those to public). --spwhitton (defun project-try-vc (dir) ;; FIXME: Learn to invalidate when the value changes: ;; `project-vc-merge-submodules' or `project-vc-extra-root-markers'. diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el index 32b410d5c3b..f275e792ccc 100644 --- a/lisp/vc/vc-hooks.el +++ b/lisp/vc/vc-hooks.el @@ -228,24 +228,26 @@ VC commands are globally reachable under the prefix \\[vc-prefix-map]: (defmacro vc-error-occurred (&rest body) `(condition-case nil (progn ,@body nil) (error t))) -;; We need a notion of per-file properties because the version -;; control state of a file is expensive to derive --- we compute -;; them when the file is initially found, keep them up to date -;; during any subsequent VC operations, and forget them when -;; the buffer is killed. +;; We need a notion of per-file properties because the version control +;; state of a file is expensive to derive -- we compute it when the file +;; is initially found, keep them up to date during any subsequent VC +;; operations, and forget them when the buffer is killed. +;; +;; In addition we store some whole-repository properties keyed to the +;; repository root. We invalidate/update these during VC operations, +;; but there isn't a point analagous to the killing of a buffer at which +;; we clear them all out, like there is for per-file properties. (defvar vc-file-prop-obarray (obarray-make 17) - "Obarray for per-file properties.") + "Obarray for VC per-file and per-repository properties.") (defvar vc-touched-properties nil) (defun vc-file-setprop (file property value) "Set per-file VC PROPERTY for FILE to VALUE." - (if (and vc-touched-properties - (not (memq property vc-touched-properties))) - (setq vc-touched-properties (append (list property) - vc-touched-properties))) - (put (intern (expand-file-name file) vc-file-prop-obarray) property value)) + (cl-pushnew property vc-touched-properties) + (put (intern (expand-file-name file) vc-file-prop-obarray) + property value)) (defun vc-file-getprop (file property) "Get per-file VC PROPERTY for FILE." @@ -257,6 +259,18 @@ VC commands are globally reachable under the prefix \\[vc-prefix-map]: (kill-local-variable 'vc-parent-buffer)) (setplist (intern (expand-file-name file) vc-file-prop-obarray) nil)) +(defun vc--repo-setprop (property value) + "Set per-repository VC PROPERTY to VALUE and return the value." + (vc-file-setprop (vc-root-dir) property value)) + +(defun vc--repo-getprop (property) + "Get per-repository VC PROPERTY." + (vc-file-getprop (vc-root-dir) property)) + +(defun vc--repo-clearprops () + "Clear all VC whole-repository properties." + (vc-file-clearprops (vc-root-dir))) + ;; We keep properties on each symbol naming a backend as follows: ;; * `vc-functions': an alist mapping vc-FUNCTION to vc-BACKEND-FUNCTION. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index c2931dfbfca..a8a11f07db6 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -4015,7 +4015,28 @@ The command prompts for the branch whose change log to show." 'vc-remote-location-history))) (defun vc--incoming-revision (backend &optional upstream-location refresh) - (or (vc-call-backend backend 'incoming-revision upstream-location refresh) + ;; Some backends don't support REFRESH and so always behave as though + ;; REFRESH is non-nil. This is not just for a lack of implementation + ;; in Emacs; for example, Mercurial repositories don't store any + ;; representation of the incoming revision between running commands. + ;; + ;; Fetching the incoming revision is often slow, and in many cases the + ;; last known incoming revision will serve perfectly well. For + ;; example, when finding revisions that are outgoing, the last known + ;; incoming revision is fine except for the rare case in which someone + ;; else cherry-picks the very same commits that you have outstanding, + ;; and pushes them. Given this, we implement our own caching. + (or (and (not refresh) + (cdr (assoc upstream-location + (vc--repo-getprop 'vc-incoming-revision)))) + (let ((res (vc-call-backend backend 'incoming-revision + upstream-location refresh))) + (if-let* ((alist (vc--repo-getprop 'vc-incoming-revision))) + (setf (alist-get upstream-location alist nil nil #'equal) + res) + (vc--repo-setprop 'vc-incoming-revision + `((,upstream-location . ,res)))) + res) (user-error "No incoming revision -- local-only branch?"))) ;;;###autoload diff --git a/src/fns.c b/src/fns.c index 157022a5c44..14af8a0ec58 100644 --- a/src/fns.c +++ b/src/fns.c @@ -2702,8 +2702,8 @@ plist_put (Lisp_Object plist, Lisp_Object prop, Lisp_Object val) } DEFUN ("put", Fput, Sput, 3, 3, 0, - doc: /* Store SYMBOL's PROPNAME property with value VALUE. -It can be retrieved with `(get SYMBOL PROPNAME)'. */) + doc: /* Store SYMBOL's PROPNAME property with value VALUE and return that value. +It can later be retrieved with `(get SYMBOL PROPNAME)'. */) (Lisp_Object symbol, Lisp_Object propname, Lisp_Object value) { CHECK_SYMBOL (symbol); commit 9174bc811a3dbb7caed7c11063c62d97b0e98622 Author: Juri Linkov Date: Sun Nov 30 20:14:19 2025 +0200 Use treesit-extra-load-path for more values of treesit-auto-install-grammar * lisp/treesit.el (treesit-auto-install-grammar): Use the first writable directory from 'treesit-extra-load-path' for values 'always', 'ask', 'ask-dir' (bug#79862). * src/treesit.c (syms_of_treesit): Extend docstring. diff --git a/etc/NEWS b/etc/NEWS index ca009782806..7e67f84ef86 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -927,7 +927,7 @@ available when such modes are turned on. *** 'treesit-extra-load-path' now is a customizable user option. The first directory in the list is used as the default directory to install the language grammar when 'treesit-auto-install-grammar' -is 'ask' or 'ask-dir'. +is 'ask', 'ask-dir' or 'always'. *** 'treesit-language-source-alist' supports keywords. The language and URL are mandatory, but remaining data can use keywords: diff --git a/lisp/treesit.el b/lisp/treesit.el index c17245b1e87..6809f1ec086 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -5462,15 +5462,24 @@ The copied query files are queries/highlights.scm." "Whether to install tree-sitter language grammar libraries when needed. This controls whether Emacs will install missing grammar libraries when they are needed by some tree-sitter based mode. + If `always', install the grammar library without asking. -If `ask', ask for confirmation before installing the required grammar library. +If `ask', ask for confirmation before installing the grammar library. If `ask-dir', ask for confirmation and also for a directory name where -to install the grammar library. The directory name is also asked when -the value is `ask' and `treesit-extra-load-path' is customized to a list -of directories. -If nil or `never' or anything else, don't install the grammar library -even while visiting a file in the mode that requires such grammar; this -might display a warning and/or fail to turn on the mode." +to install the grammar library. The selected directory name is then +added to the list in `treesit-extra-load-path', but not saved, so +it's used only within the current session. It's advisable to +customize and save `treesit-extra-load-path' manually. + +The default directory for the above three values is the first writeable +directory from the list in `treesit-extra-load-path'. If it's nil, then +the grammar is installed to the standard location, the \"tree-sitter\" +directory under `user-emacs-directory'. + +If the value of this variable is nil or `never' or anything else, don't +install the grammar library even while visiting a file in the mode that +requires such grammar; this might display a warning and/or fail to turn +on the mode." :type '(choice (const :tag "Never install grammar libraries" never) (const :tag "Always automatically install grammar libraries" always) @@ -5486,23 +5495,20 @@ The option `treesit-auto-install-grammar' defines whether to install the grammar library if it's unavailable." (when (treesit-available-p) (or (treesit-ready-p lang t) - (let (out-dir) + (let ((out-dir (or (seq-find #'file-writable-p + treesit-extra-load-path) + (locate-user-emacs-file "tree-sitter")))) (when (or (eq treesit-auto-install-grammar 'always) (and (memq treesit-auto-install-grammar '(ask ask-dir)) (y-or-n-p (format "\ Tree-sitter grammar for `%s' is missing; install it?" lang)) - (or (and (eq treesit-auto-install-grammar 'ask) - ;; Still ask dir for customized path - (null treesit-extra-load-path)) - (let ((default-out-dir - (or (seq-find #'file-writable-p - treesit-extra-load-path) - (locate-user-emacs-file "tree-sitter")))) + (or (eq treesit-auto-install-grammar 'ask) + (progn (setq out-dir (read-directory-name (format-prompt "\ Install grammar for `%s' to" nil lang) - default-out-dir - treesit-extra-load-path t)) + out-dir + treesit-extra-load-path)) (add-to-list 'treesit-extra-load-path out-dir) t)))) (treesit-install-language-grammar lang out-dir) diff --git a/src/treesit.c b/src/treesit.c index d3b6f36ec81..71ded0dcb71 100644 --- a/src/treesit.c +++ b/src/treesit.c @@ -5275,7 +5275,8 @@ Emacs first looks in the directories mentioned in this variable, then in the `tree-sitter' subdirectory of `user-emacs-directory', and then in the system default locations for dynamic libraries, in that order. The first writeable directory in the list is special: it's used as the -default directory when automatically installing the language grammar. */); +default directory when automatically installing the language grammar +using `treesit-ensure-installed'. */); Vtreesit_extra_load_path = Qnil; DEFVAR_LISP ("treesit-thing-settings", commit 16b19ceb285a469469456363df6dda0f0b36b8ab Author: Sean Whitton Date: Sun Nov 30 17:36:33 2025 +0000 project-compile: Don't let-bind compile-command * lisp/progmodes/project.el (project-compile): Handle ignoring compile-command from a vc-compilation-mode buffer in a way that does not involve let-binding compile-command. diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index a6d8cb0060a..1a114ed38ba 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -1639,18 +1639,26 @@ If non-nil, it overrides `compilation-buffer-name-function' for "Run `compile' in the project root." (declare (interactive-only compile)) (interactive) - (let ((default-directory (project-root (project-current t))) - (compilation-buffer-name-function - (or project-compilation-buffer-name-function - compilation-buffer-name-function)) - ;; Specifically ignore the value of `compile-command' if we were - ;; invoked from a `vc-compilation-mode' buffer because for - ;; `project-compile' we know the user wants to build the - ;; project, not re-run a VC pull or push operation (bug#79658). - (compile-command (if (derived-mode-p 'vc-compilation-mode) - (with-temp-buffer compile-command) - compile-command))) - (call-interactively #'compile))) + (let* ((default-directory (project-root (project-current t))) + (compilation-buffer-name-function + (or project-compilation-buffer-name-function + compilation-buffer-name-function)) + (orig-current-buffer (and (derived-mode-p 'vc-compilation-mode) + (local-variable-p 'compile-command) + (current-buffer))) + (orig-compile-command (and orig-current-buffer compile-command))) + ;; If invoked from a `vc-compilation-mode' buffer, we want to ignore + ;; `compile-command' because for this command we know the user wants + ;; to build the project, not re-run a VC pull or push (bug#79658). + ;; Do this without let-binding `compile-command', however, in order + ;; that the user's command to build the project is not immediately + ;; thrown away. Essentially we want to turn the `setq' of + ;; `compile-command' done by `compile' into a `setq-default'. + (when orig-current-buffer + (kill-local-variable 'compile-command)) + (unwind-protect (call-interactively #'compile) + (with-current-buffer orig-current-buffer + (setq-local compile-command orig-compile-command))))) ;;;###autoload (defun project-recompile (&optional edit-command) commit 27f0a3fd869d3a73074f2023584430f6a5fd1162 Author: João Távora Date: Sun Nov 30 13:44:30 2025 +0000 Eglot: revert changes to eglot-rename's interface (bug#79757) After some weeks of testing, I've changed by mind on this. Having the current name appear passed the INITIAL-VALUE to read-from-minibuffer is a jarring backward-incompatible change. There is no evidence that the majority of renames are simple tweaks to the existing names, and even less evidence that these tweaks happen frequently at the end of the symbol. Therefore it's better for the ergonomics of this commonly used command to leave the code as it was and simply rely on C-n to bring in the default value (which is the current symbol name), instead of forcing users accustomed to the previous behaviour remember to press sth like M-DEL to clean the input. * lisp/progmodes/eglot.el (eglot-rename): Tweak. diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 24ee1df749f..b8d29f966fc 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -4083,7 +4083,7 @@ edit proposed by the server." (let ((tap (thing-at-point 'symbol t))) (list (read-from-minibuffer (format "Rename `%s' to: " (or tap "unknown symbol")) - tap nil nil nil tap)))) + nil nil nil nil tap)))) (eglot-server-capable-or-lose :renameProvider) (eglot--apply-workspace-edit (eglot--request (eglot--current-server-or-lose) commit ae36ee3655c285658cbd246c3d979eeeff60bfa0 Author: Sean Whitton Date: Sun Nov 30 13:47:00 2025 +0000 ; * lisp/server.el (server--process-filter-1): Fix typo. diff --git a/lisp/server.el b/lisp/server.el index d84f17bdfe5..cb9d20bcadb 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1205,7 +1205,7 @@ The following commands are accepted by the client: ;; First things first: let's check the authentication. ;; It is important that we strip the trailing space or newline ;; character in order that it does not appear, to the code below, - ;; there there is a zero-length argument there (bug#79889). + ;; that there is a zero-length argument there (bug#79889). (unless (process-get proc :authenticated) (if (and (string-match "-auth \\([!-~]+\\)[ \n]?" string) (equal (match-string 1 string) (process-get proc :auth-key))) commit 7d2e22843f7cf7a4c5f2bbaef3209f2bbb00ca6c Author: Sean Whitton Date: Sun Nov 30 11:24:32 2025 +0000 server--process-filter-1: Fix stripping -auth argument (bug#79889) * lisp/server.el (server--process-filter-1): Strip trailing space after -auth argument (bug#79889). Fix due to Richard Copley . diff --git a/lisp/server.el b/lisp/server.el index ca6f9e2448b..d84f17bdfe5 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1202,9 +1202,12 @@ The following commands are accepted by the client: (cl-defun server--process-filter-1 (proc string) (server-log (concat "Received " string) proc) - ;; First things first: let's check the authentication + ;; First things first: let's check the authentication. + ;; It is important that we strip the trailing space or newline + ;; character in order that it does not appear, to the code below, + ;; there there is a zero-length argument there (bug#79889). (unless (process-get proc :authenticated) - (if (and (string-match "-auth \\([!-~]+\\)\n?" string) + (if (and (string-match "-auth \\([!-~]+\\)[ \n]?" string) (equal (match-string 1 string) (process-get proc :auth-key))) (progn (setq string (substring string (match-end 0))) commit b208b08371044f5c932eb67d85c2a98cc63691b2 Author: Roi Martin Date: Wed Nov 26 00:16:24 2025 +0100 Fix bug in semantic linefeed filling Fix bug in semantic linefeed filling related to wide characters and `sentence-end-without-space'. * lisp/textmodes/fill.el (fill-region-as-paragraph-semlf): Fix the calculation of the maximum column. Do not depend on where `fill-region-as-paragraph-default' leaves point after being called. (Bug#79575) diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el index 4ab639497ec..a6858fdea8b 100644 --- a/lisp/textmodes/fill.el +++ b/lisp/textmodes/fill.el @@ -1657,7 +1657,7 @@ For more details about semantic linefeeds, see `https://sembr.org/' and (to (copy-marker (max from to) t)) pfx) (goto-char from) - (let ((fill-column (point-max))) + (let ((fill-column (* 2 (point-max)))) ; Wide characters span up to two columns. (setq pfx (or (save-excursion (fill-region-as-paragraph-default (point) to @@ -1666,14 +1666,18 @@ For more details about semantic linefeeds, see `https://sembr.org/' and squeeze-after)) ""))) (while (< (point) to) - (let ((fill-prefix pfx)) + (let ((fill-to (copy-marker + (min to + (save-excursion + (forward-sentence) + (point))) + t)) + (fill-prefix pfx)) (fill-region-as-paragraph-default (point) - (min to - (save-excursion - (forward-sentence) - (point))) + fill-to justify - t)) + t) + (goto-char fill-to)) (when (and (> (point) (line-beginning-position)) (< (point) (line-end-position)) (< (point) to))