Subject: bug#38523: 27.0.50; tab-line faces don't update to reflect selected tab

From: "David O'Toole" <[email-masked]>
Date: Sat, 7 Dec 2019 12:54:02 -0500

The following change seems to make the tab faces update properly after
clicking a tab. But I'm not sure this is the correct way to do it.

> diff --git a/lisp/tab-line.el b/lisp/tab-line.el
> index d080da1867..08fb54bbfb 100644
> --- a/lisp/tab-line.el
> +++ b/lisp/tab-line.el
> @@ -580,12 +580,17 @@ tab-line-select-tab
>           (tab (get-pos-property 1 'tab (car (posn-string posnp))))
>           (buffer (if (bufferp tab) tab (cdr (assq 'buffer tab)))))
>      (if buffer
> -        (tab-line-select-tab-buffer buffer (posn-window posnp))
> +        (progn
> +          (tab-line-select-tab-buffer buffer (posn-window posnp))
> +          (force-mode-line-update t)
> +          (set-window-parameter nil 'tab-line-cache nil)
> +          (setf tab-line-format '(:eval (tab-line-format)))
> +          )
>        (let ((select (cdr (assq 'select tab))))
>          (when (functionp select)
>            (with-selected-window (posn-window posnp)
>              (funcall select)
> -            (force-mode-line-update)))))))
> +            (force-mode-line-update t)))))))
>
>  (defun tab-line-select-tab-buffer (buffer &optional window)
>    (let* ((window-buffer (window-buffer window))
>

On Sat, Dec 7, 2019 at 11:48 AM David O'Toole <[email-masked]>
wrote:

> I configured the tab bar and tab line faces (tab-bar-tab and
> tab-line-tab-current) to show the currently selected tab with yellow text.
>
> Although the tab __bar__ faces do update properly to highlight the
> selected tab, the tab __line__ faces don't update; no matter which is
> clicked, the first tab that had been highlighted stays highlighted (or
> sometimes none of them are highlighted.) Also, the close buttons on tab
> line tabs do not work; instead it just switches to that tab's buffer.
>
> My face definitions (in the form of lines from a `custom-set-faces'
> call) are below, perhaps I have made them incorrectly.
>
>  '(tab-bar ((t (:height 0.9 :background "grey25" :foreground "gray70"))))
>  '(tab-bar-tab ((t (:inherit tab-bar :foreground "yellow" :box
> (:line-width 1 :style released-button)))))
>  '(tab-bar-tab-inactive ((t (:inherit tab-bar-tab :background "grey28"
> :foreground "gray80"))))
>  '(tab-line ((t (:background "gray16" :foreground "gray80" :height 0.9))))
>  '(tab-line-tab ((t (:inherit tab-line :box (:line-width 1 :style
> released-button)))))
>  '(tab-line-highlight ((t (:inherit tab-line-tab :background "gray40"))))
>  '(tab-line-tab-current ((t (:inherit tab-line-tab :background "gray35"
> :foreground "yellow"))))
>  '(tab-line-tab-inactive ((t (:inherit tab-line-tab :foreground "gray80"
> :background "grey20"))))
>
>
> In GNU Emacs 27.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30)
>  of 2019-12-07 built on monad
> Repository revision: 959bbf30032c365c9e6f08dc9211d6bab3123f35
> Repository branch: HEAD
> Windowing system distributor 'The X.Org Foundation', version 11.0.11906000
> System Description: Linux Mint 19.1
>
> Recent messages:
> Commands: m, u, t, RET, g, k, S, D, Q; q to quit; h for help
> Global Tab-Line mode enabled
> Winner undo (1 / 69)
> Winner undo (1 / 71)
> Desktop saved in ~/.emacs.d/
> Quit [2 times]
> Desktop saved in ~/.emacs.d/
>
> Configured using:
>  'configure --prefix=/usr/local --with-x-toolkit=gtk3 --with-xwidgets
>  --with-sound=alsa'
>
> Configured features:
> XPM JPEG TIFF GIF PNG RSVG SOUND DBUS GSETTINGS GLIB NOTIFY INOTIFY
> GNUTLS LIBXML2 FREETYPE HARFBUZZ XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11
> XDBE XIM MODULES THREADS XWIDGETS PDUMPER LCMS2 GMP
>
> Important settings:
>   value of $LANG: en_US.UTF-8
>   locale-coding-system: utf-8-unix
>
> Major mode: Emacs-Lisp
>
> Minor modes in effect:
>   global-tab-line-mode: t
>   tab-line-mode: t
>   display-battery-mode: t
>   indent-guide-mode: t
>   desktop-save-mode: t
>   recentf-mode: t
>   winner-mode: t
>   display-time-mode: t
>   global-magit-file-mode: t
>   magit-file-mode: t
>   magit-auto-revert-mode: t
>   auto-revert-mode: t
>   global-git-commit-mode: t
>   async-bytecomp-package-mode: t
>   shell-dirtrack-mode: t
>   show-paren-mode: t
>   override-global-mode: t
>   global-eldoc-mode: t
>   eldoc-mode: t
>   electric-indent-mode: t
>   mouse-wheel-mode: t
>   tool-bar-mode: t
>   tab-bar-mode: t
>   menu-bar-mode: t
>   file-name-shadow-mode: t
>   global-font-lock-mode: t
>   font-lock-mode: t
>   blink-cursor-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>   line-number-mode: t
>   transient-mark-mode: t
>
> Load-path shadows:
> ~/emacs-config/gunmetal-theme hides ~/mosaic/gunmetal-theme
> ~/emacs-config/inf-snd hides ~/mosaic/inf-snd
>
> Features:
> (shadow sort mail-extr emacsbug sendmail eieio-opt help-fns radix-tree
> cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
> cc-vars cc-defs misearch multi-isearch em-unix em-term term ehelp
> em-script em-prompt em-ls em-hist em-pred em-glob em-dirs esh-var
> em-cmpl em-basic em-banner em-alias esh-mode eshell esh-cmd esh-ext
> esh-opt esh-proc esh-io esh-arg esh-module esh-groups esh-util
> time-stamp cus-edit tab-line ibuf-ext ibuffer ibuffer-loaddefs mule-util
> org-element avl-tree ol-eww ol-rmail ol-mhe ol-irc ol-info ol-gnus nnir
> gnus-sum url url-proxy url-privacy url-expand url-methods url-history
> mailcap shr url-cookie url-domsuf url-util svg dom gnus-group gnus-undo
> gnus-start gnus-cloud nnimap nnmail mail-source utf7 netrc nnoo
> parse-time iso8601 gnus-spec gnus-int gnus-range gnus-win gnus nnheader
> ol-docview doc-view jka-compr image-mode exif ol-bibtex bibtex ol-bbdb
> ol-w3m vc-git battery cus-start cus-load exwm-systemtray xcb-systemtray
> xcb-xembed exwm-config ido exwm exwm-input xcb-keysyms xcb-xkb
> exwm-manage exwm-floating xcb-cursor xcb-render exwm-layout
> exwm-workspace exwm-core xcb-ewmh xcb-icccm xcb xcb-xproto xcb-types
> xcb-debug gunmetal-theme indent-guide ob-lisp desktop frameset
> sr-speedbar init org-mouse org ob ob-tangle ob-ref ob-lob ob-table
> ob-exp org-macro org-footnote org-src ob-comint org-pcomplete org-list
> org-faces org-entities org-version ob-emacs-lisp ob-core ob-eval
> org-table ol org-keys org-compat org-macs org-loaddefs find-func
> cal-menu calendar cal-loaddefs recentf tree-widget dired-x winner time
> slime-asdf grep slime-fancy slime-trace-dialog slime-fontifying-fu
> slime-package-fu slime-references slime-compiler-notes-tree
> slime-scratch slime-presentations bridge slime-macrostep macrostep
> slime-mdot-fu slime-enclosing-context slime-fuzzy slime-fancy-trace
> slime-fancy-inspector slime-c-p-c slime-editing-commands slime-autodoc
> slime-repl elp slime-parse slime lisp-mnt gud apropos etags fileloop
> generator xref project arc-mode archive-mode noutline outline pp
> hyperspec thingatpt slime-autoloads org-install magit-submodule
> magit-obsolete magit-blame magit-stash magit-reflog magit-bisect
> magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit
> magit-sequence magit-notes magit-worktree magit-tag magit-merge
> magit-branch magit-reset magit-files magit-refs magit-status magit
> magit-repos magit-apply magit-wip magit-log which-func imenu magit-diff
> smerge-mode diff diff-mode magit-core magit-autorevert autorevert
> filenotify magit-margin magit-transient magit-process magit-mode
> transient git-commit magit-git magit-section magit-utils crm log-edit
> message rmc puny dired dired-loaddefs format-spec rfc822 mml mml-sec epa
> epg epg-config gnus-util rmail rmail-loaddefs text-property-search
> time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047
> rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils
> mailheader pcvs-util add-log with-editor async-bytecomp async shell
> server xelf paren use-package use-package-ensure use-package-delight
> use-package-diminish use-package-bind-key bind-key easy-mmode
> use-package-core mosaic jeison dash eieio-compat midi-kbd ccl jack rot13
> disp-table ecasound pcomplete notifications dbus xml spectr rx cell
> cl-extra help-mode eieio-speedbar speedbar sb-image ezimage dframe
> eieio-custom wid-edit eieio-base warnings cl compile nanotag edmacro
> kmacro inf-snd derived ruby-mode smie cmuscheme scheme comint ansi-color
> ring finder-inf pcase powerline advice powerline-separators color
> powerline-themes info package easymenu browse-url url-handlers url-parse
> auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
> password-cache json subr-x map url-vars seq byte-opt gv bytecomp
> byte-compile cconv cl-loaddefs cl-lib tooltip eldoc electric uniquify
> ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win
> term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
> tabulated-list replace newcomment text-mode elisp-mode lisp-mode
> prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer
> select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
> term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang
> misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
> cp51932 hebrew greek romanian slovak czech european ethiopic indian
> cyrillic chinese composite charscript charprop case-table epa-hook
> jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice loaddefs
> button faces cus-face macroexp files text-properties overlay sha1 md5
> base64 format env code-pages mule custom widget hashtable-print-readable
> backquote threads dbusbind inotify lcms2 dynamic-setting
> system-font-setting font-render-setting xwidget-internal move-toolbar
> gtk x-toolkit x multi-tty make-network-process emacs)
>
> Memory information:
> ((conses 16 1110822 155044)
>  (symbols 48 50782 1)
>  (strings 32 158855 6437)
>  (string-bytes 1 5124663)
>  (vectors 16 97223)
>  (vector-slots 8 2332726 255286)
>  (floats 8 32609 140)
>  (intervals 56 148481 1713)
>  (buffers 1000 34))
>