From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: "J.P." Newsgroups: gmane.emacs.bugs,gmane.emacs.erc.general Subject: bug#64855: 30.0.50; ERC 5.6: Make scrolltobottom less erratic Date: Tue, 25 Jul 2023 06:40:24 -0700 Message-ID: <87h6psyurb.fsf@neverwas.me> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23589"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: emacs-erc@gnu.org To: 64855@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Jul 25 15:41:23 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qOIHy-0005rY-7x for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 25 Jul 2023 15:41:22 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qOIHg-0003gB-Vi; Tue, 25 Jul 2023 09:41:05 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qOIHe-0003bZ-7F; Tue, 25 Jul 2023 09:41:03 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qOIHd-00009o-Vu; Tue, 25 Jul 2023 09:41:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qOIHd-00065i-RR; Tue, 25 Jul 2023 09:41:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: "J.P." Original-Sender: "Debbugs-submit" Resent-CC: emacs-erc@gnu.org, bug-gnu-emacs@gnu.org Resent-Date: Tue, 25 Jul 2023 13:41:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 64855 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org X-Debbugs-Original-Xcc: emacs-erc@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.169029245123384 (code B ref -1); Tue, 25 Jul 2023 13:41:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 25 Jul 2023 13:40:51 +0000 Original-Received: from localhost ([127.0.0.1]:44928 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qOIHS-000656-4m for submit@debbugs.gnu.org; Tue, 25 Jul 2023 09:40:50 -0400 Original-Received: from lists.gnu.org ([2001:470:142::17]:33076) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qOIHQ-00064f-0P for submit@debbugs.gnu.org; Tue, 25 Jul 2023 09:40:49 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qOIHD-0003Vr-1a for bug-gnu-emacs@gnu.org; Tue, 25 Jul 2023 09:40:35 -0400 Original-Received: from mail-108-mta165.mxroute.com ([136.175.108.165]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qOIHA-00007y-3y for bug-gnu-emacs@gnu.org; Tue, 25 Jul 2023 09:40:34 -0400 Original-Received: from mail-111-mta2.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta165.mxroute.com (ZoneMTA) with ESMTPSA id 1898d4797990004cef.001 for (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384); Tue, 25 Jul 2023 13:40:26 +0000 X-Zone-Loop: d5927c8f1f7dc4dc93ca417af3184c151e8dcff41f7b X-Originating-IP: [136.175.111.2] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=neverwas.me ; s=x; h=Content-Type:MIME-Version:Message-ID:Date:Subject:To:From:Sender: Reply-To:Cc:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=GiYaGJH8MGm2qdCy6kPIQpDQEBXdrRm+/SUZilJtgn0=; b=GxE58F4u9vvOG8y1sl/cbhvBRj ezEa6qobw+D2rV/jB9wtIAmbBk5XzNlvQWzlGzJ4RUWG/ZC3QgDpjOX0cohbrB8PrqtGS160MUaOj CSjMdD04LpZutmzhdv/7yY4B98nXvAJhWSSw9k+fSC6tA9fC3OjXIbkDsDsMS2v4jAVKq2e+mfs9A f2C3lCGjABJX3gQ7ZYE3IH/MOgfaozpcFuz0VG29Vh4/yFsW7oLeeCGTQE/pWrroOKynM6zOzLnpl u//XrfGMOBUWIb3AKb9abDCw+BsVpv3ItQ35yCRdPajJQeagG8Wa4eWHGAGRNYQCsuv4GgPJXZMcY JiwjbhUw==; X-Authenticated-Id: masked@neverwas.me Received-SPF: pass client-ip=136.175.108.165; envelope-from=jp@neverwas.me; helo=mail-108-mta165.mxroute.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:266063 gmane.emacs.erc.general:2217 Archived-At: --=-=-= Content-Type: text/plain Tags: patch A minor bug fix involving the `scrolltobottom' module (and originally lumped in with the mostly unrelated bug#63595) eventually materialized on HEAD as [1]. While it did fix the bug, it didn't really address any of the related foundational issues that have haunted `scrolltobottom' since the beginning. The attached patch is meant to make the module more predictable and consistent overall, while specifically addressing - the effect only being applied in the selected window - the effect not responding to changes in window size - the gradual scrolling of point toward the centermost line when away from the prompt (on graphical displays) People miffed by this module's rough edges are encouraged to try these changes and give feedback. Thanks. [1] commit e51e43b7046b56c58310854182a1d589ee4c770c Author: F. Jason Park Date: Wed May 17 19:48:02 2023 -0700 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. [...] (Bug#63595) lisp/erc/erc-goodies.el | 1 + lisp/erc/erc-track.el | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.6) of 2023-07-25 built on localhost Repository revision: 89558533683a100ca7946c4a35bf4ef50463efef Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12014000 System Description: Fedora Linux 37 (Workstation Edition) Configured using: 'configure --enable-check-lisp-object-type --enable-checking=yes,glyphs 'CFLAGS=-O0 -g3' PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message mailcap yank-media puny dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util text-property-search time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils erc auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x map format-spec cl-loaddefs cl-lib erc-backend erc-networks byte-opt gv bytecomp byte-compile erc-common erc-compat erc-loaddefs rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo gtk x-toolkit xinput2 x multi-tty move-toolbar make-network-process emacs) Memory information: ((conses 16 64796 9162) (symbols 48 8637 0) (strings 32 23386 1972) (string-bytes 1 680274) (vectors 16 15042) (vector-slots 8 207499 8948) (floats 8 24 41) (intervals 56 225 0) (buffers 976 10)) --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-5.6-Consider-all-windows-in-erc-scrolltobottom-mode.patch >From 5ce39aa8adfefc85208448ff1d254766f15892e1 Mon Sep 17 00:00:00 2001 From: "F. Jason Park" Date: Sat, 22 Jul 2023 00:46:44 -0700 Subject: [PATCH] [5.6] Consider all windows in erc-scrolltobottom-mode * lisp/erc/erc-goodies.el (erc-scrolltobottom-mode, erc-scrolltobottom-enable, erc-scrolltobottom-disable): Use `erc--scroll-to-bottom-all' instead of `erc-possibly-scroll-to-bottom' for `erc-insert-done-hook' and now also `erc-send-completed-hook'. Call `erc-add-scroll-to-bottom' for teardown as well. (erc--scroll-to-bottom-debounce-expire): New variable. (erc-possibly-scroll-to-bottom): Don't bother scrolling when user has done so recently. (erc--scroll-to-bottom-all): New function to scroll in all windows of the current buffer. (erc-add-scroll-to-bottom): Perform teardown as well when mode is disabled. Also run on `window-configuration-changed-hook'. (erc-scroll-to-bottom): Use `window-point' instead of `point'. --- lisp/erc/erc-goodies.el | 81 +++++++++++++++++++++++++++++++++++------ 1 file changed, 70 insertions(+), 11 deletions(-) diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el index d9ededa8e68..af44b98e0bf 100644 --- a/lisp/erc/erc-goodies.el +++ b/lisp/erc/erc-goodies.el @@ -52,34 +52,93 @@ erc-input-line-position (define-erc-module scrolltobottom nil "This mode causes the prompt to stay at the end of the window." ((add-hook 'erc-mode-hook #'erc-add-scroll-to-bottom) - (add-hook 'erc-insert-done-hook #'erc-possibly-scroll-to-bottom) + (add-hook 'erc-insert-pre-hook #'erc--on-pre-insert) + (add-hook 'erc-insert-done-hook #'erc--scroll-to-bottom-all) + (add-hook 'erc-send-completed-hook #'erc--scroll-to-bottom-all) (unless erc--updating-modules-p (erc-buffer-do #'erc-add-scroll-to-bottom))) ((remove-hook 'erc-mode-hook #'erc-add-scroll-to-bottom) - (remove-hook 'erc-insert-done-hook #'erc-possibly-scroll-to-bottom) - (dolist (buffer (erc-buffer-list)) - (with-current-buffer buffer - (remove-hook 'post-command-hook #'erc-scroll-to-bottom t))))) + (remove-hook 'erc-insert-pre-hook #'erc--on-pre-insert) + (remove-hook 'erc-insert-done-hook #'erc--scroll-to-bottom-all) + (remove-hook 'erc-send-completed-hook #'erc--scroll-to-bottom-all) + (erc-buffer-do #'erc-add-scroll-to-bottom))) + +(defvar-local erc--scroll-to-bottom-debounce-expire nil + "Time after which `scrolltobottom' is allowed to run. +Set to a fraction of a second in the future on every refresh.") + +(defvar-local erc--scroll-to-bottom-last-window-start nil + "A cons of a window and a starting position.") (defun erc-possibly-scroll-to-bottom () "Like `erc-add-scroll-to-bottom', but only if window is selected." (when (eq (selected-window) (get-buffer-window)) (erc-scroll-to-bottom))) +(defun erc--possibly-scroll-to-bottom () + "Call `erc-scroll-to-bottom' when buffer occupies selected window. +Skip when `erc--scroll-to-bottom-debounce-expire' has not yet +arrived." + (when (eq (selected-window) (get-buffer-window)) + (unless (eq this-command 'recenter-top-bottom) + (let (erc--scroll-to-bottom-last-window-start) + (erc--scroll-to-bottom))))) + +(defun erc--scroll-to-bottom-all (&rest _) + "Run `erc-scroll-to-bottom' in all windows showing current buffer." + (dolist (window (get-buffer-window-list nil nil 'visible)) + (with-selected-window window + (erc--scroll-to-bottom)))) + (defun erc-add-scroll-to-bottom () - "A hook function for `erc-mode-hook' to recenter output at bottom of window. + "Arrange for `scrolltobottom' to refresh on window configuration changes. +Undo that arrangement when `erc-scrolltobottom-mode' is disabled. If you find that ERC hangs when using this function, try customizing the value of `erc-input-line-position'. -This works whenever scrolling happens, so it's added to -`window-scroll-functions' rather than `erc-insert-post-hook'." - (add-hook 'post-command-hook #'erc-scroll-to-bottom nil t)) +Note that the prior suggestion comes from a time when this +function used `window-scroll-functions', which was replaced by +`post-command-hook' in ERC 5.3." + (if erc-scrolltobottom-mode + (progn + (add-hook 'window-configuration-change-hook + #'erc--possibly-scroll-to-bottom nil t) + (add-hook 'post-command-hook + #'erc--possibly-scroll-to-bottom nil t)) + (remove-hook 'window-configuration-change-hook + #'erc--possibly-scroll-to-bottom t) + (remove-hook 'post-command-hook + #'erc--possibly-scroll-to-bottom t))) + +(defun erc--on-pre-insert (&rest _) + (when (eq (selected-window) (get-buffer-window)) + (setq erc--scroll-to-bottom-last-window-start + (cons (selected-window) (window-start))))) + +(defun erc--scroll-to-bottom () + "Like `erc-scroll-to-bottom', but use `window-point'. +Expect to run in some window, not necessarily the user-selected +one." + (when erc-insert-marker + (let ((resize-mini-windows nil)) + (save-restriction + (widen) + (if (>= (window-point) erc-input-marker) + (save-excursion + (goto-char (point-max)) + (recenter (or erc-input-line-position -1))) + (when (and erc--scroll-to-bottom-last-window-start + ;; `selected-window' means the one being visited. + (eq (selected-window) + (car erc--scroll-to-bottom-last-window-start))) + (save-excursion + (goto-char (cdr erc--scroll-to-bottom-last-window-start)) + (let ((recenter-positions '(top))) + (recenter-top-bottom))))))))) (defun erc-scroll-to-bottom () "Recenter WINDOW so that `point' is on the last line. -This is added to `window-scroll-functions' by `erc-add-scroll-to-bottom'. - You can control which line is recentered to by customizing the variable `erc-input-line-position'." ;; Temporarily bind resize-mini-windows to nil so that users who have it -- 2.41.0 --=-=-=--