[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#53662: 29.0.50; Cannot use tab-new from side window
From: |
Juri Linkov |
Subject: |
bug#53662: 29.0.50; Cannot use tab-new from side window |
Date: |
Tue, 01 Feb 2022 21:31:56 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) |
>> Martin, could you suggest how to ignore window-sideness
>> while splitting the side window? 'tab-bar-new-tab-to'
>> currently uses such trick to create a new window:
>>
>> (let ((ignore-window-parameters t))
>> (delete-other-windows))
>
> Usually, you can't make a side window the only window on its frame - the
> main window has to stay. If you ignore window parameters, you have to
> clean the state of windows yourself afterwards - for example, by giving
> the sole remaining window a 'window-side' parameter of nil. If you do
> not do that, the windows state of the frame is broken already before you
> try splitting the window below.
>
>> (unless (eq tab-bar-new-tab-choice 'window)
>> ;; Create a new window to get rid of old window parameters
>> ;; (e.g. prev/next buffers) of old window.
>> (split-window) (delete-window))
>>
>> but this fails in side windows.
>
> This is a hack and would fail in the case at hand since 'split-window'
> would set the 'window-side' parameter for the new window. I'd rather
> set all parameters of the selected window to nil instead.
Thanks, I confirm this fixes the problem with this patch.
Also ‘split-window’ and ‘delete-window’ were moved
inside ‘(ignore-window-parameters t)’ for more safety:
diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el
index 06ad8f60af..43a56c806b 100644
--- a/lisp/tab-bar.el
+++ b/lisp/tab-bar.el
@@ -1361,12 +1361,17 @@ tab-bar-new-tab-to
;; Handle the case when it's called in the active minibuffer.
(when (minibuffer-selected-window)
(select-window (minibuffer-selected-window)))
+ ;; Remove all window parameters to prevent the case
+ ;; when e.g. `window-side' gets in the way.
+ (dolist (parameter (window-parameters))
+ (set-window-parameter nil (car parameter) nil))
(let ((ignore-window-parameters t))
- (delete-other-windows))
- (unless (eq tab-bar-new-tab-choice 'window)
- ;; Create a new window to get rid of old window parameters
- ;; (e.g. prev/next buffers) of old window.
- (split-window) (delete-window))
+ (delete-other-windows)
+ (unless (eq tab-bar-new-tab-choice 'window)
+ ;; Create a new window to get rid of old window parameters
+ ;; (e.g. prev/next buffers) of old window.
+ (split-window) (delete-window)))
+
(let ((buffer
(if (functionp tab-bar-new-tab-choice)
(funcall tab-bar-new-tab-choice)