Subject: bug#79279: 28.2; Combining characters cause formatting problems when showing CAP candidates

From: Dmitry Safronov <[email-masked]>
Date: Wed, 20 Aug 2025 17:44:12 +0200

When triggering completion-at-point for a Unicode symbol in Julia
mode, description
strings for some completion candidates in the minibuffer appear
misaligned, when the first character in a description string is a
combining diacritical mark (see the
attached screenshot). This is apparently because the space character immediately
preseeding the combining diacritical mark gets "consumed", that is, combined
with the diacritical mark. This issue is not specific to Julia mode,
but appears to be a more general problem of presenting text containing
leading combining characters.

In GNU Emacs 28.2 (build 1, x86_64-apple-darwin18.7.0, NS
appkit-1671.60 Version 10.14.6 (Build 18G95))
of 2022-09-12 built on builder10-14.lan
Windowing system distributor 'Apple', version 10.3.1894
System Description:  Mac OS X 10.15.7

Configured using:
'configure --with-ns '--enable-locallisppath=/Library/Application
Support/Emacs/${version}/site-lisp:/Library/Application Support/Emacs/
site-lisp' --with-modules'

Configured features:
ACL GMP GNUTLS JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER THREADS
TOOLKIT_SCROLL_BARS ZLIB

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

Major mode: Lisp Interaction

Minor modes in effect:
  shell-dirtrack-mode: t
  display-line-numbers-mode: t
  vertico-mode: t
  global-company-mode: t
  company-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  global-auto-revert-mode: t
  save-place-mode: t
  adaptive-wrap-prefix-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  window-divider-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  global-visual-line-mode: t
  visual-line-mode: t
  transient-mark-mode: t
  auto-save-visited-mode: t

Load-path shadows:
~/.emacs.d/lisp/markdown-mode hides
/Users/dmitry/.emacs.d/elpa/markdown-mode-20250403.1127/markdown-mode
/Users/dmitry/.emacs.d/elpa/jsonrpc-1.0.25/jsonrpc hides
/Applications/Emacs.app/Contents/Resources/lisp/jsonrpc
/Users/dmitry/.emacs.d/elpa/xref-1.7.0/xref hides
/Applications/Emacs.app/Contents/Resources/lisp/progmodes/xref
/Users/dmitry/.emacs.d/elpa/project-0.11.1/project hides
/Applications/Emacs.app/Contents/Resources/lisp/progmodes/project
/Users/dmitry/.emacs.d/elpa/eldoc-1.15.0/eldoc hides
/Applications/Emacs.app/Contents/Resources/lisp/emacs-lisp/eldoc

Features:
(whitespace pp shadow sort mail-extr emacsbug message rmc puny dired
dired-loaddefs rfc822 mml mml-sec epa epg rfc6068 epg-config gnus-util
rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-
util mail-prsvr mail-utils imenu eieio-opt speedbar ezimage dframe find-
func shortdoc text-property-search help-fns radix-tree python tramp-sh
tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat
shell pcomplete ls-lisp format-spec markdown-mode color thingatpt vc-git
diff-mode vc-dispatcher server display-line-numbers bm neotree vertico
compat compat-29 company-dabbrev-code company-dabbrev company-keywords
company-yasnippet company-capf company yasnippet pcase cl-extra help-
mode julia-mode derived julia-mode-latexsubs lua-mode advice rx comint
ansi-color ring deft edmacro kmacro taskpaper-mode cal-iso parse-time
iso8601 time-date noutline outline holidays-de holidays hol-loaddefs cal
-menu calendar cal-loaddefs autorevert filenotify hl-line saveplace
adaptive-wrap easy-mmode disp-table atom-one-dark-theme finder-inf info
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 subr-x map url-vars seq byte-opt gv bytecomp byte-compile
cconv cl-loaddefs cl-lib iso-transl tooltip eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/ns-
win ns-win ucs-normalize mule-util term/common-win 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 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 simple abbrev obarray cl-preloaded
nadvice button loaddefs faces cus-face macroexp files window text-
properties overlay sha1 md5 base64 format env code-pages mule custom
widget hashtable-print-readable backquote threads kqueue cocoa ns multi-
tty make-network-process emacs)

Memory information:
((conses 16 498967 48249)
(symbols 48 27693 3)
(strings 32 168335 5079)
(string-bytes 1 3797261)
(vectors 16 42646)
(vector-slots 8 1438070 195491)
(floats 8 254 307)
(intervals 56 942 365)
(buffers 992 17))