Subject: 29.0.50; tab-bar-format-align-right only works correctly with monospace characters

From: Daniel Semyonov <[email-masked]>
Date: Sun, 01 May 2022 18:50:18 +0300

When a character using a variable pitch font or an image (I've only
tested this with XBM images) is displayed on the tab bar after
'tab-bar-format-align-right', the resulting text ends before the end of
the tab bar.

Exact recipe (assuming the default font for the tab bar is variable pitch):

1. $ emacs -Q
2. M-: (setq tab-bar-format '(tab-bar-format-align-right tab-bar-format-tabs tab-bar-separator))
3. M-x tab-bar-mode

After following these steps, the initial tab ends before the end
of the tab bar, and the gap grows with each additional tab.

In GNU Emacs 29.0.50 (build 10, x86_64-pc-linux-gnu, GTK+ Version 3.24.33, cairo version 1.16.0)
 of 2022-05-01 built on coldharbour
Repository revision: 5f220d9555a908dd9957afa27d168d74adf6c7df
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101003
System Description: Debian GNU/Linux bookworm/sid

Configured using:
 'configure --with-x-toolkit=gtk3 --with-xinput2
 --with-native-compilation --with-xwidgets --prefix=/opt/Emacs'

Configured features:
CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON
LCMS2 LIBSELINUX LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG
RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11
XDBE XIM XINPUT2 XPM XWIDGETS GTK3 ZLIB

Important settings:
  value of $LC_CTYPE: en_US.UTF-8
  value of $LANG: en_IL
  locale-coding-system: utf-8-unix

Major mode: Fundamental

Minor modes in effect:
  emms-mode-line-mode: t
  emms-playing-time-display-mode: t
  emms-playing-time-mode: t
  electric-pair-mode: t
  delete-selection-mode: t
  pixel-scroll-precision-mode: t
  repeat-mode: t
  vcomplete-mode: t
  swsw-mode: t
  global-auto-revert-mode: t
  display-time-mode: t
  minibuffer-electric-default-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tab-bar-mode: t
  file-name-shadow-mode: t
  context-menu-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/home/daniel/etc/emacs/elpa/transient-0.3.7/transient hides /opt/Emacs/share/emacs/29.0.50/lisp/transient

Features:
(shadow emacsbug vc vc-git diff-mode vc-dispatcher dired-aux sort smiley
gnus-cite mail-extr textsec uni-scripts idna-mapping ucs-normalize
uni-confusable textsec-check gnus-bcklg gnus-async gnus-dup gnus-ml
disp-table nnml gnus-topic nndraft nnmh timezone mm-archive url-http
url-gw url-cache url-auth utf-7 nnrss mm-url epa-file cl-extra
network-stream nsm gnus-agent gnus-srvr gnus-score score-mode nnvirtual
gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig
gnus-cache gnus-sum shr pixel-fill kinsoku url-file url-dired svg dom
init-gnus gnus-demon nntp gnus-group gnus-undo easy-mmode cus-start
gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 netrc
nnoo parse-time iso8601 gnus-spec gnus-int gnus-range message sendmail
yank-media rmc puny rfc822 mml mml-sec epa derived epg rfc6068
epg-config mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047
rfc2045 ietf-drums mailabbrev gmm-utils mailheader gnus-win gnus
nnheader gnus-util mail-utils range mm-util mail-prsvr time-date
checkdoc lisp-mnt help-mode flymake-proc flymake project compile
text-property-search comint ansi-color warnings thingatpt flyspell
ispell display-line-numbers modus-operandi-theme cal-julian modus-themes
solar cal-dst cal-menu calendar cal-loaddefs init-interfaces init-web
init-volume init-emms emms-mode-line emms-player-mpv emms-playing-time
emms-player-simple emms-info-opusinfo emms-info emms-later-do emms
emms-compat init-battery battery dbus xml init-programs dired
dired-loaddefs init-shell init-pass auth-source-pass init-programming
elec-pair init-ui delsel pixel-scroll cua-base ring format-spec repeat
vcomplete swsw autorevert filenotify time minibuf-eldef init-personal
pcase init-base server finder-inf package browse-url url url-proxy
url-privacy url-expand url-methods url-history url-cookie url-domsuf
url-util mailcap url-handlers url-parse auth-source cl-seq eieio
eieio-core cl-macs eieio-loaddefs password-cache json map url-vars seq
gv subr-x byte-opt bytecomp byte-compile cconv info cus-edit pp cus-load
wid-edit cl-loaddefs cl-lib iso-transl tooltip eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode 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 lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice simple 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 emoji-zwj charscript charprop
case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs faces cus-face macroexp files window
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget keymap hashtable-print-readable backquote threads
xwidget-internal dbusbind inotify lcms2 dynamic-setting
system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit
xinput2 x multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 542700 52961)
 (symbols 48 24357 0)
 (strings 32 93082 3762)
 (string-bytes 1 2788588)
 (vectors 16 58794)
 (vector-slots 8 1024008 47173)
 (floats 8 684 500)
 (intervals 56 610 223)
 (buffers 992 26))