From: Juri Linkov <juri@linkov.net>
To: martin rudalics <rudalics@gmx.at>
Cc: 69993@debbugs.gnu.org
Subject: bug#69993: Wrap window buffers while cycling
Date: Tue, 02 Apr 2024 09:37:36 +0300 [thread overview]
Message-ID: <86v850jmmo.fsf@mail.linkov.net> (raw)
In-Reply-To: <efd1b8d1-cec3-4e18-8aba-7fc2db9edaba@gmx.at> (martin rudalics's message of "Sun, 31 Mar 2024 10:32:30 +0200")
> The Elisp manual says about 'switch-to-prev-buffer'
>
> The previous buffer is usually the buffer shown before the buffer
> currently shown in WINDOW. However, a buffer that has been buried
> or killed, or has been already shown by a recent invocation of
> ‘switch-to-prev-buffer’, does not qualify as previous buffer.
I see that the Elisp manual also says about 'switch-to-prev-buffer':
-- Command: bury-buffer &optional buffer-or-name
...
(*note Quitting Windows::). Otherwise, it calls
‘switch-to-prev-buffer’ (*note Window History::)
to show another buffer in that window.
This means that it reuses switch-to-prev-buffer to show any available
buffer, even the buffers that were never shown in that window.
This means that such calls should be wrapped with let-bind
to handle the case when the list of prev/next-buffers becomes empty
to switch to any other buffer not shown in that window before:
@@ -4994,7 +5042,8 @@ bury-buffer
(t
;; Switch to another buffer in window.
(set-window-dedicated-p nil nil)
- (switch-to-prev-buffer nil 'bury)))
+ (let ((switch-to-prev-buffer-wrap nil))
+ (switch-to-prev-buffer nil 'bury))))
;; Always return nil.
nil))
Also for:
-- Command: replace-buffer-in-windows &optional buffer-or-name
...
The replacement buffer in each window is chosen via
‘switch-to-prev-buffer’ (*note Window History::).
need the same:
@@ -5145,7 +5194,8 @@ replace-buffer-in-windows
(when (or dedicated-side (not (window--delete window t t)))
;; Switch to another buffer in that window.
(set-window-dedicated-p window nil)
- (if (switch-to-prev-buffer window 'kill)
+ (if (let ((switch-to-prev-buffer-wrap nil))
+ (switch-to-prev-buffer window 'kill))
(and dedicated-side (set-window-dedicated-p window 'side))
(window--delete window nil 'kill))))
;; Unrecord BUFFER in WINDOW.
And for:
-- Function: quit-restore-window &optional window bury-or-kill
...
As a consequence, if WINDOW is not deleted, invoking
‘switch-to-prev-buffer’ will usually show the buffer again.
need the same:
@@ -5292,7 +5340,8 @@ quit-restore-window
(set-window-dedicated-p window nil)
;; Try to switch to a previous buffer. Delete the window only if
;; that is not possible (Bug#48367).
- (if (switch-to-prev-buffer window bury-or-kill)
+ (if (let ((switch-to-prev-buffer-wrap nil))
+ (switch-to-prev-buffer window bury-or-kill))
(when (eq dedicated 'side)
(set-window-dedicated-p window 'side))
(window--delete window nil (eq bury-or-kill 'kill))
The Elisp manual doesn't mention that delete-windows-on
uses switch-to-prev-buffer, unlike it mentions other functions:
The ‘switch-to-prev-buffer’ command, in particular, is
used by ‘replace-buffer-in-windows’, ‘bury-buffer’ and ‘quit-window’ to
find a replacement buffer for a window.
but delete-windows-on still needs the same:
@@ -5116,7 +5164,8 @@ delete-windows-on
(t
;; In window switch to previous buffer.
(set-window-dedicated-p window nil)
- (switch-to-prev-buffer window 'bury)
+ (let ((switch-to-prev-buffer-wrap nil))
+ (switch-to-prev-buffer window 'bury))
;; Restore the dedicated 'side' flag.
(when (eq dedicated 'side)
(set-window-dedicated-p window 'side)))))
> Admittedly, "recent" is not very precise. The idea is, among others,
> that an intervening C-x b will make "recent invocations" appear as if
> they never happened.
'C-x b' is not different from 'C-x <left>' and 'C-x <right>'
when the buffer selected for 'C-x b' was already shown in the window.
> I think the following is problematic:
>
> (defun tab-line-switch-to-prev-tab (&optional event)
> "Switch to the previous tab's buffer.
> Its effect is the same as using the `previous-buffer' command
> (\\[previous-buffer])."
>
> If the "previous tab" does not show the buffer 'switch-to-prev-buffer'
> would switch to, then the doc is wrong. I'm not sure whether
> 'tab-line-tabs-window-buffers' can guarantee that this chooses the same
> buffer 'switch-to-prev-buffer' would switch to, though. If it doesn't,
> then the effect should be that of C-x b switching to a buffer earlier
> shown in that window. BTW, burying a buffer removes it from the tab
> line but does not prevent 'switch-to-prev-buffer' from switching to it -
> it just makes it very unlikely IIRC.
tab-line-switch-to-prev-tab doesn't choose buffers itself:
for tab-line-tabs-window-buffers it just delegates the task
to switch-to-prev-buffer.
next prev parent reply other threads:[~2024-04-02 6:37 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-25 7:42 bug#69993: Wrap window buffers while cycling Juri Linkov
2024-03-25 9:41 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-25 17:16 ` Juri Linkov
2024-03-26 9:56 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-27 7:20 ` Juri Linkov
2024-03-27 8:48 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-28 7:54 ` Juri Linkov
2024-03-28 9:19 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-28 17:57 ` Juri Linkov
2024-03-29 8:45 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-29 16:35 ` Juri Linkov
2024-03-30 9:37 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-30 18:24 ` Juri Linkov
2024-03-31 8:32 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-02 6:37 ` Juri Linkov [this message]
2024-04-02 8:22 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-02 16:28 ` Juri Linkov
2024-04-03 8:24 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-03 17:45 ` Juri Linkov
2024-04-04 8:03 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-05 6:45 ` Juri Linkov
2024-04-05 9:08 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-05 16:32 ` Juri Linkov
2024-04-06 18:43 ` Juri Linkov
2024-04-07 8:23 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-09 6:35 ` Juri Linkov
2024-04-09 9:04 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-09 16:37 ` Juri Linkov
2024-04-10 8:46 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-10 17:45 ` Juri Linkov
2024-04-11 9:18 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-12 6:35 ` Juri Linkov
2024-04-12 8:37 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-12 16:23 ` Juri Linkov
2024-04-14 16:15 ` Juri Linkov
2024-04-16 6:38 ` Juri Linkov
2024-04-17 17:56 ` Juri Linkov
2024-04-24 16:39 ` Juri Linkov
2024-04-25 8:31 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-25 17:40 ` Juri Linkov
2024-04-02 16:34 ` Juri Linkov
2024-04-03 8:24 ` martin rudalics via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-03 17:44 ` Juri Linkov
2024-04-04 6:22 ` Juri Linkov
2024-04-02 16:40 ` Juri Linkov
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=86v850jmmo.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=69993@debbugs.gnu.org \
--cc=rudalics@gmx.at \
/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.