all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Juri Linkov <juri@linkov.net>
To: James N. V. Cash <james.nvc@gmail.com>
Cc: 42052@debbugs.gnu.org
Subject: bug#42052: 28.0.50; tab-bar-mode should be frame-local
Date: Mon, 29 Jun 2020 02:18:57 +0300	[thread overview]
Message-ID: <87pn9idbj2.fsf@mail.linkov.net> (raw)
In-Reply-To: <87wo3rug82.fsf@gmail.com> (James N. V. Cash's message of "Sun, 28 Jun 2020 15:45:33 -0400")

>> Looking at how the tab-bar-mode currently works, the thing that seems
>> simplest to me would be to change the various functions that
>> conditionally turn tab-bar-mode on/off (e.g. in tab-bar-new-tab-to)
>> to have an additional check if (natnump tab-bar-show), in which case
>> instead of calling (tab-bar-mode 1) or -1, setting the frame parameter
>> tab-bar-lines for that particular frame to be 1 or 0, as appropriate.
>>
>> The wrinkle would be, I suppose, having to remove all the frame-local
>> settings if tab-bar-show changes, but presumably that wouldn't be
>> happening too often.
>>
>> A frame-local toggling of the tab bar could work the same way.
>>
>> If that makes sense (i.e. having the setting be frame local only when
>> tab-bar-show is 1), I can try submitting a patch later today.
>
> Here's a simple patch I made that seems to act more like I expect

Thanks for the patch.  One problem is that directly changing the
frame parameter tab-bar-lines avoids performing some other
settings in tab-bar-mode such as loading button images and changing
some keybindings.  OTOH, these keybindings can't be frame-local anyway,
so maybe this is not important for the case when tab-bar-show is 1.

> +     ((and (natnump tab-bar-show)
> +           (> (length tabs) tab-bar-show)
> +           (zerop (frame-parameter nil 'tab-bar-lines)))
> +      (progn
> +        (message "show")
> +        (set-frame-parameter nil 'tab-bar-lines 1))))

Please don't forget to remove this debugging message in the final patch.

> @@ -975,10 +980,12 @@
>            (run-hook-with-args 'tab-bar-tab-pre-close-functions (nth index tabs) nil)))
>        (set-frame-parameter nil 'tabs (list (nth current-index tabs)))
>
> -      (when (and tab-bar-mode
> -                 (and (natnump tab-bar-show)
> -                      (<= 1 tab-bar-show)))
> -        (tab-bar-mode -1))
> +      (when (and (not (zerop (frame-parameter nil 'tab-bar-lines)))
> +                   (and (natnump tab-bar-show)
> +                        (<= (length tabs) tab-bar-show)))
> +          (modify-frame-parameters
> +           nil
> +           (assq-delete-all 'tab-bar-lines (frame-parameters nil))))

Unlike other places that simply use (set-frame-parameter nil 'tab-bar-lines 0)
this code is more complex.  But it seems it should work with just
(set-frame-parameter nil 'tab-bar-lines 0) as well.

BTW, I see a problem in the old code: the variable 'tabs' is not always updated
and sometimes contains obsolete data.  It should help to replace

  (<= (length tabs) tab-bar-show)

with

  (<= (length (funcall tab-bar-tabs-function)) tab-bar-show)

that gets fresh data.





  reply	other threads:[~2020-06-28 23:18 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-25 20:07 bug#42052: 28.0.50; tab-bar-mode should be frame-local James N. V. Cash
2020-06-27 23:40 ` Juri Linkov
2020-06-28 12:15   ` James N. V. Cash
2020-06-28 19:45     ` James N. V. Cash
2020-06-28 23:18       ` Juri Linkov [this message]
2020-06-29  0:26         ` James N. V. Cash
2020-06-29  0:35           ` James N. V. Cash
2020-06-29 23:45           ` Juri Linkov
2020-07-09 17:06             ` James N. V. Cash
2020-07-09 23:49               ` Juri Linkov
2020-07-11 14:45                 ` James N. V. Cash
2020-07-12  0:01                   ` Juri Linkov
2020-07-11 15:17                 ` Stefan Monnier
2020-07-12  0:04                   ` Juri Linkov
2020-07-12 16:38                     ` Stefan Monnier
2020-10-13  3:07                 ` Lars Ingebrigtsen
2021-01-05 18:36                   ` 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=87pn9idbj2.fsf@mail.linkov.net \
    --to=juri@linkov.net \
    --cc=42052@debbugs.gnu.org \
    --cc=james.nvc@gmail.com \
    /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.