emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master e51e43b7046 09/15: Fix buffer-mismatch bug in erc-scroll-to-botto


From: F. Jason Park
Subject: master e51e43b7046 09/15: Fix buffer-mismatch bug in erc-scroll-to-bottom
Date: Thu, 13 Jul 2023 21:50:42 -0400 (EDT)

branch: master
commit e51e43b7046b56c58310854182a1d589ee4c770c
Author: F. Jason Park <jp@neverwas.me>
Commit: F. Jason Park <jp@neverwas.me>

    Fix buffer-mismatch bug in erc-scroll-to-bottom
    
    * lisp/erc/erc-goodies.el (erc-scroll-to-bottom): Only `recenter' when
    the selected window's buffer is current.  Previously, the module
    `scrolltobottom' signaled an "Error in `post-command-hook'" when a
    user clicked a channel indicator in the mode line from a window
    showing another ERC buffer.
    * lisp/erc/erc-track.el (erc-track--switch-fallback-blockers): New
    internal variable used by `erc-track--switch-buffer' in deciding
    whether to set `erc-track-last-non-erc-buffer' to the current buffer.
    (erc-track--switch-buffer): Consult list of `buffer-match-p'
    conditions in `erc-track--switch-fallback-blockers' to decide whether
    to set `erc-track-last-non-erc-buffer' to the current buffer.
    (Bug#63595)
---
 lisp/erc/erc-goodies.el | 1 +
 lisp/erc/erc-track.el   | 9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el
index afc05148506..96083de2c22 100644
--- a/lisp/erc/erc-goodies.el
+++ b/lisp/erc/erc-goodies.el
@@ -91,6 +91,7 @@ variable `erc-input-line-position'."
     (save-restriction
       (widen)
       (when (and erc-insert-marker
+                 (eq (current-buffer) (window-buffer))
                 ;; we're editing a line. Scroll.
                 (> (point) erc-insert-marker))
        (save-excursion
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index 8101183ce3d..64e59a90047 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -923,13 +923,20 @@ is relative to `erc-track-switch-direction'."
           (setq offset 0)))
     (car (nth offset erc-modified-channels-alist))))
 
+(defvar erc-track--switch-fallback-blockers '((derived-mode . erc-mode))
+  "List of `buffer-match-p' conditions OR'd together.
+ERC sets `erc-track-last-non-erc-buffer' to the current buffer
+unless any passes.")
+
 (defun erc-track--switch-buffer (fun arg)
   (if (not erc-track-mode)
       (message (concat "Enable the ERC track module if you want to use the"
                       " tracking minor mode"))
     (cond (erc-modified-channels-alist
           ;; if we're not in erc-mode, set this buffer to return to
-          (unless (eq major-mode 'erc-mode)
+           (unless (buffer-match-p (cons 'or
+                                         erc-track--switch-fallback-blockers)
+                                   (current-buffer))
             (setq erc-track-last-non-erc-buffer (current-buffer)))
           ;; and jump to the next active channel
            (if-let ((buf (erc-track-get-active-buffer arg))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]