commit d98e1a83753ecc988fe9109308aea05e86534734 (HEAD, refs/remotes/origin/master) Author: F. Jason Park Date: Sun Aug 24 19:53:27 2025 -0700 Remove scrolltobottom dependency from erc-fill module This mostly reverts 9668b4f97c2fc6bfff83258861d455a6d02516a8 "Make erc-fill-wrap depend on scrolltobottom". * etc/ERC-NEWS: Mention removal of formal dependency. * lisp/erc/erc-fill.el (erc-fill--wrap-scrolltobottom-exempt-p): Remove unused variable. (erc-fill--wrap-ensure-dependencies): Remove unused dependency check. (erc-fill-wrap-mode): Remove scrolltobottom dependency from doc string. * test/lisp/erc/erc-fill-tests.el (erc-fill-tests--wrap-populate): Remove unused binding from var list. * test/lisp/erc/resources/erc-scenarios-common.el (erc-scenarios-common--make-bindings): Remove unused binding. diff --git a/etc/ERC-NEWS b/etc/ERC-NEWS index dd960994b4f..513ed8f706d 100644 --- a/etc/ERC-NEWS +++ b/etc/ERC-NEWS @@ -36,6 +36,10 @@ The command 'erc-fill-wrap-cycle-visual-movement' was mistakenly given the key binding "C-c a" in an inadvertent holdover from development. It has been removed. +** The 'fill-wrap' module no longer depends on 'scrolltobottom'. +This change also affects the option 'erc-fill-function' when it's set to +'erc-fill-wrap'. + ** Updated defaults for the 'track' module's face-list options. The default values of options 'erc-track-faces-priority-list' and 'erc-track-faces-normal-list' have both gained a face for buttonized diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el index c4c9b6da76d..291dcc2e306 100644 --- a/lisp/erc/erc-fill.el +++ b/lisp/erc/erc-fill.el @@ -417,11 +417,8 @@ is 0, reset to value of `erc-fill-wrap-visual-keys'." " " #'erc-fill--wrap-beginning-of-line) (defvar erc-button-mode) -(defvar erc-scrolltobottom-mode) (defvar erc-legacy-invisible-bounds-p) -(defvar erc-fill--wrap-scrolltobottom-exempt-p nil) - (defun erc-fill--wrap-ensure-dependencies () (with-suppressed-warnings ((obsolete erc-legacy-invisible-bounds-p)) (when erc-legacy-invisible-bounds-p @@ -434,10 +431,6 @@ is 0, reset to value of `erc-fill-wrap-visual-keys'." (unless erc-fill-mode (push 'fill missing-deps) (erc-fill-mode +1)) - (unless (or erc-scrolltobottom-mode erc-fill--wrap-scrolltobottom-exempt-p - (memq 'scrolltobottom erc-modules)) - (push 'scrolltobottom missing-deps) - (erc-scrolltobottom-mode +1)) (when erc-fill-wrap-merge (require 'erc-button) (unless erc-button-mode @@ -515,11 +508,10 @@ This normally poses at most a minor inconvenience. Users of the logged messages and instead prepends them to every line. A so-called \"local\" module, `fill-wrap' depends on the global -modules `fill', `stamp', `button', and `scrolltobottom'. It -activates them as needed when initializing and leaves them -enabled when shutting down. To opt out of `scrolltobottom' -specifically, disable its minor mode, `erc-scrolltobottom-mode', -via `erc-fill-wrap-mode-hook'." +modules `fill', `stamp', `button'. It therefore activates them +as needed when initializing and leaves them enabled when shutting +down. Users may also find the `scrolltobottom' module a +necessary addition for this fill style." ((erc-fill--wrap-ensure-dependencies) (when erc-fill-wrap-merge-indicator (erc-fill--wrap-massage-legacy-indicator-type)) diff --git a/test/lisp/erc/erc-fill-tests.el b/test/lisp/erc/erc-fill-tests.el index bfc12d919c0..13a3e107d38 100644 --- a/test/lisp/erc/erc-fill-tests.el +++ b/test/lisp/erc/erc-fill-tests.el @@ -52,7 +52,6 @@ (defun erc-fill-tests--wrap-populate (test) (let ((original-window-buffer (window-buffer (selected-window))) - (erc-fill--wrap-scrolltobottom-exempt-p t) (erc-stamp--tz t) (erc-fill-function 'erc-fill-wrap) (pre-command-hook pre-command-hook) diff --git a/test/lisp/erc/resources/erc-scenarios-common.el b/test/lisp/erc/resources/erc-scenarios-common.el index f193f3fb070..ce7595363c9 100644 --- a/test/lisp/erc/resources/erc-scenarios-common.el +++ b/test/lisp/erc/resources/erc-scenarios-common.el @@ -150,7 +150,6 @@ (timer-list (copy-sequence timer-list)) (timer-idle-list (copy-sequence timer-idle-list)) (erc-auth-source-parameters-join-function nil) - (erc-fill--wrap-scrolltobottom-exempt-p t) (erc-autojoin-channels-alist nil) (erc-server-auto-reconnect nil) (erc-after-connect nil) commit c711ba3c7bcab1b0900604425283fc018257abe0 Author: F. Jason Park Date: Sun Aug 24 19:27:47 2025 -0700 Prefer window-text-pixel-size in erc-fill * lisp/erc/erc-fill.el (erc-fill--wrap-measure): Using `buffer-text-pixel-size' for measuring text size in the selected window can end up triggering a scroll, which then requires imperfect countering by the scrolltobottom module, especially with regard to the option `erc-scrolltobottom-all'. Thanks to Alcor for reporting and helping with this bug, which was introduced along with fill-wrap in ERC 5.6. diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el index 145a4c174a8..c4c9b6da76d 100644 --- a/lisp/erc/erc-fill.el +++ b/lisp/erc/erc-fill.el @@ -618,14 +618,20 @@ message has been marked `erc--ephemeral'." Ignore any `invisible' props that may be present when figuring. Expect the target region to be free of `line-prefix' and `wrap-prefix' properties, and expect `display-line-numbers-mode' -to be disabled." +to be disabled. On Emacs 28 and below, return END minus BEG." + ;; Rely on `buffer-text-pixel-size' here even for buffers displayed in + ;; another window because temporarily selecting such windows via + ;; `with-selected-window' seems to interfere with the implementation + ;; of `erc-scrolltobottom-all' in ERC 5.6, which needs improvement. (if (fboundp 'buffer-text-pixel-size) ;; `buffer-text-pixel-size' can move point! (save-excursion (save-restriction (narrow-to-region beg end) (let* ((buffer-invisibility-spec) - (rv (car (buffer-text-pixel-size)))) + (rv (car (if (eq (selected-window) (get-buffer-window)) + (window-text-pixel-size) + (buffer-text-pixel-size))))) (if erc-fill-wrap-use-pixels (if (zerop rv) 0 (list rv)) (/ rv (frame-char-width)))))) commit 54bd2264d3347895aacc926b33c6f1bb5af5fa0d Author: john muhl Date: Sun Aug 24 11:29:43 2025 -0500 Fix 'ruby-flymake-simple' for Ruby 3.4 (Bug#79257) * lisp/progmodes/ruby-mode.el (ruby-flymake-simple): Update regular expression to handle new versions of Ruby including the location of the executable in the output. diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 1079aad1a55..5c8a4025419 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -2516,7 +2516,7 @@ A slash character after any of these should begin a regexp.")) (goto-char (point-min)) (cl-loop while (search-forward-regexp - "^\\(?:.*\\.rb\\|-\\):\\([0-9]+\\): \\(.*\\)$" + "^\\(?:.*ruby: \\)?\\(?:.*\\.rb\\|-\\):\\([0-9]+\\): \\(.*\\)$" nil t) for msg = (match-string 2) for (beg . end) = (flymake-diag-region commit 21b072c6074466f3ec7d2489b82e21d8b0cae265 Author: Eli Zaretskii Date: Mon Aug 25 22:27:10 2025 +0300 Fix use of display-table for mode-line display * src/xdisp.c (next_element_from_display_vector): Fix handling non-ASCII characters in display-table cells corresponding to ASCII characters. (Bug#79311) diff --git a/src/xdisp.c b/src/xdisp.c index 6411fd23335..59483768d92 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -9156,6 +9156,10 @@ next_element_from_display_vector (struct it *it) it->c = GLYPH_CODE_CHAR (gc); it->len = CHAR_BYTES (it->c); + /* The character code in the display vector could be non-ASCII, in + which case we must make the iterator multibyte, so that a + suitable font for the character is looked up. */ + it->multibyte_p = !ASCII_CHAR_P (it->c); /* The entry may contain a face id to use. Such a face id is the id of a Lisp face, not a realized face. A face id of commit 9bde50d6fd2afbba0aaf9a65f9699b9f001b08e0 Author: Michael Albinus Date: Mon Aug 25 20:13:02 2025 +0200 ; Comment out tramp-hlo in tramp.texi * doc/misc/tramp.texi (Frequently Asked Questions): Comment out tramp-hlo. It hasn't landed in GNU ELPA yet. diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 2944978f8ee..f2b1ddbcfb6 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -5478,12 +5478,12 @@ Disable excessive traces. Set @code{tramp-verbose} to 3 or lower, default being 3. Increase trace levels temporarily when hunting for bugs. -@item -Use a package with @value{tramp} specific implementation of high-level -operations. For example, the GNU ELPA package @file{tramp-hlo} -implements specialized versions of @code{dir-locals--all-files}, -@code{locate-dominating-file} and @code{dir-locals-find-file} for -@value{tramp}'s @code{tramp-sh} backend (@pxref{New operations}). +@c @item +@c Use a package with @value{tramp} specific implementation of high-level +@c operations. For example, the GNU ELPA package @file{tramp-hlo} +@c implements specialized versions of @code{dir-locals--all-files}, +@c @code{locate-dominating-file} and @code{dir-locals-find-file} for +@c @value{tramp}'s @code{tramp-sh} backend (@pxref{New operations}). @end itemize commit f884b1acef5e053fa33b2ebd3bce100fe643d71a Author: Eli Zaretskii Date: Mon Aug 25 20:44:36 2025 +0300 Fix assertion violations caused by recent redisplay changes * src/xdisp.c (push_it): Don't rest the string_from_prefix_prop_p flag. (Bug#79304) diff --git a/src/xdisp.c b/src/xdisp.c index 4f6acb84bbf..6411fd23335 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -7261,8 +7261,6 @@ push_it (struct it *it, struct text_pos *position) p->from_disp_prop_p = it->from_disp_prop_p; ++it->sp; - it->string_from_prefix_prop_p = false; - /* Save the state of the bidi iterator as well. */ if (it->bidi_p) bidi_push_it (&it->bidi_it); commit 0c49f5917fdd46a8f34181e66b3c11a8657d6bf2 Author: Eli Zaretskii Date: Mon Aug 25 18:19:14 2025 +0300 Attempt to fix assertion violations in bug#79304 The following changes make the changes for bug#79275 less radical, closer to their previous shape, while still fixing that bug. * src/xdisp.c (push_prefix_prop, get_it_property): Restore original code that determined the object and position on it. (get_line_prefix_it_property): Take FROM_BUFFER from the actual object of the prefix property. diff --git a/src/xdisp.c b/src/xdisp.c index b8088f692c4..4f6acb84bbf 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -24736,18 +24736,8 @@ cursor_row_p (struct glyph_row *row) static bool push_prefix_prop (struct it *it, Lisp_Object prop, int from_buffer) { - struct text_pos pos; - - if (STRINGP (it->string)) - { - if (from_buffer) /* a string, but prefix property from buffer */ - pos = it->current.string_pos; - else /* a string and prefix property from string */ - pos.charpos = pos.bytepos = 0; /* we have yet to iterate that string */ - } - else /* a buffer and prefix property from buffer */ - pos = it->current.pos; - + struct text_pos pos = + STRINGP (it->string) ? it->current.string_pos : it->current.pos; bool phoney_display_string = from_buffer && STRINGP (it->string) && it->string_from_display_prop_p; @@ -24844,14 +24834,11 @@ push_prefix_prop (struct it *it, Lisp_Object prop, int from_buffer) static Lisp_Object get_it_property (struct it *it, Lisp_Object prop) { - Lisp_Object position, object; + Lisp_Object position, object = it->object; - if (STRINGP (it->string)) - { - position = make_fixnum (IT_STRING_CHARPOS (*it)); - object = it->string; - } - else if (BUFFERP (it->object)) + if (STRINGP (object)) + position = make_fixnum (IT_STRING_CHARPOS (*it)); + else if (BUFFERP (object)) { position = make_fixnum (IT_CHARPOS (*it)); object = it->window; @@ -24871,11 +24858,11 @@ get_line_prefix_it_property (struct it *it, Lisp_Object prop, { Lisp_Object prefix = get_it_property (it, prop); - *from_buffer = false; + *from_buffer = BUFFERP (it->object); /* If we are looking at a display or overlay string, check also the underlying buffer text. */ - if (NILP (prefix) && it->sp > 0 && STRINGP (it->string)) + if (NILP (prefix) && it->sp > 0 && STRINGP (it->object)) { *from_buffer = true; return Fget_char_property (make_fixnum (IT_CHARPOS (*it)), prop, commit e1ee5c62890db9e00637e5e8ce27e966cf84a553 Author: Andre A. Gomes Date: Mon Aug 25 15:14:14 2025 +0300 Pass remote name explicitly in bug-reference-try-setup-from-vc. * lisp/progmodes/bug-reference.el (bug-reference-setup-from-vc-alist): Add comment explaining the meaning of the nil argument when calling vc-call-backend. Even though "origin" and nil are equivalent when using the git backend, it is more intelligible to see "upstream" and "origin" passed explicitly (bug#79276). diff --git a/lisp/progmodes/bug-reference.el b/lisp/progmodes/bug-reference.el index 5c03c949049..9901d5df245 100644 --- a/lisp/progmodes/bug-reference.el +++ b/lisp/progmodes/bug-reference.el @@ -393,7 +393,12 @@ applicable." (ignore-errors (vc-call-backend backend 'repository-url file-or-dir remote))) - '("upstream" nil)))) + ;; Try likely names for the remote which + ;; probably hosts the bug tracker. The nil + ;; value refers to the default remote name + ;; of the concrete VCS which is "origin" + ;; for Git or "default" for mercurial. + '("upstream" "origin" nil)))) (seq-some (lambda (config) (apply #'bug-reference-maybe-setup-from-vc url config)) (append bug-reference-setup-from-vc-alist