From: Laurence Warne <laurencewarne@gmail.com>
To: 60381@debbugs.gnu.org
Subject: bug#60381: [PATCH] Preserve Window Position with Proced
Date: Wed, 28 Dec 2022 15:55:20 +0000 [thread overview]
Message-ID: <CAE2oLqi5v_A0O1qbqKyjY=RxAZ_bDiP-taP1fHGygPwDfvH+6Q@mail.gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 1311 bytes --]
Hi,
This patch fixes a minor issue with proced buffers. Previously, the window
position would be set to the start of the buffer when a proced buffer was
updated and it was not displayed in the selected window. To reproduce:
(require 'proced)
(setq-default proceed-auto-update-flag t)
(M-x proced)
Move down to the next process, then change to a different window, and wait
a bit. You should see the point in the proced buffer move back to the
beginning of the buffer. A similar issue occurs when the proced buffer is
not displayed in any window.
This patch addresses this by setting the window point (if applicable)
whenever a proced buffer is updated, and the second issue by not updating a
proced buffer if it is not displayed in any window.
I tried to add a test for this, but for example this:
(ert-deftest proced-update-preserves-point-test ()
(proced--within-buffer
'medium
'user
(proced--move-to-column "PID")
(let ((point (window-point))
(window (split-window)))
(select-window window)
(bury-buffer)
(with-current-buffer "*Proced*"
(proced-update t t))
(switch-to-buffer "*Proced*")
(should (= point (window-point))))))
passes even without this patch (though if I step through it with
edebug-defun it fails as expected).
Thanks, Laurence
[-- Attachment #1.2: Type: text/html, Size: 1674 bytes --]
[-- Attachment #2: 0001-Preserve-the-window-position-with-proced.patch --]
[-- Type: text/x-patch, Size: 2221 bytes --]
From 90bf6675bdf50a0fd3392b7ac4acc56e1e6436c4 Mon Sep 17 00:00:00 2001
From: Laurence Warne <laurencewarne@gmail.com>
Date: Thu, 22 Dec 2022 17:16:08 +0000
Subject: [PATCH] Preserve the window position with proced
Preserve the window position for windows which display a proced buffer,
but are not the selected window when a proced buffer is updated. Previously,
the window position would be set to the start of the buffer when a
proced buffer was updated and it was not displayed in the selected window.
* lisp/proced.el (proced-auto-update-timer): Only update a given
proced buffer if it is displayed in a window.
(proced-update): Set the window position if the proced buffer is
displayed in a window.
---
lisp/proced.el | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/lisp/proced.el b/lisp/proced.el
index c09ee18a8b..102171bef0 100644
--- a/lisp/proced.el
+++ b/lisp/proced.el
@@ -905,7 +905,8 @@ proced-auto-update-timer
(unless (seq-filter (lambda (buf)
(with-current-buffer buf
(when (eq major-mode 'proced-mode)
- (if proced-auto-update-flag
+ (if (and proced-auto-update-flag
+ (get-buffer-window buf t))
(proced-update t t))
t)))
(buffer-list))
@@ -1986,7 +1987,13 @@ proced-update
;; done
(or quiet (input-pending-p)
(message (if revert "Updating process information...done."
- "Updating process display...done.")))))
+ "Updating process display...done."))))
+ ;; This sets the window point for all windows displaying the Proced buffer
+ ;; which means all windows will have their point set to the most recently
+ ;; visited window displaying the buffer. Possibly we could save all window
+ ;; points ahead of time, though this is more complicated.
+ (mapc (lambda (win) (set-window-point win (point)))
+ (get-buffer-window-list (current-buffer))))
(defun proced-revert (&rest _args)
"Reevaluate the process listing based on the currently running processes.
--
2.30.2
next reply other threads:[~2022-12-28 15:55 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-28 15:55 Laurence Warne [this message]
2022-12-28 17:14 ` bug#60381: [PATCH] Preserve Window Position with Proced Eli Zaretskii
2022-12-28 20:30 ` Laurence Warne
2022-12-29 6:09 ` Eli Zaretskii
2022-12-29 12:52 ` Laurence Warne
2022-12-29 14:09 ` Eli Zaretskii
[not found] ` <CAE2oLqh5i-fFVeYwyRufWhFZzrxDCfO+VrWFpe3tRLW9OJKUbg@mail.gmail.com>
2022-12-29 17:37 ` Eli Zaretskii
2023-01-05 15:59 ` Laurence Warne
2023-01-07 9:28 ` Eli Zaretskii
2023-01-07 11:58 ` Laurence Warne
2023-01-07 13:28 ` Eli Zaretskii
2023-01-07 17:23 ` Laurence Warne
2023-01-14 8:40 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAE2oLqi5v_A0O1qbqKyjY=RxAZ_bDiP-taP1fHGygPwDfvH+6Q@mail.gmail.com' \
--to=laurencewarne@gmail.com \
--cc=60381@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.