commit 9e16010686a99a8b9ee1c01dff248a680605a6ca Author: Michael Albinus Date: Sat Dec 20 08:58:26 2025 +0100 Fix problem in Tramp completion * lisp/net/tramp.el (tramp-completion-handle-expand-file-name): Expand FILENAME also when it is absolute. (Bug#80031) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index b9b582a66bc..1c035f0ef27 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -2922,7 +2922,9 @@ not in completion mode." ;; check, whether DIRECTORY is "/method:" or "/[method/". (let ((dir (or directory default-directory "/"))) (cond - ((file-name-absolute-p filename) filename) + ((file-name-absolute-p filename) + ;; FILENAME could be like "~/". We must expand this. + (tramp-run-real-handler #'expand-file-name (list filename directory))) ((and (eq tramp-syntax 'simplified) (string-match-p (rx (regexp tramp-postfix-host-regexp) eos) dir)) (concat dir filename)) commit 54eae320f5993ad55047559a51dde56fd6abd5a8 Author: Eli Zaretskii Date: Sat Dec 20 09:47:39 2025 +0200 ; * lisp/vc/vc-git.el (vc-git-registered): Fix remote files (bug#80035). diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index 53203a9e386..18ba7427b1d 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -299,7 +299,7 @@ Good example of file name that needs this: \"test[56].xx\".") ;; with other backend's `vc-*-registered' functions which are ;; quieter in the case that the VCS isn't installed. So check ;; up here that git(1) is available. See also bug#18481. - (executable-find vc-git-program) + (executable-find vc-git-program t) (with-temp-buffer (let* (process-file-side-effects ;; Do not use the `file-name-directory' here: git-ls-files commit 4d11449c96c80e2ea402c88fe637958b8c0cf940 Author: Paul Eggert Date: Fri Dec 19 09:09:16 2025 -0800 Revert to simpler (and we hope faster) TAGGEDP Suggested by Mattias Engdegård (bug#80021#17). * src/lisp.h (lisp_h_FIXNUMP, lisp_h_TAGGEDP): Go back to the simpler (X&7) == TAG approach for checking object tags. This reverses my commit ccdb08ef4ed8f96e79aa06cf5e806c9c487d58ad “Improve performance of CONSP, FIXNUMP, etc.” dated 2018-08-25 13:39:18 -0700, though it keeps the TAGGEDP function the older commit introduced. Although the older commit improved performance on its circa 2010 platform, when I ran today’s ‘make -C lisp compile-always’ benchmark on Ubuntu 25.10 which uses gcc (Ubuntu 15.2.0-4ubuntu4) on an circa-2021 Intel Xeon W-1350, this patch makes the ‘make -C lisp compile-always’ benchmark 3.1% faster. Although the patch unfortunately also makes the Emacs text segment 0.6% larger, in this case speed and simplicity beat text size in importance. diff --git a/src/lisp.h b/src/lisp.h index 968ea4c4086..f278bd32110 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -394,10 +394,7 @@ typedef EMACS_INT Lisp_Word; #define lisp_h_CONSP(x) TAGGEDP (x, Lisp_Cons) #define lisp_h_BASE_EQ(x, y) (XLI (x) == XLI (y)) -#define lisp_h_FIXNUMP(x) \ - (! (((unsigned) (XLI (x) >> (USE_LSB_TAG ? 0 : FIXNUM_BITS)) \ - - (unsigned) (Lisp_Int0 >> !USE_LSB_TAG)) \ - & ((1 << INTTYPEBITS) - 1))) +#define lisp_h_FIXNUMP(x) ((XTYPE (x) & (Lisp_Int0 | ~Lisp_Int1)) == Lisp_Int0) #define lisp_h_FLOATP(x) TAGGEDP (x, Lisp_Float) #define lisp_h_NILP(x) BASE_EQ (x, Qnil) #define lisp_h_SYMBOL_CONSTANT_P(sym) \ @@ -405,10 +402,7 @@ typedef EMACS_INT Lisp_Word; #define lisp_h_SYMBOL_TRAPPED_WRITE_P(sym) (XSYMBOL (sym)->u.s.trapped_write) #define lisp_h_SYMBOL_WITH_POS_P(x) PSEUDOVECTORP (x, PVEC_SYMBOL_WITH_POS) #define lisp_h_BARE_SYMBOL_P(x) TAGGEDP (x, Lisp_Symbol) -#define lisp_h_TAGGEDP(a, tag) \ - (! (((unsigned) (XLI (a) >> (USE_LSB_TAG ? 0 : VALBITS)) \ - - (unsigned) (tag)) \ - & ((1 << GCTYPEBITS) - 1))) +#define lisp_h_TAGGEDP(a, tag) (XTYPE (a) == (tag)) #define lisp_h_VECTORLIKEP(x) TAGGEDP (x, Lisp_Vectorlike) #define lisp_h_XCAR(c) XCONS (c)->u.s.car #define lisp_h_XCDR(c) XCONS (c)->u.s.u.cdr commit a6c2ae3a3fb89cd0eedd1b6b4e81fb90ce910f96 Author: Gerd Möllmann Date: Wed Dec 17 19:52:54 2025 +0100 Don't make tty child frames visible when selected (bug#80020) * src/frame.c (do_switch_frame): Don't change visibility of tty child frames. (Fraise_frame): Doc string fix. diff --git a/src/frame.c b/src/frame.c index 1185eacb16c..131f1967424 100644 --- a/src/frame.c +++ b/src/frame.c @@ -1911,18 +1911,16 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor XSETFRAME (top_frame, root_frame (f)); tty->top_frame = top_frame; + SET_FRAME_VISIBLE (root_frame (f), true); while (p) { - /* If FRAME is a child frame, make its ancsetors visible - and garbage them ... */ - SET_FRAME_VISIBLE (p, true); + /* If FRAME is a child frame, make it redraw. */ SET_FRAME_GARBAGED (p); p = FRAME_PARENT_FRAME (p); } /* ... and FRAME itself too. */ - SET_FRAME_VISIBLE (f, true); SET_FRAME_GARBAGED (f); /* FIXME: Why is it correct to set FrameCols/Rows here? */ @@ -1937,9 +1935,6 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor FrameRows (tty) = FRAME_TOTAL_LINES (f); } } - else - /* Should be covered by the condition above. */ - SET_FRAME_VISIBLE (f, true); } sf->select_mini_window_flag = MINI_WINDOW_P (XWINDOW (sf->selected_window)); @@ -3530,9 +3525,7 @@ DEFUN ("visible-frame-list", Fvisible_frame_list, Svisible_frame_list, DEFUN ("raise-frame", Fraise_frame, Sraise_frame, 0, 1, "", doc: /* Bring FRAME to the front, so it occludes any frames it overlaps. If FRAME is invisible or iconified, make it visible. -If you don't specify a frame, the selected frame is used. -If Emacs is displaying on an ordinary terminal or some other device which -doesn't support multiple overlapping frames, this function selects FRAME. */) +If you don't specify a frame, the selected frame is used. */) (Lisp_Object frame) { struct frame *f = decode_live_frame (frame); commit cfb4bace26c6104c23698b6d7da243845cc1d911 Author: João Távora Date: Fri Dec 19 09:43:02 2025 +0000 ; Eglot: mention relativePatternSupport in /etc/EGLOT-NEWS * etc/EGLOT-NEWS (Changes to upcoming Eglot): Mention relativePatternSupport. diff --git a/etc/EGLOT-NEWS b/etc/EGLOT-NEWS index fea878a47ca..b3edd77cacd 100644 --- a/etc/EGLOT-NEWS +++ b/etc/EGLOT-NEWS @@ -28,6 +28,13 @@ requests diagnostics explicitly rather than relying on sporadic server is known to support the "pull" variant exclusively, while the 'ty' server is known to support it alongside "push". +** Support for watching files outside the project (bug#79809) + +Eglot now supports and advertises the 'relativePatternSupport' +sub-feature of 'didChangeWatchedFiles'. Some LSP servers use it to ask +for file watches outside the current project's root and so be notified +of changes to dependencies that affect the current project. + ** Support for semantic tokens (bug#79374) The new minor mode 'eglot-semantic-tokens-mode' provides enhanced syntax diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 4d31c314ef5..7d8b2fd138f 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -2355,7 +2355,9 @@ diagnostics, used for incremental updates.") (when revert-buffer-preserve-modes (eglot--signal-textDocument/didOpen) (when eglot-semantic-tokens-mode - (eglot-semantic-tokens-mode)))) + (trace-values "OH YEAH!?") + (eglot-semantic-tokens-mode)) + )) (defun eglot--maybe-activate-editing-mode () "Maybe activate `eglot--managed-mode'.