bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#42052: 28.0.50; tab-bar-mode should be frame-local


From: James N . V . Cash
Subject: bug#42052: 28.0.50; tab-bar-mode should be frame-local
Date: Sun, 28 Jun 2020 20:26:29 -0400

Juri Linkov <juri@linkov.net> writes:

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

Oh oops, sorry about that.

> 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.

Ah, right. I was thinking that

> 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.

That makes sense.

Here's another patch that addresses this issues, although as you say, it
still doesn't address the issue of loading the button images or changing
keybindings.

--- /home/james/src/emacs/lisp/tab-bar.el 2020-06-20 10:16:57.177037735 -0400
+++ /home/james/tmp/tab-bar.el  2020-06-28 20:15:46.073203151 -0400
@@ -799,11 +799,14 @@
       (run-hook-with-args 'tab-bar-tab-post-open-functions
                           (nth to-index tabs)))

-    (when (and (not tab-bar-mode)
-               (or (eq tab-bar-show t)
-                   (and (natnump tab-bar-show)
-                        (> (length tabs) tab-bar-show))))
+    (cond
+     (tab-bar-mode)
+     ((eq tab-bar-show t)
       (tab-bar-mode 1))
+     ((and (natnump tab-bar-show)
+           (> (length (funcall tab-bar-tabs-function)) tab-bar-show)
+           (zerop (frame-parameter nil 'tab-bar-lines)))
+      (set-frame-parameter nil 'tab-bar-lines 1)))

     (force-mode-line-update)
     (unless tab-bar-mode
@@ -936,10 +939,11 @@
                 tab-bar-closed-tabs)
           (set-frame-parameter nil 'tabs (delq close-tab tabs)))

-        (when (and tab-bar-mode
-                   (and (natnump tab-bar-show)
-                        (<= (length tabs) tab-bar-show)))
-          (tab-bar-mode -1))
+        (when (and (not (zerop (frame-parameter nil 'tab-bar-lines)))
+                   (natnump tab-bar-show)
+                   (<= (length (funcall tab-bar-tabs-function))
+                       tab-bar-show))
+          (set-frame-parameter nil 'tab-bar-lines 0))

         (force-mode-line-update)
         (unless tab-bar-mode
@@ -975,10 +979,11 @@
           (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)))
+                 (natnump tab-bar-show)
+                 (<= (length (funcall tab-bar-tabs-function))
+                     tab-bar-show))
+        (set-frame-parameter nil 'tab-bar-lines 0))

       (force-mode-line-update)
       (unless tab-bar-mode





reply via email to

[Prev in Thread] Current Thread [Next in Thread]