From: Benson Chu <bensonchu457@fastmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 62427@debbugs.gnu.org, juri@linkov.net
Subject: bug#62427: tab-bar-new-tab-to now handles cases with multiple side-windows
Date: Tue, 28 Mar 2023 12:39:54 -0500 [thread overview]
Message-ID: <874jq4zrdr.fsf@fastmail.com> (raw)
In-Reply-To: <83wn307qdr.fsf@gnu.org>
> Ugh! That is _soooo_ inelegant... Also inefficient
Hehe, I see what you mean, but creating frames is so expensive. These
tabs are like lightweight frames for me. What would you suggest be done
instead?
> Is this inside unwind-protect, so that any error or quit or throw is
> caught and the parameters restored? If so, it might be semi-okay.
Ahhh, that is a good point. The reason I even noticed this error was
that there wasn't an unwind-protect around it, so not only would Emacs
not switch to a new tab, but my window paramters for the current tab
would be all messed up.
> What does display-buffer do in this case? reuse the same window
> regardless of any action alists?
Huh, that is a gooood question. I will look into what #'display-buffer
does.
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Benson Chu <bensonchu457@fastmail.com>
>> Cc: juri@linkov.net, 62427@debbugs.gnu.org
>> Date: Tue, 28 Mar 2023 11:17:29 -0500
>>
>> > Can't we create a completely new window and show the buffer in it?
>>
>> I'm not sure how easy this is. Typically new windows come from calls to
>> #'split-window, and you can't do that for a side-window.
>
> What does display-buffer do in this case? reuse the same window
> regardless of any action alists?
>
>> > I'm very uncomfortable with removing window
>> > parameters like that. These windows don't belong to us, right?
>>
>> Let me know if this is wrong, but I am interpreting this statement as:
>>
>> "We shouldn't be modifying the window parameters of the windows that
>> belong to the old tab."
>
> There doesn't have to be any "old tab". AFAIU, this option's default
> value is t, so even when you create the first tab, the code you
> suggest changing will run and mess with the window parameters of the
> windows that happen to exist at that point. Right?
>
>> Because if that's the case, we're not /really/ modifying the old tab's
>> window-parameters. They're only "removed" "temporarily", for the
>> purposes of creating the new tab. You can see right before we modify any
>> window parameters, we make a call to (tab-bar--tab), which returns a tab
>> data structure, which contain a representation of the current wconf
>> (window configuration) - effectively saving the wconf - including the
>> paramaters. It's kind of like a save excursion:
>>
>> (let ((old-tab-num (tab-bar--current-tab-index tabs))
>> (old-window-configuration (tab-bar--tab)))
>> ;; modify window-parameters
>> ;; do appropriate splitting
>> ;; Now we have the window layout for the new tab
>>
>> ;; The old tab should have the old-window-configuration
>> (setf (nth old-tab-num tabs) old-window-configuration)
>>
>> ;; The rest of the function
>> )
>
> Is this inside unwind-protect, so that any error or quit or throw is
> caught and the parameters restored? If so, it might be semi-okay.
>
>> So, we capture the current window configuration at the start of the
>> function, transition the current window configuration into the window
>> configuration for the new tab (which involves mangling window
>> parameters and destroying windows), then we make sure that the old tab
>> has an unmodified window-configuration.
>
> Ugh! That is _soooo_ inelegant... Also inefficient, and quite
> fragile (as any code which uses seve/restore window-configuration is).
> But I guess that ship has sailed long ago.
>
>> When the user switches back to the tab they left, all the
>> window-parameters are still present, untouched. Are you still
>> uncomfortable with doing things this way?
>
> What happens with all kinds of hooks that run due to this saving and
> restoring window-configuration? they still will see windows without
> their parameters, right?
next prev parent reply other threads:[~2023-03-28 17:39 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-24 21:07 bug#62427: tab-bar-new-tab-to now handles cases with multiple side-windows Benson Chu
2023-03-25 19:14 ` Juri Linkov
2023-03-26 4:19 ` Eli Zaretskii
2023-03-27 7:05 ` Juri Linkov
2023-03-27 13:36 ` Eli Zaretskii
2023-03-27 16:39 ` Juri Linkov
2023-03-27 17:06 ` Eli Zaretskii
2023-03-27 17:43 ` Benson Chu
2023-03-28 12:42 ` Eli Zaretskii
2023-03-28 16:17 ` Benson Chu
2023-03-28 17:11 ` Eli Zaretskii
2023-03-28 17:39 ` Benson Chu [this message]
2023-03-30 16:43 ` Juri Linkov
2023-03-31 16:20 ` Benson Chu
2023-04-01 18:25 ` Juri Linkov
2023-04-02 18:20 ` Juri Linkov
2023-04-02 18:51 ` Juri Linkov
2023-04-15 3:03 ` Benson Chu
2023-04-15 18:42 ` Juri Linkov
2023-04-18 6:58 ` Juri Linkov
2023-04-22 9:05 ` Eli Zaretskii
2023-04-23 16:39 ` Juri Linkov
2023-04-24 11:50 ` Eli Zaretskii
2023-04-25 17:25 ` Juri Linkov
2023-05-15 17:32 ` Juri Linkov
2023-04-25 17:30 ` Juri Linkov
2023-05-16 17:32 ` Juri Linkov
2023-05-16 17:52 ` Juri Linkov
2023-05-17 8:13 ` martin rudalics
2023-05-17 16:39 ` Juri Linkov
2023-05-18 8:31 ` martin rudalics
2023-05-18 15:46 ` Juri Linkov
2023-05-19 7:31 ` martin rudalics
2023-05-19 18:14 ` Juri Linkov
2023-05-16 18:23 ` Eli Zaretskii
2023-05-17 16:32 ` Juri Linkov
2023-05-17 17:24 ` 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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=874jq4zrdr.fsf@fastmail.com \
--to=bensonchu457@fastmail.com \
--cc=62427@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=juri@linkov.net \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).