[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#69993: Wrap window buffers while cycling
From: |
Juri Linkov |
Subject: |
bug#69993: Wrap window buffers while cycling |
Date: |
Tue, 16 Apr 2024 09:38:14 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/30.0.50 (x86_64-pc-linux-gnu) |
>>>> So keeping the stable order of window prev/next buffers after C-x b
>>>> with a hook should be implemented in tab-line.el, not in window.el?
>>>
>>> I don't know how you currently handle C-x <left>, C-x b or
>>> 'rename-buffer' or whether a buffer is modified on the tab line so I
>>> can't tell whether you would need a hook for these. But this issue is
>>> IMHO not connected to whether getting the previous or next buffer should
>>> wrap or be restricted to buffers previously shown in a window.
>>
>> Handling 'C-x b' and 'rename-buffer' is not yet implemented.
>> Probably need to add a new window parameter to keep a list
>> of tab buffers and sync it with window prev/next buffers.
>
> Now handling 'C-x b' is completely implemented here:
>
> + (set-window-prev-buffers
> ...
> + (add-hook 'window-buffer-change-functions #'tab-line-buffer-change nil
> t)
Actually using hooks as well as advices in core packages is not a nice
thing to do. Neither tab-bar.el nor tab-line.el uses hooks and advices.
Also better not to mess with set-window-prev-buffers. And this is
perfectly possible with the following small patch that supports
everything: wrapping, C-x <left>, C-x b, 'rename-buffer' with
buffers restricted to those that were displayed in the window
while keeping them in the fixed order:
diff --git a/lisp/tab-line.el b/lisp/tab-line.el
index 54e9ee16243..b2f0cbf13ed 100644
--- a/lisp/tab-line.el
+++ b/lisp/tab-line.el
@@ -345,6 +345,8 @@ tab-line-tabs-function
grouped by `tab-line-tabs-buffer-group-function'."
:type '(choice (const :tag "Window buffers"
tab-line-tabs-window-buffers)
+ (const :tag "Window buffers with fixed order"
+ tab-line-tabs-fixed-window-buffers)
(const :tag "Same mode buffers"
tab-line-tabs-mode-buffers)
(const :tag "Grouped buffers"
@@ -515,6 +524,17 @@ tab-line-tabs-window-buffers
(list buffer)
next-buffers)))
+(defun tab-line-tabs-fixed-window-buffers ()
+ "Like `tab-line-tabs-window-buffers' but keep stable sorting order."
+ (let ((old-buffers (window-parameter nil 'tab-line-fixed-window-buffers))
+ (new-buffers (tab-line-tabs-window-buffers)))
+ (setq new-buffers (sort new-buffers
+ (lambda (a b)
+ (> (length (memq a old-buffers))
+ (length (memq b old-buffers))))))
+ (set-window-parameter nil 'tab-line-fixed-window-buffers new-buffers)
+ new-buffers))
- bug#69993: Wrap window buffers while cycling, (continued)
- bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/09
- bug#69993: Wrap window buffers while cycling, martin rudalics, 2024/04/09
- bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/09
- bug#69993: Wrap window buffers while cycling, martin rudalics, 2024/04/10
- bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/10
- bug#69993: Wrap window buffers while cycling, martin rudalics, 2024/04/11
- bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/12
- bug#69993: Wrap window buffers while cycling, martin rudalics, 2024/04/12
- bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/12
- bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/14
- bug#69993: Wrap window buffers while cycling,
Juri Linkov <=
- bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/17
- bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/24
- bug#69993: Wrap window buffers while cycling, martin rudalics, 2024/04/25
- bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/25
bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/02
bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/04
bug#69993: Wrap window buffers while cycling, Juri Linkov, 2024/04/02