diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el index 6720d82b47..1741173bbe 100644 --- a/lisp/tab-bar.el +++ b/lisp/tab-bar.el @@ -139,16 +139,21 @@ Possible modifier keys are `control', `meta', `shift', `hyper', `super' and :global t ;; It's defined in C/cus-start, this stops the d-m-m macro defining it again. :variable tab-bar-mode - (let ((val (if tab-bar-mode 1 0))) + + ;; Set frame parameters. + (let ((defaultval (if (and tab-bar-mode tab-bar-show) 1 0))) (dolist (frame (frame-list)) - (set-frame-parameter frame 'tab-bar-lines val)) - ;; If the user has given `default-frame-alist' a `tab-bar-lines' - ;; parameter, replace it. - (if (assq 'tab-bar-lines default-frame-alist) - (setq default-frame-alist - (cons (cons 'tab-bar-lines val) - (assq-delete-all 'tab-bar-lines - default-frame-alist))))) + (let ((frameval (if (natnump tab-bar-show) + (if (and defaultval + (> (length (funcall tab-bar-tabs-function frame)) tab-bar-show)) + 1 0) + defaultval))) + (set-frame-parameter frame 'tab-bar-lines frameval))) + (let ((newframeval (if (and defaultval (eq tab-bar-show t)) 1 0))) + (setq default-frame-alist + (cons (cons 'tab-bar-lines newframeval) + (assq-delete-all 'tab-bar-lines default-frame-alist))))) + (when tab-bar-mode (tab-bar--load-buttons)) (if tab-bar-mode @@ -251,16 +256,7 @@ you can use the command `toggle-frame-tab-bar'." :set (lambda (sym val) (set-default sym val) ;; Preload button images - (tab-bar-mode 1) - ;; Then handle each frame individually - (dolist (frame (frame-list)) - (set-frame-parameter - frame 'tab-bar-lines - (if (or (eq val t) - (and (natnump val) - (> (length (funcall tab-bar-tabs-function frame)) - val))) - 1 0)))) + (tab-bar-mode 1)) :group 'tab-bar :version "27.1")