Subject: 31.0.50; vtable header is not aligned
From: Aleksandr Vityazev <[email-masked]>
To: [email-masked]
Date: Thu, 05 Sep 2024 01:45:14 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

There is a problem in vtable.el when an emoji is specified as a delimiter; the
header and row delimiters are not aligned.

Minimal reproducer for emacs -Q:

(require 'vtable)
(with-current-buffer (get-buffer-create "*test*")
  (make-vtable
   :columns '((:name "Name" :width 20) "Size" "File")
   :objects (buffer-list)
   :actions '("k" kill-buffer
              "RET" display-buffer)
   :divider " 🍉 "
   :getter (lambda (object column vtable)
             (pcase (vtable-column vtable column)
               ("Name" (buffer-name object))
               ("Size" (buffer-size object))
               ("File" (or (buffer-file-name object) "")))))
  (switch-to-buffer "*test*"))

Screenshot is attached.

In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.41, cairo version 1.18.0)
System Description: Guix System

Configured using:
 'configure
 CONFIG_SHELL=/gnu/store/3jhfhxdf6v5ms10x5zmnl166dh3yhbr1-bash-minimal-5.1.16/bin/bash
 SHELL=/gnu/store/3jhfhxdf6v5ms10x5zmnl166dh3yhbr1-bash-minimal-5.1.16/bin/bash
 --prefix=/gnu/store/s0lycm77a6whmzzg0q7gx5wgd5q0ghms-emacs-rrr-next-31.0.50-56.d277123
 --enable-fast-install --with-pgtk --without-libsystemd
 --with-tree-sitter --with-native-compilation --with-cairo
 --with-modules --with-native-compilation=aot --disable-build-details'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY
INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB

Important settings:
  value of $EMACSLOADPATH: /home/akagi/.guix-home/profile/share/emacs/site-lisp:/gnu/store/s0lycm77a6whmzzg0q7gx5wgd5q0ghms-emacs-rrr-next-31.0.50-56.d277123/share/emacs/31.0.50/lisp
  value of $EMACSNATIVELOADPATH: /home/akagi/.guix-home/profile/lib/emacs/native-site-lisp
  value of $LANG: en_US.utf8
  locale-coding-system: utf-8-unix

Major mode: Group

Minor modes in effect:
  eshell-syntax-highlighting-global-mode: t
  gnus-topic-mode: t
  hl-line-mode: t
  gnus-undo-mode: t
  telega-adblock-mode: t
  global-telega-mnz-mode: t
  telega-root-auto-fill-mode: t
  telega-contact-birthdays-mode: t
  telega-active-video-chats-mode: t
  telega-active-locations-mode: t
  telega-patrons-mode: t
  telega-active-stories-mode: t
  server-mode: t
  eros-mode: t
  debbugs-browse-mode: t
  bug-reference-mode: t
  envrc-global-mode: t
  envrc-mode: t
  savehist-mode: t
  electric-pair-mode: t
  midnight-mode: t
  global-so-long-mode: t
  company-posframe-mode: t
  global-company-mode: t
  company-mode: t
  fancy-battery-mode: t
  reverse-im-mode: t
  vertico-mode: t
  marginalia-mode: t
  mood-line-mode: t
  global-auto-revert-mode: t
  save-place-mode: t
  recentf-mode: t
  pixel-scroll-precision-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: 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:
/gnu/store/4j9d9a72igkwlls5jw9y0v2vnx3r1a7d-emacs-soap-client-3.2.3/share/emacs/site-lisp/soap-client-3.2.3/soap-client hides /gnu/store/s0lycm77a6whmzzg0q7gx5wgd5q0ghms-emacs-rrr-next-31.0.50-56.d277123/share/emacs/31.0.50/lisp/net/soap-client
/gnu/store/4j9d9a72igkwlls5jw9y0v2vnx3r1a7d-emacs-soap-client-3.2.3/share/emacs/site-lisp/soap-client-3.2.3/soap-inspect hides /gnu/store/s0lycm77a6whmzzg0q7gx5wgd5q0ghms-emacs-rrr-next-31.0.50-56.d277123/share/emacs/31.0.50/lisp/net/soap-inspect
/gnu/store/ww19l89x34crra4wqcyxbhm1l5nzx5aa-emacs-compat-30.0.0.0/share/emacs/site-lisp/compat-30.0.0.0/compat hides /gnu/store/s0lycm77a6whmzzg0q7gx5wgd5q0ghms-emacs-rrr-next-31.0.50-56.d277123/share/emacs/31.0.50/lisp/emacs-lisp/compat

Features:
(shadow dired-x diff-hl-dired gnus-dired av-guix plz vtable help-fns
radix-tree cl-print debug backtrace av-video av-comm link-hint goto-addr
rect flow-fill qp sort smerge-mode diff smiley gnus-cite mail-extr
textsec uni-scripts idna-mapping ucs-normalize uni-confusable
textsec-check gnus-async gnus-bcklg gnus-ml nndoc gnus-dup git-link
display-line-numbers debbugs-gnu add-log debbugs-compat debbugs
soap-client rng-xsd rng-dt rng-util xsd-regexp info-colors info
project-rg rg rg-info-hack rg-menu rg-ibuffer rg-result wgrep-rg wgrep
rg-history rg-header ibuf-ext ibuffer ibuffer-loaddefs consult-imenu
eshell-syntax-highlighting eshell-prompt-extras em-tramp em-unix
em-script em-prompt em-pred em-ls em-hist em-extpipe em-cmpl em-dirs
em-basic em-alias em-glob esh-mode esh-var em-term term disp-table ehelp
pcmpl-args pcmpl-gnu pcmpl-linux pcmpl-unix eshell esh-cmd esh-ext
esh-proc esh-opt esh-io esh-arg esh-module esh-module-loaddefs esh-util
copyright mm-archive url-http url-gw url-cache url-auth multitran
oc-basic ol-eww eww url-queue mm-url ol-rmail ol-mhe ol-irc ol-info
ol-gnus nnselect ol-docview doc-view jka-compr ol-bibtex bibtex ol-bbdb
ol-w3m ol-doi org-link-doi denote tmr-notification misearch
multi-isearch al-scheme arei arei-macroexpansion arei-module
arei-evaluation arei-overlay arei-spinner arei-completion arei-xref
arei-eldoc arei-syntax arei-client arei-nrepl queue sesman scheme
find-dired grep av-message gnus-topic hl-line nndraft nnmh epa-file
network-stream nsm nnmaildir nnfolder nnnil gnus-agent gnus-srvr
gnus-score score-mode nnvirtual gnus-msg gnus-art mm-uu mml2015 mm-view
mml-smime smime gnutls dig nntp gnus-cache gnus-sum shr pixel-fill
kinsoku url-file gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud
nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range
gnus-win gnus nnheader range pulsar pulse tmr tramp-cmds etags fileloop
xref face-remap mule-util telega-adblock ol-telega telega-mnz
telega-dired-dwim telega-obsolete telega telega-x embark-consult consult
embark-org embark checkdoc av-vc autoinsert vertico-repeat
telega-tdlib-events telega-webpage telega-match telega-root telega-info
telega-chat visual-fill-column telega-modes image-mode exif
telega-company telega-emoji telega-user telega-notifications
notifications telega-voip telega-msg telega-story telega-tme
telega-sticker telega-vvnote bindat telega-ffplay telega-i18n
telega-sort telega-filter telega-ins telega-inline telega-util
telega-folders telega-topic telega-media telega-tdlib transient edmacro
kmacro rainbow-identifiers org-element org-persist org-id org-refile
org-element-ast inline avl-tree generator org ob ob-tangle ob-ref ob-lob
ob-table ob-exp org-macro org-src sh-script smie treesit executable
ob-comint org-pcomplete org-list org-footnote org-faces org-entities
noutline outline org-version ob-emacs-lisp ob-core ob-eval org-cycle
org-table ol org-fold org-fold-core org-keys oc org-loaddefs org-compat
org-macs dired-aux telega-server telega-core cursor-sensor color
telega-customize svg dom emacsbug message yank-media puny dired-subtree
dired-hacks-utils dash dired dired-loaddefs rfc822 mml mml-sec epa epg
rfc6068 epg-config gnus-util mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils eiwc server time av-skempo
skempo tempo skeleton mode-local derived package-lint-flymake
package-lint let-alist imenu finder finder-inf find-func lisp-mnt
package browse-url url url-proxy url-privacy url-expand url-methods
url-history url-cookie generate-lisp-file url-domsuf url-util mailcap
url-handlers eros flymake compile tramp-sh tramp-cache time-stamp tramp
trampver tramp-integration files-x tramp-message tramp-compat shell
pcomplete comint ansi-osc parse-time iso8601 time-date format-spec
tramp-loaddefs project diff-hl log-view pcvs-util vc-dir ewoc vc
debbugs-browse bug-reference envrc inheritenv ansi-color savehist
elec-pair ffap thingatpt auth-source-pass url-parse auth-source eieio
eieio-core cl-macs password-cache json map byte-opt url-vars midnight
so-long company-files company-keywords company-dabbrev-code
company-dabbrev company-capf company-posframe posframe company pcase
appt diary-lib diary-loaddefs cal-menu calendar cal-loaddefs
fancy-battery battery dbus xml reverse-im cus-start avy quail av-elisp
spinner-autoloads epl-autoloads pkg-info-autoloads parseclj-autoloads
a-autoloads parseedn-autoloads clojure-mode-autoloads cider-autoloads
xr-autoloads inspector-autoloads orglink-autoloads eplot-autoloads
graphql-ts-mode-autoloads devicetree-ts-mode-autoloads
ts-query-highlight-autoloads try-autoloads svg-lib-autoloads
hammy-autoloads tmr-autoloads queue-autoloads sesman-autoloads
arei-autoloads pulsar-autoloads oauth2-autoloads shikimori-autoloads
al-scheme-autoloads av-autoloads hl-todo-autoloads async-autoloads
password-store-autoloads ledger-mode-autoloads rde-ledger-autoloads
plz-autoloads srht-autoloads soap-client-autoloads debbugs-autoloads
rde-gnus-autoloads rde-browse-url-autoloads emms-autoloads
rde-emms-autoloads mastodon-alt-autoloads ts-autoloads persist-autoloads
request-autoloads mastodon-autoloads telega-contrib-autoloads
rainbow-identifiers-autoloads visual-fill-column-autoloads
telega-autoloads rde-telega-autoloads rde-message-autoloads
denote-autoloads rde-denote-autoloads sdcwoc-autoloads
multitran-autoloads info-colors-autoloads esh-help-autoloads
elisp-demos-autoloads olivetti-autoloads kv-autoloads nov-el-autoloads
saveplace-pdf-view-autoloads tablist-autoloads pdf-tools-autoloads
rde-pdf-tools-autoloads daemons-autoloads bui-autoloads
cuirass-autoloads rde-guix-autoloads diff-hl-autoloads agitate-autoloads
git-timemachine-autoloads git-link-autoloads rde-git-autoloads
package-lint-autoloads eros-autoloads rde-elisp-autoloads
rde-flymake-autoloads ace-window-autoloads wgrep-autoloads rg-autoloads
project-rg-autoloads rde-project-autoloads reverse-im-autoloads
fancy-battery-autoloads sudo-edit-autoloads rde-tramp-autoloads
s-autoloads f-autoloads eimp-autoloads dired-hacks-autoloads
rde-dired-autoloads eshell-prompt-extras-autoloads
eshell-syntax-highlighting-autoloads rde-eshell-autoloads
rde-comint-autoloads skempo-autoloads rde-abbrev-autoloads
link-hint-autoloads avy-autoloads vertico-x-autoloads vertico-autoloads
consult-autoloads posframe-autoloads company-posframe-autoloads
company-autoloads pcmpl-args-autoloads marginalia-autoloads
orderless-autoloads rde-completion-autoloads almost-mono-white-autoloads
mood-line-autoloads rde-startup-autoloads rde-keymaps-autoloads
rde-emacs-base-autoloads rde-compile-autoloads rde-mpv-autoloads
rde-sway-autoloads rde-fonts-autoloads feature-loader-autoloads
feature-loader rde-pass rde-emacs-gnupg rde-ledger rde-tab-bar rde-srht
rde-debbugs rde-gnus rde-browse-url rde-emms rde-mastodon rde-telega
rde-message rde-denote rde-spelling rde-info rde-help rde-nov-el
rde-pdf-tools saveplace-pdf-view bookmark text-property-search rde-xref
rde-guix rde-git vc-git diff-mode track-changes easy-mmode vc-dispatcher
rde-elisp rde-flymake rde-eglot rde-window-ace rde-project
rde-input-method rde-battery rde-calendar rde-tramp rde-dired rde-eshell
rde-comint rde-proced rde-shell rde-abbrev rde-avy rde-vertico vertico-x
vertico rde-completion marginalia compat orderless rde-window
rde-appearance almost-mono-white-theme almost-mono-themes mood-line
rde-emacs-base autorevert filenotify advice cap-words superword subword
saveplace recentf tree-widget rde-keymaps rde-compile rde-envrc
rde-bluetooth rde-transmission rde-mpv rde-sway comp cl-seq comp-cstr
cl-extra help-mode warnings gv comp-run bytecomp byte-compile
comp-common rx rde-fonts xdg fontaine rde-networking
inheritenv-autoloads envrc-autoloads dash-autoloads bluetooth-autoloads
transmission-autoloads mpv-autoloads compat-autoloads embark-autoloads
sway-autoloads fontaine-autoloads eiwc-autoloads guix-emacs cus-edit pp
cus-load icons wid-edit cl-loaddefs cl-lib pixel-scroll cua-base ring
subr-x rmc iso-transl tooltip cconv eldoc paren electric uniquify
ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/pgtk-win
pgtk-win term/common-win touch-screen pgtk-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 seq simple cl-generic
indonesian philippine 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
theme-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 dbusbind inotify
dynamic-setting system-font-setting font-render-setting cairo gtk pgtk
lcms2 multi-tty move-toolbar make-network-process native-compile emacs)

Memory information:
((conses 16 4245885 714044) (symbols 48 74479 20)
 (strings 32 667716 148824) (string-bytes 1 17025465)
 (vectors 16 143987) (vector-slots 8 2345893 284611)
 (floats 8 369959 2426) (intervals 56 82140 8542) (buffers 992 77))

-- 
Best regards,
Aleksandr Vityazev