From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: xuan@xlk.me Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 11 Oct 2024 21:40:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 73752@debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.172868275714280 (code B ref -1); Fri, 11 Oct 2024 21:40:02 +0000 Received: (at submit) by debbugs.gnu.org; 11 Oct 2024 21:39:17 +0000 Received: from localhost ([127.0.0.1]:35532 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1szNLw-0003iA-Jc for submit@debbugs.gnu.org; Fri, 11 Oct 2024 17:39:17 -0400 Received: from lists.gnu.org ([209.51.188.17]:49106) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1szJ6m-0005ug-5P for submit@debbugs.gnu.org; Fri, 11 Oct 2024 13:07:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1szJ4C-0000hu-F6 for bug-gnu-emacs@gnu.org; Fri, 11 Oct 2024 13:04:40 -0400 Received: from qs51p00im-qukt01071702.me.com ([17.57.155.7]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1szIMG-0004zD-1O for bug-gnu-emacs@gnu.org; Fri, 11 Oct 2024 12:19:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1728663552; bh=E1r4x1KWU6zXFB8vapyk5K2AhiT/KWbiwAuA+cK6gME=; h=Content-Type:From:Mime-Version:Subject:Message-Id:Date:To; b=DWYZW4bDxvh2j3QyKip4QcEpoBVKa/Gsj8z5zJ/R3HjE6Mgb/JBSNit0+BOhkIXgm kVgv+PS1opmP3uutHx0T/JLVfvU+uLUpwzvgIxskC88Q4YM2bnst/OR+urlF/ni2Ja zl92xaRCynI213issuv80E9V8prT1Frfj2Q9KsnuWA2q45bca5GmOJJFEUYpH/k4jT OaYfcdldM16ISIOtXSBXPLilpq01QJoW3Jx3hPLM8mQfI59ryaioEHO/1UJygYQSRZ r78kr0/siGCdOSUlDq4AIPJz4Q9v+uWcnnyOs6HQsn+oThIXqIq4AwBBhtBQhlXDyD Qa22u6g6ZTn8w== Received: from smtpclient.apple (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01071702.me.com (Postfix) with ESMTPSA id C0052350094F for ; Fri, 11 Oct 2024 16:19:10 +0000 (UTC) Content-Type: multipart/alternative; boundary=Apple-Mail-CFBC4F02-A2BE-4C62-B5D9-5CE8A87267F8 Content-Transfer-Encoding: 7bit From: xuan@xlk.me Mime-Version: 1.0 (1.0) Message-Id: Date: Fri, 11 Oct 2024 12:18:57 -0400 X-Mailer: iPad Mail (22B5034e) X-Proofpoint-GUID: chGzoDpu79mORlehTqrQ8S-b6-F388Ov X-Proofpoint-ORIG-GUID: chGzoDpu79mORlehTqrQ8S-b6-F388Ov X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-11_13,2024-10-11_01,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=999 clxscore=1030 spamscore=0 mlxscore=0 suspectscore=0 bulkscore=0 phishscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410110113 Received-SPF: pass client-ip=17.57.155.7; envelope-from=xuan@xlk.me; helo=qs51p00im-qukt01071702.me.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HEXHASH_WORD=1, HTML_MESSAGE=0.001, MIME_QP_LONG_LINE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) X-Mailman-Approved-At: Fri, 11 Oct 2024 17:39:14 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) --Apple-Mail-CFBC4F02-A2BE-4C62-B5D9-5CE8A87267F8 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable =EF=BB=BF Setup: 1. install `ligature.el` from melpa. 2. start `emacs -Q` and execute the attached script or simply use the attach= ed script as the `init.el`. 3. open the attached `init.el` file and execute `init-faces` or hit "C-#" to= start randomizing the font faces, 4. eventually you will see some characters gets rendered with extra spaces (= sample screenshots provided below), hit "C-!" to stop the randomization, 5. hitting "C-return" will randomize font once, which might be useful for yo= u find debug, Expected behavior: the fonts are rendered consistently without extra spacing, Observed behavior: the fonts are rendered with extra spacing randomly, Related information: I previously reported this bug here: https://github.com/mickeynp/ligature.el= /issues/56. In GNU Emacs 29.4 (build 1, x86_64-redhat-linux-gnu, GTK+ Version 3.24.42, cairo version 1.18.0) of 2024-07-16 built on=20 27527c2e06f843c0962737354e0b3cf7=20 System Description: Fedora Linux 40 (Sway)=20 Configured using:=20 'configure --build=3Dx86_64-redhat-linux-gnu=20 --host=3Dx86_64-redhat-linux-gnu --program-prefix=3D=20 --disable-dependency-tracking --prefix=3D/usr --exec-prefix=3D/usr=20 --bindir=3D/usr/bin --sbindir=3D/usr/sbin --sysconfdir=3D/etc=20 --datadir=3D/usr/share --includedir=3D/usr/include --libdir=3D/usr/lib64=20 --libexecdir=3D/usr/libexec --localstatedir=3D/var --runstatedir=3D/run=20 --sharedstatedir=3D/var/lib --mandir=3D/usr/share/man=20 --infodir=3D/usr/share/info --with-cairo --with-dbus --with-gif=20 --with-gpm=3Dno --with-harfbuzz --with-jpeg --with-json --with-modules=20 --with-native-compilation=3Daot --with-pgtk --with-png --with-rsvg=20 --with-sqlite3 --with-tiff --with-tree-sitter --with-webp --with-xpm=20 --with-xwidgets build_alias=3Dx86_64-redhat-linux-gnu=20 host_alias=3Dx86_64-redhat-linux-gnu CC=3Dgcc 'CFLAGS=3D-DMAIL_USE_LOCKF -O2= =20 -flto=3Dauto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches=20 -pipe -Wall -Werror=3Dformat-security=20 -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3D3 -Wp,-D_GLIBCXX_ASSERTIONS=20 -specs=3D/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong=20= -specs=3D/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=3Dx86-64=20 -mtune=3Dgeneric -fasynchronous-unwind-tables -fstack-clash-protection=20 -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer '=20 LDFLAGS=3D-Wl,-z,relro=20 PKG_CONFIG_PATH=3D:/usr/lib64/pkgconfig:/usr/share/pkgconfig CXX=3Dg++=20 'CXXFLAGS=3D-O2 -flto=3Dauto -ffat-lto-objects -fexceptions -g=20 -grecord-gcc-switches -pipe -Wall -Werror=3Dformat-security=20 -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3D3 -Wp,-D_GLIBCXX_ASSERTIONS=20 -specs=3D/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong=20= -specs=3D/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=3Dx86-64=20 -mtune=3Dgeneric -fasynchronous-unwind-tables -fstack-clash-protection=20 -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ''=20 Configured features:=20 ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON=20 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY=20 PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF=20 TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM XWIDGETS GTK3 ZLIB=20 Important settings:=20 value of $LANG: en_US.UTF-8=20 locale-coding-system: utf-8-unix=20 Major mode: ELisp/l=20 Minor modes in effect:=20 global-ligature-mode: t=20 ligature-mode: t=20 tooltip-mode: t=20 global-eldoc-mode: t=20 eldoc-mode: t=20 show-paren-mode: t=20 electric-indent-mode: t=20 mouse-wheel-mode: t=20 tool-bar-mode: t=20 menu-bar-mode: t=20 file-name-shadow-mode: t=20 global-font-lock-mode: t=20 font-lock-mode: t=20 blink-cursor-mode: t=20 line-number-mode: t=20 indent-tabs-mode: t=20 transient-mark-mode: t=20 auto-composition-mode: t=20 auto-encryption-mode: t=20 auto-compression-mode: t=20 Load-path shadows:=20 None found.=20 Features:=20 (shadow sort mail-extr emacsbug message yank-media puny dired=20 dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config=20 gnus-util text-property-search time-date mm-decode mm-bodies mm-encode=20 mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047=20 rfc2045 ietf-drums mm-util mail-prsvr mail-utils comp comp-cstr warnings=20 icons rx ligature cl-extra help-mode use-package-core ligature-autoloads=20 package browse-url url url-proxy url-privacy url-expand url-methods=20 url-history url-cookie generate-lisp-file url-domsuf url-util mailcap=20 url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs=20 password-cache json subr-x map byte-opt gv bytecomp byte-compile=20 url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren=20 electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel=20 term/pgtk-win pgtk-win term/common-win pgtk-dnd tool-bar dnd fontset=20 image regexp-opt fringe tabulated-list replace newcomment text-mode=20 lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch=20 easymenu timer select scroll-bar mouse jit-lock font-lock syntax=20 font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic=20 indonesian philippine cham georgian utf-8-lang misc-lang vietnamese=20 tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek=20 romanian slovak czech european ethiopic indian cyrillic chinese=20 composite emoji-zwj charscript charprop case-table epa-hook=20 jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs=20 theme-loaddefs faces cus-face macroexp files window text-properties=20 overlay sha1 md5 base64 format env code-pages mule custom widget keymap=20 hashtable-print-readable backquote threads xwidget-internal dbusbind=20 inotify dynamic-setting system-font-setting font-render-setting cairo=20 gtk pgtk multi-tty make-network-process native-compile emacs)=20 Memory information:=20 ((conses 16 108675 14724)=20 (symbols 48 8830 0)=20 (strings 32 27784 2658)=20 (string-bytes 1 906120)=20 (vectors 16 22224)=20 (vector-slots 8 441624 17378)=20 (floats 8 45 30)=20 (intervals 56 736 1)=20 (buffers 984 12)) =20 --Apple-Mail-CFBC4F02-A2BE-4C62-B5D9-5CE8A87267F8 Content-Type: multipart/mixed; boundary=Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Transfer-Encoding: 7bit --Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable
=EF=BB=BF =20 =20 =20

Setup:

1. install `ligature.el` from melpa.

2. start `emacs -Q` and execute the attached script or simply use the attached script as the `init.el`.

3. open the attached `init.el` file and execute `init-faces` or hit "C-#" to start randomizing the font faces,

4. eventually you will see some characters gets rendered with extra spaces (sample screenshots provided below), hit "C-!" to stop the randomization,

= --Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: image/png; name=83k2iR0RkF0vUnlj.png; x-apple-part-url="part1.wniaCEKU.XYhfTRkd@icloud.com" Content-Disposition: inline; filename=83k2iR0RkF0vUnlj.png Content-Transfer-Encoding: base64 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 RG1rj1jhAQAAAABJRU5ErkJggg== --Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit

--Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: image/png; name=vj0A4vBxR2UgLHU2.png; x-apple-part-url="part2.y9JedFnO.0VCY6H73@icloud.com" Content-Disposition: inline; filename=vj0A4vBxR2UgLHU2.png Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAGYAAAAnCAIAAAByuar8AAAEdklEQVRoge2ZbWgbZRzA/5fkLmle LmvTS9KmxTWt67rWrqticbo3FoYKg+FwyiwMhO6DTvdBiiAIG4giHcUPvsNEp25DdGN+qILCVte5 DWHT0crcS9f1xTTXJE1yyeWS3D3nh3ZFL5e0l7u0ivf7+Nxz/+f//93/Ls9dMFEUQUcJhpVO4L+H rkwxujLF6MoUoytTjK5MMboyxejKFKMrU4yuTDG6MsXoyhRjKnTg7oVrQ/0nzA7rpt7nPK3+1Ezs p74vZq7fbd+zvaP78eVNsiyMXxwe6j+BW82bXtnrbW9iI/HzfV+Gfr/Ttntb574ni5xYsMsityZD w7eZ6QhhtQAAl0gGf71Bj4xaVtnLU8JyEx2dCg3fTkzN4DYLAGQYdokFFuyyZCgqImQhbTZ3JQDk UhwXSwIAtXa1ZCYbjnOJpMPrwq0Wjcr5Bzk2w0yHjThO+qoxg2ZPkhQdRbxgtlc4PC4AyKUz6VkG ANzrGoqfKJ8B4oVUOCYikfRRhK3injLGROBV/lrJ5LNvfvrJjpfDNye1KiYvR+yr7kNHAweCv93U KiTihVQ4LiJE+ijCXgEAPMulY4yJMLkafYukIzuaTXFcjAEAau19cyPMdBgJqKbj/vzrHL01iVvM znq3RuVIwS3E1tf2mSzm73vfTdGzmsRc6CnqXk8lgmHEC971MgVKkD+cY9OS2zA2QQNATWezZKaI UHTsT7KWMuIF73H1NGzZ0Lj9wdmx4KX3vhayvPqAuXQmPZsAAHfLvLLYeAgAajrWLHpugS5jufS8 svkui0+EAMCXpyw2HsqlOLKOMpiMqgspiNlhe7hnF+Gw/jHw88SlYfUBcyw312WedRopwwBz+qj6 rja7p2puBK8we9ubPA80SmbSI3cAwFnnLqsyAKBaVm88+AyXSF05NpBhWJXRMAwja6n6rla7p3Ju BDfj3vYmb16BMohy8JlsfJJOBMMLI8x0JDYRQoIgmTn49ud9/qcuf3gaCUg2lIbwmeyZA0f6m/f8 cvRb1aFy8gXy0gLzkX8AGQmc9FF/H1loNwmhkVHMaJi5Pnb12EApl1shDq8LM2CDb33WsHmDq6mu 5DhGwrTEAvPB1Pwph3L8x1teSIYiJUcoEQwePfjsIy89vdzrAhTbyi6FJD2bS3M2d+VDz+8ka6u1 y0oensueP3I8SUfbdm9bv3dHuZcrhCpl8Qka8YKtelXLzsfsXpd2WckgZPkzL/Yl6WjzExsDh3tM FnNZlyuCKmWJKRrxgpm0VVSR2qUkAxdLDvUfHxu82rC1c/Or3SvoS3WXTc0gQXD6KCOBa5eSFBGh C++cHDl1rq6rNXCop3yvGUukdGVIQEwwLAqoyr/IS5kaRCT+8PpH107+WNvZvOv9XsJhLd9aS6R0 Zdkky0biAFCl4sd+kSVS6csfnBr+5lxNx5rA4f3/Bl+qlPFc1mAyOuvcavZHxbnx3cXRs1e8rf7A G/vdLdKPTiuFqn3Z/xP9279idGWK0ZUpRlemGF2ZYnRlitGVKeYvC6GsafXGLBEAAAAASUVORK5C YII= --Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit

--Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: image/png; name=dknFd3G9YDiGAGQ9.png; x-apple-part-url="part3.IvpEpn8g.MX1x7HNj@icloud.com" Content-Disposition: inline; filename=dknFd3G9YDiGAGQ9.png Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAE4AAAAhCAIAAAD4agrFAAAE8klEQVRYhe2Ya2xTZRjH/6ftWdd2 7da13aHrunu7C0x2CwMMChMDoskSjOIX+UD8oB80xsSoMX4wflOJMcGExBhjFGIkJAZULopDEGGT jds2Rrd1l3Yt62Vd7/e+fjhtaTGMpTtjZNvv09unzznP/5/3fd7znkMRQrA64C23gEfHmtWVyJrV lcia1ZXIKrIqyPwR9gVcE1YAtEgor1DzBHy32Rac8wKQKIqkasXy6XwgEV9wdsICgM7Pk1eqeQKB e9oedHkAiBWFMrUynZlldfLSzdPvHgJQ2qLvOvweT8C/+PkR4599AJ58+5W2Ay9wII3Ae9chKZHz +HwO7gZMXRn47Z0vATBNNXu//oAnEPx98OjYH/8C2PrWS+2vdaUzs6zOTVgj/iAAkVxGi4QAnCNm NiKvLs1dDiF+h9tjsVv6hg1nemLB8MtHPhZKxYuymMKV0iyWS2lxPgDniCmlWZOZmWXVbbKxA1VD BQBCiNucitRX5KAj7A1M9w2brgzMDBodw5MBlwcE1TvaeAJuphSA2zST0lyV1JyKlDRUZWZmWzWn LquvBBCwz0V8AQASVZGUKV54eZIgDsPUrWPnDKcuh9y+eDiafqmQaVT63Zv5efTiDGZonrrLDkoa KwEEHHNhbwCARFkkXZelOXsBT80AAEUp68oBOEbNbFzdUgeKepi9hM/m8pjtpt7BkbM9tqFxEk8A oMX5heWMTKPSbmqs2t7GrK+ieFxu+2nN7Lpzjk4nNTfr79N8z2oiFvdanQAKSuQFJcXsomf/0rTV zV/PNjQ+cLzbNmB0jJhCbh8AvpAu2VCtaatnmmoVOq28Us02P7ckYnGPxZHUzCgAOEeTmktb9fcl 37PqNtvikSi7/VI8KvMyTWv9/CUNp69c+/4UiSdAQanTNnQ9pd/VIWEUAiHNYVv+H8+0ndWsbtYl NY8lV2Jp6/3TQ6W7KBoMsw9VcXFhASMH4DHbQ14/AKVOO4/iRDR29sPDA8e7iyrWVW9vrelsLyxn pIyCL+SsIR9EhmZZAVPMmg95/AAUtWV8Oqs9qcV/hYgGQhc+/eH60TNsc/LzBAqdlmmsLutoLN/c 9PgcPDiwCkJioYhrwtr33a+GU5cjviAAUBSfFggLROVbmppf3V3W3vDQjW2p4cJqBn67y3CmZ+z3 3tlxi9fqJIkEG5dXquv2bK3c1qzQaUVyKYcVFw4HVgOOOdfkTGmzjuInnyLRYNhxZ9J6Y3T8wrXp q7eT8wzkSfKf/eT1hq5ti5adC4IF5DwEU8/Q6fe/KqpgWvc/r9+zRVggpkVCdbN+3UbdE/ue8Vid g8e7b/10LuB0R/yh/EIJF7JzgYNZvXzo2KUvfmTHEpVct6ujduem4upSqVqRPi1E/cGx7r7hXy51 fnRAplEtWnYucGDV0n9n6Oe/jOf7PdN2NkKLhMq6CvXG2qqnWzTtDXkSERsn8QR4FLVM+xM321I8 GouFIxMXrl/95sTdG6PsPSmK4gtpqVqx4cXOpn07xcUyLgTnDsc7MCHENmi8feKiqXfIPTXDHhIB 0BJRTWdbxxt7VXW5vCFxAsdWWQghfptrZtBo7h0ynu+fHTWzVZ777M31e7dzXm6BLInVNIlYPBaK WK4Z+r49OfnPzf0nDyp12qUrNz9LazUNIcQ1bi0qZ5b09D8/j8jq48Aq+ji6iqz+B9vMGdNBpgWg AAAAAElFTkSuQmCC --Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit

--Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: image/png; name=uM000GtbhXhDurze.png; x-apple-part-url="part4.XppFjKtJ.FU0K9ZgS@icloud.com" Content-Disposition: inline; filename=uM000GtbhXhDurze.png Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAFUAAAAnCAIAAADxfZPHAAAE+UlEQVRoge2Y23MTVRzHv7ub7OZe 0iS0adI2vaRNA/SiQBlLwRGdyoCMPjjMyMiLf4J/hM++OuqMbzo6DDK8oYgIKvdLL1gopaU0SZu2 CZt2k+zt+LBtNWUbIdkpavJ92jlnz+98P/s716UIIahg0S/bwEtWlb+yVeWvbFX5K1tV/sqWSbdU EvLZFA+A4cy2WhdF08ISL2fzADiXjXPaX7gfQoRURosAimLtFs5po2gjv76UzWeXCjxnU7wk5AFw Thvn0vesz58Ynhg9dQGAL9Lce2KIYemx0xcXxqcBdB3b3zzQ86LmZFFajwAKrM1q9bga+job+3fQ jDFfYW50cuTb8wC84ca+k4cZlh77/pfkvSkAkaMDocFe3Vb6/LFb4yPfnQcQfe+glqXxs5fidx4A aHm9rwRz+Ywwce7Kk6tj6yW02eTvCUeODkTe2W/d5iwh5gbFb9/XPEeO7l/zfDl2axxA6IA+/Kb8 fGxBe3CHGmgTQwhZL/G0N5ZgThFlV4PX3xMGoMqKkOIzsYXZ6/fS03HOZe86NkhRVAlhCzzPJlc9 t/hXPc/OayXe8Kae9fgJMn/RBrXsacsB57DVBHxFTBBCiEoAUDT1dySLy959/C1JyAFQFVVI8cPf /BC7Ob6STE/+dKNjaJ/JwpbIvaZ1fm+4CYCYEYQlHgDrsNYEt2/WSjf/hI+txvK0BQCkpmKqrGjL gdlm2SyWIkpzI5PxuxOqpGzvam4e6MbaJ2Ad1uDeaMHLOTFxd0KVFWHxqZwXDeT3hBsBpKbiq547 i3nW4VcVdTmxCMBS43AGfACSf0xrVcH+HcUcxJLXvjjz5MqoKiv13e1Nr3UXGdSWbQ6KprQxxbDm FwDVk6qombjm2e4K+AAs3H+86nlPtEhDHf5siheFPMXQvmjIbOUALD6YoRgaQLC/WKynM/PTl+6I y1nteWM1Wf/VQiQh//D8DUVSANTtajNx5SY/u8SLQo5iaF9XyGzjACyse97bVaShDj8h6D0xBMDf G9bmsC8S6vvwMIC6aGuRWJzLXtsaWJ5bYu3Wjrf3oTD5wiKfGJ4ghIgrueS9qYc/Xgchta2BloN9 2kAoS4Ronuu71zx3Nq963tlWpB317P8vRVZEfgWAycpp+c9nBFWSAVjcziILdT4jTF++k56Zs7ld Tft2ugpXnUcXb//66ddEJaKQS0/FiarWtgZ2f3Qs+u4BA8a/rOQ1zxZOy/9zetbhL0eKKEk50cSa TZwZhb1e+/zMz598BYA2MVa309/b0XlkoP3Q7iKL0xZIf/8vWQxr1k0mIYR/Mq/Nkc4jA3XRlvqe dl8kZNThr2QZzL+ZVEmRc6LNU+MO+V85edjb0bQ1/f6jtogfFMJD/XW7Wq1ul9Pv3aJOn0PGzX9C +PhCnl9hWLYm6Ht2FhBCQIixd77yZVj+58cejZy6kEkssnbrrvcPBfcU7Lrpx4nE8ENFlHydzb6u UPmnfaNkGP/Vz05PXrgpruQYM+Os92zgv/Hl2ce/DSuSHBrsHfz4g81u41svw/gTI5PayY82m6zu jffZiXNXM4lFAMsdS6qiGtVp+TKMv/v4mzO/jxBCPG3B1jde3VAbHupPz8ybLWx4qJ91WI3qtHwZ tv7l0pnUdIKoxOn3OOpqN8xwfjYppHgzxzobvKz9/8j/H9W/azfaelX5K1tV/spWlb+yVen8fwJe cwk3gb2LrQAAAABJRU5ErkJggg== --Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit

5. hitting "C-return" will randomize font once, which might be useful for you find debug,


Expected behavior:

the fonts are rendered consistently without extra spacing,


Observed behavior:

the fonts are rendered with extra spacing randomly,


Related information:

I previously reported this bug here: https://github.com/mickeynp/ligature.el/issues/56.


In GNU Emacs 29.4 (build 1, x86_64-redhat-linux-gnu, GTK+ Version

3.24.42, cairo version 1.18.0) of 2024-07-16 built on
27527c2e06f843c0962737354e0b3cf7
System Description: Fedora Linux 40 (Sway)

Configured using:
'configure --build=x86_64-redhat-linux-gnu
--host=x86_64-redhat-linux-gnu --program-prefix=
--disable-dependency-tracking --prefix=/usr --exec-prefix=/usr
--bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc
--datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64
--libexecdir=/usr/libexec --localstatedir=/var --runstatedir=/run
--sharedstatedir=/var/lib --mandir=/usr/share/man
--infodir=/usr/share/info --with-cairo --with-dbus --with-gif
--with-gpm=no --with-harfbuzz --with-jpeg --with-json --with-modules
--with-native-compilation=aot --with-pgtk --with-png --with-rsvg
--with-sqlite3 --with-tiff --with-tree-sitter --with-webp --with-xpm
--with-xwidgets build_alias=x86_64-redhat-linux-gnu
host_alias=x86_64-redhat-linux-gnu CC=gcc 'CFLAGS=-DMAIL_USE_LOCKF -O2
-flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches
-pipe -Wall -Werror=format-security
-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS
-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong
-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64
-mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection
-fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer '
LDFLAGS=-Wl,-z,relro
PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig CXX=g++
'CXXFLAGS=-O2 -flto=auto -ffat-lto-objects -fexceptions -g
-grecord-gcc-switches -pipe -Wall -Werror=format-security
-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS
-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong
-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64
-mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection
-fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON
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 XWIDGETS GTK3 ZLIB

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

Major mode: ELisp/l

Minor modes in effect:
global-ligature-mode: t
ligature-mode: t
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-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
line-number-mode: t
indent-tabs-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message yank-media puny dired
dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config
gnus-util text-property-search time-date mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils comp comp-cstr warnings
icons rx ligature cl-extra help-mode use-package-core ligature-autoloads
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 url-parse auth-source cl-seq eieio eieio-core cl-macs
password-cache json subr-x map byte-opt gv bytecomp byte-compile
url-vars cl-loaddefs cl-lib 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 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 xwidget-internal dbusbind
inotify dynamic-setting system-font-setting font-render-setting cairo
gtk pgtk multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 108675 14724)
(symbols 48 8830 0)
(strings 32 27784 2658)
(string-bytes 1 906120)
(vectors 16 22224)
(vector-slots 8 441624 17378)
(floats 8 45 30)
(intervals 56 736 1)
(buffers 984 12))
--Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: application/octet-stream; name=init.el; x-apple-part-url=D8E15326-5BEC-4087-92B0-904443869178 Content-Disposition: attachment; filename=init.el Content-Transfer-Encoding: quoted-printable ;;=20-*-=20lexical-binding:=20t;=20-*-=0A(setq=20inhibit-startup-screen=20t)= =0A=0A;;=20starting=20font=0A(setq=20default-font=20(font-spec=20:family=20"= JetBrains=20Mono"=20:size=2016=20:weight=20'regular))=0A(set-face-attribute=20= 'default=20nil=20:width=20'normal=20:weight=20'normal=20:slant=20'normal=20:= font=20default-font)=0A=0A(use-package=20ligature=0A=20=20:config=0A=20=20(l= igature-set-ligatures=20'prog-mode=20'("--"=20"---"=20"=3D=3D"=20"=3D=3D=3D"= =20"!=3D"=20"!=3D=3D"=20"=3D!=3D"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"=3D:=3D"=20"=3D/=3D"=20"<=3D= "=20">=3D"=20"&&"=20"&&&"=20"&=3D"=20"++"=20"+++"=20"***"=20";;"=20"!!"=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20"??"=20"???"=20"?:"=20"?."=20"?=3D"=20"<:"=20":<"=20":>"=20">:"=20"= <:<"=20"<>"=20"<<<"=20">>>"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20"<<"=20">>"=20"||"=20"-|"=20"_|_"=20= "|-"=20"||-"=20"|=3D"=20"||=3D"=20"##"=20"###"=20"####"=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"#{"= =20"#["=20"]#"=20"#("=20"#?"=20"#_"=20"#_("=20"#:"=20"#!"=20"#=3D"=20"^=3D"=20= "<$>"=20"<$"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"$>"=20"<+>"=20"<+"=20"+>"=20"<*>"=20"<*"=20"*>"=20= ""=20"/>"=20""=20"->"=20"->>"=20= "<<-"=20"<-"=20"<=3D<"=20"=3D<<"=20"<<=3D"=20"<=3D=3D"=20"<=3D>"=20"<=3D=3D>= "=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20"=3D=3D>"=20"=3D>"=20"=3D>>"=20">=3D>"=20">>=3D"=20">>-"=20= ">-"=20"-<"=20"-<<"=20">->"=20"<-<"=20"<-|"=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"<=3D|"=20"|=3D>= "=20"|->"=20"<->"=20"<~~"=20"<~"=20"<~>"=20"~~"=20"~~>"=20"~>"=20"~-"=20"-~"= =0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20"~@"=20"[||]"=20"|]"=20"[|"=20"|}"=20"{|"=20"[<"=20">]"=20"|>= "=20"<|"=20"||>"=20"<||"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20"|||>"=20"<|||"=20"<|>"=20"..."=20"..= "=20".=3D"=20"..<"=20".?"=20"::"=20":::"=20":=3D"=20"::=3D"=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"= :?"=20":?>"=20"//"=20"///"=20"/*"=20"*/"=20"/=3D"=20"//=3D"=20"/=3D=3D"=20"@= _"=20"__"=20"???"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"<:<"=20";;;"))=0A=20=20(global-ligature-mo= de=20t))=0A=0A;;=20("\\\"o"=20?=C3=B6)=0A;;=20("^^+"=20?=E2=81=BA)=20("__+"=20= ?=E2=82=8A)=20("^^-"=20?=E2=81=BB)=0A;;=20("__0"=20?=E2=82=80)=20("__1"=20?=E2= =82=81)=20("__2"=20?=E2=82=82)=20("__3"=20?=E2=82=83)=20("__4"=20?=E2=82=84)= =0A;;=20("__5"=20?=E2=82=85)=20("__6"=20?=E2=82=86)=20("__7"=20?=E2=82=87)=20= ("__8"=20?=E2=82=88)=20("__9"=20?=E2=82=89)=0A;;=20("__a"=20?=E2=82=90)=20("= __e"=20?=E2=82=91)=20("__h"=20?=E2=82=95)=20("__i"=20?=E1=B5=A2)=20("__k"=20= ?=E2=82=96)=0A;;=20("__l"=20?=E2=82=97)=20("__m"=20?=E2=82=98)=20("__n"=20?=E2= =82=99)=20("__o"=20?=E2=82=92)=20("__p"=20?=E2=82=9A)=0A;;=20("__r"=20?=E1=B5= =A3)=20("__s"=20?=E2=82=9B)=20("__t"=20?=E2=82=9C)=20("__u"=20?=E1=B5=A4)=20= ("__v"=20?=E1=B5=A5)=20("__x"=20?=E2=82=93))=0A=0A(setq=20faces=20'((face1=20= .=20"--")=0A=09=20=20=20=20=20=20(face2=20.=20"__")=0A=09=20=20=20=20=20=20(= face3=20.=20"=3D:=3D")=0A=09=20=20=20=20=20=20(face4=20.=20"??")=0A=09=20=20= =20=20=20=20(face5=20.=20"<<")=0A=09=20=20=20=20=20=20(face6=20.=20"#{")=0A=09= =20=20=20=20=20=20(face7=20.=20"$>")=0A=09=20=20=20=20=20=20(face8=20.=20"--= >")=0A=09=20=20=20=20=20=20(face9=20.=20"=3D=3D>")=0A=09=20=20=20=20=20=20(f= ace10=20.=20"<=3D|")=0A=09=20=20=20=20=20=20(face11=20.=20"~@")=0A=09=20=20=20= =20=20=20(face12=20.=20"||>")=0A=09=20=20=20=20=20=20(face13=20.=20"<:<")))=0A= =0A(defun=20init-faces=20()=0A=20=20(interactive)=0A=20=20(dolist=20(face=20= faces)=0A=20=20=20=20(make-face=20(car=20face))=0A=20=20=20=20(highlight-lin= es-matching-regexp=20(cdr=20face)=20(car=20face))=0A=20=20=20=20(run-at-time= =20nil=201=20#'random-faces)))=0A=20=20=0A(defun=20random-from-list=20(l)=0A= =20=20(nth=20(random=20(length=20l))=20l))=0A=0A(defun=20random-face=20(face= )=0A=20=20(interactive)=0A=20=20(let*=20((weight=20(random-from-list=20'(lig= ht=20normal=20medium=20bold)))=0A=09=20(slant=20(random-from-list=20'(normal= =20italic)))=0A=09=20(height=20(random-from-list=20'(120=20125=20115=20110=20= 130)))=0A=09=20)=0A=20=20=20=20(set-face-attribute=20face=20nil=20:weight=20= weight=20:slant=20slant=20:height=20height)))=0A=0A(defun=20random-faces=20(= )=0A=20=20(interactive)=0A=20=20(dolist=20(face=20faces)=0A=20=20=20=20(rand= om-face=20(car=20face))))=0A=0A(global-set-key=20(kbd=20"C-#")=20#'init-face= s)=0A(global-set-key=20(kbd=20"C-!")=20(lambda=20()=20(interactive)=20(cance= l-function-timers=20#'random-faces)))=0A(global-set-key=20(kbd=20"= ")=20#'random-faces)=0A=0A(custom-set-variables=0A=20;;=20custom-set-variabl= es=20was=20added=20by=20Custom.=0A=20;;=20If=20you=20edit=20it=20by=20hand,=20= you=20could=20mess=20it=20up,=20so=20be=20careful.=0A=20;;=20Your=20init=20f= ile=20should=20contain=20only=20one=20such=20instance.=0A=20;;=20If=20there=20= is=20more=20than=20one,=20they=20won't=20work=20right.=0A=20'(package-select= ed-packages=20'(ligature)))=0A(custom-set-faces=0A=20;;=20custom-set-faces=20= was=20added=20by=20Custom.=0A=20;;=20If=20you=20edit=20it=20by=20hand,=20you= =20could=20mess=20it=20up,=20so=20be=20careful.=0A=20;;=20Your=20init=20file= =20should=20contain=20only=20one=20such=20instance.=0A=20;;=20If=20there=20i= s=20more=20than=20one,=20they=20won't=20work=20right.=0A=20)=0A= --Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit
--Apple-Mail-35BE240A-8A27-4684-A13D-07B43143C4A8-- --Apple-Mail-CFBC4F02-A2BE-4C62-B5D9-5CE8A87267F8-- From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 12 Oct 2024 08:06:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: xuan@xlk.me Cc: 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.172872031115255 (code B ref 73752); Sat, 12 Oct 2024 08:06:01 +0000 Received: (at 73752) by debbugs.gnu.org; 12 Oct 2024 08:05:11 +0000 Received: from localhost ([127.0.0.1]:36208 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1szX7f-0003xz-AS for submit@debbugs.gnu.org; Sat, 12 Oct 2024 04:05:11 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39302) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1szX7c-0003xj-UD for 73752@debbugs.gnu.org; Sat, 12 Oct 2024 04:05:09 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1szX5C-0006MN-F0; Sat, 12 Oct 2024 04:02:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=j90q8o5iWIIME88KyUXWdx2cA5muUrSnDzmbFvHr7ew=; b=G4RDAYJnG316 TAc/sBxLtsIvtVmmGN8NaFkbesF9EWjasd6sp7rTKtpsuRZShUSQ5imLe9KInfnTe2baG9Loc3fzE q+HvnRzYQcoUVnIOaRj/uPqGXI+txet5ll0Gb0RZwRHhWtZhNK0T8VV15f30UkGMNB6NzF1/97wDX e5tVjfA1snzWRp6yptpSu0gI15EgrSaTPB5NcpmWgaOHsxwm1Wnao0tGzobHts5hHQHZHyLyuVTOd w9/mtD3AS1TdvfWUeETTCTsoukqJJiqxH5A9AqXrtvQls/bruqRmAn6GUqaY/0+EN9/Mj4xudJCl5 rDmkkSYUQ+k/bXnpx0BrKw==; Date: Sat, 12 Oct 2024 11:02:35 +0300 Message-Id: <86zfn9ycis.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (xuan@xlk.me) References: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: xuan@xlk.me > Date: Fri, 11 Oct 2024 12:18:57 -0400 > > Setup: > > 1. install `ligature.el` from melpa. > > 2. start `emacs -Q` and execute the attached script or simply use the attached script as the `init.el`. > > 3. open the attached `init.el` file and execute `init-faces` or hit "C-#" to start randomizing the font faces, > > 4. eventually you will see some characters gets rendered with extra spaces (sample screenshots provided below), hit "C-!" to stop the randomization, > > 5. hitting "C-return" will randomize font once, which might be useful for you find debug, I cannot reproduce the problem on my system. I've let Emacs randomize the fonts for quite some time, and everything keeps rendering correctly without the extra spaces. When you say "eventually", how long do you typically wait until the problem appears? (As two deviations from your init.el, I used a different font (Cascadia Code), since I don't have JetBrains Mono installed; and I replaces use-package with the equivalent Lisp, since I don't want to install ligatures.el on this system. I don't think these two deviations should matter, but I mention them FTR.) I think this might be system-dependent. Can someone try this in a Cairo build on GNU/Linux and see if the problem reproduces? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 12 Oct 2024 17:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.172875315221319 (code B ref 73752); Sat, 12 Oct 2024 17:13:01 +0000 Received: (at 73752) by debbugs.gnu.org; 12 Oct 2024 17:12:32 +0000 Received: from localhost ([127.0.0.1]:53516 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1szffL-0005Xl-Ki for submit@debbugs.gnu.org; Sat, 12 Oct 2024 13:12:32 -0400 Received: from qs51p00im-qukt01071901.me.com ([17.57.155.8]:49769) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1szegH-00015C-NJ for 73752@debbugs.gnu.org; Sat, 12 Oct 2024 12:09:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1728749346; bh=tOAYevvgXT6zYNsn1p3A+NQTzvh6utHLaO+TByvqoqI=; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; b=db05/zFO3NODoRAED559HjhLl7u+ubOiIK9U3wBIzIiofzH5ki94Vej55x2+t/GTJ 9+jg3Ydf0EoXeJcC2dTKAK+btHJfeZz4DYkXDc2IJIV/+R6OEgJ2YhDRP3ID1rmq1w wIcsoKlf3vbEivGOH3PoGKlGCHKypiHK5XA1N2oQujoOV7NQAxwnQ487+BPw2kR09b k5Xf385HlCiEO36bjRvMIOnrkHDy4/IYn+1nBe9WyODu8HAM+bnLZcHKfHzGVgT3YX jdXJDY5Sak/eGUpUWNvw8k2fE/yER1SaT2i6XIAa5lmgBdmA13+uzG96Nww1TUyToM lv/lLDXdl5fEQ== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01071901.me.com (Postfix) with ESMTPSA id 6B8DC628009F; Sat, 12 Oct 2024 16:09:04 +0000 (UTC) Message-ID: Date: Sat, 12 Oct 2024 12:09:02 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86zfn9ycis.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-GUID: EQH0AFNp3Eb7Sd1rzWPTh358HDaPPnKo X-Proofpoint-ORIG-GUID: EQH0AFNp3Eb7Sd1rzWPTh358HDaPPnKo X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-12_11,2024-10-11_01,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 suspectscore=0 malwarescore=0 spamscore=0 bulkscore=0 mlxscore=0 mlxlogscore=809 phishscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410120118 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Sat, 12 Oct 2024 13:12:29 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 10/12/24 04:02, Eli Zaretskii wrote: > I cannot reproduce the problem on my system. I've let Emacs randomize > the fonts for quite some time, and everything keeps rendering > correctly without the extra spaces. When you say "eventually", how > long do you typically wait until the problem appears? It took me 5 seconds at most, and usually happened immediately. > (As two deviations from your init.el, I used a different font > (Cascadia Code), since I don't have JetBrains Mono installed; and I > replaces use-package with the equivalent Lisp, since I don't want to > install ligatures.el on this system. I don't think these two > deviations should matter, but I mention them FTR.) I can replicate the same problem (and even worse in some cases) using Cascadia Code. The `use-package` should be replaceable, except you want to keep the list of ligature strings formatted in the same way. I'm not fluent in Elisp or emacs API, so my dumb way of randomization is achieved through regexp matching over the ligature strings. If they are re-organized in some way (say merged into one huge line), it might break the randomization. > I think this might be system-dependent. Can someone try this in a > Cairo build on GNU/Linux and see if the problem reproduces? Potentially, I'm using emacs-pgtk on wayland. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Oct 2024 10:23:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen , Po Lu Cc: 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173002455122501 (code B ref 73752); Sun, 27 Oct 2024 10:23:01 +0000 Received: (at 73752) by debbugs.gnu.org; 27 Oct 2024 10:22:31 +0000 Received: from localhost ([127.0.0.1]:43891 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t50Pn-0005qq-0i for submit@debbugs.gnu.org; Sun, 27 Oct 2024 06:22:31 -0400 Received: from eggs.gnu.org ([209.51.188.92]:38902) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t50Pk-0005qb-Ui for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 06:22:29 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t50P4-0002Zf-TS; Sun, 27 Oct 2024 06:21:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=FNk++Y3tUZ52PmMlvLqSDwHvzMOy/nmX60SXCxOL0lE=; b=lcljlt0HRUMc e9Q8PtP66Xx5nLAHeZLBIcYItQ6ySkKPc6qSXj33VXNgANwDz4YcI1JGUIYmaE2b7OGI7WBDDyuVk Sj0Hu3jf9Z9cMVQdb2uRXZPJ5xk51SdacmCmm5K3Yh7YjH6sz3SCHtzlA9uPT8qgs64P4BxcuQnsO uSPbdfOP0ZZDC6RGE4/ur//V5uVkmbIicX5Q80ZCjnMZON05EcUUr0Ki9c4TFWj3LjCL/kOHZSIFH z6Y1B8m23bVKRr3Onzq99kb2c46r3ONEAZjtZMJOxM96Zl8ml4WbfcC5DEZuoXVkNDF6oAZM5FYbZ 90tJxqEr2DVDiEYhfRFwzw==; Date: Sun, 27 Oct 2024 12:21:44 +0200 Message-Id: <86o735als7.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Yixuan Chen on Sat, 12 Oct 2024 12:09:02 -0400) References: <86zfn9ycis.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Ping! Unless someone can debug this, I'm going to close this bug as unreproducible. > Date: Sat, 12 Oct 2024 12:09:02 -0400 > Cc: 73752@debbugs.gnu.org > From: Yixuan Chen > > On 10/12/24 04:02, Eli Zaretskii wrote: > > I cannot reproduce the problem on my system. I've let Emacs randomize > > the fonts for quite some time, and everything keeps rendering > > correctly without the extra spaces. When you say "eventually", how > > long do you typically wait until the problem appears? > > It took me 5 seconds at most, and usually happened immediately. > > > (As two deviations from your init.el, I used a different font > > (Cascadia Code), since I don't have JetBrains Mono installed; and I > > replaces use-package with the equivalent Lisp, since I don't want to > > install ligatures.el on this system. I don't think these two > > deviations should matter, but I mention them FTR.) > > I can replicate the same problem (and even worse in some cases) using > Cascadia Code. > > The `use-package` should be replaceable, except you want to keep the > list of ligature strings formatted in the same way. I'm not fluent in > Elisp or emacs API, so my dumb way of randomization is achieved through > regexp matching over the ligature strings. If they are re-organized in > some way (say merged into one huge line), it might break the randomization. > > > I think this might be system-dependent. Can someone try this in a > > Cairo build on GNU/Linux and see if the problem reproduces? > > Potentially, I'm using emacs-pgtk on wayland. > From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Oct 2024 16:22:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: Po Lu , 73752@debbugs.gnu.org, Yixuan Chen Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173004607924115 (code B ref 73752); Sun, 27 Oct 2024 16:22:01 +0000 Received: (at 73752) by debbugs.gnu.org; 27 Oct 2024 16:21:19 +0000 Received: from localhost ([127.0.0.1]:46005 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5611-0006Gt-HN for submit@debbugs.gnu.org; Sun, 27 Oct 2024 12:21:19 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:46579) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t560z-0006Gk-2u for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 12:21:17 -0400 Received: by mail-pl1-f193.google.com with SMTP id d9443c01a7336-20c693b68f5so36158285ad.1 for <73752@debbugs.gnu.org>; Sun, 27 Oct 2024 09:20:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730045981; x=1730650781; darn=debbugs.gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=vgmaIhRMa1h3rrqQHNJciX9sXUUMUGbugfLOidlgrCk=; b=Z7XjbDvjM8P4VPooQ7UPBtSR8Q5eWB/Yva2lFDweULInu9y7zqCbgoI0MZIxq4T5N7 moE9xXx/mNdiMjgxlEN4p2ZPuIGEJ3m5B4NbQ1Zw5c/U+S64FuxerDIiten5/LSwToSN QsE2F1kQP9KjAEA+pqTUXmQfcbmrpS3UUBFjax45a0gCJ0974E732t8Hfxm5RenI9ZC0 lO0JEbOmxG+so3JWmjkrfJxm1YiMuqDJ/yn+AdrkCsDDyvT4DEx7zrlr0tRz1Rr/RaG4 Zgl7LDXYj7s7qfbENoW7FsghQ3blKJhhwph/V7/1Wm+qw8P30qxhNQHippMaQvIzkyL1 G3AQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730045981; x=1730650781; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=vgmaIhRMa1h3rrqQHNJciX9sXUUMUGbugfLOidlgrCk=; b=glpqVxvdKOdo2kw3qESjqddlghWOW4rE4Tl+N6GOAhqxgSknW8nhqpfEUQ9JNrBYpN ZzVKl9lby8g2Pb6S55gxbebQKEg6RYAIB79X1EZfp8xwSeeHC37KQB3MlGCiIHCuNf7Q a0finTbnRCCTXx8pf0c69sSADXS7n+42k45Q+Iv5QEbMAXNNOalDoZXEpXDaRNEf9slW lteWWtHxAdmPvBLcu/ONb6OBDJpUJ9YiRfglnwPH6nj1vV6kCD/KiJ30zJNvBHmWJyl2 I5dOrMfAHcywgidgq20tsep94rspdu+Qxx3TT4qMVIRAhmJ8ovQwHRy8kV09Czk+2qtM svUg== X-Forwarded-Encrypted: i=1; AJvYcCXBEFPOZIknmCDwGiuiyJImtGjjgrCVgrl44zyuu0ZtVxPzS04euuhlrZMR1eaidR7VpulALg==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzLHahQoH/CSdxty0gyGwbBrHLbzjbV8Mly5qbAvdsTwWXhf2Po 9LqozkRmRWBaDyvc6lHk3imbq0OKkRfD59mfGJojy16Y342UziPrIXlFUQ/z X-Google-Smtp-Source: AGHT+IHWl99TU4S4JYotE8RbbGE0dGLmrfbC0YBPXJ41ZqTf1TqtFYhNhGXiY5XJhb/T0QdSKGnfdg== X-Received: by 2002:a17:902:f647:b0:20c:f261:2516 with SMTP id d9443c01a7336-210c6874393mr75114595ad.8.1730045980919; Sun, 27 Oct 2024 09:19:40 -0700 (PDT) Received: from localhost ([1.7.159.70]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-210bc02e615sm37398765ad.190.2024.10.27.09.19.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Oct 2024 09:19:39 -0700 (PDT) From: Visuwesh In-Reply-To: <86o735als7.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 27 Oct 2024 12:21:44 +0200") References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> Date: Sun, 27 Oct 2024 21:49:32 +0530 Message-ID: <87o73534dn.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable [=E0=AE=9E=E0=AE=BE=E0=AE=AF=E0=AE=BF=E0=AE=B1=E0=AF=81 =E0=AE=85=E0=AE=95= =E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D 27, 2024] Eli Zarets= kii wrote: > Ping! Unless someone can debug this, I'm going to close this bug as > unreproducible. I can reproduce this with Cascadia Code but it took a lot more than "5 seconds." I see no extra spaces but I see misalignment, it is not as bad as it was reported in https://github.com/mickeynp/ligature.el/issues/56 by others. I tried it with JetBrains Mono but failed to reproduce. I have a suspicion that it might be related to bug#54646 where I face(d) a similar issue with Tamil text. FWIW, I experienced a similar misalignment (exactly) once with Julia Mono for the sequence LATIN SMALL LETTER A (a) + COMBINING CIRCUMFLEX ACCENT where the accent was a little off to the side. Since I run Emacs as a daemon, closing all GUI frames and opening a fresh new one made the misalignment go away. I am attaching two images "good.png" and "misaligned.png" to illustrate the issue. [ I hope the images aren't too big. ] In the "misaligned" Emacs instance, some combination of font weight+size+slant do not exhibit the misalignment. --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=misaligned.png Content-Transfer-Encoding: base64 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 IYQQQgiRKQ0NXV1tbf5/dXUdHS2tz2+vUUPy7Ux4+LVrDx/yxAVtbSMjPT2gR4/ff//uO6B791Wr pk/nF2LY/S5d+vHHTZuA7dvd3KZOBXx8/vjjwAEgNTU6OiGh8vslLRXdHnYh+OXL69cfPQLOnp02 7c8/gZSUyMi4uOL3P3Fi7NilS4F16+rVGzKkeAIKc+fOunWHDwN3727YcOSIsGLkS8f7WtV9vJKT w8LevOGv/8eP//33zJni90tJiYiIjeXjtH9/374//VT656kucc7NTU/PzORx2rrV1XXSpOL3i4jw 8vL1Ba5c+d///v4biI5++DAoCOAX9MumusRZkq89/zx+vGPH2bPAtWsLFmzdCrx//+rV27fF70fn H9m0JycnNfXjR8DP7/Dha9eA06cnT169uvj93r0LDo6M5OMkPgFZkuoSZzYBy+LEXrfisrLev09L A06dmjBh5UogNPTChbt3gYKCnJy8PPnrV1VpT3b2hw/p6cCTJzt3njvHS+WX5OnT/fsvXeL/b958 /Pg+fSTfn+JctjhHRHh7P30KpKa+efPp53w2cbdjR/v206cD587NmLFmDZ/Qpb/LZWtPVNSdO/7+ /PMj4+m5bNmuXcDOne7uM2fyz51ZWSkp6elf/zyftrs6xfnOnbVrDx3iW8/o6lpZmZoKFRjMzEp/ HFVVTU11df5/NTVtbU3N0j++slW3cWdyczMysrL4+cvDY9y4Zcv47WzrFlaZIyMjIeH9+89vz80V Km8kJfHfFxTk5ubl8c/T8krexp0QUvGoAgMhhBBCCJEpdfXPv3iKf9FkX0zZhUrxL6pMZmZi4ocP /P8sUcHJafjwLl3471nJUjZBFRBw/PjNm3zFCrsQ+uTJrl3nzwO2tm3bOjvzSg316nXt2rIloKys ovJfJWal1S9pkXV74uP9/V++BIKDT5++dQsIDb148e5dPjHFtGv300+jRpW9H6y06YsX587dvg08 fLhly6lTfLwdHQcP7tSJl8TU1NTX19Ep+bjVZbzYhBUrFcvGKzExJOT1a36/Zs3+e+KkrKpLnEuL XVhk48B+6ulZWZmYAA4OgwZ17Ag0bjxoUKdOgKFhnTpWVvLfr4puz9eef1jc2QX6t2+FkrqRkbdu PXsGODkNGyb83RAmrPLzhQldOv+Urz1sBdzr10Kcg4PPnLl1i2/5xC6Ua2kZGOjq8gvrampaWurq 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 5s2bN2/eLH28mm6PiIiIiIiIiIheZqjtAIiIiIiISFZ8wNbQ0NTU2BioW9fLy90duHXryJFLl+TX xUCvatIAsZjBfu/emTNBQcD9+2fOBAYCz55FR78q8aBt28mThwwp+Xx+fk5OXt7fWy8sLCqSKzNU dDwV10+aUdHx3bixb9+5c8ClSz/+uG0b4O7et2/79kD//osXf/xx1Wmnss5jx44dO3bsWPL5uLi4 uLg4wNvb29vbW3vtERERERERERGRhAkMREREREQ6JD09Pj4pSf6/o6O3d+PGgL6+oaGBwd9nrEuK D+gWFubnFxQAsbFXrkREAPfvnz4tJQacPXv1KpCV9fRpamrJ9xUz2l1du3b19gYaNOjSxcsLcHPz 9W3btuT2PXp89tm77wKWlk5OtWsDtWs3buziAjg4NG/u6lrx8dy9e+zY5cvl76eKpu55VCU4eP36 I0eA7Oxnz9LTgYiIPXvOngW6d587d9w4wNzc3t7GRvfbqeh+EszNzc3NzQE9PT09PT0pfUahKP+S D5puj4iIiIiIiIiIJExgICIiIiLSIdbWLi516wIdOkyfPmIE4Ozcpk2zZvLrjRp17+7jA9Su7e5e v748010IDFy9+sAB4I8/fv119275eVF638PjzTe7d5cSAry95QQBK6t69eztSx+nqam1da1aQOfO //jH6NHKt6uoeNTtp4pW0fG1aDFyZK9e8lIeDRt26+bjA5ib165tbV112qms85iampqamionGggO Dg4ODg7ab4+IiIiIiIiIiCR6CkXxr1yIiIiIiKiqOnLkH//46ScgMvLEiStXAENDExMjI6Bly1Gj evcGGjXq1atNG6BBg86dvbwAIyMzMxOTmhNPdVNUVFBQWChXLKgu7WhaYGBgYGAg0KlTp06dOsnP P3369OnTp2VPPNB0e0REREREREREJGEFBiIiIiKiaqRly7fe8vWVl26Iibl4MTQUCAvbsePUKfnR wMDY2MgIcHHp2LFFC6BRo54927SRH+3s3Nzq1SvZflGRVCL/wQOpXQeHZs1cXQErK2fnVw3YVnQ8 NZ2mEgV0rR1NCwgICAgIkP/foEGDBg0alD/RQNPtERERERERERGRhBUYiIiIiIiqsby89PSsLLkC wu3bR474+wOPHgUF3bwJKBRFRa/6a6B372++ef99oE2biRMHDZKf9/NbsGDtWjnxwMTE0tLcHJg2 7cKF1asBU1Mbm1q1Ki8eotLo2LFjx44dgaCgoKCgIGDy5MmTJ08GNm7cuHHjRu23R0RERERERERE ElZgICIiIiKqxkxMrKwsLAAvr7ff7ttXfszKevo0NRW4c+fo0YAAOZEgMTEiIioKsLNr2PBVFQ+e P4+LS0qS/5+Xl5GRnS09ZmWpTmDQdDw1TW7u8+eZmUB+fk5OXh5gYCBVPDA3t7e3sam67VSUEydO nDhxQk40EMaNGzdu3Djtt0dERERERERERC9jBQYiIiIiIvr/0tIePkxMlAagra0BY2MLCzMz+fXU 1JiYhAQgKGjNmgMHgHr12rb18AC8vEaP7t278uOpaXbuHDVq/nwgPj409O5doFmzwYO7dAGGDl2x Yu7cqtuOpoWGhoaGhgL9+/fv378/kJSUlJSUBHTq1KlTp07AlStXrly5or32iIiIiIiIiIjo1ViB gYiIiIiI/j8bG1dXR0flr9vaNmzo5AT0779kyYwZ2o+npsjJSUvLyAASEsLDIyPl5z083nyze/eq 2466kpOTk5OTgS1btmzZsgUICQkJCQkB9u3bt2/fPiA/Pz8/Px+wtra2trZWvcSDptsjIiIiIiIi IqKyYQIDERERERGRjouJuXgxNBRQKIqKFAp5KY5GjXr0aN266rajLn9/f39/f+DTTz/99NNPS77u 6enp6ekJ7NixY8eOHYCHh4eHh0fltUdERERERERERGXDBAYiIiIiIiIdFxV1/nxIiPz/pk379+/Y ETAwMDY2Mqq67ajLyMjIyMgImDJlypQpUwAXFxcXFxegR48ePXr0AHx9fX19fQE9PT09Pb3Kb4+I iIiIiIiIiMqGCQxEREREREQ6SqEoLCwqAmJi/P3DwuTnmzcfOrQsSzXoWjuaMmTIkCFDhsiPutYe ERERERERERGVDRMYiIiIiIiIdFRmZlJSairg7t67d7t2coWDBg06dWrZsuq2Q0RERERERERE9Cp6 ir9oOxAiIiIiIiIiIiIiIiIiIiKqufS1HQARERERERERERERERERERGRygSGoKCgoKAgYMKECRMm TAB8fHx8fHwAPz8/Pz+/ygiRCEhJSUlJSQFyc3Nzc3O1HQ0RacLPP//8888/Ax06dOjQoQMwc+bM mTNnArGxsbGxsdqOjoiIiIiIiIiIiIiIiCqb0gSGTZs2bdq0CejcuXPnzp2BwMDAwMBAYMCAAQMG DAAaNmzYsGFDzQd0+vTp06dPA4aGhoaGhiUf586dO3fuXM2/ryrt2rVr164d0KdPnz59+lT++wu6 1j8VHY8YyHRxcXFxcQF69uzZs2dPzcVf2dLT09PT04G4uLi4uDhtR0O6Qtufb+Wl7vUsPlc7derU qVMnYNeuXbt27QJatmzZsmVL+ecOERERERERERERERER1QwlEhiioqKioqKAjz766KOPPpITFiIi IiIiIoAlS5YsWbIEaNy4cePGjTUfkKenp6enJ7B+/fr169fLj4WFhYWFhfJjZSsoKCgoKNDe+wu6 1j8VHY+ZmZmZmRlgb29vb28vJzJUVYsWLVq0aJF8HOK6oppN259v5aXu9dy9e/fu3bsDK1asWLFi BXDjxo0bN24AderUqVOnDvDOO++88847rLxCRERERERERERERERUU5RIYFi1atWqVauAoqKioqIi YO3atWvXrgVMTExMTEwqPiBnZ2dnZ2fgvffee++99+RHkuha/1R0PA4ODg4ODnIlhn379u3bt09z 7ROR7qhbt27dunWB5cuXL1++HIiJiYmJiQEOHjx48OBBbUdHREREREREREREREREFa1EAsOZM2fO nDkjz4wVA9Sl9ezZs2fPngGTJ0+ePHky0KhRo0aNGslrnPv5+fn5+QGjRo0aNWqUPPO2ou3YsWPH jh1Ax44dO3bsCLi6urq6ugL9+vXr168fcPny5cuXL5e+vYULFy5cuBBwd3d3d3eX2xVruosEkOKC g4ODg4MBLy8vLy8veb+333777bffBnbu3Llz507l+1d3R48ePXr0KNCtW7du3bqVfJw/f/78+fNV t6Op61Dd87V169atW7fK8YvrUOjVq1evXr1KHqdIJCpu4MCBAwcOlGe+F3fr1q1bt27J7Zw9e/bs 2bPy64mJiYmJiSXf74cffvjhhx/k+0AcZ/PmzZs3by5f78ps3rx58+bN8n5ubm5ubm7AoEGDBg0a BAQFBQUFBSnfX10PHjx48OCBfDzLli1btmwZ0KRJkyZNmgAzZ86cOXOmfJzivhXbKaPu54ay61C0 V9bPHW33s6avZ2XE8VhZWVlZWck/l4iIiIiIiIiIiIiIiKh6K5HAEBkZGRkZKQ/YltW0adOmTZsG bNu2bdu2bcDQoUOHDh0KDB8+fPjw4fIA9PHjx48fPw5ER0dHR0dr4lBe7dixY8eOHQPefffdd999 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 ERERERGR1jGBgYiIiIiIiIiIiIiIiIiIiLSOCQxERERERERERERERERERESkdUxgICIiIiIiIiIi IiIiIiIiIq1jAgMRERERERERERERERERERFpHRMYiIiIiIiIiIiIiIiIiIiISOuYwEBERERERERE RERERERERERaxwQGIiIiIiIiIiIiIiIiIiIi0jomMBAREREREREREREREREREZHWMYGBiIiIiIiI iIiIiIiIiIiItI4JDERERERERERERERERERERKR1TGAgIiIiIiIiIiIiIiIiIiIirWMCAxERERER EREREREREREREWkdExiIiIiIiIiIiIiIiIiIiIhI65jAQERERERERERERERERERERFrHBAYiIiIi IiIiIiIiIiIiIiLSOiYwEBERERERERERERERERERkdYxgYGIiIiIiIiIiIiIiIiIiIi0rsYmMKSl hYeHhwOhoXPnzp0LXLw4ZMiQIUBS0uXLly9r/v1SUoKCgoKAS5eGDRs2DHj+/NatW7eqfjukLQqF QlH+vaOjN27cuBHw9x8xYsQI4MaN77777jsgJyc+Pj5ec1ESEREREREREREREREREZVWjUtgePRo 3759+4CAgFGjRo0CUlPDwsLCgDp1evTo0QMwN69fv3791+1/4MCBA0Bi4pkzZ87Iz8fG7t27dy/w 5MnZs2fPltzPzq5t27Ztgby85OTkZCAqav369evLHr+utVNcefunouhaPJmZ9+/fvw9ER2/YsGED cOfO8uXLl8txFhXl5eXlKd9fvO7n17Nnz57AtWuzZs2aJb9+4cKAAQMGAH/+OXHixInK27Gx8fLy 8gJsbX18fHyAx49///333+X9xX1BRERERERERERERERERFRZakwCQ1ZWbGxsLHD9+tdff/014OAg JSz06nXixIkTgIfHZ5999hlgYeHq6uqqvJ07d3766aefgOjoTZs2bZKfv3VryZIlS4CYmO3bt28v uZ+enoGBgQHQqNGkSZMmAQkJx44dOwbk5j558uRJ6Y9D19oprrz9U1G0H49UKeHGjX/961//As6f lxIEROJCXNzBgwcPAmFh//d///d/wKVLw4cPHw4UFubk5OS8qj19fX19wMTEzs7ODjAysrW1tZVf NTGpXbt2bcDY+OXni7Oza9++fXugZctvvvnmG6BXr5MnT56U9xeJEaoSKoiIiIiIiIiIiIiIiIiI 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 jo6+vr6+yue8nIAKCXnooYceAkJDH3vsscf0l6d2e1lafDAOrMvVq9u3b98OpKSIVO81NQUFBQWA q2uXLl26AOHhL7/88suAt7fYQa6P2u3FOLgR48A4zT8PRDvJow9k5oDAwMmTJ08GevQQ8aCvf6nd XowDIiIiIiIiIiLLZHDo5fr1K1euXAGuX09JSUkBSkrOnj171nDBxcWnT58+rZwlWlGRlpaW1go1 NlNFRWpqairg7t6jR48e5pcjdwQ13SmkDMBxZ9XvWUp76RuQLCk5c+bMGSA5ecmSJUsAV1exwEam Dm6t55ULd2Q/bC/s97cmz7YuKvrll19+AUpLExMTEwF//zFjxowBUlPFjkw5cK3Vuru7uwOXL69a tWqV/nItpb3U6vem1o/xYdnKyn799ddfgZycn3766SdlIY9c8CNf37lzCxYsWABcu3bixIkT+suz lPaylPhgHFiHvLx9+/btA06dEgt6Zer5wMApU6ZMAa5fF+149KhYwCNTzutjKe3FOBAYB8aRnwfZ 2Tt27NgBZGZu3rx5M9C5szj6wN1dHLFw6ZJYuJ6SsmbNmjX6y7OU9mIcEBERERERERFZFoMZGIKD 77333nuVMz/d3MLCwsIMFyxTr3bv/txzzz0HuLtHREREtEaVTaPT1dbW1gI6XV1dXR2g1Xp4eHiY X17v3u+99957gK2ts7Ozs3J/nz6LFi1aBGi1TXfo3Nkstb1KS8+fP38eiIsTO4bd3SMjIyOBAQPE xLTckdVa7OzExHd1dW5ubm7rlasP+715fH2HDRs2DHB07NixY0cgJUWcuSyPVJELucrLL126dEl/ OZbaXu3d743F+LAO1dViQnbcuCNHjhxRXpc8u3v37oEDBw4Erl07duzYMaBDh7vvvvvu5uVYanup HR+MA8t25YrYoe3gIDKQDB26cePGjcoEq5zA3bdvwoQJE4CUlC+//PJLICrqrbfeeqt5eZbaXowD xoExqqvz8/PzgeHDt23btk3JyCDFxYl4kJn4unV79tlnn21ejqW2150WB0RERERERERElsbooRcP j549e/Y0vmCZ8lOthQuSjc2NA0xygNJcXl4xMTExze/39u7bt29f88u9XVlqe2Vlbd26dasyADl4 sNxp7+Li4tL88fIoFblDPyTk4Ycfftj452tsFP1Oo9FqtdrWex36sN+by8bGxsaU+2/OUtvL1H7f Xhgf1sHFJTQ0NLT5hJI8YkWqqystLS3VX46ltpfa8cE4sGxy4VqHDoMGDRrUfGe4q2u3bt26AU5O YgGczECmj6W2F+OAcWAM5fPgxoULUocOYkHbpUtiwl+nq6+vr28+8W+p7XWnxQERERERERERkaVp x9PO1WFjI84otbf39vb2BqqqcnJyctSuFanNxaVr165dlbPaDQ1I2tuLAVpDqXD1kf2u6URfW2G/ p5sxtd+3F8aHddBoRKrv25Xa8cE4sGw6XU1NTY3hCUUZJ/Lx1oZxwDgwhr4jFySNRixkl0etWFs8 3GlxQERERERERERkaVRIFq4OD4+oqKgooKjo5MmTJ9WujfWQKV3r6ysqKirUrk3rCQ2dPXv2bOMf b25K4ZqagoKCAqCyMiMjI0M5K7u9sN/T75na7xsaKisrK4GKirS0tDTA1tbJyckJqKoSKY19fAYP HjwYKCw8evToUcDRUaRWl2dEG8L4IEtianzU14v4qKzMzMzMBICGhoYGoL6+urq62vgdxIwD6+Ds HBISEgKUliYlJSU1/31tbUlJSQlQVXX16tWryg50a2NqHEjydZeUiExVsl85OwcHBwcbvp5xYF0q K8XfW19mhfLyixcvXlQy9ljKgkljmf59Sbzvy88DuWCjoaGqqqoK8PYeMGDAAMPlqB0HRERERERE RESWwmAGhrIyMVAbGzt69OjRQGbmli1bthguODV13bp165TrlAF+dQQGTp48ebJSj9zcvXv37lWv PtbC1VXsQMrJ2b17924gO/uHH374AcjP379//34gJ+enn376Se1amu748aeeeuopYO/eYcOGDTOc 8txc8gzsxkadTqcDAgMnTZo0qfWfRx/2e/o9U/t9dvauXbt2AadPv/HGG28o/ejKlf/85z//AS5e /Ne//vUvpX+fOPHcc889p/xsCOODLImp8ZGVJb4PnT371ltvvQVUVmZnZ2cDZ868+eabbyoLfwxh HFiHzp0feOCBB5SjIc6de+edd95R2uvUqZdffvll5QgC+XhrY2ocFBXFx8fHAxkZmzZt2gT4+Q0f Pnw4kJi4YMGCBcYvCGAcWBcbG3G01rlz77777rtAcXFCQkICkJq6fv369UBurvj/oGNH65yANzUO ZIa2s2f/+te//hW4fv3KlStXgKSkJUuWLAGuXt2+fft2w8+rdhxe76eNAAAYvUlEQVQQERERERER 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 //X1mZmZmdqdZ3/ZGv9yYE92zHt5hYSEhFh/H8a9c5BbnP3114EDBw6oCSsVFT///PPPqtS2JAcA nW0lc38/7/R+npzo0dYmBpCsYR44l7AwsZVER0dDQ0MDkJ0tSum7uwcEBAQAwcHi+5yzsjUP5AB1 RcXu3bt3q/vLyrZv374dCA4WW4tZwzxwDnKg/tSpt99++20gMvLhhx9+GJg69f33338fCAiIj4+P B/788+mnn34a6Ow0m81mrc/adrbmgadncHBwsKpEJye2yvayNnFBslceaJ1PRERERERE5FhWJzCY zWJgu6VFzHT38urbSsymptzc3FygtbWioqIC8PIaPnz4cDuccT+NGLF48eLFgNEYHR0dDRw/LlZS ygHKK50csD12TKywamzMycnJUSsu5P1yBYqza2+vra2tVR03fd0b1mRKSkpKAgwGLy8vr0sf7+7u 7OzsBIqLxZ6iBQWbN2/erPZO9fePiYmJsf/vYwnjvm/Ont20adMm4MiRxx9//HHgjz9EadWMDNGB KSdkhYUtWLBgARAZKToAnY2tcS87LuVAhofHkCFDhqhS070x/p2byZSYmJgIREeLPKirS09PTwcO H165cuVKID39wQcffBA4dWrdunXrtD5b29ka/25uPj4+PmoCj6VSy4x75xQbKwZk3N3FdU22k9zz PDLyoYceekg9X/595YQHZ9Hfzzu2Yh44N7mSWt7KiWpygNDZ95q3NQ/kym5ZcU2+Tn6vDQycNGnS pEtfxzxwLt3dYmLW0aNPPvnkk6rCwPjxYqKC3EJxypQNGzZsANrb6+rq6oATJ1588cUXtT5729ma Bx4eYoJCXNyaNWvWAEePisokERHLly9fbvl19soDveUTEREREREROZZLz/9ZekJBweeff/65WpEw Z44Y6La2ElEOAMovyrNmiQ4grcmOp8zMRx999FE1UC9XEEyd+sEHH3wABAWJgWp7qalJS0tLA9LT 77///vttf727u9FoNAIzZuzatWsXsH+/2Iu2v+bNO3bs2DHn3cv235KlkeWKQtm+lsiSorIiRVTU 6tWrV6vHCwu/+OKLL4DTp99777331POGD583b948YPLkd999913LEx8GGuNesBT3ciVPR4fomOzq amtra1Md9h4eYo9VV1fn3lLF1riXK8xkqeTsbNGBKUuHm0zTpk2bxvi3xFni3xKZF7Jkb09PV1dX l6o842wDWrbGvxy4qq3NyMjIACZMWLt27Vr1OOP+8pwv7sWnYFlZQE7Uktf7Cxeam5ubAYNBbDkh t55wFv3/vCP+D0ZFiQlMcsCzrExUppDxwzy4POfLg8HN1jyQ0tMfeOCBBwBf31GjRo0CfHxGjhw5 Ehgz5pFHHnlEPY95cHnMA33pbx7IykSlpaICSUTE0qVLlwLDht100003qefZKw/0nk9ERERERETk GFaH4mSHhywh2tcSymqFir72iJcrh2fM2Llz5061wqip6cyZM2cAH5+wsLAw+7+vv//YsWPHqi/c tpIDRXLgqL/HkQwGsbL0SuXq6uHh4aFu/y1Zej0u7vnnn39elZ6VJaq1xrgXLMW9i4urq6ur9S1B nJ2tcf/f/4rSySEhosNYrkiWE9Mkxv/lOUv8WyLzoq//9/XO1vh3cxMDHGZzQUFBgdpSy98/NjY2 lnFvifPFvdgqxMtLVJzpzdkHumyNexk3Z89+9NFHHwG+vmLAVm6x0bs9mQeX53x5MLj193O/XOl9 4oSI7xtvFBP5e2MeXB7zQF9szQO59YisyDhlysaNGzcCaWl333333aoSifycaK880Hs+ERERERER kWNYrcCQmblq1apVQEeHKDWYlLRt27Zt1g/8yy9xcXFxqhR1dPRjjz32mD1Pnchx2tqqq6ur1Qpk SyX0iQYTude72Zyfn58PuLiIjmST6dprr71W67MjGliyAkV19f79+/cDV12VkJCQoCZ0Eg1mVVXJ ycnJasJacPDMmTNnAp2dYiWs0RgVFRWl9VkSDSxZiaS5OS8vL08NrBJdCWSlDjc3UalBbiXa0CAr ePj5+fmpiZ1ERERERERE9mR1AkNLS0lJSYkqpevtbW2FhjhaU1Nubm6uGuiVJSqJiIiIiIiIiIiI iIiIiIiIerM6gYGIiIiIiIiIiIiIiIiIiIhooLlqfQJEREREREREREREREREREREnMBARERERERE REREREREREREmuMEBiIiIiIiIiIiIiIiIiIiItIcJzAQERERERERERERERERERGR5jiBgYiIiIiI iIiIiIiIiIiIiDTHCQxERERERERERERERERERESkOU5gICIiIiIiIiIiIiIiIiIiIs39Dyz1S89v loTFAAAAAElFTkSuQmCC --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=good.png Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAA7wAAAG6EAYAAAB7FZZAAAAgAElEQVR4nOzdZ0BUR9cH8EPvHVRA VERRREVFBBv2LmLU2I1GjdGoscUUo6ZoYhJjibEmttg19t5QJGJUQEFERMWCSBeQ3vf9cJ95xywh sHCXvSz/3xd0d+/dMzN7t8zMmdGQ/Q8BAAAAAAAAAAAAAAAAAICkaao6AAAAAAAAAAAAAAAAAAAA qBgM8AIAAAAAAAAAAAAAAAAA1BAY4AUAAAAAAAAAAAAAAAAAqCEwwAsAAAAAAAAAAAAAAAAAUENg gBcAAAAAAAAAAAAAAAAAoIbAAC8AAAAAAAAAAAAAAAAAQA2BAV4AAAAAAAAAAAAAAAAAgBoCA7wA AAAAAAAAAAAAAAAAADUEBngBAAAAAAAAAAAAAAAAAGoIDPACAAAAAAAAAAAAAAAAANQQGOAFAAAA AAAAAAAAAAAAAKghMMALAAAAAAAAAAAAAAAAAFBDaMvfIJPJZDIZ0ZkzZ86cOUPk5+fn5+dHZGxs bGxsTLRs2bJly5apIlQAAAAAUAV8PwQAAAAAAAAAAJCO/8/gzcjIyMjIIOrRo0ePHj2IfHx8fHx8 iPbu3bt3716iuLi4uLg4fmBERERERARR//79+/fvX/rv5MmTJ0+eXPUAZ82aNWvWLCJ3d3d3d3ei +Pj4+Pj4qp8XoDbAdQq1QWFhYWFhIVFCQkJCQgL/PAOoil9//fXXX3/l75fZ2dnZ2dmqjqrixLou FP1+KC8vLz09K4soOzs5OT2d356fn5mZk8NvLykpLi4uVjw+VZFauaQWj9RIrX6kFo9YpFYuqcUj NVKrH6nFExy8devJk0TbtvXuPXs2UW5uWlplPkelVi6pxVNRYrVHeaRWP1KLhykpKSoqLiZKSXn0 KCaGKCcnNVUVv7+kWj8AAAAA1eX/B3jHjx8/fvx4omvXrl27do1o1apVq1at4gM127Zt27ZtGz+Q ZXIUFRUVFRXxvzdu3Lhx4wZRQEBAQEBA1QM8ceLEiRMniO7cuXPnzh2ihw8fPnz4sOrnrW4s48XL y8vLy4vo5s2bN2/eVHVUoGyqbndcp4pRdXtB5YSFhYWFhRHZ2tra2toSffnll19++aWqo4Kajk2Q uXDhwoULF/iAaU0h1nWh6PdDeceOTZu2YgXRpk1eXlOmEMlkxcUlJUT+/t9/v3Mnvz019enT/xoo lhqplUtq8UiN1OpHavGIRWrlklo8UiO1+pFKPAUFWVm5uUQ3b27ceOQIUYMGHTu2akVkYGBhYWqq +PmkUi6pxlMesdujPFKrH6nFw2RlJSWlpRHt3DlgwLx5RPfu7d9/8WL1PT8j1foBAAAAqC7a169f v379OtGpU6dOnTpF9NFHH3300UdE8+fPnz9/ftkHtmzZsmXLlkSXL1++fPkyv719+/bt27cnSk9P T397Bl1lsY7VJ0+ePHnyhGeQ1DTJycnJyclEt27dunXrlnj1A9Km6nbHdaoYVbcXVI6+vr6+vn7Z /weojap6XVT2+6E8LS09PR0dIk1NLS0tLSINDS0tTU0ibW09PV1d/jhtbeFxNYXUyiW1eKRGavUj tXjEIrVyVTWe588DAkJDiRITHzx49kz58SqLubmDQ926RM2aDRrUqRO/Xd3aSywhITt3nj5NVFiY k5OXR+TpOWPGsGGVP59UyiVWPNV9XSQlRUQ8fUqUl/fmTVaWELemJtGtW5s3HztW+fPiuqhqXNra Wlr8/5qaOjrapTaAq444pFk/AAAAANVF+9ChQ4cOHeI3KNpxJ5aUlJSUlBSi4ODg4ODg0vfr6urq 6uryDERtbW3t//oCyTJL2MATy2QcOHDgwIEDiXJzc3Nzc3mmYe/evXv37s3Pm5eXl5eXR3T06NGj R4/y262srKysrIjatWvXrl07IgsLCwsLi9LP//z58+fPn/Pzh4eHh4eH8/tDQkJCQkLKjr9Pnz59 +vQh0tISvqj+9ddff/31F4+jY8eOHTt2LH1cYGBgYGAg/3/nzp07d+7M601+oM/ExMTExIQ/7u7d u3fv3uXt4Ozs7OzsTNStW7du3bqVfj5Wr/7+/v7+/ry85ubm5ubmRH379u3bty+vN2UrKSkpKSkh CgoKCgoK4vFkZmZmZmYSGRoaGhoaEtWrV69evXr89SBWucRud6nBdfpPte06Fev6EltlB7JYPebk 5OTk5PDM7XPnzp07d44oNjY2NjaWqHXr1q1btybq1KlTp7c7gJTVXgxrr8jIyMjISCJLS0tLS0ui fv369evXj7dfWap6fVUVOz/L/GQTTtjr38jIyMjIiC+BfPDgwYMHD/JyDRo0aNCgQdVXPwxbgrii pPY5yFR1gFes74esg411wDHy/5fviJM6qZVLavFIjdTqp6rxvHnz8mVSElFOTkqKIhPR9PUtLExM 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 l0tRYsdT1fopi6LthXr+p4iIo0f9/fn7taNjt27t2hG5uPj6du1K5OTUq5eHh+IdtepSz8qqHwbv G4pR1fuzWPHUtvZi2EBXaOjevRcuCPUVEMAHINkEY1fXYcO6dydq02bcuP79iSwtGze2s5NuuaQW T0rK48cvXxKFhe3bd+GC8P517RpRu3YTJw4YQNSly/z5Y8eWfTzb6ik8/NAhPz8+4dDEpF49Kyui MWMOHfruu7KPZxNBHzw4cSIggLd3RoawwtTs2aGhu3eXPk5d2+vcOWEiJqsXN7cxY/r2JWrZ8t13 e/YkMjAwNzcxKfv4qKizZ2/cILp9e8uW48eJWrQYOtTbW7g++vUru3+GSUt7+vTVK6IDB8aOXbqU qHHjHj3c3YnathWur0aNunZ1cyMi0tDQ0Kho7UivvUrFV/1PCQAAAAC1Aev4KW9mo/wXY3lNmvTu 3aFD2fc/fHjq1PXr/P9167Zs6eREpKWlo6OtXfbALvvhER195UpwMJGenomJoSGRmVmDBvXqKb9c YqlqPNbWTZs6OJR9/piYmzfv3+d7y7COPqmfh1G39pJnb+/u3rx52fdHRv7z+qhXT7g+5J069fHH q1eXnnHOfliXB/VcsXquKnWrZy0tXV0dnbIHdtneVk+fXr165w6RgYGFhakpH5g9c2bu3DVriB49 On/+5s2Kx92u3aRJgwYR9ey5ZMnkyeKXS2xixcMmcrCOedbhzDNdhA4vO7s2bZydy7/+XV2HD+/R g//fwcHT09W1+sslFrHjqWr9iNVeqOd/atq0Xz9PT6KMjLi45GSip0+vXAkJIXry5PLl27eFFWMM DIiaNu3b19NTGNj09iZq2LBTp1atyp74pC71rKz6YfC+8e+k9v6M95+KxcNWFImKOns2MJAP8LGM ZrYCSZMmwsQIBwcvL1dX4XoKDia6e3f37nPnhImrZ84QNWjQsWOrVnxAq0mTvn07dOCZg9VVrqoS O56SkqKi4mKiR48uXLh5kygsTKhnNpGBfZ9s3Lh793btyu4/iI0NCoqMFNrp/Hmix4+F74/FxYWF RUVEdnbt2jVrRtS27XvvDRhQ+ng+oCw8f0SEsMVTQUFWVk4O/x3bseOsWe++W331U1VixePuLny/ DgkRXs9spa3AwDVr9u8natZs4MDOnfnr29a2bVtnZ368o6PQfgkJ9+5FRxPdu3fw4OXL/Lpiv8fY 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 5UB8fHx8fDzg6urq6upa++0QERERERERke5igJeIiIiI9FJW1oMHqalKgDU2ds+esDCgoCAzMycH eOONyMh16ypud+FCQMChQ8CRI59++ssvQLNm3bq1bw/4+e3c+fXXtd8fIgDo2bNnz549geTk5OTk ZGXt3Lpqh4iIiIiIiIh0F0s0ExEREZFesrVt0cLJCfD2fuONCROAV189dGjFCmDy5K1blyxRvV3b tkOG9O4NtG8/YoS3N9Cr18yZY8bUXX/qq6Skixdv3gS++87dfdIk4NixpUs3bND/djTt0KFDhw4d AqKjo6OjowE/Pz8/P7+6a4eIiIiIiIiIdJ9xXXeAiIiIiEiT7O1bt27eXPXPra2dnR0cgHHj/vOf BQvqvj/1VU5OYmJ6OiBJpaVlZYCDQ7t2LVrofzs1JeonHThw4MCBA8DLL7/88ssvA02bNm3atCmw cOHChQsX1l47RERERERERKR/mMFLREREREQal50tB1QFR0cPj5Yt9b+d6goICAgICAAcHR0dHR2B 0aNHjx49GrC1tbW1tVUycB0cHBwcHLTfDhERERERERHpL2bwEhERERGRxmVnJyampQGAgYGBAeDo 6O5e3cCsLrVTXW5ubm5uboC/v7+/vz/QrVu3bt26KQFaMzMzMzOz2muHiIiIiIiIiPQXA7xERERE RKRxOTlJSRkZgI1N8+aOjoCJiaWlubn+t1NdPj4+Pj4+ymNdt0NERERERERE+stAksTqTURERERE RJpx+/aRI2fPKs/bth06tE8f/W+HiIiIiIiIiKiuMcBLRERERERERERERERERKQnDOu6A0RERERE REREREREREREpJ4Ka/CKfN6goKCgoCDg6NGjR48eBaysrKysrIAlS5YsWbKkLrpKRET6LDg4ODg4 GPjjjz/++OMPwNPT09PTE5g8efLkyZMBBwcHBweHuu4lEREREREREREREZFu+/8ZvNnZ2dnZ2cCg QYMGDRoEjBkzZsyYMUBAQEBAQACQmJiYmJio+Q5cvXr16tWrwMiRI0eOHFnxccaMGTNmzND851Zm 0aJFixYtAiZOnDhx4sTa/3xB18antvrz5ptvvvnmm0CvXr169eoFJCUlJSUl1bxdIl2wcuXKlStX Kt+bvLy8vLy8uu6V9on9DA0NDQ0NBd5666233noL8PDw8PDwAEJCQkJCQuq6l0RERERERERERERE uu3/B3inTp06depU4MSJEydOnAC+++677777TgmsrVu3bt26dZrvgMgYLikpKSkpUR5Pnjx58uRJ JRBQ286dO3fu3DngyJEjR44cqf3PF3RtfGqrP3v27NmzZw9w/vz58+fPA9euXbt27VrN261tIhPe 29vb29sbOH369OnTp+u6V1TXxI0Shw4dOnToEFBcXFxcXFzXvapcTefz+PHjx48fD8TGxsbGxgJR UVFRUVGApaWlpaUlMG7cuHHjxgHx8fHx8fHa2w8iIiIiIiIiIiIiIn1mHB4eHh4eDuzbt2/fvn3A G2+88cYbbwDz58+fP3++9jvQpUuXLl26VAyk9u7du3fv3kBmZmZmZqb2+6GrdG18aqs/IvB169at W7duKZnl+iYtLS0tLQ2IjIyMjIzkfCb9pun53LNnz549ewKBgYGBgYFK4FgsBfDrr7/++uuvmus/ EREREREREREREVF9YCwurAvVDeyKTF8RmBOZnqNGjRo1ahRQUFBQUFCgZGIOHTp06NChgLGxsbFx hZWANef48ePHjx9XMsYaN27cuHFjYMSIESNGjADs7Ozs7Owqb0f0X2SWFhUVFRUVKYHNzp07d+7c ueJ2hYWFhYWFwM6dO3fu3Knsr1hrUgQ47O3t7e3tNb77Oi89PT09PV3JmC7PxMTExMREyRSubL7U dB7W9HjdvXv37t27SvuXL1++fPmy8nORsajKsGHDhg0bBhgZGRkZGQFhYWFhYWFKP/r27du3b9+K 20VERERERCjP+/Xr169fP2Xcygfkra2tra2tlfdFR0dHR0crx8Hd3d3d3R0YMGDAgAEDKn6eGFfx /RL7K75Pw4cPHz58uPbWVBXHUVQcEDceiHEQGaGiBPK2bdu2bdum9G/06NGjR49W3X5Nzxvl56Eg St+rq67HWdPzWRUvLy8vLy/Ax8fHx8cH2L59+/bt24Fffvnll19+AQwMDAwMDDS2W0RERERERERE RERE+k0OGElSixYtWrRoIVXZsWPHjh07JkkWFhYWFhaSJLcqSfIFeUmSAw+SNHv27NmzZys/f/To 0aNHj1S3K6+9Kklt27Zt27at+v15/Pjx48ePJUkOfCifV/5R9EsOUFRsRw7kSJKtra2tra0kTZgw YcKECRXbEfu5cOHChQsXVmxHDoio7occwJSkxYsXL168WP39rO74aEt1+3PgwIEDBw6oHh9154um 5mFNj9fy5cuXL19e+f6oeszJycnJyVHaE+MpxlcV+QYD5VEQ+1f+c5o0adKkSRNJkjP3lXESj+J9 y5YtW7ZsmdKevIaqJPn6+vr6+qreD/G9kUt3VzoNqiwuLi4uLk75vKeeeuqpp56SpGbNmjVr1kx5 XXxv5QCt8vru3bt3796ttKep80Zl89DFxcXFxUWS/Pz8/Pz8VM9DXRlnTc/nyshrnyvb37x58+bN m5rfLyIiIiIiIiIiIiIifWaYmJiYmJgItGrVqlWrVqgyUdJZZGgdPXr06NGjSibkzz///PPPPwOb N2/evHlz1duvKpHxFRwcHBwcDMgBPWVNR5GZKQdQgNdff/31119X3V5ubm5ubi4gB8SUkqRyQEZZ M/Lrr7/++uuvgVOnTp06dUrZXmRC3rlz586dO0omXEhISEhICDB27NixY8cCcsBQ6bemZWdnZ2dn K5mcVX3U1hq4ImNPZAaKxxdeeOGFF15Qvx1NzcOaHq9XX3311VdfVfZj6dKlS5cuVX4u+lF+f8Wj HBis8jCqZGNjY2Njo7Q/c+bMmTNnKqV25UAncOHChQsXLijzuk2bNm3atFG+T8L333///fffK2st i7W6MzIyMjIylAxgkVFa/vulrXno6enp6elZ8eciw16+kUB5vXwmqqbOG5XNwxUrVqxYsUKpBKBK TcdZU2p7Pru5ubm5uSnPxb9PRERERERERERERET0F02bNm3atKkkyaVq1Y8My6U7lUyruXPnzp07 V/X75TVUtZ/B279///79+0uSlZWVlZWVkglXnhy4UPpz+/bt27dvKz8XGbyV9ffKlStXrlxR3vfl l19++eWX6vdXLvUsSY0aNWrUqJEkvf/++++//37l21V1fOTAc/Uz8ebMmTNnzhzN9acy4vMqG39t z8Pyqnq8NmzYsGHDBuXzRMayumqawVvehx9++OGHHyr9+emnn3766aeK7/v222+//fZbSZoyZcqU KVOU1zt27NixY0dlHFVZs2bNmjVrlM+RSxZrbh6Wz+AV+1VcXFxcXKy8Lq/hKklyqWXl9c8+++yz zz5T+lvT84am52FNx1lbajqfKyPfgKG99omIiIiIiIiIiIiI6gNjsValyExTV0JCQkJCgvJcDkio fr/ICJRLmKr/OVUlB36Uz1OVQSbW7FS1nSAyIFWtuSkye4WUlJSUlBTluRgnOfCr7H9qampqaqrS fmlpaWlpKZCcnJycnFzzcSiva9euXbt2VdZarSpHR0dHR0fN96umND0PdeV41Ra5tHHF19977733 3nuv4uvieyIHUoGJEydOnDix4vvKj8v9+/fv37+vuXko1hbWlJqeN8zNzc3NzZXXazoPazrOzs7O zs7Ole+3rhEVEwQ54F53/SEiIiIiIiIiIiIi0kXGoiTm1atXr169qv6G5QMglQVc5DUu1W9fXrNS /fcLZmZmZmZmgJxpqfp95X9ePkCjbj9u3bp169Yt5Xnz5s2bN2+ujMeQIUOGDBmilHYWpVTlNY+V cZk/f/78+fMBOe5e+X5WdXzE8erevXv37t3V305d1T1eNaWpeait41Vb41JQUFBQUKB6HqsiSvxW VVlZWVlZmerAv3hdBETlSgGam4dyxmz1ty+vpucNbZ0PqzvO2qLt+SxnRCvPy5dsJiIiIiIiIiIi IiIiwNjLy8vLy0vJJLt06dKlS5eUTDtVxJq94oJ/ZGRkZGSk6vefP3/+/Pnz6ndMZMzeuHHjxo0b SiCtsgBDhw4dOnTooKy5+eDBgwcPHigBOuH48ePHjx8HDA0NDQ0Ngfbt27dv3179/glibUzRr9Gj R48ePVoJmF+/fv369evA+vXr169fr6xpKTx8+PDhw4fAW2+99dZbb6n/udUdH22pq/5oah5q63iV z/CuamBSZDBmZWVlZWVV/Lnoj5jnVZ3HVT0+Yk1bueQx8Pnnn3/++efaDyxqW03PG3LJbs2dD3V1 nGs6nysj1lpu1qxZs2bNAFdXV1dXV821T0RERERERERERERUHxj95z//+c9//rN48c8///zzzz8D 8lqQqkuCCiLjTQQqdu/evXv3biUzTWQULl++fPny5UBMTExMTAyQnZ2dnZ0NLFy4cOHChUo75YlA swioiNK5opT0wYMHDx48CDg5OTk5OSmZiOL5xo0bN27cqASujY2NjY2NAXnNSiAwMDAwMBDw8/Pz 8/MDpk6dOnXqVOXz5bUglQBG3759+/btC0RERERERADymp/Avn379u3bB7z99ttvv/028Morr7zy yitKadUVK1asWLFCeS4CQvLavYC/v7+/v7+SiSdKPIv+duvWrVu3bkpAqabjoy3V7c+2bdu2bdum /PzkyZMnT55UjpsItIlA55kzZ86cOaOUcpXXnK35PDQyMjIyMtL88RIlnVevXr169WrSx/l7AAAg AElEQVRl/giipG5YWFhYWJgS0BL7K/ZLBL7S09PT09OVktGilHRhYWFhYaESCG7cuHHjxo0BU1NT U1NTYNOmTZs2bVKOj5jXokS7KJksAp2qMoFFhvratWvXrl0L7NixY8eOHcp4ifEQ/RalhkW7miIy rH/44YcffvgB8PHx8fHxAQYPHjx48GBgyZIlS5YsAcaOHTt27FigZcuWLVu2BOQ1h4GBAwcOHDhQ eazpeaOq58ObN2/evHlTOd+WPx/qyjiXV9P5rMqhQ4cOHToEyGs/A/IaxsDw4cOHDx+uvf0hIiIi IiIiIiIiItJLYjHemTNnzpw5UxSblSR5DU5JkgNhqhfxlQNFkiRnnCnbi8dRo0aNGjVKkqZPnz59 +nTldTlAp7rdxMTExMRESerRo0ePHj0qtitnzEnS/v379+/fX3F7ObNWkqytra2trZXt5Aw7SZIz bSUpIyMjIyOj4vYjRowYMWJExc8Vj23btm3btq0krVq1atWqVZIkl1Kt2M6yZcuWLVsmSSYmJiYm Jsr2ciBHkuQAnSRNmzZt2rRpFT8nJycnJydH8+OjadXtz4ABAwYMGKB6nFU9ivkqaGoeaut4bd26 devWrZIkBxJV71f58RHj2qdPnz59+lQczx9//PHHH3+UpGHDhg0bNkz5uRzYlaQNGzZs2LBB/XGV M0YrP947d+7cuXOnJMkBRdXtieOraXJAU/kc+YYLSZIDoMrrv/7666+//qrsl3j9s88+++yzzyq2 W9PzhrrzcPHixYsXL1ZelwO9Fdur63FWpbrzWRDny6CgoKCgIEmSb/iQJDlDWZLkGxlqb3+IiIiI iIiIiIiIiPSJgfgfkWkmB8CALVu2bNmyRckAHDly5MiRI5XMNFWSkpKSkpKU56LU5qBBgwYNGgRE RUVFRUUpGZTqEhmLIhPO2dnZ2dlZ6Z8qYr9ERqkoJWxvb29vb696O7HWZnJycnJystKOyIysakas yLAU7YlSqyJTUmS6ykdDyeQTGYTaGh9tqev+1HQeaut4ifeLzGQxz8S8VLXWqiAyN8Xn2dra2tra KhnNokSw+LnITNa2tLS0tLQ0JbNWjJPIRC2fga7rqnveKE/VPBTHvfz8qYyujXNV53NAQEBAQIBS 8UCUGG/Tpk2bNm0AOaCtZMITEREREREREREREVFF/z/AW/4HIgAmSsOKwNw777zzzjvvqP8BcqYX MGXKlClTpgDPP//8888/r5QcJaoNnIdEdS88PDw8PBwIDg4ODg5WArli7XJ1A91ERERERERERERE RA2ZygCvuuRSo0pmr8jgkkvLKhmSLi4uLi4uQGhoaGhoqJKxRaQJnIdERERERERERERERETUEKhR /PfJRMlSV1dXV1dXpWSor6+vr68v0LNnz549ewKTJ0+ePHkyYGNjY2Njo4muEyk4D4mIiIiIiIiI iIiIiKghqHEGLxERERERERERERERERER1Q7Duu4AERERERERERERERERERGphwFeIiIiIiIiIiIi IiIiIiI9wQAvEREREREREREREREREZGeYICXiIiIiIiIiIiIiIiIiEhPMMBLRERERERERERERERE RKQnGOAlIiIiIiIiIiIiIiIiItITDPASEREREREREREREREREekJBniJiIiIiIiIiIiIiIiIiPQE A7xERERERERERERERERERHqCAV4iIiIiIiIiIiIiIiIiIj3BAC8RERERERERERERERERkZ5ggJeI iIiIiIiIiIiIiIiISE8wwEtEREREREREREREREREpCcY4CUiIiIiIiIiIiIiIiIi0hMM8BIRERER ERERERERERER6QkGeImIiIiIiIiIiIiIiIiI9AQDvEREREREREREREREREREeoIBXiIiIiIiIiIi IiIiIiIiPcEALxERERERERERERERERGRnmCAl4iIiIiIiIiIiIiIiIhITzSgAK8kSRKQkhISEhIC XL26dOnSpcC1a99///33mv+07OzY2NhY4PLlxYsXLwaysmJiYmL0vx3ST2lpYWFhYcClSx9//PHH QFzcpk2bNgGPH2dmZmbWde+IiIiIiIiIiIiIiIhIXfU+wFtSkpubmwucPOnn5+cHnDkza9asWcCD B3v27NkDFBWlpqamqt6+uFgOgBUVpaWlpf319ZycnBzldUkqLS0tVX5uadmqVatWQELC3r179wI3 bvz4448/Vr3/utZOedUdH23Rtf4IhYXyPHv0KDo6OhrIy7t37949QNx4UJnr13/44YcfgEuXPvnk k0+U7cQNC2fPzpkzZw5QWJiSkpJScfvS0oKCggIgI+Ps2bNngStXPv/888+BY8eGDBkyBEhPP3Xq 1CnN7jMRERERERERERERERFpXr0P8J4/P3/+/PlARkZkZGQk0LnzRx999BEwfPjp06dPA926ff31 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 vdWe8zT/LS11dXV1Iu6u3zzNP7m3NufjU1dXXl5eLtLQUFVVVWXedv1dZl3Pa97KvVmfHwAAAKA3 67EdvAMGqJG++oavpubkyZMnzd4qK+tZHQPh4UOHDh0qEht799133200jLmjSkqJHDr0xBNPPCGy b9+sWbNmidTUnDhx4kT771dZmZeXlycSEhIVFRXlurZTVyHnf61PHz8/Pz+RyMixY8eONdYo/fe/ c3Jycox8/PGHOs56DTRf4WnOdUNwRcXmzZs3G1/r6i5evHix4+9L3q0pODgyMjLS+L6urqysrMy8 7fE2T/NeUvLll19+KXLq1MqVK1eKXL26Z8+ePR1/P3JuLf7+/fr16yfS3Hzjxo0bro83NV2/fv26 SH39pUuXLnX/9nlLZ69fTp5877333nN9fOfOO+644w7Pt4P8W5OemavzXlm5f//+/UYHb1RUZmZm pkhgYP/+/fubvbWe8zT/+rr90iW1NrFmt589e/asyJ49ns1kJvfWpNem1ee71FR13FtbGxsbG0WO HNFr1PrWQE3N09xfv3706NGjIufPr127dq1Iba263tPX9TdunD59+nTH399buTfr8wMAAAD0Zm47 eLdvv/32228X2bVLjRTvKLV2kMjmzWlpaWmdnznwd8XFZWdnZ4vojsuiok8++eST7t8Oq7hx48yZ M2dEiotXrVq1yrgx1PQNon5cNxz5qt9+e/PNN98U2bFjwoQJE4wGgfbU16uOrszM7du3bzc6Bt3R HQa6g7C7S+KR87bpBo6Skq+//vpro2GovHzDhg0bRE6f/uijjz4SuXp17969e42G0ODgQYMGDTJ7 6zvO05zrx3XDkc73H3/8/vvvv7f/fuTd2vr3HzFixAgRf39VEu/UqQ8//PBD47xeXr5p06ZNIqWl 33777bdGKU9f4Wnew8JSU1NTRUJDY2NjY0X+8Y9JkyZNav99yLk16aUk9Ayh48dff/3110UuXPjx xx9/FCkoUA38ISHR0dHRIo2N1dXV1SLnz//www8/mL31HdfZ6xdvIf/WpjtwdeWdwsJ33nnnHZG6 uoqKigqR+HjfLM2seZp/nRd93aeVlanrvoSEOXPmzGn/fcm9NdntakbzsWOvvvrqqyJRUer/+LBh zz333HMiI0a89tprr4lcvao6FouK1PWOr/E097o0dWnpd999953IzZvFxcXFInZ7aWlpqYjNpjqM 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 YII= --=-=-= Content-Type: text/plain M-x report-emacs-bug RET reports: In GNU Emacs 31.0.50 (build 15, x86_64-pc-linux-gnu, X toolkit, cairo version 1.18.0, Xaw scroll bars) of 2024-10-17 built on astatine Repository revision: fada04cfc788a486265c9da6636611986b48ae49 Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12101011 System Description: Debian GNU/Linux trixie/sid Configured using: 'configure --with-sound=alsa --with-x-toolkit=lucid --without-xaw3d --without-gconf --without-libsystemd --with-cairo CFLAGS=-g3' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG LCMS2 LIBOTF LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM LUCID ZLIB Important settings: value of $LC_MONETARY: ta_IN.UTF-8 value of $LC_NUMERIC: ta_IN.UTF-8 value of $LANG: en_GB.UTF-8 locale-coding-system: utf-8-unix >> Date: Sat, 12 Oct 2024 12:09:02 -0400 >> Cc: 73752@debbugs.gnu.org >> From: Yixuan Chen >> >> On 10/12/24 04:02, Eli Zaretskii wrote: >> > I cannot reproduce the problem on my system. I've let Emacs randomize >> > the fonts for quite some time, and everything keeps rendering >> > correctly without the extra spaces. When you say "eventually", how >> > long do you typically wait until the problem appears? >> >> It took me 5 seconds at most, and usually happened immediately. >> >> > (As two deviations from your init.el, I used a different font >> > (Cascadia Code), since I don't have JetBrains Mono installed; and I >> > replaces use-package with the equivalent Lisp, since I don't want to >> > install ligatures.el on this system. I don't think these two >> > deviations should matter, but I mention them FTR.) >> >> I can replicate the same problem (and even worse in some cases) using >> Cascadia Code. >> >> The `use-package` should be replaceable, except you want to keep the >> list of ligature strings formatted in the same way. I'm not fluent in >> Elisp or emacs API, so my dumb way of randomization is achieved through >> regexp matching over the ligature strings. If they are re-organized in >> some way (say merged into one huge line), it might break the randomization. >> >> > I think this might be system-dependent. Can someone try this in a >> > Cairo build on GNU/Linux and see if the problem reproduces? >> >> Potentially, I'm using emacs-pgtk on wayland. >> --=-=-=-- From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Oct 2024 17:21:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17300496371636 (code B ref 73752); Sun, 27 Oct 2024 17:21:02 +0000 Received: (at 73752) by debbugs.gnu.org; 27 Oct 2024 17:20:37 +0000 Received: from localhost ([127.0.0.1]:46071 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t56wP-0000QK-9K for submit@debbugs.gnu.org; Sun, 27 Oct 2024 13:20:37 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53086) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t56wL-0000Q0-Ba for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 13:20:35 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t56vf-0002LX-FX; Sun, 27 Oct 2024 13:19:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=h1ev00mybAb4qxJ2O3540Pbyc6rFU+uLkrOeAFBdvD4=; b=WynU30/QBbyD4zujxGT3 KIKElOwlkTZbxsUWlgnxJAf6/oQ40b84g2N3DLMkKQRj7IU7YxcZ/aRolksJDXMCXbFrxWM0kGMBh 09kXSAkf7JOtm0KvNqw3MFsVAuw1upYQKyEP8RA6vBuPepyfdwZ+Tg49C44hHzm8wmsFUDw3y3AuZ phD3mbJq9SNQD0caRW1GwRyvPm054nvMwUEsy0ce4no6XtpWGnI88VoMjK5z4vleY9a4I/wBnOYVO WBn5HJbjXVimK5KyGiUIiXKcSr9dEN14g4aZi2eg76f15yFDffwpYgOqDAgD35ec8nQtYmSZGsAnb 7jDSf3h9XjFWcg==; Date: Sun, 27 Oct 2024 19:19:48 +0200 Message-Id: <86h68x8nuz.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87o73534dn.fsf@gmail.com> (message from Visuwesh on Sun, 27 Oct 2024 21:49:32 +0530) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: Yixuan Chen , Po Lu , > 73752@debbugs.gnu.org > Date: Sun, 27 Oct 2024 21:49:32 +0530 > > [ஞாயிறு அக்டோபர் 27, 2024] Eli Zaretskii wrote: > > > Ping! Unless someone can debug this, I'm going to close this bug as > > unreproducible. > > I can reproduce this with Cascadia Code but it took a lot more than "5 > seconds." I see no extra spaces but I see misalignment, it is not as > bad as it was reported in > > https://github.com/mickeynp/ligature.el/issues/56 > > by others. I tried it with JetBrains Mono but failed to reproduce. I > have a suspicion that it might be related to bug#54646 where I face(d) a > similar issue with Tamil text. FWIW, I experienced a similar > misalignment (exactly) once with Julia Mono for the sequence > > LATIN SMALL LETTER A (a) + COMBINING CIRCUMFLEX ACCENT > > where the accent was a little off to the side. Since I run Emacs as a > daemon, closing all GUI frames and opening a fresh new one made the > misalignment go away. > > I am attaching two images "good.png" and "misaligned.png" to illustrate > the issue. [ I hope the images aren't too big. ] It's quite clear from the image that the "misaligned" line uses a font with a different slant/weight/height value. If that is the reason, I guess the problem is with composition caching, but why is that an issue in real life? Do real-life Lisp programs modify face font attributes so frequently? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Oct 2024 17:28:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17300500733121 (code B ref 73752); Sun, 27 Oct 2024 17:28:02 +0000 Received: (at 73752) by debbugs.gnu.org; 27 Oct 2024 17:27:53 +0000 Received: from localhost ([127.0.0.1]:46088 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t573Q-0000oH-KY for submit@debbugs.gnu.org; Sun, 27 Oct 2024 13:27:52 -0400 Received: from eggs.gnu.org ([209.51.188.92]:37124) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t573O-0000o1-MV for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 13:27:51 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t572k-00035x-2N; Sun, 27 Oct 2024 13:27:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=OBqzJV9YSPHlUJVqzMsIipsH6UturRpWYGkbebm2CNc=; b=CrsjT078jaKM rtXAFdm3W4jL7a1z2WOQu/Jm0tMYitNXPXfJnFR/jjNn1vzTtFmobuANg1ddpjfIlmCIX07ZQgzYp 8e/8wFJMMsI0MlKrnSdbRhnHFfhpsoIfxwn8632SE9jg6jsw+EoD6B/fjKfp9JWSZaKDtAYA8Q7+q 6oB0DQIQE50AMKj+9PccnfGaik57tVzLOAmcaDs+wkW0tL6N/lKytPX8yLhPzokctc8FGkYVU8EJV HagojRtUVg7PhSBxwZu/wlLzJmS1Lu75AYD+jhmYJAEVqdBfLk5w+bNwTADaTrNXuhJDopFLvD1yB s5/c1yaFmA3A3+Wfo6vDBA==; Date: Sun, 27 Oct 2024 19:27:05 +0200 Message-Id: <86ed418niu.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <86h68x8nuz.fsf@gnu.org> (message from Eli Zaretskii on Sun, 27 Oct 2024 19:19:48 +0200) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me > Date: Sun, 27 Oct 2024 19:19:48 +0200 > From: Eli Zaretskii > > It's quite clear from the image that the "misaligned" line uses a font > with a different slant/weight/height value. If that is the reason, I > guess the problem is with composition caching, but why is that an > issue in real life? Do real-life Lisp programs modify face font > attributes so frequently? Or maybe I don't understand the original problem. The bug report says "extra spaces", but eacg font has its own metrics of the SPC glyph, so highlighting a line with a given face can affect the metrics of the whitespace. Why is this surprising? Or what did I miss? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Oct 2024 17:40:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii , Visuwesh Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17300507775213 (code B ref 73752); Sun, 27 Oct 2024 17:40:02 +0000 Received: (at 73752) by debbugs.gnu.org; 27 Oct 2024 17:39:37 +0000 Received: from localhost ([127.0.0.1]:46111 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t57En-0001Lx-7V for submit@debbugs.gnu.org; Sun, 27 Oct 2024 13:39:37 -0400 Received: from qs51p00im-qukt01072102.me.com ([17.57.155.11]:7279) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t575i-0000tk-LK for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 13:30:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730050174; bh=DtwrIb4t17x1dGjMWePeKBUbEHfydoDucDwXBton8qc=; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; b=Q8z2zgupsdQe3SkhXnkkzKXFi2CNd9bvee9oPbt9MPydvo71iyj4M6sBC2nGH52o4 uNoaq8i+1DdoFNd2bM9U3+j45wMeJPQ21bYNTXfNHfco6Tsa3kTlBoFSJEh8zk5xla rzn96teuLDFijvrIXZYOfqIWcUL5XUfDJV7wxVhpQMnTdcDyVFr1UaGfKJCLSagzTc Kgy7oSy1K9IEHUX2Sju1zgSSRnRybi7ls+v/m91oHspZQew+ULrZVVmT9nkHiXVmaN mMu0hB2RVl7Lo9oHDN75sKLTxeIte2Ghi+DxyPPw2f68a0QpSgOlD/o1g4cfW6YYbG IvGMT61Ft0urg== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01072102.me.com (Postfix) with ESMTPSA id 7C8D834045D; Sun, 27 Oct 2024 17:29:32 +0000 (UTC) Message-ID: <617d0457-7044-48f8-af6a-fd2f41810696@xlk.me> Date: Sun, 27 Oct 2024 13:29:31 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86h68x8nuz.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-GUID: 0CJyg7b15xdTWvmlaNHxSYBQkaTcvQov X-Proofpoint-ORIG-GUID: 0CJyg7b15xdTWvmlaNHxSYBQkaTcvQov X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-27_04,2024-10-25_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=590 adultscore=0 spamscore=0 clxscore=1030 mlxscore=0 malwarescore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410270153 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Sun, 27 Oct 2024 13:39:35 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 10/27/24 13:19, Eli Zaretskii wrote: > It's quite clear from the image that the "misaligned" line uses a font > with a different slant/weight/height value. If that is the reason, I > guess the problem is with composition caching, but why is that an > issue in real life? Do real-life Lisp programs modify face font > attributes so frequently? It's not about frequency, but probably total number of font face attribute changes. The lisp code I submitted was changing the attributes rapidly just to recreate the problem faster. In real-life, this problem happens with normal emacs configuration, usually within half an hour. For reference, here (https://github.com/LukeXuan/dot-files/tree/e6067ec232ea34e01fb9a1f1a358d1c328d47c50/.config/doom) is my emacs configuration on top of doom. I primarily write LaTeX and Coq and this problem occurs every 30 minutes or so. The solution is to either restart emacs (what I used to do) or disable ligature altogether (what I do now). From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Oct 2024 17:45:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17300510816250 (code B ref 73752); Sun, 27 Oct 2024 17:45:01 +0000 Received: (at 73752) by debbugs.gnu.org; 27 Oct 2024 17:44:41 +0000 Received: from localhost ([127.0.0.1]:46128 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t57Jh-0001ck-08 for submit@debbugs.gnu.org; Sun, 27 Oct 2024 13:44:41 -0400 Received: from eggs.gnu.org ([209.51.188.92]:42536) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t57Jf-0001cV-MX for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 13:44:40 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t57J0-0004Z6-Vf; Sun, 27 Oct 2024 13:43:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=PIddTF4s/fmcAAtw+jeoqlfVZzzmy4TcAQU+XCRo/Ts=; b=UyYfjvWQUKOA ew9J6fyrybf9T5lfj5PGDJ6Qz+jtllmROuI6CuSTy37XnYOvUvO+SSqTDO/ulrSTVcfrM6TYXD28h E23kppPMGDzcbdJZcy6h8qqjQa3FsxWWtYMmzPJwkVtQlMyBAK8f/5lo3KBxVkEBUvDH2QZ+aKZ3j MWMDE+c3mIU4goPwX7wi/cbGqeYBcPOBe2zwEpOMLtGax0A/gOOXJQ6gREGZBeY7WC2CFrOJE5o7S w2Zf0qiHt6OdP5pP8L/fMfgnhCBIPsnXCruBZvV3KwdM8mg9+dwkOIRxprMt4FEwoq4eEuekC55o+ tlVuISKHR6PLjTGLMBQLMQ==; Date: Sun, 27 Oct 2024 19:43:55 +0200 Message-Id: <86cyjl8mqs.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> (message from Yixuan Chen on Sun, 27 Oct 2024 13:39:56 -0400) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sun, 27 Oct 2024 13:39:56 -0400 > Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > From: Yixuan Chen > > On 10/27/24 13:27, Eli Zaretskii wrote: > > Or maybe I don't understand the original problem. The bug report says > > "extra spaces", but eacg font has its own metrics of the SPC glyph, so > > highlighting a line with a given face can affect the metrics of the > > whitespace. Why is this surprising? Or what did I miss? > > The problem is that the "space" being rendered is different in the > following two case: > > - if the default font is set to a specific combination of attributes > (say 16, bold, normal) from start, it renders all the characters with > one version of spacing. Let's call this version of spacing the > "expected" spacing, > - if the default font is some other combination of attributes (say 16, > regular, normal), and one line is set to the attribute of (16, bold, > normal). There is a **probability** that this line will render with a > different version of spacing than the "expected" spacing. In my setup, > this different spacing is extra wide. > > Ultimately, I believe the following should be true: if one line is > rendered with **the same font face attributes**, it should always be > rendered in **the same way**, regardless when, where, and how its > attributes are assigned. This is not the case for emacs right now, and > thus I consider it a bug. Sorry, I still don't understand. Your code does (highlight-lines-matching-regexp (cdr face) (car face)) This potentially shows each line in a different face, and thus can affect the metrics of the SPC character glyph which is what the indentation is made of. So why is this a problem, let alone a bug? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Oct 2024 19:18:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173005663423714 (code B ref 73752); Sun, 27 Oct 2024 19:18:02 +0000 Received: (at 73752) by debbugs.gnu.org; 27 Oct 2024 19:17:14 +0000 Received: from localhost ([127.0.0.1]:46374 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t58lF-0006AQ-IB for submit@debbugs.gnu.org; Sun, 27 Oct 2024 15:17:13 -0400 Received: from eggs.gnu.org ([209.51.188.92]:54996) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t58lD-0006AB-Qg for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 15:17:12 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t58iR-00054k-TL; Sun, 27 Oct 2024 15:14:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=m3zzxA0xCHx/BTZwl6ngsgN0PK3HjyEwzHJ5kXKGw8U=; b=Pxb7Lq4eFURm /yVvGpTcjgpdWaE7bbi1c0VkW/Ms792T7UPS62CSmeqE79l+62DQxdGisEZPcPGHJf7rkMlAwMzRI +JA6S5gyKQsNFJMOiZR8sMUsE+sudBswUopGW2ofkNiMG7OddfKLthnJ1USW5K5X3MYacmAZlbV+7 z2UI3/xtZ4gszgELvY9UdRjqTjiwEnszshNA5qA59xjY7r7Ry/C+PtkLg8rJAByhC6eeNKhfECqcy k5/UR0RywUGl+ltXlnJmqkyccXc397Qkpb0/3/sSt5O/4dHHDZ1sd/3vacR8qQIlLFMijZoTDgjls w2aQVgHV9QvjDjIbud7Pog==; Date: Sun, 27 Oct 2024 21:14:16 +0200 Message-Id: <86bjz58ik7.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Yixuan Chen on Sun, 27 Oct 2024 13:46:55 -0400) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sun, 27 Oct 2024 13:46:55 -0400 > Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > From: Yixuan Chen > > > Sorry, I still don't understand. Your code does > > > > (highlight-lines-matching-regexp (cdr face) (car face)) > > > > This potentially shows each line in a different face, and thus can > > affect the metrics of the SPC character glyph which is what the > > indentation is made of. So why is this a problem, let alone a bug? > > The problem is executing that line at 10PM today may render the font one > way, while executing that line at 6AM tomorrow (with exactly the same > "face" variable) may render the font a different way, even if all the > other variables remains the same. But you modify the faces in a random fashion, so why is this a surprise that it is not deterministic? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Oct 2024 19:46:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173005833328466 (code B ref 73752); Sun, 27 Oct 2024 19:46:02 +0000 Received: (at 73752) by debbugs.gnu.org; 27 Oct 2024 19:45:33 +0000 Received: from localhost ([127.0.0.1]:46433 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t59Ce-0007P4-ST for submit@debbugs.gnu.org; Sun, 27 Oct 2024 15:45:33 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44882) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t59Cd-0007Or-Ra for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 15:45:32 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t59Bz-0008AV-6e; Sun, 27 Oct 2024 15:44:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=7N/N0/h39Z33gE8FItVRDbn6P9E1rnRk0wP2RcAmW20=; b=Ez8VBQfRyeJe 0W6ZK2BebmYpHwd+VI8U4bcUlE8O7GH5AuTA4yCw1fsn1mgFym4PBnPBgHFCRxTVwJJqgCvt8Ks/c 7PuLyP0cycCaRzP0c3ZAb7FZPI4Q0tM0e9Z365Uir/h/wzhzRtn6vmWspS5rh3qp0J/5V2RkfsHNl x76jUro0OgKGoNp9FjFc44PFlrGHY3CZGN7iyMOTiN9CdYCHrtsbZj5ulQRbgNtPTe66BfcnuNB1s YApbAWuwc+UjwXUPnD8SjPLF6Pe3UhsRFwTi0Qp4vKsbfPtcUKj+RjxRtOKIbwpnDfF2NyCQjfAE8 8WJn8KrFxl1bWNLQbPpcxw==; Date: Sun, 27 Oct 2024 21:44:49 +0200 Message-Id: <86zfmp72ku.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Yixuan Chen on Sun, 27 Oct 2024 15:36:06 -0400) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sun, 27 Oct 2024 15:36:06 -0400 > Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > From: Yixuan Chen > > On 10/27/24 15:14, Eli Zaretskii wrote: > >> Date: Sun, 27 Oct 2024 13:46:55 -0400 > >> Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > >> From: Yixuan Chen > >> > >>> Sorry, I still don't understand. Your code does > >>> > >>> (highlight-lines-matching-regexp (cdr face) (car face)) > >>> > >>> This potentially shows each line in a different face, and thus can > >>> affect the metrics of the SPC character glyph which is what the > >>> indentation is made of. So why is this a problem, let alone a bug? > >> > >> The problem is executing that line at 10PM today may render the font one > >> way, while executing that line at 6AM tomorrow (with exactly the same > >> "face" variable) may render the font a different way, even if all the > >> other variables remains the same. > > > > But you modify the faces in a random fashion, so why is this a > > surprise that it is not deterministic? > > I said, > > > ... (with exactly the same "face" variable) ... even if all the > > other variables remains the same. > > Yes, this script is modifying the scripts in a random fashion, but let's > imagine this: > > 1. the first time I open emacs, start the script and it randomizes the > first line to a combination of face attributes (let's say (16, bold, > regular)) in 5 seconds after going through 50 different combinations, it > looks one way. > > 2. I restart emacs, start the script and it randomizes the first line to > the same combination of face attributes (16, bold, regular) in 5 minutes > after going through 3000 combinations, it looks differently from the > first time, > > Do you agree that in both cases that single line should look the same? > And they should always look the same as long as the randomization hits > (16, bold, regular) on that line regardless of time and previous history? That depends when redisplay kicks in, between your face randomizations. Among other factors. And I still fail to understand why this largely artificial program is important to investigate. Are there any real-life cases where you see the same face displayed differently when ligatures are involved? If not, what useful stuff will we learn by digging into this, especially since reproducing the problem is so hard? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Oct 2024 20:08:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173005967732564 (code B ref 73752); Sun, 27 Oct 2024 20:08:02 +0000 Received: (at 73752) by debbugs.gnu.org; 27 Oct 2024 20:07:57 +0000 Received: from localhost ([127.0.0.1]:46468 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t59YK-0008T9-Gg for submit@debbugs.gnu.org; Sun, 27 Oct 2024 16:07:56 -0400 Received: from eggs.gnu.org ([209.51.188.92]:54400) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t59YI-0008St-4Y for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 16:07:55 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t59Xb-0001XX-Bi; Sun, 27 Oct 2024 16:07:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=gljdMawuTfwdJaX8uCHVIpO5y0PhV+GXAjZxJFdm7uo=; b=MqyABgqxqhfu M+axsKPo5L+ONDYO/2/dXWyw5x6+kEjcpZvyJyrD2IbCDmPaLLuntt8/GEllASsosKnrQSVMYdhTK AMM/1cRUBhz7ByOrqnZfnTQwFcC0ZaIHjgL1C47jMRZaTYIinEa5MYAoflJA9CmpG1W6QTl+aqxWM Fja8qdc82IIa+eJ+vVDgyVEhwsQqXaO6ZY5mu4FlC70lu6qI9SNCdlO8NFy1p0RIWwiJ2FYEYjRsd e8H/JGIIXUP2Y+7bEE4ArD1bosOCuypiaJtcbGujcGrNyaDZVGVvLZcWLF8My58rbhKf5MRBCyatU odmYsMACPvZR2UjOcTHWwg==; Date: Sun, 27 Oct 2024 22:07:05 +0200 Message-Id: <86y12971jq.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> (message from Yixuan Chen on Sun, 27 Oct 2024 15:41:06 -0400) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sun, 27 Oct 2024 15:41:06 -0400 > Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > From: Yixuan Chen > > On 10/27/24 15:14, Eli Zaretskii wrote: > >> Date: Sun, 27 Oct 2024 13:46:55 -0400 > >> Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > >> From: Yixuan Chen > >> > >>> Sorry, I still don't understand. Your code does > >>> > >>> (highlight-lines-matching-regexp (cdr face) (car face)) > >>> > >>> This potentially shows each line in a different face, and thus can > >>> affect the metrics of the SPC character glyph which is what the > >>> indentation is made of. So why is this a problem, let alone a bug? > >> > >> The problem is executing that line at 10PM today may render the font one > >> way, while executing that line at 6AM tomorrow (with exactly the same > >> "face" variable) may render the font a different way, even if all the > >> other variables remains the same. > > > > But you modify the faces in a random fashion, so why is this a > > surprise that it is not deterministic? > > Just in case my last explanation wasn't clear enough: by "with exactly > the same face variable", I'm saying that when the randomizer picks the > same font attribute (the same everything), there is a chance it will > render that line differently. That's not what I see in the images I've been shown. The lines that have different indentation have either different slant or different weight. To convince me that this is really happening (although I'm unable to understand how it could, given how Emacs faces work), you will need to show some code which generates such a situation in a reproducible manner, and then show me by using "M-x describe-text-properties" and "C-u C-x =" that indeed the same characters in the same face are shown on different lines with different metrics. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Oct 2024 20:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.1730059922884 (code B ref 73752); Sun, 27 Oct 2024 20:13:01 +0000 Received: (at 73752) by debbugs.gnu.org; 27 Oct 2024 20:12:02 +0000 Received: from localhost ([127.0.0.1]:46476 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t59cI-0000EB-8c for submit@debbugs.gnu.org; Sun, 27 Oct 2024 16:12:02 -0400 Received: from eggs.gnu.org ([209.51.188.92]:41258) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t59cG-0000Dg-P7 for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 16:12:01 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t59bc-0001tY-9r; Sun, 27 Oct 2024 16:11:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=tTbZ2dltHZkXVow/7Q3SbXz1GiZeBxaopcs6f/8PhYs=; b=IXcn9rhEVrG6 igG2CRkeS5O58R6OWYm8Z6ZXkFBUwuWDuRDjj13vKxL4nr0Mx/iMQlZ1qPd/01b3I1mnyS+IYkgT4 0Lx35SaZf3Z0tuZ/q7RahXXSEueIoK7mc+CJRNfeS1JP2C41TyFghWVEwG3Hg2Wyf7IBNaKBCn/mg 9gnA6MU7MgmQzEMwAHjr25AfwBUv0n2PtjDkYGDIsogPBfHB4z45/2+5EDbcau3YbWaamf/Ulc2t3 tPSHRY6I7GyUmnU252YQpOi+humWs7ttMSfv8Jz7d2TzhFDWwYYhE0olZk48TPDv3BZ/Ad//MK/y2 sWcai/VdT0C6R61sIlUtkQ==; Date: Sun, 27 Oct 2024 22:11:18 +0200 Message-Id: <86ttcx71cp.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Yixuan Chen on Sun, 27 Oct 2024 15:47:57 -0400) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <86zfmp72ku.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sun, 27 Oct 2024 15:47:57 -0400 > Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > From: Yixuan Chen > > > It's not about frequency, but probably total number of font face > > attribute changes. The lisp code I submitted was changing the attributes > > rapidly just to recreate the problem faster. In real-life, this problem > > happens with normal emacs configuration, usually within half an hour. What is "the problem which happens within half an hour" in real-life? And what causes "font face attribute changes" in that case? Also, can you reproduce the problem at will, and then leave that session running so I could ask you to report some details and perform some experiments? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 01:16:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173007815511159 (code B ref 73752); Mon, 28 Oct 2024 01:16:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 01:15:55 +0000 Received: from localhost ([127.0.0.1]:48473 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5EMM-0002tr-RB for submit@debbugs.gnu.org; Sun, 27 Oct 2024 21:15:55 -0400 Received: from qs51p00im-qukt01080102.me.com ([17.57.155.19]:48539) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t57Fm-0001OT-KF for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 13:40:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730050798; bh=OhOGokGFhzohea2j8fPbPbkHawK6mEsR8v6di4TehCo=; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; b=maQm/8rmxX3CcJDShvRakkfEl4gMJBxuyCB0qxuQfG3PeDOWOnUQE/OBzRqV1ASxf +bwmyWxHCVXQfH+kFC5scdpqxIosTTceuQVCvEHhNkKf+2CJQy8VYaHFMQmJZRtPUQ YNL7i484QsAsE1KzyMLna5VYbnqKDdeu43L++oHP97A9SP/zHP2KOEL+l1efjNW84B YqYOSG+rI44PUpeStFzhrLR4ruV3FvFGzQQDZKNutzwJZ5+//cOTKK8/OlG9qb98BR iApjDz0Lb5MVYoS7SYJozY2ATPdQseY4uFQW9c99Q8vRbtK300jijISSwEmSN9WkLm 4Ka47azVHISnA== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01080102.me.com (Postfix) with ESMTPSA id 4108F1CC00C5; Sun, 27 Oct 2024 17:39:57 +0000 (UTC) Message-ID: <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> Date: Sun, 27 Oct 2024 13:39:56 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86ed418niu.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-ORIG-GUID: 3lCk8ekjS7-dqB4HKK5QyRBRNefo-klF X-Proofpoint-GUID: 3lCk8ekjS7-dqB4HKK5QyRBRNefo-klF X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-27_04,2024-10-25_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 suspectscore=0 mlxscore=0 clxscore=1030 bulkscore=0 mlxlogscore=378 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410270155 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Sun, 27 Oct 2024 21:15:53 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 10/27/24 13:27, Eli Zaretskii wrote: > Or maybe I don't understand the original problem. The bug report says > "extra spaces", but eacg font has its own metrics of the SPC glyph, so > highlighting a line with a given face can affect the metrics of the > whitespace. Why is this surprising? Or what did I miss? The problem is that the "space" being rendered is different in the following two case: - if the default font is set to a specific combination of attributes (say 16, bold, normal) from start, it renders all the characters with one version of spacing. Let's call this version of spacing the "expected" spacing, - if the default font is some other combination of attributes (say 16, regular, normal), and one line is set to the attribute of (16, bold, normal). There is a **probability** that this line will render with a different version of spacing than the "expected" spacing. In my setup, this different spacing is extra wide. Ultimately, I believe the following should be true: if one line is rendered with **the same font face attributes**, it should always be rendered in **the same way**, regardless when, where, and how its attributes are assigned. This is not the case for emacs right now, and thus I consider it a bug. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 01:16:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173007815911170 (code B ref 73752); Mon, 28 Oct 2024 01:16:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 01:15:59 +0000 Received: from localhost ([127.0.0.1]:48476 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5EMN-0002u0-DL for submit@debbugs.gnu.org; Sun, 27 Oct 2024 21:15:59 -0400 Received: from qs51p00im-qukt01072701.me.com ([17.57.155.16]:3285) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t57MY-0001nZ-6x for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 13:47:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730051217; bh=LNkPKcPJf2lUeMrSIN72bXedPzx84PdxJd6W2ZVzCsM=; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; b=fnVJm+SCHH754QL62kEKkoy5ZK778u3rfeuInE4kyVIWttij0Z8Lv5eufPPbheWXd PbF5RbZpLncwrcnjfOf71pojyoQNrwJCwUtF5oXY1qlYk4eO48l/cydEKFRUOC5vN0 K/gvTUyJEXYCtGoZ75Xy7zY4iOP76A1bfcv90MWRVteVoyymsdf5Low1QVoqGAkB0V Oc1a2HMBMr2JqaotIleFX/nVSakZa1P28fUhbFlp64ARNlzk7/zHIoPNK9llvucAHg ALBtT+9YB1gSa3wpH5xgwwdds+mPKkrZsNtFxZoeRWkq2JguCk9ZYNqLb3KtUG61wC Qf3oYVlKm/kpg== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01072701.me.com (Postfix) with ESMTPSA id CC14F15C016A; Sun, 27 Oct 2024 17:46:56 +0000 (UTC) Message-ID: Date: Sun, 27 Oct 2024 13:46:55 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86cyjl8mqs.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-ORIG-GUID: 1JV1vEZaF0HJSRnJReEhbLCUHes851ma X-Proofpoint-GUID: 1JV1vEZaF0HJSRnJReEhbLCUHes851ma X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-27_04,2024-10-25_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 suspectscore=0 mlxscore=0 clxscore=1030 bulkscore=0 mlxlogscore=409 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410270156 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Sun, 27 Oct 2024 21:15:53 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > Sorry, I still don't understand. Your code does > > (highlight-lines-matching-regexp (cdr face) (car face)) > > This potentially shows each line in a different face, and thus can > affect the metrics of the SPC character glyph which is what the > indentation is made of. So why is this a problem, let alone a bug? The problem is executing that line at 10PM today may render the font one way, while executing that line at 6AM tomorrow (with exactly the same "face" variable) may render the font a different way, even if all the other variables remains the same. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 01:16:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173007816011177 (code B ref 73752); Mon, 28 Oct 2024 01:16:03 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 01:16:00 +0000 Received: from localhost ([127.0.0.1]:48479 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5EMR-0002u7-Di for submit@debbugs.gnu.org; Sun, 27 Oct 2024 21:16:00 -0400 Received: from qs51p00im-qukt01071901.me.com ([17.57.155.8]:22369) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t594F-00074N-G7 for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 15:36:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730057770; bh=rjFJQRQoKoOJsBPb2yiNFwSwZchijt1Lcw3dajdIE90=; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; b=RJT4eZul91SIzjiIvByKD7VgUc3VONHm+3IiL+3mRwLEQuDi/5uAp4s8HY7WAE+gP UGlAoAW1zbCudr2Lcry3L5chQC51F3BSJtrKyriPoGCSV3bX3/5s21/WBYcfLu50nC ayrTE8GtfsKjRI1omGHWomE+KGSYpOuD4oHplVFum7ViFG9HHsGlCR/goAaANjInQ5 LF+B1upaUwYxYjI8g9yQ52k6sYJY5ovMWsRwEgXyePEB9XXY0mo8NTy/X+VrjRy75V ytcpu3gTquRPuiNdbKs7o5uDUup3dm2BABvpq6YBxh3zC9A0HtJB7a2uVMhAiCADgZ 4+GNr15w/2AfQ== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01071901.me.com (Postfix) with ESMTPSA id A8CAE6280354; Sun, 27 Oct 2024 19:36:08 +0000 (UTC) Message-ID: Date: Sun, 27 Oct 2024 15:36:06 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86bjz58ik7.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-GUID: M6gklXSzpTTj7OW0eaahiAlcMdWT-F94 X-Proofpoint-ORIG-GUID: M6gklXSzpTTj7OW0eaahiAlcMdWT-F94 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-27_05,2024-10-25_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 clxscore=1030 spamscore=0 bulkscore=0 mlxlogscore=604 mlxscore=0 malwarescore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410270172 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Sun, 27 Oct 2024 21:15:53 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 10/27/24 15:14, Eli Zaretskii wrote: >> Date: Sun, 27 Oct 2024 13:46:55 -0400 >> Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org >> From: Yixuan Chen >> >>> Sorry, I still don't understand. Your code does >>> >>> (highlight-lines-matching-regexp (cdr face) (car face)) >>> >>> This potentially shows each line in a different face, and thus can >>> affect the metrics of the SPC character glyph which is what the >>> indentation is made of. So why is this a problem, let alone a bug? >> >> The problem is executing that line at 10PM today may render the font one >> way, while executing that line at 6AM tomorrow (with exactly the same >> "face" variable) may render the font a different way, even if all the >> other variables remains the same. > > But you modify the faces in a random fashion, so why is this a > surprise that it is not deterministic? I said, > ... (with exactly the same "face" variable) ... even if all the > other variables remains the same. Yes, this script is modifying the scripts in a random fashion, but let's imagine this: 1. the first time I open emacs, start the script and it randomizes the first line to a combination of face attributes (let's say (16, bold, regular)) in 5 seconds after going through 50 different combinations, it looks one way. 2. I restart emacs, start the script and it randomizes the first line to the same combination of face attributes (16, bold, regular) in 5 minutes after going through 3000 combinations, it looks differently from the first time, Do you agree that in both cases that single line should look the same? And they should always look the same as long as the randomization hits (16, bold, regular) on that line regardless of time and previous history? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 01:16:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173007816011185 (code B ref 73752); Mon, 28 Oct 2024 01:16:03 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 01:16:00 +0000 Received: from localhost ([127.0.0.1]:48481 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5EMS-0002uJ-5J for submit@debbugs.gnu.org; Sun, 27 Oct 2024 21:16:00 -0400 Received: from qs51p00im-qukt01071702.me.com ([17.57.155.7]:54323) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5994-0007IY-IT for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 15:41:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730058070; bh=POAhSQWLcXpt+aC7m8a4VCX9sd1YNhdBJIW5xfxH6IE=; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; b=Ijn+6oSDXjanh8b4gGkVDJgTyVvz49YtB+Lr2yciKz01E72YKi1w09Kc3TU+4PSL0 c3d9QFBEYlmxRPrdOVVIhoqSmMmkAAKekcvREeTqZn8IBh+gafaLLtsNcn8M8A4EL/ evBTAQyeafgqz5akNuwCq/Iio+SXNncSkHUUYMzz5ohSQdf5JopUmL4aoJWJj73Nbv D/EMLZDpUjViMmnD28dN/miUdPWMZWbxSX8EaAj9odhDoY87SVQgPSuBbi1kW4RL6C ptYtVEZjU7OV446kiXyEY0t1urBJQGxwr9AemBaeCt3sS9cTBEUhLo2b6B8b5VR5aq uLeBITwfcKY8Q== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01071702.me.com (Postfix) with ESMTPSA id 6729135002BA; Sun, 27 Oct 2024 19:41:08 +0000 (UTC) Message-ID: <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> Date: Sun, 27 Oct 2024 15:41:06 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86bjz58ik7.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-GUID: CK7Khd0bxwUNdZJNCREmB1j7gu-jR-_G X-Proofpoint-ORIG-GUID: CK7Khd0bxwUNdZJNCREmB1j7gu-jR-_G X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-27_06,2024-10-25_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 adultscore=0 phishscore=0 mlxlogscore=585 mlxscore=0 spamscore=0 clxscore=1030 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410270173 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Sun, 27 Oct 2024 21:15:54 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 10/27/24 15:14, Eli Zaretskii wrote: >> Date: Sun, 27 Oct 2024 13:46:55 -0400 >> Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org >> From: Yixuan Chen >> >>> Sorry, I still don't understand. Your code does >>> >>> (highlight-lines-matching-regexp (cdr face) (car face)) >>> >>> This potentially shows each line in a different face, and thus can >>> affect the metrics of the SPC character glyph which is what the >>> indentation is made of. So why is this a problem, let alone a bug? >> >> The problem is executing that line at 10PM today may render the font one >> way, while executing that line at 6AM tomorrow (with exactly the same >> "face" variable) may render the font a different way, even if all the >> other variables remains the same. > > But you modify the faces in a random fashion, so why is this a > surprise that it is not deterministic? Just in case my last explanation wasn't clear enough: by "with exactly the same face variable", I'm saying that when the randomizer picks the same font attribute (the same everything), there is a chance it will render that line differently. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 01:16:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173007816111201 (code B ref 73752); Mon, 28 Oct 2024 01:16:04 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 01:16:01 +0000 Received: from localhost ([127.0.0.1]:48483 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5EMS-0002uM-QA for submit@debbugs.gnu.org; Sun, 27 Oct 2024 21:16:01 -0400 Received: from qs51p00im-qukt01080502.me.com ([17.57.155.23]:28049) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t59Fh-0007aQ-Os for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 15:48:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730058481; bh=mR3RavBQ5FuG/ybu1miETruRVvTLhCJeisobL/fgy90=; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; b=HiTBG92l/9aq8IPVnOGd2DHInWESDTxXGT/qX72807IBUlSFZkRXyw/+aCsz6VBjB MVjQcZezhwUEpFh+1wJQngMg+AFasIakxH5Nd2fVLZ3SoPropygklD9r8Azhm7cMd7 9GYD+zufWeXe/AwHyb83jr25D1glvT2Vs7KZ6MhH/2h/Ry6Js6LjHUL9JxDSvZlhLk a7K1zg8z3VZ7qKo3kaMfKtaWjv2J7VCtEZ4L9pi0kSE4qDlVojVLP3inedwF/2CMDk citjVmQzGjffSRIivBEUsHkPGe3xtokUU1m/JdKbxrX49pcGj6BgPiAy+1hWRzEXE6 0seud6Lzrw9tQ== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01080502.me.com (Postfix) with ESMTPSA id 066DA4E402E4; Sun, 27 Oct 2024 19:47:58 +0000 (UTC) Message-ID: Date: Sun, 27 Oct 2024 15:47:57 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <86zfmp72ku.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86zfmp72ku.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-GUID: rfk_qX15GWClITCjPwj-_hZs5gieEMS- X-Proofpoint-ORIG-GUID: rfk_qX15GWClITCjPwj-_hZs5gieEMS- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-27_06,2024-10-25_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 bulkscore=0 suspectscore=0 clxscore=1030 mlxlogscore=990 phishscore=0 spamscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410270174 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Sun, 27 Oct 2024 21:15:54 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 10/27/24 15:44, Eli Zaretskii wrote: >> Date: Sun, 27 Oct 2024 15:36:06 -0400 >> Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org >> From: Yixuan Chen >> >> On 10/27/24 15:14, Eli Zaretskii wrote: >>>> Date: Sun, 27 Oct 2024 13:46:55 -0400 >>>> Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org >>>> From: Yixuan Chen >>>> >>>>> Sorry, I still don't understand. Your code does >>>>> >>>>> (highlight-lines-matching-regexp (cdr face) (car face)) >>>>> >>>>> This potentially shows each line in a different face, and thus can >>>>> affect the metrics of the SPC character glyph which is what the >>>>> indentation is made of. So why is this a problem, let alone a bug? >>>> >>>> The problem is executing that line at 10PM today may render the font one >>>> way, while executing that line at 6AM tomorrow (with exactly the same >>>> "face" variable) may render the font a different way, even if all the >>>> other variables remains the same. >>> >>> But you modify the faces in a random fashion, so why is this a >>> surprise that it is not deterministic? >> >> I said, >> >> > ... (with exactly the same "face" variable) ... even if all the >> > other variables remains the same. >> >> Yes, this script is modifying the scripts in a random fashion, but let's >> imagine this: >> >> 1. the first time I open emacs, start the script and it randomizes the >> first line to a combination of face attributes (let's say (16, bold, >> regular)) in 5 seconds after going through 50 different combinations, it >> looks one way. >> >> 2. I restart emacs, start the script and it randomizes the first line to >> the same combination of face attributes (16, bold, regular) in 5 minutes >> after going through 3000 combinations, it looks differently from the >> first time, >> >> Do you agree that in both cases that single line should look the same? >> And they should always look the same as long as the randomization hits >> (16, bold, regular) on that line regardless of time and previous history? > > That depends when redisplay kicks in, between your face > randomizations. Among other factors. > > And I still fail to understand why this largely artificial program is > important to investigate. Are there any real-life cases where you see > the same face displayed differently when ligatures are involved? If > not, what useful stuff will we learn by digging into this, especially > since reproducing the problem is so hard? Maybe you missed one of my previous email, let me copy paste what I said again, > It's not about frequency, but probably total number of font face > attribute changes. The lisp code I submitted was changing the attributes > rapidly just to recreate the problem faster. In real-life, this problem > happens with normal emacs configuration, usually within half an hour. > > For reference, here > (https://github.com/LukeXuan/dot-files/tree/e6067ec232ea34e01fb9a1f1a358d1c328d47c50/.config/doom) > is my emacs configuration on top of doom. I primarily write LaTeX and > Coq and this problem occurs every 30 minutes or so. The solution is to > either restart emacs (what I used to do) or disable ligature altogether > (what I do now). > From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 01:16:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173007816211212 (code B ref 73752); Mon, 28 Oct 2024 01:16:04 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 01:16:02 +0000 Received: from localhost ([127.0.0.1]:48485 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5EMT-0002ub-Ik for submit@debbugs.gnu.org; Sun, 27 Oct 2024 21:16:02 -0400 Received: from qs51p00im-qukt01072301.me.com ([17.57.155.12]:10877) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t59wr-0001BS-TC for 73752@debbugs.gnu.org; Sun, 27 Oct 2024 16:33:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730061157; bh=2KGzmhzfgE+k+opwwXkuGYYeN+/JTkavlSfpGWjDIkc=; h=Content-Type:Message-ID:Date:MIME-Version:Subject:To:From; b=KnL2bpTFKEwkenOVVYdegKZUj6m0vMrjsjxQbxlUh8dxd5ClmJOtIa+L1RBSinBiE jsh3+ZOSTzgu7Fs30kAz4oLYr1LK3Xcnr+cZcwAPbe+yvMNxQsDsrYrThcvANBeMMv ONBHALEf/dXEBbpGewlMVYOA/NYQlktJKpd18N54FU3ICfFqky8mih5U6dQmipdO0M N9VRJ4DcXAKOf9o5CAxSpIUwKbd4yrZ2GDHs06F781vyozsfH9u6aiQCLHolV5GcT4 VeXSMRaLGXO/HlH+/FqqXRvQd7DhRqOv+nX02/RNKJCXndBkYkUXLTFsLzBjo6JRWa +0RVIcHXAfnlA== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01072301.me.com (Postfix) with ESMTPSA id 3EC33254010F; Sun, 27 Oct 2024 20:32:36 +0000 (UTC) Content-Type: multipart/mixed; boundary="------------DGzX5igWKap01nIirjbzHld0" Message-ID: Date: Sun, 27 Oct 2024 16:32:34 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> <86y12971jq.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86y12971jq.fsf@gnu.org> X-Proofpoint-GUID: O_CDeuaQE29i_WeWssXEkKyCET3U9SwA X-Proofpoint-ORIG-GUID: O_CDeuaQE29i_WeWssXEkKyCET3U9SwA X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-27_06,2024-10-25_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 adultscore=0 phishscore=0 mlxscore=0 clxscore=1030 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410270180 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Sun, 27 Oct 2024 21:15:54 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------DGzX5igWKap01nIirjbzHld0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 10/27/24 16:07, Eli Zaretskii wrote: > To convince me that this is really happening (although I'm unable to > understand how it could, given how Emacs faces work), you will need to > show some code which generates such a situation in a reproducible > manner, and then show me by using "M-x describe-text-properties" and > "C-u C-x =" that indeed the same characters in the same face are shown > on different lines with different metrics. OK, here you go. > you will need to show some code which generates such a situation in a reproducible manner The same script I submitted in this bug. "screenshot1.png" shows the bugged display. Here's the result of "describe-text-properties", > There are text properties here: > face (face12 font-lock-string-face) > fontified t In case you want to know what the face12 is, > Face: face12 (sample) (customize this face) > > Documentation: > Not documented as a face. > > > Family: unspecified > Foundry: unspecified > Width: unspecified > Height: 125 > Weight: medium > Slant: italic > Foreground: unspecified > DistantForeground: unspecified > Background: unspecified > Underline: unspecified > Overline: unspecified > Strike-through: unspecified > Box: unspecified > Inverse: unspecified > Stipple: unspecified > Font: unspecified > Fontset: unspecified > Extend: unspecified > Inherit: unspecified and here's the result of "C-x C-u =": > position: 1277 of 3527 (36%), column: 34 > character: > (displayed as >) (codepoint 62, #o76, #x3e) > charset: ascii (ASCII (ISO646 IRV)) > code point in charset: 0x3E > script: latin > syntax: _ which means: symbol > category: .:Base, a:ASCII, l:Latin, r:Roman > to input: type "C-x 8 RET 3e" or "C-x 8 RET GREATER-THAN SIGN" > buffer code: #x3E > file code: #x3E (encoded by coding system utf-8-unix) > display: by this font (glyph code): > ftcrhb:-SAJA-Cascadia Code-regular-italic-normal-*-17-*-*-*-m-0-iso10646-1 (#x3AC) > > Character code properties: customize what to show > name: GREATER-THAN SIGN > general-category: Sm (Symbol, Math) > decomposition: (62) ('>') > > There are text properties here: > face (face12 font-lock-string-face) > fontified t In a separate fresh new emacs window, I execute the following command: (set-face-attribute 'default nil :weight 'medium :slant 'italic :height 125) "screenshot2.png" shows how it looks this time (the normal display). the result of "describe-text-properties": > There are text properties here: > face font-lock-string-face > fontified nil and "C-u C-x =": > position: 1277 of 3527 (36%), column: 34 > character: > (displayed as >) (codepoint 62, #o76, #x3e) > charset: ascii (ASCII (ISO646 IRV)) > code point in charset: 0x3E > script: latin > syntax: _ which means: symbol > category: .:Base, a:ASCII, l:Latin, r:Roman > to input: type "C-x 8 RET 3e" or "C-x 8 RET GREATER-THAN SIGN" > buffer code: #x3E > file code: #x3E (encoded by coding system utf-8-unix) > display: by this font (glyph code): > ftcrhb:-SAJA-Cascadia Code-regular-italic-normal-*-17-*-*-*-m-0-iso10646-1 (#x3AC) > > Character code properties: customize what to show > name: GREATER-THAN SIGN > general-category: Sm (Symbol, Math) > decomposition: (62) ('>') > > There are text properties here: > face font-lock-string-face > fontified t If you want more information, I will keep both emacs window open for the next two hours. --------------DGzX5igWKap01nIirjbzHld0 Content-Type: image/png; name="screenshot1.png" Content-Disposition: attachment; filename="screenshot1.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAABKIAAAAnCAIAAACzNHelAAAgAElEQVR4nO2953sj153nWxEF VEDlKmSAAAhmstk5SK1gBUvO9u7MrGcn3Hkxz+w897/Z55nZe2d2ZnzHXo+zx5Yty7Ykywqt ljqS7GYzkwATiBwKqAJQVfdFsSk2m90iCXaTza7P8/AFUYUvDlCnTp3fOb8AmqYJPF5M05x8 86Mb3/tt8Exf4otnrRdBGHLSpIuhIAR+0Ltu//y9qbcu9379uY13beHS//zRxK8/OvP33+p6 /TwEQ5sPtdRGLVdqKPV1NcMc+/E7ycu3Tv7NV7q/fAFGkf3+lvvAlf/9iztvfDj8l691f+kZ 2IFolVotV9IbzY0TTBO49ZN3U5fHTvz1l7u+dB52oAfa3m0wDfPad3419uN34y+fjr14AnE6 Ng5hbgLn6c2/fPLjscv/8BMm4j37P75FefkDavLDWLp65/I//pSU2DP/45t0ULZeNE1TLVZr uZLR0k3DqBcra7fnFj4ccXHu43/1unew86BbvZWlK3c++aefNyq1xOvn5b4oimMAADgIFyEw my/QBh//w09m3rly5u++EX3h5Jbb6gBJj818/A8/adYbg3/2Etfhs15EcSfO06gLO+jW7TPN mlrLlZt11frXNMzRH729dnvu9N9+PXJx+PBclM+wHisgeNDteEyYplnLlVauTyYv32KCUtfr 5wmRPehGPZDUJ7eu/ssbdFA++Tdf2TrSPmUXbgND18vL2cVPbi9+epsQ2N6vX+TjgS3nrNyc uvQ/f4Tz7nP/93/dGP9tbGxsDjMHY97UC5XKcmbuvWu56UXrFYzCOy4Oh58ZdCCuR/GJpcW1 yTcvZadS1r+mYeamUg7S6WIfaFgeKkzDzEwsTP3m4+paYdOrZnZq0UE6nSwFHUpLtVnXqmuF 8nJm7o/Xc9MpEFqfj0IIHDrbH3/5tIulDrqN7WLqxtr4/PTvPqnnSyAEGS1db+lcLBB94Tgf Cx5067aB7wx0f+nCzDtX5t69mro0BqEwhMC+Y4n4y6dJJ3fQrdspSqZYTeeVbGn0B287yPVB Q+6PJl47xxy5GVhhYXXyzUuF+RXrX9Mw8zOLlJd30iQIHcoZ+VNmJ4AgSAhM9MWTnsG43mxh FHHQLdorT9mF2wCCYSYoUzIXONnTqKm4QB90i2xsbGz2gYOxDcSejoE/eclotTYeKg7ciQs0 BH+exbXXZxDidLj9wua3C11Bt0/k4wHw0D7YQBCEwI3vjJEuJuxxMuTmU/hEyO0TDu23ACEw eLoXdTkAENzcQgiGSQ93/yYqCIGH84t8BghunQmBgIsh+XhALTEQAmMkTvkELuojJQ7GDt3+ KgAATjcZff44E/bkZ5dq2ZLeasEIQgekbbfyAAAAQGBzPzwkuP1i79efqxcqIAhuNI0OSEdv Kw8AANSF0QEJdty9X0xA7A6zHV53QDrs98vTBARDpPwELJSAAAhC4CFdIDhQYAfKhGTTNJ9a c9fGxuaIcQBmHgiC/uNd/uNdu30jzrm5qP8h+z+klxd7Iy6Oun9GSgckOiDtpbkHBxf1h58Z ogOS9UgWuyNid+SgG7U7UBcWfeFE9IUTOzkZ5+ngmX5CZBDXA+yNg8bFuYOne51uAsWdGy9C MCz1dki9HQfatN0AApib8A51eod25FAqxIN6o0V6uEM18xESISEROuhWPCbYiJeNeA+6FTZH BEJiI88ec7Fuy2Hb5h7ABy41OnAnHw9gbuJwrt/Z2NjY3A/4+GPz9oZpmspaoZYrERJLCMy2 5xSTq0q2SAdlQmCOwCK3Wqxq1ZqTJh2k6wh8nc+lWdfqhQqMIofWk7apamqhCiGQk6EOZzzn o6BeqDRqqoshUdz5NPRDG5ujjd5oNesqCEOoy3kYAzsPK1pFKSbTMIowIRlx2hayjY3NE8Du zDxd1w3D2OcWgCAMw/b00cbGxsbGxsbGxsbGZl/Y3Y7EH/7wh3feeWd/WzAwMPDiiy9K0hPm UWljY2NjY2NjY2NjY3M42Z2Z9/7773/3u98dGBig6X3IQ2Wa5ujo6PT09NDQkG3m2djY2NjY 2NjY2NjY7Au7ji/q7e39+7//+3g8fv+her6cn1tuVGqUX2RCMoJtk0hDbzTzs8vlpYyLc7Md 3n/6//41k8nstfE2e6SlNVZuTK2Nz7MRj3cosW1WG0PXV25MrY7O0AHRO5QgxO3jIZ82jJae mVhIj87AmMN3rJO9W7HNxsbGxsbGxsbG5vCwazOPoqhwOJxIJO4/tHJzauXmJ4X5Zf7l0+Ez gW0TpdSLlfL7E5k3r/uGE56BPp7nbTPv8dNSG3PvXbv5H7+Lv3SKDsoPMPOMhY9Grv7rG+EL Q5RHsM08C0PXl69NXvu3N5wM6SCctplnY2NjY2NjY2NzCNnPbIENpV6YW87cmfcMxI2mvu05 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 QNwz8EgKnyKYw3ss4T2W2HhF6uuQ+nZXHHKHyluGox0CITAhMI86wzYIglsuq7XAsT/K90qR Ho70PJLwEwRzUI83sAVxOnzHEr5NV/nhffVw5fveIY2aWkqlc5Op3Mxibmaxmi6AEIjztP9E t9QTOfCKFvsMCLJRv9wXLcwvt7Tm2vg8AIK5qZTlTOtiyKP2fR8jGEUwIbmUXG2pjfJSZu4P 16vpvNTbISRCLs69ZyvaNE2tUisurOSml/KzS/nZpcLcSi1Xojy82B32H+9u08HJxuZJx0Hi bMTLhDwO0uX2ChsbTTtPs9lOmrJDBc7TlFcwdcPtE+93vUZcGOnhXLwbBEBcYLZZITIBJ03Q IVnJFA3DUEvK2vhCs94ozK9wHT53QMJI/DDHaT86Kqu5+feuF+aWPUPxoT97OXRu4BD6UdvY HDbWB2HDAHaQjxaEIRB6JFWCnwhM0zR1wzR2l2YThEAQgh/bsPzEmHmmaRq6Xs9XshMLKzen 1m7PF+aWlWyxpTZw3h37winvsU7PYKfQtf3azJMLRuGdL5+mA+LS1TvJS2P5maXiwkry0igb 9noGY4FTvXJ/zEoK/9TeaXsDhEChM3js269KPZHU5VvpsdnJtz5OfjzGhGWpN+o/2e0djBMi A8I79ds0TVNvtKrpXPrWXHpsJjuRLCZX6/my3mxRHj7+0knPUKfUHWE72go+tLE5ApAy1/2V C0JXCHVhUm/HRsWOltpY/HR85fqE/tA0m5RPDJ3rZyPeIzDo+YYTZ/7uG8paQegKb/amscA5 d+LVs1bAuW84gd63GQWjsKc/Bv/VlwIne1duTqXHZqZ+exnFMZynmaDMxwPWviXl4WEHAuy1 MPoTh2maleVsaSmD4phvuEvq7WjTrdTG5uhhmqZpmIBpghC4sWrWrGsr1ydXbkw269rnvB8E A6d6QucG9rc+8OPHsmwBEwAhaIv1ZZqmaZqAYVr1qLeMn0qmmPxoJDe9uKuPE7vCofMDjy2x 5eG/NmZL1Wr5SmUlW5hbztyZX7k5lZta1Ju6i6P4WIDvDMj9Me+xBBv2HMnZs1V/ifIK3mOJ wMmexU/H127PFeaWl67dWbk5lbp8y3+yxzMQ52J+yitgFP6Yyxs+uYAg6GTIwOleeSAWON2X ujS6cnM6N7O4OjKzfH0qeWk0cKoneKbPd7x7h74itVwpeWl04YOR1ZHpYioNQiDB09beoGcw 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 --------------DGzX5igWKap01nIirjbzHld0 Content-Type: image/png; name="screenshot2.png" Content-Disposition: attachment; filename="screenshot2.png" Content-Transfer-Encoding: base64 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 --------------DGzX5igWKap01nIirjbzHld0-- From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 04:28:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173008967720930 (code B ref 73752); Mon, 28 Oct 2024 04:28:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 04:27:57 +0000 Received: from localhost ([127.0.0.1]:50242 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5HMC-0005RT-Sg for submit@debbugs.gnu.org; Mon, 28 Oct 2024 00:27:57 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:47146) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5HM9-0005RI-Oe for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 00:27:54 -0400 Received: by mail-pg1-f195.google.com with SMTP id 41be03b00d2f7-7ea8de14848so1817173a12.2 for <73752@debbugs.gnu.org>; Sun, 27 Oct 2024 21:27:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730089577; x=1730694377; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=x88cFvzDxYul9KgEDam7zgrHupd4U865umx9vQ5SQCo=; b=FMCBk9fhKz/QOQ4cBS/Fr2RklwzWfhOVVBHfUVlspc0kdK4h+5BGcNE5/CHl7VifTn 1MRtDDPHC1MFFdW4V2JqpxbGQmD04MZGpr9Tjm9JPAdCYOKOsI6HCE5m07DbJfNwdLbO r2qRihP7BtSHS1CLhN8PHvHE70H82NWzNF+sizsIgAdNto+nTx48mf23Tad7Yb+DjCrZ 3iQY8JTQ1dwFYp2L/GYCrdyWwgh7CIal0OUICEpB8YOS5PceVJAzBhfg429YmzDpKIxA AV4nsaPjkoPB+zvp5v7Lqax7CeuVOvnRCT1Rfjp2AksfTeTW9ceiS84Se71negbtU/RQ RuvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730089577; x=1730694377; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=x88cFvzDxYul9KgEDam7zgrHupd4U865umx9vQ5SQCo=; b=pvYJt+yTOpbfUbsFdAL1aRZR4juJ9SXy7gQaIiOuta4EFvV5wIaIbqMdzF61cqYgH9 F7TNN5kvUkgWVFeXBr5pP14RhlYERab8at109ZgXI+Qdq8s3N7ShPBfKoenG9xazZzJs xUeuocleGejcU3lXF5km3DnkmuFqsvq3tfqliztuAUy6H92lBggk7r812pPXEF/FDrop pBtP95uiFnkdaiiNhWdn/WgxQMY3oP7qh392bJT33BBvWjk/sCg8rLGE0Z0HFpZ4KrZk GxAejSVXm/vu3MkS6J/WLtwVZT86YjdgsYJkhtWCE6gvsWqpAc72wgWQOGvSVxxkwJT/ dgiQ== X-Forwarded-Encrypted: i=1; AJvYcCVDP6n5RfjKVHN1K4iLsPESENNZuWsSPkEiwqazvtnEpPufoVROMkB+ersZLFvpnuYnDOuniQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzbkHoJ3c1GLs0gm2SUUyJUeD3rePhe6nzyt3iN08WkW/OtW3QJ PyMyz4Ctio1SE4FwGJBJs+yEtDz5lTV9peSo+e+x1BTUE4aHXGPx X-Google-Smtp-Source: AGHT+IGKHsnvq91rSOsUECt8xoCppGIxAzESWmDgyQshUYtces+txerhRYGFfDFwSMA1cF3GXhckjw== X-Received: by 2002:a05:6a21:e8a:b0:1d9:789:b9bd with SMTP id adf61e73a8af0-1d9a851899fmr9749732637.43.1730089577360; Sun, 27 Oct 2024 21:26:17 -0700 (PDT) Received: from localhost ([1.7.159.70]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7205791e58dsm4787237b3a.31.2024.10.27.21.26.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Oct 2024 21:26:16 -0700 (PDT) From: Visuwesh In-Reply-To: <86ed418niu.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 27 Oct 2024 19:27:05 +0200") References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> Date: Mon, 28 Oct 2024 09:56:13 +0530 Message-ID: <87jzds3lay.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 4.6 (++++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: =?UTF-8?Q?[=E0=AE=9E=E0=AE=BE=E0=AE=AF=E0=AE=BF=E0=AE=B1=E0=AF=81_?= =?UTF-8?Q?=E0=AE=85=E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D?= 27, 2024] Eli Zaretskii wrote: >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Sun, 27 Oct 2024 19:19:48 +0200 >> From: Eli Zaretskii >> >> It's quite clear from the image that the "misaligned" line uses a [...] Content analysis details: (4.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [1.7.159.70 listed in zen.spamhaus.org] 0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [209.85.215.195 listed in sa-trusted.bondedsender.org] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.215.195 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (visuweshm[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [209.85.215.195 listed in wl.mailspike.net] 0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [209.85.215.195 listed in bl.score.senderscore.com] 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders 1.0 FREEMAIL_REPLY From and body contain different freemails X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 2.6 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: =?UTF-8?Q?[=E0=AE=9E=E0=AE=BE=E0=AE=AF=E0=AE=BF=E0=AE=B1=E0=AF=81_?= =?UTF-8?Q?=E0=AE=85=E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D?= 27, 2024] Eli Zaretskii wrote: >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Sun, 27 Oct 2024 19:19:48 +0200 >> From: Eli Zaretskii >> >> It's quite clear from the image that the "misaligned" line uses a [...] Content analysis details: (2.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [209.85.215.195 listed in sa-accredit.habeas.com] 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [1.7.159.70 listed in zen.spamhaus.org] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.215.195 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [209.85.215.195 listed in wl.mailspike.net] 0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [209.85.215.195 listed in bl.score.senderscore.com] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (visuweshm[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager [=E0=AE=9E=E0=AE=BE=E0=AE=AF=E0=AE=BF=E0=AE=B1=E0=AF=81 =E0=AE=85=E0=AE=95= =E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D 27, 2024] Eli Zarets= kii wrote: >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Sun, 27 Oct 2024 19:19:48 +0200 >> From: Eli Zaretskii >>=20 >> It's quite clear from the image that the "misaligned" line uses a font >> with a different slant/weight/height value. If that is the reason, I >> guess the problem is with composition caching, but why is that an >> issue in real life? Do real-life Lisp programs modify face font >> attributes so frequently? Real-life Lisp programs certainly do not change face font attributes so often but I believe the script does it so to reproduce the issue quickly. In a regular Emacs session, it is enough for the same text to be shown in different font sizes (as a consequence of using C-x C-+) and font weights to eventually exhibit this misalignment IME. > Or maybe I don't understand the original problem. The bug report says > "extra spaces", but eacg font has its own metrics of the SPC glyph, so > highlighting a line with a given face can affect the metrics of the > whitespace. Why is this surprising? Or what did I miss? I do not understand the technical details but the width of the glyph used to draw it is not the one that should be used for the underlying font (weight, size, etc. included) which leads to this misalignment. To make it more clear, let's say that =3D:=3D is shaped for a font X with a specific weight, size, etc. At a later point in time, the width of the glyph corresponding to X is used to draw =3D:=3D with font Y of same family. This leads to the observed misalignment AFAIU. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 14:27:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173012557312210 (code B ref 73752); Mon, 28 Oct 2024 14:27:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 14:26:13 +0000 Received: from localhost ([127.0.0.1]:54279 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5QhB-0003As-0d for submit@debbugs.gnu.org; Mon, 28 Oct 2024 10:26:13 -0400 Received: from eggs.gnu.org ([209.51.188.92]:58382) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5Qh8-0003Ac-T3 for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 10:26:12 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5QgS-0003F4-LV; Mon, 28 Oct 2024 10:25:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=AkIG75gf3Lw4dYRE8OntAaTnFkkuJc02xTvWJQzhCBc=; b=r4L34HpQGwAop4M96jpi KyXra2Io/4Yt1ic9bwbbdzAwnlFWPkMPtBuMZSFucTsy1R9E+ABKqMX5+i9vMEc2PrZwUS757MjgG AUwrXG2QscqqbamjHcStMBXU+WLTqU5LlbfwbDPlURB6WSQPvVqhaDlTzzZLDElBeSQH//uSFHzmq 5cj6eaeEMu4a6lo+YU30inFiEhCSRtmJkPninmgS/KvWdKccihZlAjiG2N25A0aDySi2EBeusF/m8 IeVvgdsz98Lg8jVLyP9PN01+3LbUNkor/eOganOHHlp05CDbqIMB0hgAEMwxB3XmqDVAa6swRlQzL rAK0fMhySG0D0w==; Date: Mon, 28 Oct 2024 16:25:25 +0200 Message-Id: <86jzds719m.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Yixuan Chen on Sun, 27 Oct 2024 16:32:34 -0400) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> <86y12971jq.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sun, 27 Oct 2024 16:32:34 -0400 > Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > From: Yixuan Chen > > On 10/27/24 16:07, Eli Zaretskii wrote: > > To convince me that this is really happening (although I'm unable to > > understand how it could, given how Emacs faces work), you will need to > > show some code which generates such a situation in a reproducible > > manner, and then show me by using "M-x describe-text-properties" and > > "C-u C-x =" that indeed the same characters in the same face are shown > > on different lines with different metrics. > > OK, here you go. Not exactly what I asked for, or understood how the problem manifests itself... > "screenshot1.png" shows the bugged display. Here's the result of > "describe-text-properties", > > There are text properties here: > > face (face12 font-lock-string-face) > > fontified t But this is a completely different issue. There's no indentation here, right? You are saying that in the "bad" display there's some extra space between the ligature and the following quote, right? Is that extra space a real SPC glyph or is it just that the ligature is considered "wider"? What happens if you put the cursor on the ▷ ligature in the "bad" display -- does the block cursor then take up all the space up to the next quote? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 14:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173012746717564 (code B ref 73752); Mon, 28 Oct 2024 14:58:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 14:57:47 +0000 Received: from localhost ([127.0.0.1]:54347 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5RBi-0004ZC-FA for submit@debbugs.gnu.org; Mon, 28 Oct 2024 10:57:47 -0400 Received: from qs51p00im-qukt01072302.me.com ([17.57.155.13]:8137) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5QzT-0003wu-P2 for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 10:45:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730126665; bh=nduthexKManxxfn/QVR/KUbqHwfI+Z1VrAoRQxebBl0=; h=Content-Type:Message-ID:Date:MIME-Version:Subject:To:From; b=DWe+w5hvCmESfh0sBE5uhcqxdjFeNNPXlGU8ps/sJaybufaQkf6GOaHRC7U4FIokc +UfMmTKKVzYOdIamQYCvhPIMtG5aFy5LlyrRvpmU7k3WbVZW/iHasutyeawoCfdGV2 EaVWJh5HhioGHXqa+iLSBgI5KeQnohXs1OdjvXwAcGvZ3g1OmtcGa2cY4Mxe2ty5Qc 2ENI2iWKc+q6bERNLpwAaPhjS3Yq+vs4+KYvPFEttgO7gWvKiQCEJ+DNTBfn8GIAmc hgFv9OHQleEMGAX1SocyhzqnzgmZs3eInh7iHsx0I36BAbzwCevc1i0uqgUVo5l2Yc VAHhhFN00TEtg== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01072302.me.com (Postfix) with ESMTPSA id 11B85630055F; Mon, 28 Oct 2024 14:44:24 +0000 (UTC) Content-Type: multipart/mixed; boundary="------------9EcTOciomE28qHrmIRQ6xXi1" Message-ID: <1e871a38-a150-4198-a53a-831b9576df8b@xlk.me> Date: Mon, 28 Oct 2024 10:44:23 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> <86y12971jq.fsf@gnu.org> <86jzds719m.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86jzds719m.fsf@gnu.org> X-Proofpoint-GUID: 5g3-n2DIkO0-UJXD17zcjWqCTHvlEW3B X-Proofpoint-ORIG-GUID: 5g3-n2DIkO0-UJXD17zcjWqCTHvlEW3B X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-28_04,2024-10-28_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 adultscore=0 mlxscore=0 mlxlogscore=398 phishscore=0 spamscore=0 clxscore=1030 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410280118 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Mon, 28 Oct 2024 10:57:45 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------9EcTOciomE28qHrmIRQ6xXi1 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 10/28/24 10:25, Eli Zaretskii wrote: >> Date: Sun, 27 Oct 2024 16:32:34 -0400 >> Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org >> From: Yixuan Chen >> >> On 10/27/24 16:07, Eli Zaretskii wrote: >>> To convince me that this is really happening (although I'm unable to >>> understand how it could, given how Emacs faces work), you will need to >>> show some code which generates such a situation in a reproducible >>> manner, and then show me by using "M-x describe-text-properties" and >>> "C-u C-x =" that indeed the same characters in the same face are shown >>> on different lines with different metrics. >> >> OK, here you go. > > Not exactly what I asked for, or understood how the problem manifests > itself... > >> "screenshot1.png" shows the bugged display. Here's the result of >> "describe-text-properties", >>> There are text properties here: >>> face (face12 font-lock-string-face) >>> fontified t > > But this is a completely different issue. There's no indentation > here, right? You are saying that in the "bad" display there's some > extra space between the ligature and the following quote, right? Maybe my use of words were terrible. The problem I want to report was never about indentation. It was always about the "extra space between the ligature and the following character" (and sometimes also some extra space between the ligature and the character, although not in this instance). > Is > that extra space a real SPC glyph or is it just that the ligature is > considered "wider"? What happens if you put the cursor on the ▷ > ligature in the "bad" display -- does the block cursor then take up > all the space up to the next quote? It's not a real SPC glyph. It's a single character ▷ (or ligature/glyph I should call it? the underlying text is "|||>"). I attached five screenshots, where the block cursor is at ", |, |, |, >, " respectively. Noticeably, the block cursor for the first | character (1_bar.png) is extra wide, and the block cursors for the following characters looks offset from where they are. --------------9EcTOciomE28qHrmIRQ6xXi1 Content-Type: image/png; name="0_quote.png" Content-Disposition: attachment; filename="0_quote.png" Content-Transfer-Encoding: base64 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 --------------9EcTOciomE28qHrmIRQ6xXi1 Content-Type: image/png; name="1_bar.png" Content-Disposition: attachment; filename="1_bar.png" Content-Transfer-Encoding: base64 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 --------------9EcTOciomE28qHrmIRQ6xXi1 Content-Type: image/png; name="2_bar.png" Content-Disposition: attachment; filename="2_bar.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAGwAAAAnCAIAAABlmzo1AAAGBElEQVRoge2a7U9bVRzHz+/c e0tpgRZKWxgPpbRQbMUOC2Eog8VNNtyyuWSarNFZTXznC9+pL8z+ABNjNJnJolESxblooji3 ITo35ngS2AMPHaPQ8VQYrDyVQh/v9UW7AmUpbFzaS+ST++ae/M4533zv7/zuPacFhmHQVsIw jHfJ7ZyaXbTP+RbdDEPzhPGiTJlAIgICb+nUm8Tv9dFeX3grACYJTBIAsNy21Sb+H+B0LmwX yFgLWKa2tra2tnaDK+PkyZNGoxFjTiQBh0y0WCyXL18mSZIkI6miadrj8RgMhihKWweWnyTt 989YbZaGtqm+oQhhSzOO4eaukZZu1+zCynaNRlNTU7MQkY6OjhMnTrAre5OwbKLf4xtu7m78 5LvBKx0RwuZGJzu+udBZc3HeNsWugJjAfk1hEBMgYhDD0OvFbB84UZi3O+ElfKJrwPxro1Sb oz1awTCMue76cHNXXlVpzt7dVHxc1GS5Hc5J831MkrJncqI5bxgPugfNdY2SvGztsb0I4O6F f4ZvdKn2FysriygBPxQWbuLSzLzt5r1QxIzVNtLSI9flMn46mup9Ls/9xlt3zv2ZosowmA5n v1AYlyiAqH/QLM06bLf6MUkyDAJAs0MTw63dqQXZ9Go3wk0EAMAAGIDAyE8DxggQYECAog+m yCnz/fqPzqRqFKoDJYqywpTcXdEUABgAAIhHnmBAELhWha0xEePgBYACPdGjnlFHlCXLKdcj hPouNjV9dq7rXENmiZbOTfY4l6IjIJhSQS8xAgwIBW5Xhj0mEzERDAIACHiIw7tFBzKOJ9Mq 1QdKDG8fsTS03fq+3lx33bYwPTjdqynQuBxOvlCACbx1DxgwxgQBOOAGwhC0FUU2EWEAAge6 IQDAgGPk4EriEgXa45XKfc+PtvXeuNDQdGm8/avfappmVC8Vq/cXpxWqBRLRVsy7MqUQAMI4 mJSrwx6biUSohAOBgSQCPbdC5cYBAEFKUv6hPd6MhIvjtxdbB93zi3d+aOivb5FqFJrqMnVV qTBVzPKswZTCgSKICYxJYm0mhr/vAGOCR4ZO+jBJknEUJoiY1MTHgkmCoEjDO0dMlz4tefco AB5p7Wn4+GxN9fvNn593Ppyj2fuQwBgTPAqTITcIgkdhglinJibnpBedeiX0SJUVRcmKdEle FiYJtpSxRdIuaeUHp/TGgwN//Tt4tXOyZ7Dpi/P9Da173nstr6qUlaUjVqQVvVkdn5IUWJo5 5btFmXKJOhNTq3wLN1EoFQuly4tCWqCQFig2r2brEGfJi944lKxIb/nyZ1tnn2NieuHBNAp8 120agUSkePG50G2qJjtVk702jENHYU8KwzB+j3eqb6j967r+P9r8bi/Bo6QaRUpuRpSLz3Y1 cXpw7E5tvfXqzZG2Xr/bK8qWp+vV6pdLFeX6uIT4KIvZfiZ6l9zeRZeltedKuwP5aYk6S/tq Re4+gyhLtnI/G022h4kMw9A+/9zoZO8v1/7+8beB7o40oTg1P9vw1uH8Q2U8YWy8C8F1E2m/ 3zFun+gasF67OXTjtmdhkZfET5AnF79+xHj6NMWP2QHPSjhtomvW0f3Tlc5vf394bxgQKMr1 +dVls5S3/cw8pkiCR8VaYBBOmzg/NjV1dyiwUdEbD0oLcjCBzWYzQXFLNrfULAPAFyVklBSk PatS7S+RqDO5k3dr4aiJfFGC9liF9nhlvDiRg5ulMDhqIkGRQllyrFVslJ0fqliAfRMBwdqz 3zVBEKuD3q2A5eVMxcfpjVV6Y1XksLRC1fGzH65tp2na5XI5HI4IfZ1Op9fr3bRSNuFWTezr 6zOZTCaTad1InU4XFUUbgkP/T7RYLBaLZYPBKpVKrVZzpCBwyMTty87bmQV2TGSBHRNZgHzQ NWAfGCP5PJlWKZAkTfZaZ6zjSZlSuS6XL0p40uF8Lo/dMmIfGCN5lEynFEhEwQEzpHJdLl/8 xAMihHxuj2PcPjcyuTTrQAjxRUJxljxxl5SMe5rdtM/tsVtG7ZZRgkfJtEphqniy1zpjtSVl SGU6Zbw48SkG/A+yDx8dpOL4HQAAAABJRU5ErkJggg== --------------9EcTOciomE28qHrmIRQ6xXi1 Content-Type: image/png; name="3_bar.png" Content-Disposition: attachment; filename="3_bar.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAG0AAAAlCAIAAADHkfAAAAAFD0lEQVRoge2aa0xbVRzA/+ec e2kpj1Es3YDwGIzySHi4EHBs1CmjEpkQPmy6mbkovhKXLFmi0w9To8FN/bBEt+hMNMs0hkUK I2GBTIXKZGQ4Xg7GAAcdASrCeBXp8/b4oaMyKJSM3tt24fftNP+b8++v//M/955eRCkF/qGU Gqb0et2EaXbeZrECRoFh0tC4CMwyAsy+HizzJoClihDGRMQihP7/RBiPjzzY0wk8Inj7slqd oqIijuPWGFxdXc0wfH1f317XLMtSSsVi8ephHMcZjUaTyeTn58dXKpQHrCaz9mrHrerG1cMm B0a6KzVTWt1DT8QwTElJicuwqqoqADCZTA89kUt46Y/mf40t31z6+cS51cOGmrvqjp8ZvtHD Rw4Cw9c+QymlNlcdg1KbjYIvNxYHG/u1e3DusfPHK+rSMqvJDAAWg0ldWqb55Lxhalbg5GZH x7srNfOTQs+7hJsXf1GXlpnnDHYbl944Vf/Rd/P3ZhbHOPc4OTAyqGkDQAAAlA5q2kbb+zmz VaDEFzBOzzWfqfj6iVd/O3VBPzphs671Fse9TGp1g5q2hTZFBxs7Rtt7ObNlcYzz+ylMMAAQ lgAAIgQAEEYII6fBfMMGiDt+qOtWN8TnZ8XnZUakKySyTUImYLeBWQwAmBBAAAgBesCGc4+I EEAIYQwAmMEAgJZdKRjROakpxcqe6qtdFfV9tc2yhKht+VkpxcoAuVSYBDDBDhv3q2ph6GDF erT/CACA7dfjpVcKhig4IEGVnaDK1usmmk6X919pGW3vu/5V5eOHCuz3bnwngAjBBNu7HMYI OVudztWgRR4BIUwwQgh5qB4dBIXLnvn0rRfVJ3OO7g9LjGk9f5nabDPD/ww0tBqn5/ib115V 9788QsiZjZXrcdGjKPZjEMae6o+LQQiFxkfuOLIvdf+e8R7tsbzy8R5t7dtfhsZFJj6bk1SU KwkNdv+kBCN7WwQAAMIyy1fnCh4ZhohYx5AVizBLPLWunRIolwbKpQih8AxFUn5uV0W9rqOv +WxF5st70w6oxMEBiLgtW8IwzCIbjFiEGWZJVTn3GLd7e1CEzDF8+sQr/tJgRszbQ/46CJRL 8z4ozX6z5PblJm1jx/VzVe3f1+YcfSHt+Tx3bYyxygyJLAQzxD7c/d5hUZCElTxwOOLcY1hy bFhyrGOYXKx0S0L8Ebg5dPvhQllCdP3H307eGRnrvkNpnrv6uUwRLVNEO4ZJz+1aHuPb54/2 B3nObJ2+O/r76fKBhlag8Ni2qLinMgXeFX3Yo43jAGCib6jq9ZN3mzqDI+WJhTsVquyY3AzW XyRwMr7qUdfed/OnX6nNNj00po+69+S7L0XnpEljw4U3aMeXPFJKOZNlpK332hcXR27cJgyh lG5VZhxSf+bxPdA3PHJmy0T/8MgfPb211/7+869AuTSlWJmgynqnUM2I/Dwu0Tc8Tmt1dcfP 6jr7Z4bGQmLCdx07ELMzTRobzkrEnnrkX44PeBxuuUVYJiRmS8HnR5L25tpPobwNr/aIMN4U FbYlNU5RsCNWmeEX4O/pjFbEqz2GRG/e8+FrQREyRuT5Drg6Xu2RlYilWyM8ncWa8KKjB5+G L48IreGcDSGMscePNd0CL+vaXxq078L7LsPSD6rSD6rWOZfVatXr9avHGAyGdc7iEp9/v8dq Xeu/mLy+3+PV+4xLampq1l4H/L1s5vP16D1s7NfuYcOje/gPYDnDavwdWtwAAAAASUVORK5C YII= --------------9EcTOciomE28qHrmIRQ6xXi1 Content-Type: image/png; name="4_gt.png" Content-Disposition: attachment; filename="4_gt.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAGcAAAAnCAIAAACde8HCAAAFdUlEQVRoge2aa0xTZxjH38s5 Pac3SrGUi6MgCAiJeBmBiYI6tCPT2ZjFbZpsZsNFk5ks2T64fXBbtmhc9sFk0Wwu2WJ0MZqB g6iDuQ07HRCZFBhyKxMKs60XbqVATy+nZx+OVuwMdHh6U36f+jZP3uc5/zyXc95zIMdxIGhw HOcYtdutQ87xKa/bAxCUxSvj0pMRSQTPqSC4p5wA+CsDEcIUCSGEQVXtSQWFO4CoJNIr5fHR 6XQejydA46qqKpIkZzV78iuUoiiWZWmantmMZVmGYRiGoShq9k054fA4XaYrrZ3Vl2c2G+kz d5zVj5qsArqeAZFIpNPpZjWrrq4GADAME8ieQvY11yTT9E3VL/uPzWw22Hi9dt+Rm9e6BHQd YgSeBhzHcd7ZSp7jvF4ORHNnmJ+hc+Eh1dpOXawsP+BxugAAboezsvyA/uBxx+h4iGMat9zt OKufGgm1Xz/az/xaWX7ANeHg1ajafaju0++mhm3+qo30mfv1BgAgAABwXL/eYGnpZV2Bjm2h YMYmGo9UfP3crt8PnbBbhrweNsQB8IyYrP16w/2Gw/VfbrW09LAut//9GsIIAIBJDACAGAMA IIIQwbAETUrp1u9rOyovZWwsyCjNT16WJVEpQhkArwYiEQAAYQwgABACCP1VgxgDCCFCAABE IAAAvG8XejRFS3N1JV3VV65X1BlrGlWZKYs3FuTqSqRqZWgCQBj51LiXQ/eX/rnGCwwAQLw1 umcXeqgYaaa2MFNbaLcO1R8+3XuxydJivPrV2RWvl+Xv2kKKaUTgoAYAMUYY8f0KIQinVZ5f rj1QDUCIMIIQwjDlmg95kuqFz98p2L21p6ZhsL69+fiFlpO12ZtXZ6x/NnlFNh0rC5JfPofu XTyEcJoa/8k14sE/SERAhMLV16YDIYzLWLhq77alr2y422XqPl/fXX3F+FNDXPrC7BeLlmwp lsTFCO8UI8i3MwAAAJgkfJX3sGoEgakHz64kTSESh6tCH4lMrZSplYvWrrC/v73pWNX1ijpr q7HxaEX+m5vztmvpGCnEgkWLCYKYpgZBU4ggHlGh6etWypNVvuXz+98SK2MIWiRUHAIiT1xQ +nF54Z6t3RfqTZdbrx77seVkTdG7r+W9WirU+EorWS5Rxfq657oPd1JyCSmh/VWLz0mLz0nz LXN0JYK4Dx6yhLiVOzepMjV1n307csN8u+MGx5UK1YdVWRpVlsa3XPLSGt/vqD1f4zjWzY4N WP44fLrvUjPgwILFKenr80Mzu6JPNS/LjvZZzNe6jD9fHahvi1mozt60OktbmFq8nBQHcDQm BFGmmrXF2P7Db+bmbts/dxSahLUfvKEpylOmJYVML54oUI3jONbpNht6Gr48Y77WjQksS4zT HtyTVbYqXJMqolVjXe6h3pvmP7t6ahpu/fW3TK3M1ZVkagsySvOn31eGnshVbcxkrd131NrW axu8HZuatOa97amr85RpSfzsDy+Rq9rNpk5MErGpiWVf7F2yuZg/iYkQIlE1iJAiJT5xaXpW 2aq0kuUiqTjcEfkTiarFahI2fPK2PFlFUJH4WBKhqpESWrkoOdxRzEQEPZlHEQKrBmEAJ0sQ IoTCfmz3OAhZoWKlfNuJj2Y1W7ZDu2yHVkC/s+LxeOx2+8w2Docj8A2fiu88XC5XgMYBfucR idNAWM6dO+f1egM0DuSDoqci14LB/AydC/OqzYV51eYCfjm3mLFNKp5RTw3bes7X3+nop+QS WjGXl4yMbaJP32wxGJmxCUWK2jFs6+Y3lEnm/NbSOT55p9Nkbeu91X5jbMDKjE1Qcun0V0f/ L8Lxyb5LBouhxzFqV6QkOIbH+QhFUrE4Vh74Rv8C/gHrV6DwafkAAAAASUVORK5CYII= --------------9EcTOciomE28qHrmIRQ6xXi1 Content-Type: image/png; name="5_quote.png" Content-Disposition: attachment; filename="5_quote.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAG0AAAAlCAIAAADHkfAAAAAFG0lEQVRoge2aa0xcRRTHz8zc y96F5bF0eYeFQoGWhFclILTQVtqVWAT6oSpNtFFq2sQmJvqh+qFqNG1q/NDEtFFMNE1rTJvy jhWsShEEAlIeAuVlgSK7ay1CYesu+xw/bNmydFkwubt7qfw+7UzOZM7975xz5p5cRCkFl0Ep 1c1qNOpp/bzWYjQBRpIgaWBMOGYZ123KC0atHmC5MghjImIRQo/bI5fq+P8Be9qBJwShx5eb KS4uNhqNazSuqqry8vKy/t6Iazs4jjOZTBzHOTczm80LCwtarVYsFj+covxh0hsmmntu1TQ5 N5sZUw5UNs5OqHncmi9EIlFhYeGqZrW1tQCg1WptM3zmR8M/Cx1fVP9wssy52WRbf/2Jc1Od gzxu7XF4rjOUUmpZLVFQarFQeLLyyUa95gc7HXu/uV5ResqkNwCAUaevKD3VePqCbnbezT7N q+4NVDZqZ9y97zL6rvxYUXrK8EBnVaP66JmGD7/S/j3n0NhOx5kx5XhjFwACAKB0vLFL1T1q Npjc5PgiC/cftJ0r//zpIz+fuahRTVtMZjc7YGVmQj3e2LWYpuh4U4+qe9hscHwrsrs/YoIB gLAEABAhAIAwQtjBa5AbYH24nq/rBypuxO7LiM1LD0+J95b5u9MBqxqYxQCACQEEgBA4eilc riMiBBBCGAMAZjAAoJVXuhp5dlJiUe5gTXN/ecNIXZssLnLLvozEolyfYKl7HMAE29R4eKoW h4+z/Dxa/wQAwNb1eMWVrkbk5xOnyIxTZGrU0y1nL49e71B1j7R/Vpn2cn76kUJWzGGGuNQB RAgm2JrlMEbIaXQuO4+PdASEMMEIIYftDXfiGyZ79uM3Mo4eGK5rnWzpu3nhWvel+oSCHbF7 ngpPS+ACJC7a13qqHj48QsipGo+dR+bRDPZiEMaeyo9LQQgFxkZkHT+Y9MLee4MTQ9+2DNU0 j3zXGhgTkfBc9tbCHO9AP/43JRhZ0yIAABCWcRKd9joyDBGxtiHLiTBLPBXXDpEESyXB0s27 0jRvl3SUVfeXN6h7RtrOl6e/WpBcouD8fBDhzVvCMMwSNRhOhBlmTXEds3u7b7jMNnzm5Gti qR/DefHlGY/4hm7Ke78089iBoWstE0097WVV3Zfqst98KfnFPL4KY3RuqrcswJaFd797WOTr zXo7bmHY6Ri0LTpoW7RtuK0olxeHXIckJHD74f2yOHnDR1/O3FbeHbhNaR5f+VwWL5fFy23D rc/vdGK8bvuPlJqN5vt3VL+cvTx24yZQ2LQlMmZPuqeq4vrT0WI2z46plJ2DI9+332np9YsI Tti/I16RGZWTyopFnvJqnemo7h7pu/qT8ubQ3B9/+ctDdr3zijw7WRod5kEFrawDHSmlZr1R 2TXc+ukVZecQYYgkNFBx+lh8fpZwaqCgdTQbjNOjU8pfB4frWv/87XdJsDSxKDdOkRGbl770 nisEhOXNUu5PqOtPnFf3js5N3g2ICtv5VknUjmRpdNhKNw/PIlwdpzpuEZYJiArN/+T41oIc axdKsAhRR4Sxf2RQaFJMfH5WdG6ql494DYs8jBB1DJCH7P3gdd9wGSMSShlZFSHqyHpz0s3h nvbivyGgHsS6hmcdEVpDnw0hjLHH25r8wmdci6W+By++t6pZyiFFyiEFj/vyi8lk0mg0zm10 Ot2ymY3ve+zgOE6v16/ReOn3PUKsMx6ktrbWYrGs0dj2sdnGeeSNjXrNDxs68sO/c467ABl9 HvQAAAAASUVORK5CYII= --------------9EcTOciomE28qHrmIRQ6xXi1-- From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 14:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173012746717570 (code B ref 73752); Mon, 28 Oct 2024 14:58:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 14:57:47 +0000 Received: from localhost ([127.0.0.1]:54349 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5RBj-0004ZF-7R for submit@debbugs.gnu.org; Mon, 28 Oct 2024 10:57:47 -0400 Received: from qs51p00im-qukt01072102.me.com ([17.57.155.11]:63437) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5R2i-00048C-MW for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 10:48:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730126866; bh=yMAJy5kJ9kRUfTH/8kL2Nzbjmagb5lRbA5bS3UvzEbk=; h=Message-ID:Date:MIME-Version:Subject:From:To:Content-Type; b=r4Wrepy0hNHNiboD/5YOU41/+p0mLtVl1z8Pj3PqpZF+W3VymGHF6/p7u3H11MxLU kQ3LndNNWsVgfG3rXFWGFNQS17rvRZE/1BMKjlQMLwGb/PxcRXkM6VszURxo2E/G89 lvMd4ZGAoANh67VlHC5d5VYLr9//SUM3bfnXn7585A9JWsGYnYjmBuCcbmqRuyvIg1 9kXY+egpKMxRbReLOAy98EO3jFTQYNjViRnmQd2qD3ZzH2ogIrIx/akqxX4bR3r2Gd +0eQ91hACNL1G6XBGcIoUrnEVKjiMAvmWDpHGWxDSsPHCKHxKaFG+Cnq8j2gcfLoNL 1VO0/vj8Y71BQ== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01072102.me.com (Postfix) with ESMTPSA id 11CAF340129; Mon, 28 Oct 2024 14:47:44 +0000 (UTC) Message-ID: <6c4de789-6d8d-41f8-800c-6cb6674c35a3@xlk.me> Date: Mon, 28 Oct 2024 10:47:43 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Yixuan Chen References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> <86y12971jq.fsf@gnu.org> <86jzds719m.fsf@gnu.org> <1e871a38-a150-4198-a53a-831b9576df8b@xlk.me> Content-Language: en-US In-Reply-To: <1e871a38-a150-4198-a53a-831b9576df8b@xlk.me> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Proofpoint-GUID: Gn9iYVHxHIWhP2MaR9yxftfd0e6RPtck X-Proofpoint-ORIG-GUID: Gn9iYVHxHIWhP2MaR9yxftfd0e6RPtck X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-28_04,2024-10-28_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 clxscore=1030 mlxlogscore=398 bulkscore=0 adultscore=0 malwarescore=0 suspectscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410280119 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Mon, 28 Oct 2024 10:57:45 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Also, this morning someone mentioned on the github issue I linked above stating that he/she encountered a similar problem, and switching from cairo to Xft fixed the problem. I don't know if it's related, but you might want to know. I use wayland myself and xwayland doesn't support fractional scaling, so that's not a feasible solution for me. On 10/28/24 10:44, Yixuan Chen wrote: > > > On 10/28/24 10:25, Eli Zaretskii wrote: >>> Date: Sun, 27 Oct 2024 16:32:34 -0400 >>> Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org >>> From: Yixuan Chen >>> >>> On 10/27/24 16:07, Eli Zaretskii wrote: >>>> To convince me that this is really happening (although I'm unable to >>>> understand how it could, given how Emacs faces work), you will need to >>>> show some code which generates such a situation in a reproducible >>>> manner, and then show me by using "M-x describe-text-properties" and >>>> "C-u C-x =" that indeed the same characters in the same face are shown >>>> on different lines with different metrics. >>> >>> OK, here you go. >> >> Not exactly what I asked for, or understood how the problem manifests >> itself... >> >>> "screenshot1.png" shows the bugged display. Here's the result of >>> "describe-text-properties", >>>> There are text properties here: >>>>    face                 (face12 font-lock-string-face) >>>>    fontified            t >> >> But this is a completely different issue.  There's no indentation >> here, right? You are saying that in the "bad" display there's some >> extra space between the ligature and the following quote, right? > > Maybe my use of words were terrible. The problem I want to report was > never about indentation. It was always about the "extra space between > the ligature and the following character" (and sometimes also some extra > space between the ligature and the character, although not in this > instance). > >> Is >> that extra space a real SPC glyph or is it just that the ligature is >> considered "wider"?  What happens if you put the cursor on the ▷ >> ligature in the "bad" display -- does the block cursor then take up >> all the space up to the next quote? > > It's not a real SPC glyph. It's a single character ▷ (or ligature/glyph > I should call it? the underlying text is "|||>"). I attached five > screenshots, where the block cursor is at ", |, |, |, >, " respectively. > Noticeably, the block cursor for the first | character (1_bar.png) is > extra wide, and the block cursors for the following characters looks > offset from where they are. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 15:01:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173012760717876 (code B ref 73752); Mon, 28 Oct 2024 15:01:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 15:00:07 +0000 Received: from localhost ([127.0.0.1]:54355 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5RDy-0004eF-Sv for submit@debbugs.gnu.org; Mon, 28 Oct 2024 11:00:07 -0400 Received: from eggs.gnu.org ([209.51.188.92]:50110) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5RDx-0004dG-FF for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 11:00:05 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5RDH-0006mF-KK; Mon, 28 Oct 2024 10:59:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=IPMB6t12u5NwcCGEZCygOlaNPs9WFm2jTjSxGXE08S0=; b=ouAGYxpUJDzw LouwSaLnUsTNQbaKim2Sip6X53YF4QiFstuCCdZastV7grZP8GZ6mQOyTZGg1Npr4C8jaOnUzWyH6 C1Llykei10FtOrLCAUnigZaIiEMeW4XdEu9mkR35yMjmhy1J1yzQTOe5LciQsKEXLdZ1+Znu79ANo 9dHxK99rY1a87Y4zAOR7dgBqHtpXM/4A504y8CrMbTSQ13BroPIj06dCdsT0u/mkOms6Oz7lz7U2y IiTBPM19rk9R4f1vGdK56PvDujvUx2zdURZDIhVbhbDOl0kzhSNLWYAkypid1ook4zZE3hiHUDNjj vhAhNEtO5FlMRebaL0NHCQ==; Date: Mon, 28 Oct 2024 16:59:18 +0200 Message-Id: <86iktc6zp5.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87jzds3lay.fsf@gmail.com> (message from Visuwesh on Mon, 28 Oct 2024 09:56:13 +0530) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me > Date: Mon, 28 Oct 2024 09:56:13 +0530 > > Real-life Lisp programs certainly do not change face font attributes so > often but I believe the script does it so to reproduce the issue > quickly. In a regular Emacs session, it is enough for the same text to > be shown in different font sizes (as a consequence of using C-x C-+) and > font weights to eventually exhibit this misalignment IME. You need to catch this situation in some reproducible recipe. Because up front I don't understand how is this possible: we cache each composition with its font object, which includes the font size (and also slant, weight, etc.), so a different variant of the same font ought to match only cache entries that use the exact same font. Or maybe I don't understand well enough what composition_gstring_put_cache does to compute the hash of a glyph-string header (which is the hash key for a composition)? > I do not understand the technical details but the width of the glyph > used to draw it is not the one that should be used for the underlying > font (weight, size, etc. included) which leads to this misalignment. Which seems to indicate that we somehow use a different font's metric. > To make it more clear, let's say that =:= is shaped for a font X with a > specific weight, size, etc. At a later point in time, the width of the > glyph corresponding to X is used to draw =:= with font Y of same family. > This leads to the observed misalignment AFAIU. But how can this happen? Without a reproducible recipe, which can be reproduced without waiting for too long, it is very hard to investigate this. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 15:07:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173012797919277 (code B ref 73752); Mon, 28 Oct 2024 15:07:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 15:06:19 +0000 Received: from localhost ([127.0.0.1]:54366 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5RJy-00050r-OY for submit@debbugs.gnu.org; Mon, 28 Oct 2024 11:06:19 -0400 Received: from eggs.gnu.org ([209.51.188.92]:33280) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5RJw-00050b-6e for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 11:06:16 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5RJG-0007dT-9u; Mon, 28 Oct 2024 11:05:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:References:Subject:In-Reply-To:To:From: Date; bh=DroJB4mipIW9mlH7eS7JL5f2G/ctL/t9gnp6fbFxy2k=; b=ZPAYv+kJBWFErB0IAKBY /CcBF79SSlEY9LAOPKukFyjgoBgSvHgOV2TTZl5NP7+F+sYOTx+y2jb0A06+hhAheRU2in5Jr+/Np evkKQUx3Ti4mwTUnD3p66xCfjdBUIYuG6DyVLiikNhdgKKwcBeegzvqwkK881tHVnGV2qfXf7rMdU YQ7oPbnU7Lk/Tmhz1jE7c5TSKLcayljc0Y5vxiruR/TrJ/dSIXoiZ2NbmeJyl87z0SlnEJHIZt9Ic Ytho+ysqHpEL47RqjK3NDuJMqo1XQQXGiDOFJCJXlpi03m1NTnoDzGvVKFSY02kUj1vP01h0lvpwy RMgH56cx2+8UWA==; Date: Mon, 28 Oct 2024 17:05:30 +0200 Message-Id: <86h68w6zet.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <1e871a38-a150-4198-a53a-831b9576df8b@xlk.me> (message from Yixuan Chen on Mon, 28 Oct 2024 10:44:23 -0400) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> <86y12971jq.fsf@gnu.org> <86jzds719m.fsf@gnu.org> <1e871a38-a150-4198-a53a-831b9576df8b@xlk.me> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > Date: Mon, 28 Oct 2024 10:44:23 -0400 > Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > From: Yixuan Chen >=20 > > Is > > that extra space a real SPC glyph or is it just that the ligature is > > considered "wider"? What happens if you put the cursor on the =E2=96=B7 > > ligature in the "bad" display -- does the block cursor then take up > > all the space up to the next quote? >=20 > It's not a real SPC glyph. It's a single character =E2=96=B7 (or ligature= /glyph=20 > I should call it? the underlying text is "|||>"). I attached five=20 > screenshots, where the block cursor is at ", |, |, |, >, " respectively.= =20 > Noticeably, the block cursor for the first | character (1_bar.png) is=20 > extra wide, and the block cursors for the following characters looks=20 > offset from where they are. According to the screenshots, it actually looks like it's a real SPC glyph or something. What does "C-u C-x =3D" show when the block cursor is shown as below? --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=4_gt.png Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAGcAAAAnCAIAAACde8HCAAAFdUlEQVRoge2aa0xTZxjH38s5Pac3 SrGUi6MgCAiJeBmBiYI6tCPT2ZjFbZpsZsNFk5ks2T64fXBbtmhc9sFk0Wwu2WJ0MZqBg6iDuQ07 HRCZFBhyKxMKs60XbqVATy+nZx+OVuwMdHh6U36f+jZP3uc5/zyXc95zIMdxIGhwHOcYtdutQ87x Ka/bAxCUxSvj0pMRSQTPqSC4p5wA+CsDEcIUCSGEQVXtSQWFO4CoJNIr5fHR6XQejydA46qqKpIk ZzV78iuUoiiWZWmantmMZVmGYRiGoShq9k054fA4XaYrrZ3Vl2c2G+kzd5zVj5qsArqeAZFIpNPp ZjWrrq4GADAME8ieQvY11yTT9E3VL/uPzWw22Hi9dt+Rm9e6BHQdYgSeBhzHcd7ZSp7jvF4ORHNn mJ+hc+Eh1dpOXawsP+BxugAAboezsvyA/uBxx+h4iGMat9ztOKufGgm1Xz/az/xaWX7ANeHg1aja faju0++mhm3+qo30mfv1BgAgAABwXL/eYGnpZV2Bjm2hYMYmGo9UfP3crt8PnbBbhrweNsQB8IyY rP16w/2Gw/VfbrW09LAut//9GsIIAIBJDACAGAMAIIIQwbAETUrp1u9rOyovZWwsyCjNT16WJVEp QhkArwYiEQAAYQwgABACCP1VgxgDCCFCAABEIAAAvG8XejRFS3N1JV3VV65X1BlrGlWZKYs3FuTq SqRqZWgCQBj51LiXQ/eX/rnGCwwAQLw1umcXeqgYaaa2MFNbaLcO1R8+3XuxydJivPrV2RWvl+Xv 2kKKaUTgoAYAMUYY8f0KIQinVZ5frj1QDUCIMIIQwjDlmg95kuqFz98p2L21p6ZhsL69+fiFlpO1 2ZtXZ6x/NnlFNh0rC5JfPofuXTyEcJoa/8k14sE/SERAhMLV16YDIYzLWLhq77alr2y422XqPl/f XX3F+FNDXPrC7BeLlmwplsTFCO8UI8i3MwAAAJgkfJX3sGoEgakHz64kTSESh6tCH4lMrZSplYvW rrC/v73pWNX1ijprq7HxaEX+m5vztmvpGCnEgkWLCYKYpgZBU4ggHlGh6etWypNVvuXz+98SK2MI WiRUHAIiT1xQ+nF54Z6t3RfqTZdbrx77seVkTdG7r+W9WirU+EorWS5Rxfq657oPd1JyCSmh/VWL z0mLz0nzLXN0JYK4Dx6yhLiVOzepMjV1n307csN8u+MGx5UK1YdVWRpVlsa3XPLSGt/vqD1f4zjW zY4NWP44fLrvUjPgwILFKenr80Mzu6JPNS/LjvZZzNe6jD9fHahvi1mozt60OktbmFq8nBQHcDQm BFGmmrXF2P7Db+bmbts/dxSahLUfvKEpylOmJYVML54oUI3jONbpNht6Gr48Y77WjQksS4zTHtyT VbYqXJMqolVjXe6h3pvmP7t6ahpu/fW3TK3M1ZVkagsySvOn31eGnshVbcxkrd131NrWaxu8HZua tOa97amr85RpSfzsDy+Rq9rNpk5MErGpiWVf7F2yuZg/iYkQIlE1iJAiJT5xaXpW2aq0kuUiqTjc EfkTiarFahI2fPK2PFlFUJH4WBKhqpESWrkoOdxRzEQEPZlHEQKrBmEAJ0sQIoTCfmz3OAhZoWKl fNuJj2Y1W7ZDu2yHVkC/s+LxeOx2+8w2Docj8A2fiu88XC5XgMYBfucRidNAWM6dO+f1egM0DuSD oqci14LB/AydC/OqzYV51eYCfjm3mLFNKp5RTw3bes7X3+nop+QSWjGXl4yMbaJP32wxGJmxCUWK 2jFs6+Y3lEnm/NbSOT55p9Nkbeu91X5jbMDKjE1Qcun0V0f/L8Lxyb5LBouhxzFqV6QkOIbH+QhF UrE4Vh74Rv8C/gHrV6DwafkAAAAASUVORK5CYII= --=-=-= Content-Type: text/plain Actually, how about showing what "C-u C-x =" says in each of the 6 positions you show? And then show what "C-u C-x =" says in the same 6 positions in the "good" display? --=-=-=-- From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 16:21:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173013241832155 (code B ref 73752); Mon, 28 Oct 2024 16:21:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 16:20:18 +0000 Received: from localhost ([127.0.0.1]:54500 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5STZ-0008MZ-IJ for submit@debbugs.gnu.org; Mon, 28 Oct 2024 12:20:18 -0400 Received: from mail-pl1-f196.google.com ([209.85.214.196]:57674) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5STS-0008MG-4Q for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 12:20:15 -0400 Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-20b5affde14so31676105ad.3 for <73752@debbugs.gnu.org>; Mon, 28 Oct 2024 09:19:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730132313; x=1730737113; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=URteOtKTpMOBQNKwfQT/0eqFo4hEcNDm2/1offn8LHM=; b=A/UH4/7jUbF66YwU39Pohh7RpLSKWhyKL4P5+Zh0sIBRKrnbVy6sLK8pjYt25DXtFg ht/SLTUWeHvUhJDKvUXFtUBc9cYtwlPFtOxkV24E/BffA9PjKYqHm6iH6ShUkbx5VpQU AQP7VUbChA45afpYSs8LRR48rUgf7rFwP/Z+ufn95RASmLRsb93/mbaC9h7W+vDkE5Si DCSMjgKQgq0E662K/tJVbvvESDrl/Ufx1m3V9R3vFuXbQwrISgUieT8HEsUWl775qL+P k76ZX2FL5YJcqR1pjGOVSovE8D1naeBT5/mYWSRP+aDZkSTEUK7WDArLimqfvzMNhTvM u9+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730132313; x=1730737113; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=URteOtKTpMOBQNKwfQT/0eqFo4hEcNDm2/1offn8LHM=; b=oEMtieEcVDMOpVxhfKN09EOJq+8eqEf3Nc5PL5HsugBMO33u7h78koGtOtdYp8u4TB IPebMUwSeyZqzmFqkr/r8m3+EELqXKNQdHGN0LJlEqD3/Nm/ibotgilXTjcU32ECxmaP vpswB4cun/+6wBABlECLRkQnUBEbdNKn8zcaC/vPPxBQxmXsrLAJOgnyhIKuIpevEKH5 2a5rLPPbEDaoentFk337r5GeMhzMNVJx9Ati8NS5HCGIp9vCqm0KeCs70nL6CqOVTBzx A5HsqVBR/xt37N4Ugp7gV3gok4jQ4DYD1UnR6pVIaX9JjTmJeFj66aIOLsNG5gl2w0P5 CqMQ== X-Forwarded-Encrypted: i=1; AJvYcCX6x1Eez6WlEv8LrNdY8MFCwYT2wTRBtaG0qyCiyJ0BZEeP5eozdJIYTVFl0BTiUmZkHb5BKg==@debbugs.gnu.org X-Gm-Message-State: AOJu0YxfdWrt86lmYmHQdGM18MVpnQrrZK7RFq1UNk4q7sDjvamB62L9 UEPWTBnwPfiheB8D5oxp5zgVr1FVV1tsEw3rNFFhYDvwCHic4OtF X-Google-Smtp-Source: AGHT+IHONFnE9ccVCq1Y+z9gvrocsxHnpG2/5VsPr3VOoi0oicq27Nzk4DXEGhzaQEunhn00eEtHqA== X-Received: by 2002:a17:902:e5c9:b0:20c:7485:892c with SMTP id d9443c01a7336-210c6c344c4mr137709275ad.45.1730132311757; Mon, 28 Oct 2024 09:18:31 -0700 (PDT) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-210bc01344fsm52257705ad.137.2024.10.28.09.18.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Oct 2024 09:18:31 -0700 (PDT) From: Visuwesh In-Reply-To: <86iktc6zp5.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 28 Oct 2024 16:59:18 +0200") References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> Date: Mon, 28 Oct 2024 21:48:26 +0530 Message-ID: <87wmhs19rh.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 1.0 (+) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=A4=E0=AE=BF=E0=AE=99=E0=AF=8D=E0=AE=95=E0=AE=B3=E0=AF=8D =E0=AE=85= =E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D 28, 2024] E= li Zaretskii wrote: >> From: Visuwesh >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Mon, 28 Oct 2024 09:56:13 +0530 >>=20 >> Real-life Lisp programs certainly do not change face font attributes so >> often but I believe the script does it so to reproduce the issue >> quickly. In a regular Emacs session, it is enough for the same text to >> be shown in different font sizes (as a consequence of using C-x C-+) and >> font weights to eventually exhibit this misalignment IME. > > You need to catch this situation in some reproducible recipe. Because > up front I don't understand how is this possible: we cache each > composition with its font object, which includes the font size (and > also slant, weight, etc.), so a different variant of the same font > ought to match only cache entries that use the exact same font. Or > maybe I don't understand well enough what > composition_gstring_put_cache does to compute the hash of a > glyph-string header (which is the hash key for a composition)? Is this hash dependent on the font driver? IME and from what I see from other issues in ligature.el's GitHub issue page, the problem seems to be specific to Cairo builds which would also explain why you are not able to reproduce this. Also, do we clear the composition cache when all the GUI frames of an Emacs daemon are deleted? The misalignment goes away when I close all the GUI frames of the daemon, and open a fresh new GUI frame. >> I do not understand the technical details but the width of the glyph >> used to draw it is not the one that should be used for the underlying >> font (weight, size, etc. included) which leads to this misalignment. > > Which seems to indicate that we somehow use a different font's metric. That is my impression, yes. >> To make it more clear, let's say that =3D:=3D is shaped for a font X wit= h a >> specific weight, size, etc. At a later point in time, the width of the >> glyph corresponding to X is used to draw =3D:=3D with font Y of same fam= ily. >> This leads to the observed misalignment AFAIU. > > But how can this happen? Without a reproducible recipe, which can be > reproduced without waiting for too long, it is very hard to > investigate this. I have no idea. This is not easy to reproduce and seems to be heavily dependent on the configuration. Although I use a Cairo build (with Lucid toolkit), the misalignment is not as severe as OP says and it takes a lot more time to reproduce as well. I could never come up with a reproducer that takes less time. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 17:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17301356559454 (code B ref 73752); Mon, 28 Oct 2024 17:15:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 17:14:15 +0000 Received: from localhost ([127.0.0.1]:54571 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5TJn-0002SP-Aj for submit@debbugs.gnu.org; Mon, 28 Oct 2024 13:14:15 -0400 Received: from eggs.gnu.org ([209.51.188.92]:46380) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5TJl-0002SD-M7 for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 13:14:14 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5TJ4-0004S4-Kv; Mon, 28 Oct 2024 13:13:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=yPUUi/fhXE7YbbZUtCzw/FIzrCORAK7tlcZf8eoK+/E=; b=Zz/Bv5cFdfrA cjSzVuIGHbxU9AnlacRrxKED0qdn9vZcZrcQyObL8Mzj5iu69tpkXF1wIXva7ZEJfa7yOQaNFf7Fu YnWswXCXW4BCsj1aAc21KK5vCAZOc5Zjtu7t7w/bTwGKzn8we5iB3xtOVr3daum5+hieFRU7hGthc bnEIKA8OnzCwYFE9vvOajhGmsuIkCfGpP61mHnn1/KYpdiK99y/DU3vyfLQwsZhCqq/K91+4bdBH1 iDmYoKNDbup8CPjqygMKIIqpoO5ZNhjiXgRo2xZ2JjH4p6xsWyAy4W0JHsWVPLwXTtUUIJue9vCak VnOcvJSIi95yXbIf5s3Amg==; Date: Mon, 28 Oct 2024 19:13:25 +0200 Message-Id: <86frog6thm.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87wmhs19rh.fsf@gmail.com> (message from Visuwesh on Mon, 28 Oct 2024 21:48:26 +0530) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> <87wmhs19rh.fsf@gmail.com> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me > Date: Mon, 28 Oct 2024 21:48:26 +0530 > > > You need to catch this situation in some reproducible recipe. Because > > up front I don't understand how is this possible: we cache each > > composition with its font object, which includes the font size (and > > also slant, weight, etc.), so a different variant of the same font > > ought to match only cache entries that use the exact same font. Or > > maybe I don't understand well enough what > > composition_gstring_put_cache does to compute the hash of a > > glyph-string header (which is the hash key for a composition)? > > Is this hash dependent on the font driver? No. Only the font used for the composed characters is recorded, not the font backend which opened it. But fonts are managed by the font backend, so maybe there's some leakage by that way. > Also, do we clear the composition cache when all the GUI frames of an > Emacs daemon are deleted? No, we don't, not directly. But we clear the face cache, and that removes the data of the fonts referred by the face cache from the composition cache. So it's quite possible the composition cache is left empty when all the frames are deleted. > The misalignment goes away when I close all > the GUI frames of the daemon, and open a fresh new GUI frame. Next time this happens, try one of these two: M-: (clear-face-cache t) RET M-: (clear-composition-cache) RET and see if any of them corrects the problematic display. Btw, how frequently do you use different frames, and how likely are you to have different definitions for the same faces on different frames in the same Emacs session at the same time? > > But how can this happen? Without a reproducible recipe, which can be > > reproduced without waiting for too long, it is very hard to > > investigate this. > > I have no idea. This is not easy to reproduce and seems to be heavily > dependent on the configuration. Although I use a Cairo build (with > Lucid toolkit), the misalignment is not as severe as OP says and it > takes a lot more time to reproduce as well. I could never come up with > a reproducer that takes less time. The only way I see to investigate this is to wait for this to happen, then attach GDB to Emacs and look at the problematic compositions in the cache, comparing them to the corresponding compositions in a fresh Emacs session. I can tell what to look for with GDB, if that helps. If we see that two compositions that should be identical differ by their font objects, say, we'd at least have a lead and a starting point for further debugging. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 17:21:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173013600810455 (code B ref 73752); Mon, 28 Oct 2024 17:21:01 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 17:20:08 +0000 Received: from localhost ([127.0.0.1]:54591 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5TPT-0002iZ-PZ for submit@debbugs.gnu.org; Mon, 28 Oct 2024 13:20:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:47950) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5TPS-0002hz-1O for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 13:20:06 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5TOl-00057o-TB; Mon, 28 Oct 2024 13:19:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=BRhWjmJsvcpmebj5dckuiD+pXdKAB34xV+ZEDZo1cWw=; b=kl0NrZjT8h1V ucwuYLj24ZRzyZkmBSRTn0dBW4AUI0fbg3Ee/Eyajc4Vu3anA0x4FXqkeAUNUlIMN18h1xjtSIXl6 vFZjwpWFQEBnfPTY8eJmUlr2z6DevLy2R2rXWF43adXo5TPkIF6srDEsI9j4nY8AWq/7g+suBtpZF iETFR+QcSVotbLvs2q6bdTOt5lcWT+YovLiA0tb88CwWxUVc3DuZEwFlPDXmV+GNVCoxFdSPHEjBr e51xAhFB94GUnpjIJSAsipztEISU3OrOmwULswDcARlFAevOf1gUw0VsIqLXootrMDwAYB1yipCLx vkIJZz1LMnYG63+7SOta+g==; Date: Mon, 28 Oct 2024 19:19:19 +0200 Message-Id: <86ed406t7s.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <0b859951-92ec-4125-be4e-5f0d2088e872@xlk.me> (message from Yixuan Chen on Mon, 28 Oct 2024 11:20:29 -0400) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> <86y12971jq.fsf@gnu.org> <86jzds719m.fsf@gnu.org> <1e871a38-a150-4198-a53a-831b9576df8b@xlk.me> <86h68w6zet.fsf@gnu.org> <0b859951-92ec-4125-be4e-5f0d2088e872@xlk.me> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 28 Oct 2024 11:20:29 -0400 > Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > From: Yixuan Chen > > > Actually, how about showing what "C-u C-x =" says in each of the 6 > > positions you show? And then show what "C-u C-x =" says in the same 6 > > positions in the "good" display? > > See "bad.txt" for the output of the bad emacs display, and "good.txt" > for the output of good emacs display. I also attached the block cursor > screenshots for good emacs display. Thanks. It's basically the same, as far as Emacs thinks, but do you have any idea why EOB is different between these two cases (3535 vs 3527)? Also, Emacs thinks that the second | character is at the same buffer position and the same columns as the previous one -- any idea why? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 17:28:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: xuan@xlk.me Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173013642311915 (code B ref 73752); Mon, 28 Oct 2024 17:28:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 17:27:03 +0000 Received: from localhost ([127.0.0.1]:54610 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5TWB-000367-2y for submit@debbugs.gnu.org; Mon, 28 Oct 2024 13:27:03 -0400 Received: from eggs.gnu.org ([209.51.188.92]:35692) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5TW9-00035e-O9 for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 13:27:02 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5TVT-00063l-8J; Mon, 28 Oct 2024 13:26:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=5afLN2b6hYfAEmiuXpjMplWmoOKOdmkRV57rl41jgSg=; b=cF7hbA26EA+p jcJCwIBhzneWttg0GYRC32QB1u/DSvfid2VM8WW/33a73pZw7uLeP/6Zbzl+fbhPuI+3GmyiT8eM6 d/MLUIOqYj/IFA4xnRBlv/5YyRoRahxogINJSznfz+et/hK5SD8MKpsJrJgMvRLgPmnUbF1buzKkY aIB3Z1Vzg9tXNpVdD0kuyGyWd1xLEmDsSuChQNzH/HqHdX2FVSr7pzuFF7uY/vmh+f8Ky3ycp6TlL V++WRNvLGTYX4pBvIR848MYUUsQwMsSKimbf8lzz1zodO0E+omC1x1/NdRMmJLik4Q9oFwkf4gMAv VEkbxHnJkaU9qoJVSl1JLw==; Date: Mon, 28 Oct 2024 19:26:16 +0200 Message-Id: <86bjz46sw7.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <86ed406t7s.fsf@gnu.org> (message from Eli Zaretskii on Mon, 28 Oct 2024 19:19:19 +0200) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> <86y12971jq.fsf@gnu.org> <86jzds719m.fsf@gnu.org> <1e871a38-a150-4198-a53a-831b9576df8b@xlk.me> <86h68w6zet.fsf@gnu.org> <0b859951-92ec-4125-be4e-5f0d2088e872@xlk.me> <86ed406t7s.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com > Date: Mon, 28 Oct 2024 19:19:19 +0200 > From: Eli Zaretskii > > Also, Emacs thinks that the second | character is at the same buffer > position and the same columns as the previous one -- any idea why? That's in the "bad" output, I should say. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 17:51:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173013780315671 (code B ref 73752); Mon, 28 Oct 2024 17:51:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 17:50:03 +0000 Received: from localhost ([127.0.0.1]:54639 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5TsP-00044O-4H for submit@debbugs.gnu.org; Mon, 28 Oct 2024 13:50:02 -0400 Received: from qs51p00im-qukt01072101.me.com ([17.57.155.10]:44801) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5RYR-0005ls-Pm for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 11:21:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730128833; bh=OVHA9gJPgxzBryJszabBYlEVMvU0grtuu2kt4xUvZ3M=; h=Content-Type:Message-ID:Date:MIME-Version:Subject:To:From; b=cD9RWCLohm7Q44MELeROhZi2x+l81qCA8N/XIMaOEd7RQc0cshtnTeck7Yhm0C2yM 33t2sjPugbSvpkxh0V2palmsTWvqrpz9cp7RZRS+2vQQMisAV7mk4nA1WLh2fM2gnU UGgmqTanBXI6RvmpREQ66ai1DebxS8GH1DKeL+9F2Y3j11xmbz+y4CzHC1/ZLXMHZi Vh9HjsAS6XLPvuqHUiLDAxxfkpkW89PqnW/mv9Ym/FbkWHXlNvXnW26IPtr+ueJW4g FCyHnyEr53P8k87VnM4MxPkGexg+Zm044hd0QWZdGlBONBTxxhszC9BPYWUpe76YXw XSnTDMz/nSkfg== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01072101.me.com (Postfix) with ESMTPSA id B06C0402DC; Mon, 28 Oct 2024 15:20:31 +0000 (UTC) Content-Type: multipart/mixed; boundary="------------4e6GmvPQIFC3ggJhKC4cMBaa" Message-ID: <0b859951-92ec-4125-be4e-5f0d2088e872@xlk.me> Date: Mon, 28 Oct 2024 11:20:29 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> <86y12971jq.fsf@gnu.org> <86jzds719m.fsf@gnu.org> <1e871a38-a150-4198-a53a-831b9576df8b@xlk.me> <86h68w6zet.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86h68w6zet.fsf@gnu.org> X-Proofpoint-ORIG-GUID: Ccygm3F_4Oh7AayjqT1dqCz-fqLIPS0N X-Proofpoint-GUID: Ccygm3F_4Oh7AayjqT1dqCz-fqLIPS0N X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-28_04,2024-10-28_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 adultscore=0 clxscore=1030 bulkscore=0 suspectscore=0 phishscore=0 spamscore=0 mlxlogscore=870 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410280123 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Mon, 28 Oct 2024 13:49:59 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------4e6GmvPQIFC3ggJhKC4cMBaa Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 10/28/24 11:05, Eli Zaretskii wrote: >> Date: Mon, 28 Oct 2024 10:44:23 -0400 >> Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org >> From: Yixuan Chen >> >>> Is >>> that extra space a real SPC glyph or is it just that the ligature is >>> considered "wider"? What happens if you put the cursor on the ▷ >>> ligature in the "bad" display -- does the block cursor then take up >>> all the space up to the next quote? >> >> It's not a real SPC glyph. It's a single character ▷ (or ligature/glyph >> I should call it? the underlying text is "|||>"). I attached five >> screenshots, where the block cursor is at ", |, |, |, >, " respectively. >> Noticeably, the block cursor for the first | character (1_bar.png) is >> extra wide, and the block cursors for the following characters looks >> offset from where they are. > > According to the screenshots, it actually looks like it's a real SPC > glyph or something. What does "C-u C-x =" show when the block cursor > is shown as below? It shows > position: 1277 of 3527 (36%), column: 34 > character: > (displayed as >) (codepoint 62, #o76, #x3e) > charset: ascii (ASCII (ISO646 IRV)) > code point in charset: 0x3E > script: latin > syntax: _ which means: symbol > category: .:Base, a:ASCII, l:Latin, r:Roman > to input: type "C-x 8 RET 3e" or "C-x 8 RET GREATER-THAN SIGN" > buffer code: #x3E > file code: #x3E (encoded by coding system utf-8-unix) > display: by this font (glyph code): > ftcrhb:-SAJA-Cascadia Code-light-normal-normal-*-17-*-*-*-m-0-iso10646-1 (#x810) > > Character code properties: customize what to show > name: GREATER-THAN SIGN > general-category: Sm (Symbol, Math) > decomposition: (62) ('>') > > There are text properties here: > face (face12 font-lock-string-face) > fontified t > Actually, how about showing what "C-u C-x =" says in each of the 6 > positions you show? And then show what "C-u C-x =" says in the same 6 > positions in the "good" display? See "bad.txt" for the output of the bad emacs display, and "good.txt" for the output of good emacs display. I also attached the block cursor screenshots for good emacs display. --------------4e6GmvPQIFC3ggJhKC4cMBaa Content-Type: text/plain; charset=UTF-8; name="good.txt" Content-Disposition: attachment; filename="good.txt" Content-Transfer-Encoding: base64 MDoKCiAgICAgICAgICAgICBwb3NpdGlvbjogMTI3MyBvZiAzNTM1ICgzNiUpLCBjb2x1bW46 IDMwCiAgICAgICAgICAgIGNoYXJhY3RlcjogIiAoZGlzcGxheWVkIGFzICIpIChjb2RlcG9p bnQgMzQsICNvNDIsICN4MjIpCiAgICAgICAgICAgICAgY2hhcnNldDogYXNjaWkgKEFTQ0lJ IChJU082NDYgSVJWKSkKY29kZSBwb2ludCBpbiBjaGFyc2V0OiAweDIyCiAgICAgICAgICAg ICAgIHNjcmlwdDogbGF0aW4KICAgICAgICAgICAgICAgc3ludGF4OiAiIAl3aGljaCBtZWFu czogc3RyaW5nCiAgICAgICAgICAgICBjYXRlZ29yeTogLjpCYXNlLCBhOkFTQ0lJLCBsOkxh dGluLCByOlJvbWFuCiAgICAgICAgICAgICB0byBpbnB1dDogdHlwZSAiQy14IDggUkVUIDIy IiBvciAiQy14IDggUkVUIFFVT1RBVElPTiBNQVJLIgogICAgICAgICAgYnVmZmVyIGNvZGU6 ICN4MjIKICAgICAgICAgICAgZmlsZSBjb2RlOiAjeDIyIChlbmNvZGVkIGJ5IGNvZGluZyBz eXN0ZW0gdXRmLTgtdW5peCkKICAgICAgICAgICAgICBkaXNwbGF5OiBieSB0aGlzIGZvbnQg KGdseXBoIGNvZGUpOgogICAgZnRjcmhiOi1TQUpBLUNhc2NhZGlhIENvZGUtbGlnaHQtbm9y bWFsLW5vcm1hbC0qLTE3LSotKi0qLW0tMC1pc28xMDY0Ni0xICgjeDc3OSkKCkNoYXJhY3Rl ciBjb2RlIHByb3BlcnRpZXM6IGN1c3RvbWl6ZSB3aGF0IHRvIHNob3cKICBuYW1lOiBRVU9U QVRJT04gTUFSSwogIGdlbmVyYWwtY2F0ZWdvcnk6IFBvIChQdW5jdHVhdGlvbiwgT3RoZXIp CiAgZGVjb21wb3NpdGlvbjogKDM0KSAoJyInKQoKVGhlcmUgYXJlIHRleHQgcHJvcGVydGll cyBoZXJlOgogIGZhY2UgICAgICAgICAgICAgICAgIChmYWNlMTIgZm9udC1sb2NrLXN0cmlu Zy1mYWNlKQogIGZvbnRpZmllZCAgICAgICAgICAgIHQKCjE6CgogICAgICAgICAgICAgcG9z aXRpb246IDEyNzQgb2YgMzUzNSAoMzYlKSwgY29sdW1uOiAzMQogICAgICAgICAgICBjaGFy YWN0ZXI6IHwgKGRpc3BsYXllZCBhcyB8KSAoY29kZXBvaW50IDEyNCwgI28xNzQsICN4N2Mp CiAgICAgICAgICAgICAgY2hhcnNldDogYXNjaWkgKEFTQ0lJIChJU082NDYgSVJWKSkKY29k ZSBwb2ludCBpbiBjaGFyc2V0OiAweDdDCiAgICAgICAgICAgICAgIHNjcmlwdDogbGF0aW4K ICAgICAgICAgICAgICAgc3ludGF4OiBfIAl3aGljaCBtZWFuczogc3ltYm9sCiAgICAgICAg ICAgICBjYXRlZ29yeTogLjpCYXNlLCBhOkFTQ0lJLCBsOkxhdGluLCByOlJvbWFuCiAgICAg ICAgICAgICB0byBpbnB1dDogdHlwZSAiQy14IDggUkVUIDdjIiBvciAiQy14IDggUkVUIFZF UlRJQ0FMIExJTkUiCiAgICAgICAgICBidWZmZXIgY29kZTogI3g3QwogICAgICAgICAgICBm aWxlIGNvZGU6ICN4N0MgKGVuY29kZWQgYnkgY29kaW5nIHN5c3RlbSB1dGYtOC11bml4KQog ICAgICAgICAgICAgIGRpc3BsYXk6IGJ5IHRoaXMgZm9udCAoZ2x5cGggY29kZSk6CiAgICBm dGNyaGI6LVNBSkEtQ2FzY2FkaWEgQ29kZS1saWdodC1ub3JtYWwtbm9ybWFsLSotMTctKi0q LSotbS0wLWlzbzEwNjQ2LTEgKCN4OUY2KQoKQ2hhcmFjdGVyIGNvZGUgcHJvcGVydGllczog Y3VzdG9taXplIHdoYXQgdG8gc2hvdwogIG5hbWU6IFZFUlRJQ0FMIExJTkUKICBvbGQtbmFt ZTogVkVSVElDQUwgQkFSCiAgZ2VuZXJhbC1jYXRlZ29yeTogU20gKFN5bWJvbCwgTWF0aCkK ICBkZWNvbXBvc2l0aW9uOiAoMTI0KSAoJ3wnKQoKVGhlcmUgYXJlIHRleHQgcHJvcGVydGll cyBoZXJlOgogIGZhY2UgICAgICAgICAgICAgICAgIChmYWNlMTIgZm9udC1sb2NrLXN0cmlu Zy1mYWNlKQogIGZvbnRpZmllZCAgICAgICAgICAgIHQKCjI6CgogICAgICAgICAgICAgcG9z aXRpb246IDEyNzUgb2YgMzUzNSAoMzYlKSwgY29sdW1uOiAzMgogICAgICAgICAgICBjaGFy YWN0ZXI6IHwgKGRpc3BsYXllZCBhcyB8KSAoY29kZXBvaW50IDEyNCwgI28xNzQsICN4N2Mp CiAgICAgICAgICAgICAgY2hhcnNldDogYXNjaWkgKEFTQ0lJIChJU082NDYgSVJWKSkKY29k ZSBwb2ludCBpbiBjaGFyc2V0OiAweDdDCiAgICAgICAgICAgICAgIHNjcmlwdDogbGF0aW4K ICAgICAgICAgICAgICAgc3ludGF4OiBfIAl3aGljaCBtZWFuczogc3ltYm9sCiAgICAgICAg ICAgICBjYXRlZ29yeTogLjpCYXNlLCBhOkFTQ0lJLCBsOkxhdGluLCByOlJvbWFuCiAgICAg ICAgICAgICB0byBpbnB1dDogdHlwZSAiQy14IDggUkVUIDdjIiBvciAiQy14IDggUkVUIFZF UlRJQ0FMIExJTkUiCiAgICAgICAgICBidWZmZXIgY29kZTogI3g3QwogICAgICAgICAgICBm aWxlIGNvZGU6ICN4N0MgKGVuY29kZWQgYnkgY29kaW5nIHN5c3RlbSB1dGYtOC11bml4KQog ICAgICAgICAgICAgIGRpc3BsYXk6IGJ5IHRoaXMgZm9udCAoZ2x5cGggY29kZSk6CiAgICBm dGNyaGI6LVNBSkEtQ2FzY2FkaWEgQ29kZS1saWdodC1ub3JtYWwtbm9ybWFsLSotMTctKi0q LSotbS0wLWlzbzEwNjQ2LTEgKCN4OUY2KQoKQ2hhcmFjdGVyIGNvZGUgcHJvcGVydGllczog Y3VzdG9taXplIHdoYXQgdG8gc2hvdwogIG5hbWU6IFZFUlRJQ0FMIExJTkUKICBvbGQtbmFt ZTogVkVSVElDQUwgQkFSCiAgZ2VuZXJhbC1jYXRlZ29yeTogU20gKFN5bWJvbCwgTWF0aCkK ICBkZWNvbXBvc2l0aW9uOiAoMTI0KSAoJ3wnKQoKVGhlcmUgYXJlIHRleHQgcHJvcGVydGll cyBoZXJlOgogIGZhY2UgICAgICAgICAgICAgICAgIChmYWNlMTIgZm9udC1sb2NrLXN0cmlu Zy1mYWNlKQogIGZvbnRpZmllZCAgICAgICAgICAgIHQKCjM6CgogICAgICAgICAgICAgcG9z aXRpb246IDEyNzYgb2YgMzUzNSAoMzYlKSwgY29sdW1uOiAzMwogICAgICAgICAgICBjaGFy YWN0ZXI6IHwgKGRpc3BsYXllZCBhcyB8KSAoY29kZXBvaW50IDEyNCwgI28xNzQsICN4N2Mp CiAgICAgICAgICAgICAgY2hhcnNldDogYXNjaWkgKEFTQ0lJIChJU082NDYgSVJWKSkKY29k ZSBwb2ludCBpbiBjaGFyc2V0OiAweDdDCiAgICAgICAgICAgICAgIHNjcmlwdDogbGF0aW4K ICAgICAgICAgICAgICAgc3ludGF4OiBfIAl3aGljaCBtZWFuczogc3ltYm9sCiAgICAgICAg ICAgICBjYXRlZ29yeTogLjpCYXNlLCBhOkFTQ0lJLCBsOkxhdGluLCByOlJvbWFuCiAgICAg ICAgICAgICB0byBpbnB1dDogdHlwZSAiQy14IDggUkVUIDdjIiBvciAiQy14IDggUkVUIFZF UlRJQ0FMIExJTkUiCiAgICAgICAgICBidWZmZXIgY29kZTogI3g3QwogICAgICAgICAgICBm aWxlIGNvZGU6ICN4N0MgKGVuY29kZWQgYnkgY29kaW5nIHN5c3RlbSB1dGYtOC11bml4KQog ICAgICAgICAgICAgIGRpc3BsYXk6IGJ5IHRoaXMgZm9udCAoZ2x5cGggY29kZSk6CiAgICBm dGNyaGI6LVNBSkEtQ2FzY2FkaWEgQ29kZS1saWdodC1ub3JtYWwtbm9ybWFsLSotMTctKi0q LSotbS0wLWlzbzEwNjQ2LTEgKCN4OUY2KQoKQ2hhcmFjdGVyIGNvZGUgcHJvcGVydGllczog Y3VzdG9taXplIHdoYXQgdG8gc2hvdwogIG5hbWU6IFZFUlRJQ0FMIExJTkUKICBvbGQtbmFt ZTogVkVSVElDQUwgQkFSCiAgZ2VuZXJhbC1jYXRlZ29yeTogU20gKFN5bWJvbCwgTWF0aCkK ICBkZWNvbXBvc2l0aW9uOiAoMTI0KSAoJ3wnKQoKVGhlcmUgYXJlIHRleHQgcHJvcGVydGll cyBoZXJlOgogIGZhY2UgICAgICAgICAgICAgICAgIChmYWNlMTIgZm9udC1sb2NrLXN0cmlu Zy1mYWNlKQogIGZvbnRpZmllZCAgICAgICAgICAgIHQKCjQ6CgogICAgICAgICAgICAgcG9z aXRpb246IDEyNzcgb2YgMzUzNSAoMzYlKSwgY29sdW1uOiAzNAogICAgICAgICAgICBjaGFy YWN0ZXI6ID4gKGRpc3BsYXllZCBhcyA+KSAoY29kZXBvaW50IDYyLCAjbzc2LCAjeDNlKQog ICAgICAgICAgICAgIGNoYXJzZXQ6IGFzY2lpIChBU0NJSSAoSVNPNjQ2IElSVikpCmNvZGUg cG9pbnQgaW4gY2hhcnNldDogMHgzRQogICAgICAgICAgICAgICBzY3JpcHQ6IGxhdGluCiAg ICAgICAgICAgICAgIHN5bnRheDogXyAJd2hpY2ggbWVhbnM6IHN5bWJvbAogICAgICAgICAg ICAgY2F0ZWdvcnk6IC46QmFzZSwgYTpBU0NJSSwgbDpMYXRpbiwgcjpSb21hbgogICAgICAg ICAgICAgdG8gaW5wdXQ6IHR5cGUgIkMteCA4IFJFVCAzZSIgb3IgIkMteCA4IFJFVCBHUkVB VEVSLVRIQU4gU0lHTiIKICAgICAgICAgIGJ1ZmZlciBjb2RlOiAjeDNFCiAgICAgICAgICAg IGZpbGUgY29kZTogI3gzRSAoZW5jb2RlZCBieSBjb2Rpbmcgc3lzdGVtIHV0Zi04LXVuaXgp CiAgICAgICAgICAgICAgZGlzcGxheTogYnkgdGhpcyBmb250IChnbHlwaCBjb2RlKToKICAg IGZ0Y3JoYjotU0FKQS1DYXNjYWRpYSBDb2RlLWxpZ2h0LW5vcm1hbC1ub3JtYWwtKi0xNy0q LSotKi1tLTAtaXNvMTA2NDYtMSAoI3g4MTApCgpDaGFyYWN0ZXIgY29kZSBwcm9wZXJ0aWVz OiBjdXN0b21pemUgd2hhdCB0byBzaG93CiAgbmFtZTogR1JFQVRFUi1USEFOIFNJR04KICBn ZW5lcmFsLWNhdGVnb3J5OiBTbSAoU3ltYm9sLCBNYXRoKQogIGRlY29tcG9zaXRpb246ICg2 MikgKCc+JykKClRoZXJlIGFyZSB0ZXh0IHByb3BlcnRpZXMgaGVyZToKICBmYWNlICAgICAg ICAgICAgICAgICAoZmFjZTEyIGZvbnQtbG9jay1zdHJpbmctZmFjZSkKICBmb250aWZpZWQg ICAgICAgICAgICB0Cgo1OgoKICAgICAgICAgICAgIHBvc2l0aW9uOiAxMjc4IG9mIDM1MzUg KDM2JSksIGNvbHVtbjogMzUKICAgICAgICAgICAgY2hhcmFjdGVyOiAiIChkaXNwbGF5ZWQg YXMgIikgKGNvZGVwb2ludCAzNCwgI280MiwgI3gyMikKICAgICAgICAgICAgICBjaGFyc2V0 OiBhc2NpaSAoQVNDSUkgKElTTzY0NiBJUlYpKQpjb2RlIHBvaW50IGluIGNoYXJzZXQ6IDB4 MjIKICAgICAgICAgICAgICAgc2NyaXB0OiBsYXRpbgogICAgICAgICAgICAgICBzeW50YXg6 ICIgCXdoaWNoIG1lYW5zOiBzdHJpbmcKICAgICAgICAgICAgIGNhdGVnb3J5OiAuOkJhc2Us IGE6QVNDSUksIGw6TGF0aW4sIHI6Um9tYW4KICAgICAgICAgICAgIHRvIGlucHV0OiB0eXBl ICJDLXggOCBSRVQgMjIiIG9yICJDLXggOCBSRVQgUVVPVEFUSU9OIE1BUksiCiAgICAgICAg ICBidWZmZXIgY29kZTogI3gyMgogICAgICAgICAgICBmaWxlIGNvZGU6ICN4MjIgKGVuY29k ZWQgYnkgY29kaW5nIHN5c3RlbSB1dGYtOC11bml4KQogICAgICAgICAgICAgIGRpc3BsYXk6 IGJ5IHRoaXMgZm9udCAoZ2x5cGggY29kZSk6CiAgICBmdGNyaGI6LVNBSkEtQ2FzY2FkaWEg Q29kZS1saWdodC1ub3JtYWwtbm9ybWFsLSotMTctKi0qLSotbS0wLWlzbzEwNjQ2LTEgKCN4 Nzc5KQoKQ2hhcmFjdGVyIGNvZGUgcHJvcGVydGllczogY3VzdG9taXplIHdoYXQgdG8gc2hv dwogIG5hbWU6IFFVT1RBVElPTiBNQVJLCiAgZ2VuZXJhbC1jYXRlZ29yeTogUG8gKFB1bmN0 dWF0aW9uLCBPdGhlcikKICBkZWNvbXBvc2l0aW9uOiAoMzQpICgnIicpCgpUaGVyZSBhcmUg dGV4dCBwcm9wZXJ0aWVzIGhlcmU6CiAgZmFjZSAgICAgICAgICAgICAgICAgKGZhY2UxMiBm b250LWxvY2stc3RyaW5nLWZhY2UpCiAgZm9udGlmaWVkICAgICAgICAgICAgdAo= --------------4e6GmvPQIFC3ggJhKC4cMBaa Content-Type: text/plain; charset=UTF-8; name="bad.txt" Content-Disposition: attachment; filename="bad.txt" Content-Transfer-Encoding: base64 MDoKCiAgICAgICAgICAgICBwb3NpdGlvbjogMTI3MyBvZiAzNTI3ICgzNiUpLCBjb2x1bW46 IDMwCiAgICAgICAgICAgIGNoYXJhY3RlcjogIiAoZGlzcGxheWVkIGFzICIpIChjb2RlcG9p bnQgMzQsICNvNDIsICN4MjIpCiAgICAgICAgICAgICAgY2hhcnNldDogYXNjaWkgKEFTQ0lJ IChJU082NDYgSVJWKSkKY29kZSBwb2ludCBpbiBjaGFyc2V0OiAweDIyCiAgICAgICAgICAg ICAgIHNjcmlwdDogbGF0aW4KICAgICAgICAgICAgICAgc3ludGF4OiAiIAl3aGljaCBtZWFu czogc3RyaW5nCiAgICAgICAgICAgICBjYXRlZ29yeTogLjpCYXNlLCBhOkFTQ0lJLCBsOkxh dGluLCByOlJvbWFuCiAgICAgICAgICAgICB0byBpbnB1dDogdHlwZSAiQy14IDggUkVUIDIy IiBvciAiQy14IDggUkVUIFFVT1RBVElPTiBNQVJLIgogICAgICAgICAgYnVmZmVyIGNvZGU6 ICN4MjIKICAgICAgICAgICAgZmlsZSBjb2RlOiAjeDIyIChlbmNvZGVkIGJ5IGNvZGluZyBz eXN0ZW0gdXRmLTgtdW5peCkKICAgICAgICAgICAgICBkaXNwbGF5OiBieSB0aGlzIGZvbnQg KGdseXBoIGNvZGUpOgogICAgZnRjcmhiOi1TQUpBLUNhc2NhZGlhIENvZGUtbGlnaHQtbm9y bWFsLW5vcm1hbC0qLTE3LSotKi0qLW0tMC1pc28xMDY0Ni0xICgjeDc3OSkKCkNoYXJhY3Rl ciBjb2RlIHByb3BlcnRpZXM6IGN1c3RvbWl6ZSB3aGF0IHRvIHNob3cKICBuYW1lOiBRVU9U QVRJT04gTUFSSwogIGdlbmVyYWwtY2F0ZWdvcnk6IFBvIChQdW5jdHVhdGlvbiwgT3RoZXIp CiAgZGVjb21wb3NpdGlvbjogKDM0KSAoJyInKQoKMToKClRoZXJlIGFyZSB0ZXh0IHByb3Bl cnRpZXMgaGVyZToKICBmYWNlICAgICAgICAgICAgICAgICAoZmFjZTEyIGZvbnQtbG9jay1z dHJpbmctZmFjZSkKICBmb250aWZpZWQgICAgICAgICAgICB0CgogICAgICAgICAgICAgcG9z aXRpb246IDEyNzQgb2YgMzUyNyAoMzYlKSwgY29sdW1uOiAzMQogICAgICAgICAgICBjaGFy YWN0ZXI6IHwgKGRpc3BsYXllZCBhcyB8KSAoY29kZXBvaW50IDEyNCwgI28xNzQsICN4N2Mp CiAgICAgICAgICAgICAgY2hhcnNldDogYXNjaWkgKEFTQ0lJIChJU082NDYgSVJWKSkKY29k ZSBwb2ludCBpbiBjaGFyc2V0OiAweDdDCiAgICAgICAgICAgICAgIHNjcmlwdDogbGF0aW4K ICAgICAgICAgICAgICAgc3ludGF4OiBfIAl3aGljaCBtZWFuczogc3ltYm9sCiAgICAgICAg ICAgICBjYXRlZ29yeTogLjpCYXNlLCBhOkFTQ0lJLCBsOkxhdGluLCByOlJvbWFuCiAgICAg ICAgICAgICB0byBpbnB1dDogdHlwZSAiQy14IDggUkVUIDdjIiBvciAiQy14IDggUkVUIFZF UlRJQ0FMIExJTkUiCiAgICAgICAgICBidWZmZXIgY29kZTogI3g3QwogICAgICAgICAgICBm aWxlIGNvZGU6ICN4N0MgKGVuY29kZWQgYnkgY29kaW5nIHN5c3RlbSB1dGYtOC11bml4KQog ICAgICAgICAgICAgIGRpc3BsYXk6IGJ5IHRoaXMgZm9udCAoZ2x5cGggY29kZSk6CiAgICBm dGNyaGI6LVNBSkEtQ2FzY2FkaWEgQ29kZS1saWdodC1ub3JtYWwtbm9ybWFsLSotMTctKi0q LSotbS0wLWlzbzEwNjQ2LTEgKCN4OUY2KQoKQ2hhcmFjdGVyIGNvZGUgcHJvcGVydGllczog Y3VzdG9taXplIHdoYXQgdG8gc2hvdwogIG5hbWU6IFZFUlRJQ0FMIExJTkUKICBvbGQtbmFt ZTogVkVSVElDQUwgQkFSCiAgZ2VuZXJhbC1jYXRlZ29yeTogU20gKFN5bWJvbCwgTWF0aCkK ICBkZWNvbXBvc2l0aW9uOiAoMTI0KSAoJ3wnKQoKMjoKClRoZXJlIGFyZSB0ZXh0IHByb3Bl cnRpZXMgaGVyZToKICBmYWNlICAgICAgICAgICAgICAgICAoZmFjZTEyIGZvbnQtbG9jay1z dHJpbmctZmFjZSkKICBmb250aWZpZWQgICAgICAgICAgICB0CgogICAgICAgICAgICAgcG9z aXRpb246IDEyNzQgb2YgMzUyNyAoMzYlKSwgY29sdW1uOiAzMQogICAgICAgICAgICBjaGFy YWN0ZXI6IHwgKGRpc3BsYXllZCBhcyB8KSAoY29kZXBvaW50IDEyNCwgI28xNzQsICN4N2Mp CiAgICAgICAgICAgICAgY2hhcnNldDogYXNjaWkgKEFTQ0lJIChJU082NDYgSVJWKSkKY29k ZSBwb2ludCBpbiBjaGFyc2V0OiAweDdDCiAgICAgICAgICAgICAgIHNjcmlwdDogbGF0aW4K ICAgICAgICAgICAgICAgc3ludGF4OiBfIAl3aGljaCBtZWFuczogc3ltYm9sCiAgICAgICAg ICAgICBjYXRlZ29yeTogLjpCYXNlLCBhOkFTQ0lJLCBsOkxhdGluLCByOlJvbWFuCiAgICAg ICAgICAgICB0byBpbnB1dDogdHlwZSAiQy14IDggUkVUIDdjIiBvciAiQy14IDggUkVUIFZF UlRJQ0FMIExJTkUiCiAgICAgICAgICBidWZmZXIgY29kZTogI3g3QwogICAgICAgICAgICBm aWxlIGNvZGU6ICN4N0MgKGVuY29kZWQgYnkgY29kaW5nIHN5c3RlbSB1dGYtOC11bml4KQog ICAgICAgICAgICAgIGRpc3BsYXk6IGJ5IHRoaXMgZm9udCAoZ2x5cGggY29kZSk6CiAgICBm dGNyaGI6LVNBSkEtQ2FzY2FkaWEgQ29kZS1saWdodC1ub3JtYWwtbm9ybWFsLSotMTctKi0q LSotbS0wLWlzbzEwNjQ2LTEgKCN4OUY2KQoKQ2hhcmFjdGVyIGNvZGUgcHJvcGVydGllczog Y3VzdG9taXplIHdoYXQgdG8gc2hvdwogIG5hbWU6IFZFUlRJQ0FMIExJTkUKICBvbGQtbmFt ZTogVkVSVElDQUwgQkFSCiAgZ2VuZXJhbC1jYXRlZ29yeTogU20gKFN5bWJvbCwgTWF0aCkK ICBkZWNvbXBvc2l0aW9uOiAoMTI0KSAoJ3wnKQoKMzoKClRoZXJlIGFyZSB0ZXh0IHByb3Bl cnRpZXMgaGVyZToKICBmYWNlICAgICAgICAgICAgICAgICAoZmFjZTEyIGZvbnQtbG9jay1z dHJpbmctZmFjZSkKICBmb250aWZpZWQgICAgICAgICAgICB0CiAgICAgICAgICAgICBwb3Np dGlvbjogMTI3NiBvZiAzNTI3ICgzNiUpLCBjb2x1bW46IDMzCiAgICAgICAgICAgIGNoYXJh Y3RlcjogfCAoZGlzcGxheWVkIGFzIHwpIChjb2RlcG9pbnQgMTI0LCAjbzE3NCwgI3g3YykK ICAgICAgICAgICAgICBjaGFyc2V0OiBhc2NpaSAoQVNDSUkgKElTTzY0NiBJUlYpKQpjb2Rl IHBvaW50IGluIGNoYXJzZXQ6IDB4N0MKICAgICAgICAgICAgICAgc2NyaXB0OiBsYXRpbgog ICAgICAgICAgICAgICBzeW50YXg6IF8gCXdoaWNoIG1lYW5zOiBzeW1ib2wKICAgICAgICAg ICAgIGNhdGVnb3J5OiAuOkJhc2UsIGE6QVNDSUksIGw6TGF0aW4sIHI6Um9tYW4KICAgICAg ICAgICAgIHRvIGlucHV0OiB0eXBlICJDLXggOCBSRVQgN2MiIG9yICJDLXggOCBSRVQgVkVS VElDQUwgTElORSIKICAgICAgICAgIGJ1ZmZlciBjb2RlOiAjeDdDCiAgICAgICAgICAgIGZp bGUgY29kZTogI3g3QyAoZW5jb2RlZCBieSBjb2Rpbmcgc3lzdGVtIHV0Zi04LXVuaXgpCiAg ICAgICAgICAgICAgZGlzcGxheTogYnkgdGhpcyBmb250IChnbHlwaCBjb2RlKToKICAgIGZ0 Y3JoYjotU0FKQS1DYXNjYWRpYSBDb2RlLWxpZ2h0LW5vcm1hbC1ub3JtYWwtKi0xNy0qLSot Ki1tLTAtaXNvMTA2NDYtMSAoI3g5RjYpCgpDaGFyYWN0ZXIgY29kZSBwcm9wZXJ0aWVzOiBj dXN0b21pemUgd2hhdCB0byBzaG93CiAgbmFtZTogVkVSVElDQUwgTElORQogIG9sZC1uYW1l OiBWRVJUSUNBTCBCQVIKICBnZW5lcmFsLWNhdGVnb3J5OiBTbSAoU3ltYm9sLCBNYXRoKQog IGRlY29tcG9zaXRpb246ICgxMjQpICgnfCcpCgpUaGVyZSBhcmUgdGV4dCBwcm9wZXJ0aWVz IGhlcmU6CiAgZmFjZSAgICAgICAgICAgICAgICAgKGZhY2UxMiBmb250LWxvY2stc3RyaW5n LWZhY2UpCiAgZm9udGlmaWVkICAgICAgICAgICAgdAoKNDoKCiAgICAgICAgICAgICBwb3Np dGlvbjogMTI3NyBvZiAzNTI3ICgzNiUpLCBjb2x1bW46IDM0CiAgICAgICAgICAgIGNoYXJh Y3RlcjogPiAoZGlzcGxheWVkIGFzID4pIChjb2RlcG9pbnQgNjIsICNvNzYsICN4M2UpCiAg ICAgICAgICAgICAgY2hhcnNldDogYXNjaWkgKEFTQ0lJIChJU082NDYgSVJWKSkKY29kZSBw b2ludCBpbiBjaGFyc2V0OiAweDNFCiAgICAgICAgICAgICAgIHNjcmlwdDogbGF0aW4KICAg ICAgICAgICAgICAgc3ludGF4OiBfIAl3aGljaCBtZWFuczogc3ltYm9sCiAgICAgICAgICAg ICBjYXRlZ29yeTogLjpCYXNlLCBhOkFTQ0lJLCBsOkxhdGluLCByOlJvbWFuCiAgICAgICAg ICAgICB0byBpbnB1dDogdHlwZSAiQy14IDggUkVUIDNlIiBvciAiQy14IDggUkVUIEdSRUFU RVItVEhBTiBTSUdOIgogICAgICAgICAgYnVmZmVyIGNvZGU6ICN4M0UKICAgICAgICAgICAg ZmlsZSBjb2RlOiAjeDNFIChlbmNvZGVkIGJ5IGNvZGluZyBzeXN0ZW0gdXRmLTgtdW5peCkK ICAgICAgICAgICAgICBkaXNwbGF5OiBieSB0aGlzIGZvbnQgKGdseXBoIGNvZGUpOgogICAg ZnRjcmhiOi1TQUpBLUNhc2NhZGlhIENvZGUtbGlnaHQtbm9ybWFsLW5vcm1hbC0qLTE3LSot Ki0qLW0tMC1pc28xMDY0Ni0xICgjeDgxMCkKCkNoYXJhY3RlciBjb2RlIHByb3BlcnRpZXM6 IGN1c3RvbWl6ZSB3aGF0IHRvIHNob3cKICBuYW1lOiBHUkVBVEVSLVRIQU4gU0lHTgogIGdl bmVyYWwtY2F0ZWdvcnk6IFNtIChTeW1ib2wsIE1hdGgpCiAgZGVjb21wb3NpdGlvbjogKDYy KSAoJz4nKQoKVGhlcmUgYXJlIHRleHQgcHJvcGVydGllcyBoZXJlOgogIGZhY2UgICAgICAg ICAgICAgICAgIChmYWNlMTIgZm9udC1sb2NrLXN0cmluZy1mYWNlKQogIGZvbnRpZmllZCAg ICAgICAgICAgIHQKCjU6CgogICAgICAgICAgICAgcG9zaXRpb246IDEyNzggb2YgMzUyNyAo MzYlKSwgY29sdW1uOiAzNQogICAgICAgICAgICBjaGFyYWN0ZXI6ICIgKGRpc3BsYXllZCBh cyAiKSAoY29kZXBvaW50IDM0LCAjbzQyLCAjeDIyKQogICAgICAgICAgICAgIGNoYXJzZXQ6 IGFzY2lpIChBU0NJSSAoSVNPNjQ2IElSVikpCmNvZGUgcG9pbnQgaW4gY2hhcnNldDogMHgy MgogICAgICAgICAgICAgICBzY3JpcHQ6IGxhdGluCiAgICAgICAgICAgICAgIHN5bnRheDog IiAJd2hpY2ggbWVhbnM6IHN0cmluZwogICAgICAgICAgICAgY2F0ZWdvcnk6IC46QmFzZSwg YTpBU0NJSSwgbDpMYXRpbiwgcjpSb21hbgogICAgICAgICAgICAgdG8gaW5wdXQ6IHR5cGUg IkMteCA4IFJFVCAyMiIgb3IgIkMteCA4IFJFVCBRVU9UQVRJT04gTUFSSyIKICAgICAgICAg IGJ1ZmZlciBjb2RlOiAjeDIyCiAgICAgICAgICAgIGZpbGUgY29kZTogI3gyMiAoZW5jb2Rl ZCBieSBjb2Rpbmcgc3lzdGVtIHV0Zi04LXVuaXgpCiAgICAgICAgICAgICAgZGlzcGxheTog YnkgdGhpcyBmb250IChnbHlwaCBjb2RlKToKICAgIGZ0Y3JoYjotU0FKQS1DYXNjYWRpYSBD b2RlLWxpZ2h0LW5vcm1hbC1ub3JtYWwtKi0xNy0qLSotKi1tLTAtaXNvMTA2NDYtMSAoI3g3 NzkpCgpDaGFyYWN0ZXIgY29kZSBwcm9wZXJ0aWVzOiBjdXN0b21pemUgd2hhdCB0byBzaG93 CiAgbmFtZTogUVVPVEFUSU9OIE1BUksKICBnZW5lcmFsLWNhdGVnb3J5OiBQbyAoUHVuY3R1 YXRpb24sIE90aGVyKQogIGRlY29tcG9zaXRpb246ICgzNCkgKCciJykKClRoZXJlIGFyZSB0 ZXh0IHByb3BlcnRpZXMgaGVyZToKICBmYWNlICAgICAgICAgICAgICAgICAoZmFjZTEyIGZv bnQtbG9jay1zdHJpbmctZmFjZSkKICBmb250aWZpZWQgICAgICAgICAgICB0Cg== --------------4e6GmvPQIFC3ggJhKC4cMBaa Content-Type: image/png; name="0.png" Content-Disposition: attachment; filename="0.png" Content-Transfer-Encoding: base64 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 AABJRU5ErkJggg== --------------4e6GmvPQIFC3ggJhKC4cMBaa Content-Type: image/png; name="1.png" Content-Disposition: attachment; filename="1.png" Content-Transfer-Encoding: base64 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 RK5CYII= --------------4e6GmvPQIFC3ggJhKC4cMBaa Content-Type: image/png; name="2.png" Content-Disposition: attachment; filename="2.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAGAAAAAiCAIAAAAvaksIAAAE6UlEQVRoge2Za0wUVxTH77l3 ZnaXhzZWHpEi8rB15ZEC24JQoUgfRIkETE2LWNPysNrwoSr9ZNSY0JjWpEn7xYhpm9qkNUJQ SNgYKdKWgDyEurxZXgLKm8qblZ25/bARyMLuIjvDLom/Tzt3zr3nnP/ec+fOHaCUoo3DgKY9 P/0bhFBG2VXCMssNWtXlJReuOWx95cNLX7oH+lrvETaWQOsPtnUA9s4Ks1REKKXx8fGrNMYY FxYWShrPGpC2xARBIITIZDKGsfBP6HQ6Sqler5cumDVCxWZuYroxv7SvpplSyvM8Qig3N3e5 2eMHLdq7lbNPpwyXSUlJhBDRg7Ee8deg6eH/1Fk/am4UmzfT3Cj++9vfJvtHRA9AXCRZpKlA kcXKFQQkUITs/Rn68ilmAWOBZsYm7mX/kpeaLczrEUK6iem81Ox6S/UiBdU5twsyL4+09Yg7 7MzIeMnFn/IzLhkSnB2byEvNbsgtMWVv/HDhdfP9dW1P6lopAsMS3lVau/V1T3GjXA0D9R1t RRVa9X2PUOWhn89ihhBOhE2JXvfsSW3LcMsjCoAQEnihq7TWVbnDlL2xS8AAGBBCmABCyLCd B2yzSqSU9tU0/RCY7BkRpEzYuyMi0HmbizUDLkkQLyZITCa4TCAABAAYDKJglkEIYYZYE5M1 bN8T6OT+avOtv3rKNb2VDa7KHW4BvmFfJG72dFvbgAAYASAMAIAQwixBCGFiMsFlygEAAH6+ ryOMhf5S4+S+Zf/lzFPam6HHDnAOiqGmLs0fd6/FnPz14JmZsXF+/oU3loABABOjBE3PgJVL jLDPOwAABmx6Bq4PABBz7vOIU59UXckfaenurWocauy6sifd9/23/WJVr6mULzChMAAGvOoE VygxAMAsuzggQ2w4g5Yic1LsPZOsm5geau7uKa+vzrmtVVe036l0eWO7+5t+secyCGc5TsMa QpYmSMwlaKwcYIxZhlVwCy0Mx+GVTl5shWyTo2eYf+RXH2dqrr91PJGRcyNtPZrfi7/ffbjg 5HeT/aOCnjfTHTAmDGHkCwIBkbErHi0ZML7BOshCP4vXTUwvtOw7n+oW4GNlVlJAGCb665So rCN119V9VU1dpbVtd+63F1er0hOiso6Y6sU5ylVpB+dn5gyXmMGx59PMHK0ZC0Q41js6eGmL f9K7VuciIQAQ8un+nR+EDzZ0jvcOCjzfee+BGYEIx/rEhC52x9h8gnZUO2uAn9fzuvk/L+Q0 FfxDeQEIZhSykKMHRHSxUQWaGXnaXfawraiio6SGUsoq5L7vqdwD/QI/2ifb5Ciio40n0HjP QNXVW0PN3YMNnYKeB4JDkuN2xoVvC9klyruIERtGIP6Zfm5qKvfoxeHWR4giwMA5OQSnxL1z OllSvxtAoFFtb/9DbWtRRXfZv5QXOEeFZ3iAi9Ir7Hgi6yCX2ru9C9RT0TBY3zHa8RhRijlW lZbgEx3suttb5uywPgHYu0BTA6PTBHNOCv9DMVFZKaycW0UnMbFfgQCAsIxXZJCHShl2IslW YdivQGEnkoIOx7oGeMs3O9swDPsVyGWXl61DQC8P7S0jiUCAseG8zqxnw6GlJTNbI36JbfHx OK29ubRldnZ2cnLSyCzy7DHDD8Mte/zojNA6fZtfpTEhxA5lknaRBgC1Wr16Y0mDWRv/A211 m9GithKIAAAAAElFTkSuQmCC --------------4e6GmvPQIFC3ggJhKC4cMBaa Content-Type: image/png; name="3.png" Content-Disposition: attachment; filename="3.png" Content-Transfer-Encoding: base64 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 --------------4e6GmvPQIFC3ggJhKC4cMBaa Content-Type: image/png; name="4.png" Content-Disposition: attachment; filename="4.png" Content-Transfer-Encoding: base64 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 TkSuQmCC --------------4e6GmvPQIFC3ggJhKC4cMBaa Content-Type: image/png; name="5.png" Content-Disposition: attachment; filename="5.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAGMAAAAhCAIAAABCyYKlAAAFeUlEQVRoge2a21MTVxzHz+/s bkIgBAK5rkCSRkMCJiOIdYTexk5nOnamOMp0fHBaZ/rUl/4vZfrOgw+21D4wdfpQWmuppmJL uRhDuIRNVs0VTFQgl012+xCKNIlhwQXi0M9b9vzO2d/3u7+zOScnIAgC+h8RkAedwH7A8/y1 a9dEBhMEcenSpdLrcBhqiuO4zs5OkiQBoHJkLpejKMrj8ZQ2Se9ULsMlmMdylVJFayqEPQ8v c6mMitaSNTJpEyglm83K5fLLly87HI7KkVevXmUYJp1OlzZJP/tSiWfuweHW08e7PztXIWxx 9M8nzOOez/sbWrSS51CWgYGB/v7+yjHj4+MMw5RtwpInxK2nF34aj3r8lcOiHn/w9nR2dU3y BPYI6Z1CCCExE1oQRIVVDcVOcakMMzblHRkT8jxCKJfJekfGop6l/c/s6aNYbDaQz3LSDsut p5nfJmd/uF0QyKUy3pGxmLf8jNtKsVOZ5+v3h39xDw7zPI8QyqWz7sHh4J1padMVQ9Tjd3/1 7cTQjahnic/lpfrmyTxbn/lm9O7X3xUEcmtp9+Bw0D2zbcfiN7rA86vRlWQgXPhCBYyTgXDq 6aokWe6IVGJ1cfReeHI+NDl/pMeuc1jUZqNS34RJ4lWG5fn888hyMhgBjBFCCCAZCKefbv+6 LHYKAAAAAQICI4QIikQIYWJvXmci0NhNgiA8+P6Wv/EvncOi67QYnFa1hS4ktgsA8IZADAgh giJECizjFALABFGoKbwx0Cs9xl0DAKY+V9sZZ8zLhP72sX/cD/w+pW1vM3bZTH2uJmsLJolt F5PFY2JAgKFIoIg6LXkyGADDZk+MMYIDcwohVKOqMzitBqfV1Odi3ffDU/PxOXZl8ebjibmW Hru2w9JoMtRpGsWXGGAADMTOBZaffS9uDIAJfICzb5OGFt3xgbOmt1xxHxv3BWJexnfjztKt vzXtJn2HRe+yNr1xRFR9AQAA3ioQixJY4hTGmCAI+YsdBkFRmKyKjTRgUNFapb6Z7ratxRJR z1Jocu7h+IPg7WmNrdV4wmbqc6nNRkxV2t8BxkBgUk5tXsEUKUZgcQQhI+mT9votWzbr2R61 xbhbddKDCaxorFc01jcfa23rdT686wlNzsd9geXhnyPTC8Yum+3DM0p908u6kzKqpcfRZKEL HwFj6/un1GbDtvctdoqskXWcfyefebHee/OLC0qd+hWk7RUAUG9o7jj/bluvKz4bWBi9N/+j m73rUZvpSk4pZJ0X3stzuY1BCHxanMBipzBBqM3/qSCdw7xbLXuOIAhCns+urifZyGr0iYAQ VaugFPIKXTBBqP8tqILdIgVWxQtoF/D5/FoskWSjcV8wMrMQn2NJucz+UR/d3a61m/bijq+f U3kulwyEIx5/3BuIzwWzaymVUdN+rlfXadHaTEq9emPxLTWvjVOCIPC5/MriI9Y9E55aWJ5n CRllcB2lu9v1HRalsbmmQbnTVeiOeA2cymW4tXgiGYzEZgOhCd8TJiRXKlpOOeiu9rZeV72x eX/SqGqnBIQSTGh2ZCzqZVbm2exaqqFF5/j4bZ3DrLWblIbmPS2iIqraKSQI/psT/l8nAGO6 y3bkpF3vtCr1TTX1dbDv24bqdQow1Goa5Kpard1sPGFr6z2uorX7WURFVK9Tagvd/ek5ncOs sZsrH/PsD9XrlL7TojnWWqM6gIlWlup1SlanQHUHncQW9uZxifr1Q1xY1SB9TSnU9b1ffrLt ZuroB6f1zqO1mkbJE3gZHMdlMpnKMYVjiLIciv8lFE7bL168aLPZKkdev36dZdmyp+2Hwqlc LnflyhWRwRRFDQ0NlV4/FE4JguD3b3P6vwkAWK3W0oZ/AOdj8DPxKDV8AAAAAElFTkSuQmCC --------------4e6GmvPQIFC3ggJhKC4cMBaa-- From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 17:51:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii , Visuwesh Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173013780515680 (code B ref 73752); Mon, 28 Oct 2024 17:51:02 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 17:50:05 +0000 Received: from localhost ([127.0.0.1]:54641 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5TsR-00044i-0r for submit@debbugs.gnu.org; Mon, 28 Oct 2024 13:50:05 -0400 Received: from qs51p00im-qukt01080301.me.com ([17.57.155.20]:11025) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5RcM-0005t8-Pd for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 11:25:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730129077; bh=LuPgK4wx9X9OiTW/d+39riLllpDU4+ZqmblgXC7DyB4=; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; b=oE62/556H+jc2FFG+jL2b7krHBqjiOhJ0GSoBpJKndh1ZVSH3kjSuJ7jibfJrBr1A VLr4D8bXZmzHfrebqfn+Wy5S2LBw6bHfEVU1k9VafIgxwcmhQ9GIFtH9g0qQ6sl8OL KeslFnfHhNsPGUusrR02SzdhmN6xKSGnf6f/6g/aPJbi4y9ujLFJ8GBgXJUPcklXSm CxmHrtcCez5xTWrj51C2LHJuDn2aI4p2F09DmOCBf2iAGV4x9zCMvWRMlhJCfq1xdp FdNb3o8gyPUQF9H0au7rLEmWX7jGCl+6KUQLlqNMj9jCzriHDJgIrSteLRAtEx9yUX gm0HbGQXwHXLQ== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01080301.me.com (Postfix) with ESMTPSA id 21C295F00529; Mon, 28 Oct 2024 15:24:34 +0000 (UTC) Message-ID: <7f6a1b90-ae44-4761-92df-e3fe8a27d96d@xlk.me> Date: Mon, 28 Oct 2024 11:24:33 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86iktc6zp5.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-ORIG-GUID: qGnsWoFPKEpfLQsKmiehjrhcdXfWzCY5 X-Proofpoint-GUID: qGnsWoFPKEpfLQsKmiehjrhcdXfWzCY5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-28_04,2024-10-28_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 malwarescore=0 mlxscore=0 mlxlogscore=552 clxscore=1030 adultscore=0 bulkscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410280123 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Mon, 28 Oct 2024 13:49:59 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 10/28/24 10:59, Eli Zaretskii wrote: >> From: Visuwesh >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Mon, 28 Oct 2024 09:56:13 +0530 >> >> Real-life Lisp programs certainly do not change face font attributes so >> often but I believe the script does it so to reproduce the issue >> quickly. In a regular Emacs session, it is enough for the same text to >> be shown in different font sizes (as a consequence of using C-x C-+) and >> font weights to eventually exhibit this misalignment IME. > > You need to catch this situation in some reproducible recipe. Because > up front I don't understand how is this possible: we cache each > composition with its font object, which includes the font size (and > also slant, weight, etc.), so a different variant of the same font > ought to match only cache entries that use the exact same font. Or > maybe I don't understand well enough what > composition_gstring_put_cache does to compute the hash of a > glyph-string header (which is the hash key for a composition)? > >> I do not understand the technical details but the width of the glyph >> used to draw it is not the one that should be used for the underlying >> font (weight, size, etc. included) which leads to this misalignment. > > Which seems to indicate that we somehow use a different font's metric. > >> To make it more clear, let's say that =:= is shaped for a font X with a >> specific weight, size, etc. At a later point in time, the width of the >> glyph corresponding to X is used to draw =:= with font Y of same family. >> This leads to the observed misalignment AFAIU. > > But how can this happen? Without a reproducible recipe, which can be > reproduced without waiting for too long, it is very hard to > investigate this. Just my uninformed opinion. Considering, - the fact that it's hard to reproduce the problem (the script I submitted is the best way to trigger the problem to my knowledge since it reproduces on multiple people's emacs consistently), - the non-deterministic nature of this bug, - changing fonts rapidly seems to help triggering the bug, - my personal research bias, This sounds like a concurrency problem, such as some kind of race condition leading to cache being over-written or else. But I have zero idea on how emacs works internally, so I can be completely wrong. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 17:51:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173013780515686 (code B ref 73752); Mon, 28 Oct 2024 17:51:03 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 17:50:05 +0000 Received: from localhost ([127.0.0.1]:54643 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5TsT-00044r-61 for submit@debbugs.gnu.org; Mon, 28 Oct 2024 13:50:05 -0400 Received: from qs51p00im-qukt01080301.me.com ([17.57.155.20]:27939) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5TYD-00039E-AM for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 13:29:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730136507; bh=kGS+W6rkditHHOjhwS1Esz3DMVzOvGxaHKcVjGRhD4U=; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; b=ffsXans2aNi4sdYASmw/KdpW79S9V9rjD3QsxPF22goEyJuceq2kaZJPvTDblgAPw PQpBToquzc7hESdj+0K6fJ+6UP7okR/fVhL2QR38Jqb540SPSQCrbueqUHCN5sgtgw uHQ8stAt94lzXZgVXIZPUTBI6VYDSXa5A7XgXzEKbVdlcmaM9LRP7mBLJ4JqLdWQZD uGEZmNIv81eS7EgrHJrQD+CCOvNJGEYfJPVCpN44DpWusT4KsjXw1gfD+RtfojI0Us 6QCy1902QoXNj+cXAdlYiB+t6FrOZYT/QwolFyaQ3XZYY3wCjVd/XWE/M9PG7m3Q9U iHlFtr/95GgNg== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01080301.me.com (Postfix) with ESMTPSA id DC3595F00489; Mon, 28 Oct 2024 17:28:25 +0000 (UTC) Message-ID: Date: Mon, 28 Oct 2024 13:28:14 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> <86y12971jq.fsf@gnu.org> <86jzds719m.fsf@gnu.org> <1e871a38-a150-4198-a53a-831b9576df8b@xlk.me> <86h68w6zet.fsf@gnu.org> <0b859951-92ec-4125-be4e-5f0d2088e872@xlk.me> <86ed406t7s.fsf@gnu.org> Content-Language: en-US From: Yixuan Chen In-Reply-To: <86ed406t7s.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-GUID: _en76TFLJpKrXQSET28B2XTHZ2IBBaGb X-Proofpoint-ORIG-GUID: _en76TFLJpKrXQSET28B2XTHZ2IBBaGb X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-28_06,2024-10-28_02,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 mlxscore=0 malwarescore=0 spamscore=0 adultscore=0 suspectscore=0 bulkscore=0 clxscore=1030 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410280139 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Mon, 28 Oct 2024 13:49:59 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 10/28/24 13:19, Eli Zaretskii wrote: >> Date: Mon, 28 Oct 2024 11:20:29 -0400 >> Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org >> From: Yixuan Chen >> >>> Actually, how about showing what "C-u C-x =" says in each of the 6 >>> positions you show? And then show what "C-u C-x =" says in the same 6 >>> positions in the "good" display? >> >> See "bad.txt" for the output of the bad emacs display, and "good.txt" >> for the output of good emacs display. I also attached the block cursor >> screenshots for good emacs display. > > Thanks. It's basically the same, as far as Emacs thinks, but do you > have any idea why EOB is different between these two cases (3535 vs > 3527)? Between the two versions (after bad.txt before good.txt), I made this change to the script: line 51 is modified from (run-at-time nil 1 #'random-faces))) to ;; (run-at-time nil 1 #'random-faces) )) so that I can manually set the face to face12. That's why EOB of "good.txt" is slightly larger. > Also, Emacs thinks that the second | character is at the same buffer > position and the same columns as the previous one -- any idea why? I'm sorry, that's me being bad at mouse and copy-pasting. This is the correct output for the second | character in "bad.txt". position: 1275 of 3527 (36%), column: 32 character: | (displayed as |) (codepoint 124, #o174, #x7c) charset: ascii (ASCII (ISO646 IRV)) code point in charset: 0x7C script: latin syntax: _ which means: symbol category: .:Base, a:ASCII, l:Latin, r:Roman to input: type "C-x 8 RET 7c" or "C-x 8 RET VERTICAL LINE" buffer code: #x7C file code: #x7C (encoded by coding system utf-8-unix) display: by this font (glyph code): ftcrhb:-SAJA-Cascadia Code-light-normal-normal-*-17-*-*-*-m-0-iso10646-1 (#x9F6) Character code properties: customize what to show name: VERTICAL LINE old-name: VERTICAL BAR general-category: Sm (Symbol, Math) decomposition: (124) ('|') There are text properties here: face (face12 font-lock-string-face) fontified t It seems like I simply pasted the output for the first bar character twice. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Oct 2024 18:43:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173014092924839 (code B ref 73752); Mon, 28 Oct 2024 18:43:01 +0000 Received: (at 73752) by debbugs.gnu.org; 28 Oct 2024 18:42:09 +0000 Received: from localhost ([127.0.0.1]:54707 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5Ugr-0006SY-HG for submit@debbugs.gnu.org; Mon, 28 Oct 2024 14:42:09 -0400 Received: from eggs.gnu.org ([209.51.188.92]:48472) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5Ugo-0006SK-V3 for 73752@debbugs.gnu.org; Mon, 28 Oct 2024 14:42:08 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5Ug8-0005iq-Pg; Mon, 28 Oct 2024 14:41:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=hjF5glkyYyoSM0wAsTN2Ck+534xlLJWDK6GjlrVQjU8=; b=P0l4X9xRUw6K pziHjXtCujZRnpc34jN25LJe3+visi18v4mEIMSpn+E+IKsuIPK04IwMFY7qhNBhY/W4iI7YgsTUS yxSF4Kqakm/w+E6Xd3U8APuUqXuHNYQED2fjNFdibe92QAvPciDVFSRaU8G/ajpPrpUCVpwRLaUXX aEljGIFhBQF925L/8Mm8UvZouUgtBD/0FY3fOTcGhk+1OeTYET2VrjLYSrdZ1LpU4htHsTx+cd4N6 ZGkTDIeHzhQsCB28ezZfXHCq3tsVNo2DmGEqEtI01WkJc+OhytuMBmUf7Iay+EJzRINzhTxSONVKc l0rAFWNEXiPtt43C2FxbJg==; Date: Mon, 28 Oct 2024 20:41:01 +0200 Message-Id: <86a5eo6pfm.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Yixuan Chen on Mon, 28 Oct 2024 13:28:14 -0400) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <6566317e-03bb-4856-9cc8-5e90c2875e44@xlk.me> <86cyjl8mqs.fsf@gnu.org> <86bjz58ik7.fsf@gnu.org> <04c3e9c5-0e18-4c35-8e5d-893c17690e5f@xlk.me> <86y12971jq.fsf@gnu.org> <86jzds719m.fsf@gnu.org> <1e871a38-a150-4198-a53a-831b9576df8b@xlk.me> <86h68w6zet.fsf@gnu.org> <0b859951-92ec-4125-be4e-5f0d2088e872@xlk.me> <86ed406t7s.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Mon, 28 Oct 2024 13:28:14 -0400 > Cc: visuweshm@gmail.com, luangruo@yahoo.com, 73752@debbugs.gnu.org > From: Yixuan Chen > > > Thanks. It's basically the same, as far as Emacs thinks, but do you > > have any idea why EOB is different between these two cases (3535 vs > > 3527)? > > Between the two versions (after bad.txt before good.txt), I made this > change to the script: line 51 is modified from > > (run-at-time nil 1 #'random-faces))) > to > ;; (run-at-time nil 1 #'random-faces) > )) > > so that I can manually set the face to face12. That's why EOB of > "good.txt" is slightly larger. > > > Also, Emacs thinks that the second | character is at the same buffer > > position and the same columns as the previous one -- any idea why? > > I'm sorry, that's me being bad at mouse and copy-pasting. This is the > correct output for the second | character in "bad.txt". OK, so Emacs really thinks the two buffers are identical, faces, fonts, and all the rest. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Oct 2024 11:01:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17301996591159 (code B ref 73752); Tue, 29 Oct 2024 11:01:01 +0000 Received: (at 73752) by debbugs.gnu.org; 29 Oct 2024 11:00:59 +0000 Received: from localhost ([127.0.0.1]:56196 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5jy6-0000Id-RR for submit@debbugs.gnu.org; Tue, 29 Oct 2024 07:00:59 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:43496) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5jy4-0000IV-4D for 73752@debbugs.gnu.org; Tue, 29 Oct 2024 07:00:56 -0400 Received: by mail-pf1-f195.google.com with SMTP id d2e1a72fcca58-718e9c8bd83so4487487b3a.1 for <73752@debbugs.gnu.org>; Tue, 29 Oct 2024 04:00:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730199595; x=1730804395; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:date:references :message-id:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=h3RRFasZSr5tFaE3OOfkrFk9tKUJ5hUeLXN7HHVsHoc=; b=GtcxJKbpc9BGC1g2hDHWjXtLX8wl1UruyO+pu4pQ1MpzKynWOKhcD8cthy/Wnnu9hL CD7zh8S11T7ySx05jTNyRyBWUoJ8Y38iY2Rvt2U5MpjWMn3fRjXPDs6UJsOxGXiQ7tEi Op/k9hBOKE+KtRgMKO0cgRRr6MziAGkBvLvEYFrtlioLndxwYTUi0HWEhuOvHhRKXHD+ v3J4CkUOxOBHLyObj94mwurb9a5SE1GFm9/NaeZz3TXbrQXhyZ9LRjiHrN/fn5qRqAAS +D9izgemOlZr6n9NJfeFjR9cGblWkfw4vrgTGuX/jCkRpiatgPcaaZqQwt1JJsUpWxUo s4lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730199595; x=1730804395; h=content-transfer-encoding:mime-version:user-agent:date:references :message-id:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=h3RRFasZSr5tFaE3OOfkrFk9tKUJ5hUeLXN7HHVsHoc=; b=nxnLvKw38Vz110ztv0oqPnAI2eLbJnOk5B3YLw3+/eiPLAhK0JTAmqrHOovcQVIzR7 Z95ElcTtIabgAMaFlWNFFLDf3vfaQ7sgoiOSsCIlSzokM3UOEULdwMn/s0W9Xzj7qnJi lMb5XqzQwB+X+k80aOxNIKoFKsgIrUHjTFGSNTHx8/Vii590fxc8/zkTpRqyhAkg5IJX rsAVzsmUCZazUmfcsZsqIXI50US2f97ujuXDot+EDyWm5MaPI9/SdV08Sx7vbF4Gmj4u hDdXI8oqnpqxlBGDL6x5vbMZf9P84vY6i2cuskGUr24oEgBtAIJkOdlOCHJjWcrXcc2t rTSA== X-Forwarded-Encrypted: i=1; AJvYcCUAK0v6mvNp4V8XzJbfXgF97DrHwWmPYHVikVu6CjrT/bYjtm9v9EunWVY9ihIjNI3+qzoMrQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YwPv9AfclYItbgNp31MvIKMZv4/8KCo8qhctKhrSaZQDZSG2lON DnYwJM6ODfaWHjuS9OQWD0Fe5kKthIZq/GJEbhj6aQeo/RUeJD5C X-Google-Smtp-Source: AGHT+IHVcN160e9L8Agm8a6UHf/KInsrAzbgdfz4kyQGrw0FoOwmQIm6YyW+EBbSW6w0NZu1U4pj2g== X-Received: by 2002:a05:6a21:1690:b0:1d9:761:8ad8 with SMTP id adf61e73a8af0-1d9e1fc3346mr2943773637.21.1730199595120; Tue, 29 Oct 2024 03:59:55 -0700 (PDT) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72057a1ef95sm7318985b3a.157.2024.10.29.03.59.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Oct 2024 03:59:54 -0700 (PDT) From: Visuwesh In-Reply-To: <86frog6thm.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 28 Oct 2024 19:13:25 +0200") Message-ID: <87o73318ql.fsf@gmail.com> References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> <87wmhs19rh.fsf@gmail.com> <86frog6thm.fsf@gnu.org> Date: Tue, 29 Oct 2024 16:29:48 +0530 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 1.0 (+) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=A4=E0=AE=BF=E0=AE=99=E0=AF=8D=E0=AE=95=E0=AE=B3=E0=AF=8D =E0=AE=85= =E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D 28, 2024] E= li Zaretskii wrote: >> From: Visuwesh >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Mon, 28 Oct 2024 21:48:26 +0530 >>=20 >> > You need to catch this situation in some reproducible recipe. Because >> > up front I don't understand how is this possible: we cache each >> > composition with its font object, which includes the font size (and >> > also slant, weight, etc.), so a different variant of the same font >> > ought to match only cache entries that use the exact same font. Or >> > maybe I don't understand well enough what >> > composition_gstring_put_cache does to compute the hash of a >> > glyph-string header (which is the hash key for a composition)? >>=20 >> Is this hash dependent on the font driver? > > No. Only the font used for the composed characters is recorded, not > the font backend which opened it. But fonts are managed by the font > backend, so maybe there's some leakage by that way. OK, thanks. I wonder if we could compare the value returned by font-info if something has gone wrong with the font object used to compute the hash for the glyph?=20=20 >> Also, do we clear the composition cache when all the GUI frames of an >> Emacs daemon are deleted? > > No, we don't, not directly. But we clear the face cache, and that > removes the data of the fonts referred by the face cache from the > composition cache. So it's quite possible the composition cache is > left empty when all the frames are deleted. Thanks that would explain it but then... >> The misalignment goes away when I close all >> the GUI frames of the daemon, and open a fresh new GUI frame. > > Next time this happens, try one of these two: > > M-: (clear-face-cache t) RET > M-: (clear-composition-cache) RET > > and see if any of them corrects the problematic display. neither of them helped in the past. I tried to if they help again but failed to reproduce the problem today. > Btw, how frequently do you use different frames,=20 Quite often, I would say. I usually have two frames but it can go upwards of 5 to 6 if I have a mouse attached to my laptop. > and how likely are you to have different definitions for the same > faces on different frames in the same Emacs session at the same time? I don't quite understand this question. Are you asking if I have any "frame-specific" face attributes i.e., non-nil FRAME argument in set-face-attribute? If so, no. >> > But how can this happen? Without a reproducible recipe, which can be >> > reproduced without waiting for too long, it is very hard to >> > investigate this. >>=20 >> I have no idea. This is not easy to reproduce and seems to be heavily >> dependent on the configuration. Although I use a Cairo build (with >> Lucid toolkit), the misalignment is not as severe as OP says and it >> takes a lot more time to reproduce as well. I could never come up with >> a reproducer that takes less time. > > The only way I see to investigate this is to wait for this to happen, > then attach GDB to Emacs and look at the problematic compositions in > the cache, comparing them to the corresponding compositions in a fresh > Emacs session. I can tell what to look for with GDB, if that helps. That would help. But given how hard it is to reproduce this issue on my end, I don't know when I can get back... > If we see that two compositions that should be identical differ by > their font objects, say, we'd at least have a lead and a starting > point for further debugging. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Oct 2024 13:05:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173020707014766 (code B ref 73752); Tue, 29 Oct 2024 13:05:01 +0000 Received: (at 73752) by debbugs.gnu.org; 29 Oct 2024 13:04:30 +0000 Received: from localhost ([127.0.0.1]:56380 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5ltd-0003q5-C2 for submit@debbugs.gnu.org; Tue, 29 Oct 2024 09:04:29 -0400 Received: from eggs.gnu.org ([209.51.188.92]:41124) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5ltb-0003py-A2 for 73752@debbugs.gnu.org; Tue, 29 Oct 2024 09:04:28 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5ltU-0004tE-8w; Tue, 29 Oct 2024 09:04:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=r4uIP1kwHhIzYL3sZf34qCrJv/VqBsKtKkxFC0wGHlE=; b=f2Bx5K3kfkph /z0/eF6/yS9m3A1Sq7mdn28b2A/O7+d9yAAfqlb4Z5A4ufq1f9M6X14QgnTbua6Vcp4QaTP+tq9TQ S7l8tfIQjISgmNjgllLTMjowC4WNUCkC8vrpVg3VCy+JsvIdhktqixITct5XrCgmba5IAkpR1P3qs 9nYGtilkr77YtT/qexCnsSaC8AKfHODgrwKEgKwvRQQC7w3YnCMfYoU4grsT64sDKxZYpsVU62o3n SPpNvUh/cMiOPOydW2TTCacnyynZrqPnrysLSK4Lj2IINxQAMdO01ZJ0IduRfguGJAd41vdO6yY9x N7Qh5BfE5DLFXKjziIfbcg==; Date: Tue, 29 Oct 2024 15:04:16 +0200 Message-Id: <86wmhr5acv.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87o73318ql.fsf@gmail.com> (message from Visuwesh on Tue, 29 Oct 2024 16:29:48 +0530) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> <87wmhs19rh.fsf@gmail.com> <86frog6thm.fsf@gnu.org> <87o73318ql.fsf@gmail.com> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me > Date: Tue, 29 Oct 2024 16:29:48 +0530 > > >> Is this hash dependent on the font driver? > > > > No. Only the font used for the composed characters is recorded, not > > the font backend which opened it. But fonts are managed by the font > > backend, so maybe there's some leakage by that way. > > OK, thanks. I wonder if we could compare the value returned by > font-info if something has gone wrong with the font object used to > compute the hash for the glyph? That would not be the first thing I'd look at. According to the screenshots, it is more likely that a wrong cache entry is used for a composition, which uses the "wrong" font variant. IOW, the font used itself is fine, it just is not the font that's supposed to be used with the composed characters in that place. So I would first look at the font object stored in the header of the cached composition. > > Btw, how frequently do you use different frames, > > Quite often, I would say. I usually have two frames but it can go > upwards of 5 to 6 if I have a mouse attached to my laptop. > > > and how likely are you to have different definitions for the same > > faces on different frames in the same Emacs session at the same time? > > I don't quite understand this question. Are you asking if I have any > "frame-specific" face attributes i.e., non-nil FRAME argument in > set-face-attribute? Yes. > If so, no. OK, so one more theory eats dust (we don't record the frame in the composition cache). > > The only way I see to investigate this is to wait for this to happen, > > then attach GDB to Emacs and look at the problematic compositions in > > the cache, comparing them to the corresponding compositions in a fresh > > Emacs session. I can tell what to look for with GDB, if that helps. > > That would help. But given how hard it is to reproduce this issue on my > end, I don't know when I can get back... It would not be useful for me to give instructions before you actually hit the problem (because the code will change until then), so if you want to try this, get back to me when you do reproduce the problem (and then attach GDB and leave the Emacs session under GDB for any investigations I'd ask you to do). Thanks. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Oct 2024 13:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173021014022057 (code B ref 73752); Tue, 29 Oct 2024 13:56:02 +0000 Received: (at 73752) by debbugs.gnu.org; 29 Oct 2024 13:55:40 +0000 Received: from localhost ([127.0.0.1]:56483 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5mh9-0005jZ-1q for submit@debbugs.gnu.org; Tue, 29 Oct 2024 09:55:39 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:55628) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5mh7-0005j6-Ak for 73752@debbugs.gnu.org; Tue, 29 Oct 2024 09:55:38 -0400 Received: by mail-pg1-f194.google.com with SMTP id 41be03b00d2f7-7ea68af2f62so4344741a12.3 for <73752@debbugs.gnu.org>; Tue, 29 Oct 2024 06:55:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730210071; x=1730814871; darn=debbugs.gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=7lFJK2MdtblT+Qc+EqwfhMz3F1nrzFUR0K18ebnBbvo=; b=K2BKRO2XsrQVS/2NhnCrS+8Y2/Xy0LMi4pEZ9yudCOUh9chkgm4GMQkFMOyjkWao0A pRcKr62b0j2jFGho92vqgyEbcP65K4ZKUjp5KpvE9OYcrNJhBN1ogfJDP1tSLeymM9lA kWgaf+99wIwsEbWcIaSozU3D58F4swiW9f5Js8EuKPFzGmRWPv4e9mFdhr9HcaLytCpd udbMAsCrKgKrTDQsoirFg2OxiSIFWDfv8u2Gmoj7Fkr2KF4TTmzflI4/v6sB5kQktG0z K5G+bZt2254dvWoFM94v3b3a7D75zZ1jRqcpllGrwntFuAulhXSoomWNAoI/pU0emM/3 SpKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730210071; x=1730814871; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=7lFJK2MdtblT+Qc+EqwfhMz3F1nrzFUR0K18ebnBbvo=; b=EWdJ8qXo20Wt59foxNe7hiVw1rnbZQeeX71QhHCeVm3xVUYVcMpnaXmdfsR3/d+LfI vB1L87/4dH285iDpcNSxL1ApTUWMyYOmSfkO7inUpnDb0KOC/WLeTxw+LS0ltB9Khkul W9uxXtBnExIclPmp2G0uB8TTf1Gjt2OHAXeadv32DWB/DgSBqA+YHqcpK/c6RvBN8JGe zCroTkchvUVRccI2A1m5RfUpd2OO/pbhl1F0Fcowg+Wo2HLCN6chOJ6gh4tZzHCoV3Le YMXSihskzzNPKTPgPhqkVlsbYPzplAZqcRpcJMu3Sy+EDe4VhWPXQTubEurBoWGV71DC bF5Q== X-Forwarded-Encrypted: i=1; AJvYcCWljzAtijlfTo0PduHlQcYGJBuxMIgsBhX2UshR+qQfCi2boFRP1oVzbSgkd/tIXq7LCnpPZQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YwuF+q8+2IYJ9DGrrTMh2frNx6kZgr3K4WnrXfNnih6GKIIE4g4 3fTu51CpV3W2GhXKin0TBMazNimO0TfLs8BF/Yg/PJWIFNEaotKv X-Google-Smtp-Source: AGHT+IEQt4/2fV5LXFkLO8cN7uRCGHopFqdmdtwD2JLJrdu7DVgEgW6qKK101nhRqCKvea8h/68Qxw== X-Received: by 2002:a05:6a21:399:b0:1d8:b962:6087 with SMTP id adf61e73a8af0-1d9a83aaf44mr17047155637.10.1730210071265; Tue, 29 Oct 2024 06:54:31 -0700 (PDT) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72057931826sm7537824b3a.67.2024.10.29.06.54.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Oct 2024 06:54:30 -0700 (PDT) From: Visuwesh In-Reply-To: <86wmhr5acv.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 29 Oct 2024 15:04:16 +0200") References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> <87wmhs19rh.fsf@gmail.com> <86frog6thm.fsf@gnu.org> <87o73318ql.fsf@gmail.com> <86wmhr5acv.fsf@gnu.org> Date: Tue, 29 Oct 2024 19:24:26 +0530 Message-ID: <871pzz10bx.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 1.0 (+) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable [=E0=AE=9A=E0=AF=86=E0=AE=B5=E0=AF=8D=E0=AE=B5=E0=AE=BE=E0=AE=AF=E0=AF=8D = =E0=AE=85=E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D 29= , 2024] Eli Zaretskii wrote: >> From: Visuwesh >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Tue, 29 Oct 2024 16:29:48 +0530 >>=20 >> >> Is this hash dependent on the font driver? >> > >> > No. Only the font used for the composed characters is recorded, not >> > the font backend which opened it. But fonts are managed by the font >> > backend, so maybe there's some leakage by that way. >>=20 >> OK, thanks. I wonder if we could compare the value returned by >> font-info if something has gone wrong with the font object used to >> compute the hash for the glyph?=20=20 > > That would not be the first thing I'd look at. According to the > screenshots, it is more likely that a wrong cache entry is used for a > composition, which uses the "wrong" font variant. IOW, the font used > itself is fine, it just is not the font that's supposed to be used > with the composed characters in that place. > > So I would first look at the font object stored in the header of the > cached composition. > >> > Btw, how frequently do you use different frames,=20 >>=20 >> Quite often, I would say. I usually have two frames but it can go >> upwards of 5 to 6 if I have a mouse attached to my laptop. >>=20 >> > and how likely are you to have different definitions for the same >> > faces on different frames in the same Emacs session at the same time? >>=20 >> I don't quite understand this question. Are you asking if I have any >> "frame-specific" face attributes i.e., non-nil FRAME argument in >> set-face-attribute? > > Yes. > >> If so, no. > > OK, so one more theory eats dust (we don't record the frame in the > composition cache). > >> > The only way I see to investigate this is to wait for this to happen, >> > then attach GDB to Emacs and look at the problematic compositions in >> > the cache, comparing them to the corresponding compositions in a fresh >> > Emacs session. I can tell what to look for with GDB, if that helps. >>=20 >> That would help. But given how hard it is to reproduce this issue on my >> end, I don't know when I can get back... > > It would not be useful for me to give instructions before you actually > hit the problem (because the code will change until then), so if you > want to try this, get back to me when you do reproduce the problem > (and then attach GDB and leave the Emacs session under GDB for any > investigations I'd ask you to do). I seem to have run into the issue. The attached images "cascadia-code-bold-15-good" and "-bad.png" are the desired and misaligned composite text of "-->" rendered in Cascadia Code bold 15 font. The same text is composed fine with Cascadia Code bold 17. --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=cascadia-bold-15-good.png Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAADcAAAApEAYAAADBl23uAAACQ0lEQVR4nO3asaqycBjH8d95DdNC HFpzCFy6gLqCwE3voNnVC2jpNryAoCsQhCZXh3Bp1KWx0EUE7f8OEYeX80YUhT2d57M4pPDA9//P lL6KoiiKQghcoWmapmnXPmVt+dP2AOwxHI4oDkcUhyOKwxHF4YjicER9TLgsy7IsA+q6ruu67Wle j3y43W632+2A6XQ6nU6B+Xw+n8+B0+l0Op3anu51yIcbDofD4RAwTdM0TWC1Wq1WK8B1Xdd1257u hS6vvK4dqcjzPM9zISaTyWQyubzCE8LzPM/z2p7u+b5uvauUJEmSJOBwOBwOh/sXRlVVVVUB3W63 2+0+uryApmmapgHOYwOdTqfT6fw873g8Ho9HwLZt27aBNE3TNAUWi8VisQCWy+VyuXx8jrdxa8f5 vu/7/vcKvvfY6/V6vd7j1z/7GIZhGIbt7pZn+M+a/ZdhGIZhAJZlWZZ16+yfyrIsyxJQVVVV1fuv v7js3PPYgKIoiqJcPz9JkiRJgP1+v9/vgcFgMBgMgNFoNBqNHp/jbXzKPe4iCIIgCISQZVmWZSF0 Xdd1XYg4juM4bnu65/mYcJvNZrPZCHHe2d9f0VEURVHU9nTPRz7cdrvdbrdC9Pv9fr8vxPlH0Ofc y64h/xw3Ho/H4zHgOI7jOMB6vV6v18BsNpvNZm1P9zo3Hwf4rwvvifyO+604HFEcjigORxSHI4rD EcXhiOJwRHE4ojgcURyOKA5HFIcjisMRxeGI4nBEcTiiOBxRHI4oDkcUhyPqLzZoQ2AFsez5AAAA AElFTkSuQmCC --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=cascadia-bold-15-bad.png Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAADsAAAAoEAYAAAAQ917FAAACP0lEQVR4nO3asauqcBTA8ZM+Ck1J UJfQQehfsH+hzT+gwbnVP6DFf8PRodktEZpaHaSlsRYXodAxovOGR1y4vHu5t3jXPO98Fpc4nPj+ TKh6TdM0TYOoqqqqqsCIENpegP0bHJYoDksUhyWKwxLFYYnisERxWKI4LFGdD3s8Ho/HI8D1er1e r21v8zo6G3a/3+/3e4DpdDqdTgF83/d9H+B2u91ut7a3a19nw1qWZVkWwGQymUwmAKvVarVaASwW i8Vi0fZ2L+D+I0BX1XVd1zWi67qu6yL+eVeIQRAEQdD2du3p3cOKoiiKIsDpdDqdTt8/IIIgCIIA oGmapmmPz3nPNE3TNAGqqqqq6uPXnc/n8/kM4Hme53kAh8PhcDgALJfL5XIJEIZhGIbP79MZ97BR FEVR9Hbiv3sdjUaj0QgxjuM4jh+f8/6apmmaps/PybIsy7K276Of8+se2LZt27YBZrPZbDb77Cj8 naIoiqIAjMfj8Xj8+Jz3DMMwDOPr83a73W63AyjLsixLAF3XdV0HcBzHcZzn9+mMrj9j79br9Xq9 Ruz3+/1+/+0TJM/zPM/b3u7ndT7sZrPZbDaIkiRJkoQoy7Isy4jb7Xa73ba9XXs6G7YoiqIoEIfD 4XA4RBwMBoPB4P97ln6ks2Evl8vlckGcz+fz+RwxSZIkSdre6nX0+M9sNHX2myf2OQ5LFIclisMS xWGJ4rBEcViiOCxRHJYoDksUhyWKwxLFYYnisERxWKI4LFEcligOS9RvD66YFGVCkuoAAAAASUVO RK5CYII= --=-=-=-- From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Oct 2024 14:03:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173021052822982 (code B ref 73752); Tue, 29 Oct 2024 14:03:01 +0000 Received: (at 73752) by debbugs.gnu.org; 29 Oct 2024 14:02:08 +0000 Received: from localhost ([127.0.0.1]:56514 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5mnP-0005yc-Kw for submit@debbugs.gnu.org; Tue, 29 Oct 2024 10:02:08 -0400 Received: from mail-pl1-f195.google.com ([209.85.214.195]:48210) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5mnN-0005yU-0n for 73752@debbugs.gnu.org; Tue, 29 Oct 2024 10:02:06 -0400 Received: by mail-pl1-f195.google.com with SMTP id d9443c01a7336-20e576dbc42so55412395ad.0 for <73752@debbugs.gnu.org>; Tue, 29 Oct 2024 07:02:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730210464; x=1730815264; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Z42gg/Z8dOd6BStD9qgM47gU4942owpa9Tbn1EfudH8=; b=Smo60VlwylGuRk+QCKg2WaZuUBzDi/6pkjftEIMd23rVb+C0mViU0P2MFSdnwUyBfG BU511TcwNVZzeX3scQqFaWG506oD6oJg3/momi5+5LB6rLA5xPg+9ImIecsmyNmKF5ka ki66cZSiYupTqrVR+aurusVdydHE8g139h7UUjGsu2ieSrRRdiqxyssAQu+Um51kMw57 xdFIn9NsuHtZs/Tss6Mht4wDjL6ApnBHwTxhlCZLSUiR2L8xeI3HGzOVmsY5RmFWrKEF /5+r1yXL9WlmSmxzd78x9pgVNhj2vdyD2XuhGBOxFLZ7DC7G5Z7XekHEu31AgOrERB1m Qg4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730210464; x=1730815264; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Z42gg/Z8dOd6BStD9qgM47gU4942owpa9Tbn1EfudH8=; b=wueTj1l8nq+VNSBwOR12/djo7wJjU5qYaG+Pfsd0Y59vTQlg95eYZIHpxizeR5wr6A 2aglB+n93ciJwWmsvx51OF/WLf5j42gCJt7yTsmt2vQSfXl/nkziqkIym+7/zeKK/iI3 nMkTH0HLUkkgJQ4e7fqpQdyFjQpBa44RiQIHjhaMf6ROnA45vTmJt13wVijnyF7bg/i/ 8g39vdPTZ4jrBYZjX5j+ACA1RPq+Yc2pJkGRuRPFWW510R31CsGR5LN3Fryr1M+sG9QT wxhEX6zRZcPdr9LKBTYpZ4SCNt9xzVJGJMsxth4GLb0JIGzcga41vaXDMu4Nxcs5MKsS r6pA== X-Forwarded-Encrypted: i=1; AJvYcCWiWZhorsnNq4SOr/6nWx2oo6To0uBGhxmDL9cDWvDnxtJqiE5DdWM/Q9vuDT7R5GfyT52XLA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YybwpK06G+CJR2CWGhCdpOFR5CpECfa+ZuxZprkaJ4+j3eZagAb 2avu0zbdpSy0CP8gZO316O70ApVr03YPCEV0egWHS7/4ZJGj9vJ/ X-Google-Smtp-Source: AGHT+IFqlnORSbNRzisGv9Hb19wxcyrG8K0nr13lon7QO9qcB0IrFib46cz4Y8M5B39W7NklmSdX2g== X-Received: by 2002:a17:903:2444:b0:20b:c17f:9dad with SMTP id d9443c01a7336-210c6d1f698mr152739925ad.53.1730210464053; Tue, 29 Oct 2024 07:01:04 -0700 (PDT) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-210bc088f68sm66637615ad.307.2024.10.29.07.01.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Oct 2024 07:01:03 -0700 (PDT) From: Visuwesh In-Reply-To: <871pzz10bx.fsf@gmail.com> (Visuwesh's message of "Tue, 29 Oct 2024 19:24:26 +0530") References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> <87wmhs19rh.fsf@gmail.com> <86frog6thm.fsf@gnu.org> <87o73318ql.fsf@gmail.com> <86wmhr5acv.fsf@gnu.org> <871pzz10bx.fsf@gmail.com> Date: Tue, 29 Oct 2024 19:30:59 +0530 Message-ID: <87wmhrypno.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 1.0 (+) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=9A=E0=AF=86=E0=AE=B5=E0=AF=8D=E0=AE=B5=E0=AE=BE=E0=AE=AF=E0=AF=8D = =E0=AE=85=E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D 29= , 2024] Visuwesh wrote: Just to make myself clear, the "good" image is from a fresh emacs -Q session. I still have the "bad" one open. > [=E0=AE=9A=E0=AF=86=E0=AE=B5=E0=AF=8D=E0=AE=B5=E0=AE=BE=E0=AE=AF=E0=AF=8D= =E0=AE=85=E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D 2= 9, 2024] Eli Zaretskii wrote: > >>> From: Visuwesh >>> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >>> Date: Tue, 29 Oct 2024 16:29:48 +0530 >>>=20 >>> >> Is this hash dependent on the font driver? >>> > >>> > No. Only the font used for the composed characters is recorded, not >>> > the font backend which opened it. But fonts are managed by the font >>> > backend, so maybe there's some leakage by that way. >>>=20 >>> OK, thanks. I wonder if we could compare the value returned by >>> font-info if something has gone wrong with the font object used to >>> compute the hash for the glyph?=20=20 >> >> That would not be the first thing I'd look at. According to the >> screenshots, it is more likely that a wrong cache entry is used for a >> composition, which uses the "wrong" font variant. IOW, the font used >> itself is fine, it just is not the font that's supposed to be used >> with the composed characters in that place. >> >> So I would first look at the font object stored in the header of the >> cached composition. >> >>> > Btw, how frequently do you use different frames,=20 >>>=20 >>> Quite often, I would say. I usually have two frames but it can go >>> upwards of 5 to 6 if I have a mouse attached to my laptop. >>>=20 >>> > and how likely are you to have different definitions for the same >>> > faces on different frames in the same Emacs session at the same time? >>>=20 >>> I don't quite understand this question. Are you asking if I have any >>> "frame-specific" face attributes i.e., non-nil FRAME argument in >>> set-face-attribute? >> >> Yes. >> >>> If so, no. >> >> OK, so one more theory eats dust (we don't record the frame in the >> composition cache). >> >>> > The only way I see to investigate this is to wait for this to happen, >>> > then attach GDB to Emacs and look at the problematic compositions in >>> > the cache, comparing them to the corresponding compositions in a fresh >>> > Emacs session. I can tell what to look for with GDB, if that helps. >>>=20 >>> That would help. But given how hard it is to reproduce this issue on my >>> end, I don't know when I can get back... >> >> It would not be useful for me to give instructions before you actually >> hit the problem (because the code will change until then), so if you >> want to try this, get back to me when you do reproduce the problem >> (and then attach GDB and leave the Emacs session under GDB for any >> investigations I'd ask you to do). > > I seem to have run into the issue. The attached images > "cascadia-code-bold-15-good" and "-bad.png" are the desired and > misaligned composite text of "-->" rendered in Cascadia Code bold 15 > font. The same text is composed fine with Cascadia Code bold 17. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Oct 2024 15:39:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17302163192072 (code B ref 73752); Tue, 29 Oct 2024 15:39:02 +0000 Received: (at 73752) by debbugs.gnu.org; 29 Oct 2024 15:38:39 +0000 Received: from localhost ([127.0.0.1]:57014 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5oIo-0000XM-VM for submit@debbugs.gnu.org; Tue, 29 Oct 2024 11:38:39 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45778) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5oIm-0000XG-VJ for 73752@debbugs.gnu.org; Tue, 29 Oct 2024 11:38:38 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5oIg-0002on-04; Tue, 29 Oct 2024 11:38:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=3jHscBsEQeQsk76pSDVnVDIrxarYhPsUeaW3PKyU3SQ=; b=CiqEwjNzsEvJ 4Wf8nZK7ffoGHg2q6GTi3+mkqWzcqvvghLArrIUTsVtupjcHKXxP9P0bQ1S+rNWeN9oUnPt6JooLS DPZNI9tKZNyoO+V/1yVBdotuZRKUf+Fv5oouqg3qMQFBzifOfhbfln7nnnalYKXFY96QMvnnhOQSU yhOcbtAohEnYb99aKrVco8h9V1zSWTbV6vRLhHlMdtWXbVFngxhpLJUkpdq0bEog53bp8sZeIeq4l VhPPnM4u3QYU3g9HS9qK9KW05spJin1jYqZhyO0IB7Mh7SNxs2x6SLgblygfz+W76pchoA+ZibkDg HaShVdZ/T9dDvinPCcaO1g==; Date: Tue, 29 Oct 2024 17:38:07 +0200 Message-Id: <86jzdq6hsw.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <871pzz10bx.fsf@gmail.com> (message from Visuwesh on Tue, 29 Oct 2024 19:24:26 +0530) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> <87wmhs19rh.fsf@gmail.com> <86frog6thm.fsf@gnu.org> <87o73318ql.fsf@gmail.com> <86wmhr5acv.fsf@gnu.org> <871pzz10bx.fsf@gmail.com> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me > Date: Tue, 29 Oct 2024 19:24:26 +0530 > > I seem to have run into the issue. The attached images > "cascadia-code-bold-15-good" and "-bad.png" are the desired and > misaligned composite text of "-->" rendered in Cascadia Code bold 15 > font. The same text is composed fine with Cascadia Code bold 17. I'm not sure this is the same issue we are talking about, but here are the instructions anyway: . Move the cursor to where this ligature is displayed . Use "C-x =" to display the buffer position of the ligature . Attaching GDB to Emacs, then type these commands: (gdb) source /path/to/emacs/src/.gdbinit (gdb) thread 1 (gdb) break set_cursor_from_row (gdb) continue The breakpoint in set_cursor_from_row will break soon enough. The first time it breaks, just type "continue". Second time it breaks, type: (gdb) pgrow This will show you the entire screen line (a.k.a. "glyph row") where the cursor is displayed, which is also the screen line of the ligature. Here's how a similar line with ligatures looks here: (gdb) pgrow TEXT: 80 glyphs 0 0: CHAR[ ] pos=857 blev=0,btyp=L w=9 a+d=17+4 MB 1 9: CHAR[ ] pos=858 blev=0,btyp=L w=9 a+d=17+4 MB 2 18: CHAR[ ] pos=859 blev=0,btyp=L w=9 a+d=17+4 MB 3 27: CHAR[ ] pos=860 blev=0,btyp=L w=9 a+d=17+4 MB 4 36: CHAR[ ] pos=861 blev=0,btyp=L w=9 a+d=17+4 MB 5 45: CHAR[ ] pos=862 blev=0,btyp=L w=9 a+d=17+4 MB 6 54: CHAR[ ] pos=863 blev=0,btyp=L w=9 a+d=17+4 MB 7 63: CHAR[ ] pos=864 blev=0,btyp=L w=9 a+d=17+4 MB 8 72: CHAR[ ] pos=865 blev=0,btyp=L w=9 a+d=17+4 MB 9 81: CHAR[ ] pos=866 blev=0,btyp=L w=9 a+d=17+4 MB 10 90: CHAR[ ] pos=867 blev=0,btyp=L w=9 a+d=17+4 MB 11 99: CHAR[ ] pos=868 blev=0,btyp=L w=9 a+d=17+4 MB 12 108: CHAR[ ] pos=869 blev=0,btyp=L w=9 a+d=17+4 MB 13 117: CHAR[ ] pos=870 blev=0,btyp=L w=9 a+d=17+4 MB 14 126: CHAR[ ] pos=871 blev=0,btyp=L w=9 a+d=17+4 MB 15 135: CHAR[ ] pos=872 blev=0,btyp=L w=9 a+d=17+4 MB 16 144: CHAR[ ] pos=873 blev=0,btyp=L w=9 a+d=17+4 MB 17 153: CHAR[ ] pos=874 blev=0,btyp=L w=9 a+d=17+4 MB 18 162: CHAR[ ] pos=875 blev=0,btyp=L w=9 a+d=17+4 MB 19 171: CHAR[ ] pos=876 blev=0,btyp=L w=9 a+d=17+4 MB 20 180: CHAR[ ] pos=877 blev=0,btyp=L w=9 a+d=17+4 MB 21 189: CHAR[ ] pos=878 blev=0,btyp=L w=9 a+d=17+4 MB 22 198: CHAR[ ] pos=879 blev=0,btyp=L w=9 a+d=17+4 MB 23 207: CHAR[ ] pos=880 blev=0,btyp=L w=9 a+d=17+4 MB 24 216: CHAR[ ] pos=881 blev=0,btyp=L w=9 a+d=17+4 MB 25 225: CHAR[ ] pos=882 blev=0,btyp=L w=9 a+d=17+4 MB 26 234: CHAR[ ] pos=883 blev=0,btyp=L w=9 a+d=17+4 MB 27 243: CHAR[ ] pos=884 blev=0,btyp=L w=9 a+d=17+4 MB 28 252: CHAR[ ] pos=885 blev=0,btyp=L w=9 a+d=17+4 MB 29 261: CHAR[ ] pos=886 blev=0,btyp=L w=9 a+d=17+4 MB 30 270: CHAR["] pos=887 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 31 279: COMP[69 (0..0)] pos=888 w=9 a+d=17+4 face=24 MB 32 288: COMP[69 (1..1)] pos=889 w=9 a+d=17+4 face=24 MB 33 297: COMP[69 (2..2)] pos=890 w=9 a+d=17+4 face=24 MB 34 306: CHAR["] pos=891 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 35 315: CHAR[ ] pos=892 blev=0,btyp=L w=9 a+d=17+4 MB 36 324: CHAR["] pos=893 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 37 333: COMP[70 (0..0)] pos=894 w=9 a+d=17+4 face=24 MB 38 342: COMP[70 (1..1)] pos=895 w=9 a+d=17+4 face=24 MB 39 351: CHAR["] pos=896 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 40 360: CHAR[ ] pos=897 blev=0,btyp=L w=9 a+d=17+4 MB 41 369: CHAR["] pos=898 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 42 378: COMP[71 (0..0)] pos=899 w=9 a+d=17+4 face=24 MB 43 387: COMP[71 (1..1)] pos=900 w=9 a+d=17+4 face=24 MB 44 396: COMP[71 (2..2)] pos=901 w=9 a+d=17+4 face=24 MB 45 405: CHAR["] pos=902 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 46 414: CHAR[ ] pos=903 blev=0,btyp=L w=9 a+d=17+4 MB 47 423: CHAR["] pos=904 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 48 432: COMP[72 (0..0)] pos=905 w=9 a+d=17+4 face=24 MB 49 441: COMP[72 (1..1)] pos=906 w=9 a+d=17+4 face=24 MB 50 450: COMP[72 (2..2)] pos=907 w=9 a+d=17+4 face=24 MB 51 459: CHAR["] pos=908 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 52 468: CHAR[ ] pos=909 blev=0,btyp=L w=9 a+d=17+4 MB 53 477: CHAR["] pos=910 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 54 486: COMP[73 (0..0)] pos=911 w=9 a+d=17+4 face=24 MB 55 495: COMP[73 (1..1)] pos=912 w=9 a+d=17+4 face=24 MB 56 504: CHAR["] pos=913 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 57 513: CHAR[ ] pos=914 blev=0,btyp=L w=9 a+d=17+4 MB 58 522: CHAR["] pos=915 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 59 531: COMP[74 (0..0)] pos=916 w=9 a+d=17+4 face=24 MB 60 540: COMP[74 (1..1)] pos=917 w=9 a+d=17+4 face=24 MB 61 549: COMP[74 (2..2)] pos=918 w=9 a+d=17+4 face=24 MB 62 558: CHAR["] pos=919 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 63 567: CHAR[ ] pos=920 blev=0,btyp=L w=9 a+d=17+4 MB 64 576: CHAR["] pos=921 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 65 585: COMP[75 (0..0)] pos=922 w=9 a+d=17+4 face=24 MB 66 594: COMP[75 (1..1)] pos=923 w=9 a+d=17+4 face=24 MB 67 603: COMP[75 (2..2)] pos=924 w=9 a+d=17+4 face=24 MB 68 612: CHAR["] pos=925 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 69 621: CHAR[ ] pos=926 blev=0,btyp=L w=9 a+d=17+4 MB 70 630: CHAR["] pos=927 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 71 639: COMP[76 (0..0)] pos=928 w=9 a+d=17+4 face=24 MB 72 648: COMP[76 (1..1)] pos=929 w=9 a+d=17+4 face=24 MB 73 657: COMP[76 (2..2)] pos=930 w=9 a+d=17+4 face=24 MB 74 666: CHAR["] pos=931 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 75 675: CHAR[ ] pos=932 blev=0,btyp=L w=9 a+d=17+4 MB 76 684: CHAR["] pos=933 blev=0,btyp=L w=9 a+d=17+4 face=23 MB 77 693: COMP[77 (0..0)] pos=934 w=9 a+d=17+4 face=24 MB 78 702: COMP[77 (1..1)] pos=935 w=9 a+d=17+4 face=24 MB 79 711: COMP[77 (2..2)] pos=936 w=9 a+d=17+4 face=24 MB Each line here describes a glyph on display. Where it says "CHAR[X]", that's a character glyph of character X. Where it says "COMP[n (i..j)]", that's a composition whose cached ID is n, and i and j are the characters in the composed sequence represented by this glyph. The "pos=NNNN" part is the buffer position from where each glyph came. Find the cache ID of the composition which shows the problematic ligature by its buffer position which you displayed at the beginning. Let's assume that the ID of that composition is 69 (from the glyph row shown above). Then type: (gdb) pp composition_gstring_from_id(69) This will show the composition cached at slot 116. The structure of the composition is described in the doc string of composition-get-gstring. Here's what I get here for the ligature cached at slot 69: (gdb) pp composition_gstring_from_id(69) [[# 45 45 62] 69 [0 0 45 1970 9 1 10 17 4 nil] [1 1 45 1969 9 0 10 17 4 nil] [2 2 62 2728 9 0 9 17 4 nil]] It clearly shows the font used to display the 3 glyphs of this ligature and the data of the 3 glyphs themselves. The idea is then to compare what you get from the "bad" display with what you get for the same ligature in a fresh Emacs session, where the display should be good. Let me know if you need more help or more detailed instructions or have questions. Thanks. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Oct 2024 16:48:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173022043710029 (code B ref 73752); Tue, 29 Oct 2024 16:48:02 +0000 Received: (at 73752) by debbugs.gnu.org; 29 Oct 2024 16:47:17 +0000 Received: from localhost ([127.0.0.1]:57382 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5pNE-0002bh-CS for submit@debbugs.gnu.org; Tue, 29 Oct 2024 12:47:17 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:59445) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5pNA-0002bX-1f for 73752@debbugs.gnu.org; Tue, 29 Oct 2024 12:47:14 -0400 Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-71e61b47c6cso4643911b3a.2 for <73752@debbugs.gnu.org>; Tue, 29 Oct 2024 09:47:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730220366; x=1730825166; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/8Tb57ZKZrTk5ETFy+OIWmSSDlUohNPeTF4UVB+8cb0=; b=iqxX+u/KUIPMW3fElUGpYraJpkCPxBQV5wTWs7s4YWVvTit3OFR/6JzRXGh18qwuDi eVU6uRDBYje7rnuvVGDDKHDKjKEQZLJKFaXlmOafqQsxCIObrMLCQullcyRhQ0PMSZ80 RNp2P9lLGsmUv4W1DdJKM+gJRQ+1ebk3V+zCjmG8QSADXQ5OpiyhhlTFUPxXmDNNyjEZ eI1qCVwEPke2yZK3ZrS1QBK2T+hE7YlMryYgg/Vox2OCoaqESTk674AQzWeeVuj09KfV 1QVA1bpNALl8yr4hrLWd0pj5duZLhrGljmKjWKTdsMRwhX+w0kZC6aGk4ovSQ18uY4qK IlTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730220366; x=1730825166; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=/8Tb57ZKZrTk5ETFy+OIWmSSDlUohNPeTF4UVB+8cb0=; b=l5R7l8flz5MLNVpoDSGSxyW2xi5a81GvVO5L3/xBaLMDgoTWQu+yQR5EkKcJvQlWMi atROVDuxhLJtNVp36goOJQnCnOICkvWi4ypYIp2hVDcSYhN5SnrCj0rnuRu8J/usq3Hj qa6bmgH7GUKE5GSCZdY9/5VZw5K/9TJe/9XIjqSJ3q3mN8DvgLa63EXbTi5W3a9ixf1S 9VWjuCXAAzF2VC6IORbfCKCZkbsIVfu4P/oZpwBDSvBGZa4r0PObkUnnKfkbkNLgpF7L LXH0Kj7XsrM23KQe97DASKeBWz0gI/ZinFvjipU63a6IQu9bqoraugeY11KKqUAFv6FA 3zbQ== X-Forwarded-Encrypted: i=1; AJvYcCVembqwHZTrb9jWpr/jah4Agno47XDyTx31l/zcUJ2H3l/Ik+ApgDaqhe1nPEcqLQnCVPhCNw==@debbugs.gnu.org X-Gm-Message-State: AOJu0YyV6U8q8EyWJSyN8NZ9Y2ssddFGCIYau5Zj+9NiKc98KTqDOv1v WvTZKV2/889mfFZomlVG1PmxFg0Lfq6klx8MUojOO/AScOEkC35M X-Google-Smtp-Source: AGHT+IFE8dn0CfV9SGnLU1vvdU9Bz9DEeT2gOwJrFEoJciHVy+Tnj+MOcDv0hLlOGJImqfShR1xBEw== X-Received: by 2002:a05:6a00:2e04:b0:71e:6728:72d5 with SMTP id d2e1a72fcca58-72062fd8f30mr18339013b3a.15.1730220366149; Tue, 29 Oct 2024 09:46:06 -0700 (PDT) Received: from localhost ([1.7.159.70]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72057a0bc94sm7738345b3a.119.2024.10.29.09.46.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Oct 2024 09:46:05 -0700 (PDT) From: Visuwesh In-Reply-To: <86jzdq6hsw.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 29 Oct 2024 17:38:07 +0200") References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> <87wmhs19rh.fsf@gmail.com> <86frog6thm.fsf@gnu.org> <87o73318ql.fsf@gmail.com> <86wmhr5acv.fsf@gnu.org> <871pzz10bx.fsf@gmail.com> <86jzdq6hsw.fsf@gnu.org> Date: Tue, 29 Oct 2024 22:16:01 +0530 Message-ID: <87r07yzwl2.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 4.6 (++++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: =?UTF-8?Q?[=E0=AE=9A=E0=AF=86=E0=AE=B5=E0=AF=8D=E0=AE=B5=E0=AE=BE=E0=AE=AF=E0=AF=8D_?= =?UTF-8?Q?=E0=AE=85=E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D?= 29, 2024] Eli Zaretskii wrote: >> From: Visuwesh >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Tue, 29 Oct 2024 19:24:26 +0530 >> >> I seem to have run into the issue. The attached images >> "cascadia-cod [...] Content analysis details: (4.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (visuweshm[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.210.196 listed in list.dnswl.org] 0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [209.85.210.196 listed in sa-accredit.habeas.com] 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [1.7.159.70 listed in zen.spamhaus.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [209.85.210.196 listed in wl.mailspike.net] 0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [209.85.210.196 listed in bl.score.senderscore.com] 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders 1.0 FREEMAIL_REPLY From and body contain different freemails X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 2.6 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: =?UTF-8?Q?[=E0=AE=9A=E0=AF=86=E0=AE=B5=E0=AF=8D=E0=AE=B5=E0=AE=BE=E0=AE=AF=E0=AF=8D_?= =?UTF-8?Q?=E0=AE=85=E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D?= 29, 2024] Eli Zaretskii wrote: >> From: Visuwesh >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Tue, 29 Oct 2024 19:24:26 +0530 >> >> I seem to have run into the issue. The attached images >> "cascadia-cod [...] Content analysis details: (2.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [209.85.210.196 listed in sa-accredit.habeas.com] 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [1.7.159.70 listed in zen.spamhaus.org] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.210.196 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [209.85.210.196 listed in wl.mailspike.net] 0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [209.85.210.196 listed in bl.score.senderscore.com] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (visuweshm[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager [=E0=AE=9A=E0=AF=86=E0=AE=B5=E0=AF=8D=E0=AE=B5=E0=AE=BE=E0=AE=AF=E0=AF=8D = =E0=AE=85=E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D 29= , 2024] Eli Zaretskii wrote: >> From: Visuwesh >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Tue, 29 Oct 2024 19:24:26 +0530 >>=20 >> I seem to have run into the issue. The attached images >> "cascadia-code-bold-15-good" and "-bad.png" are the desired and >> misaligned composite text of "-->" rendered in Cascadia Code bold 15 >> font. The same text is composed fine with Cascadia Code bold 17. > > I'm not sure this is the same issue we are talking about, but here are > the instructions anyway: > > . Move the cursor to where this ligature is displayed > . Use "C-x =3D" to display the buffer position of the ligature > . Attaching GDB to Emacs, then type these commands: > > (gdb) source /path/to/emacs/src/.gdbinit > (gdb) thread 1 > (gdb) break set_cursor_from_row > (gdb) continue > > The breakpoint in set_cursor_from_row will break soon enough. The > first time it breaks, just type "continue". Second time it breaks, > type: > > (gdb) pgrow > > This will show you the entire screen line (a.k.a. "glyph row") where > the cursor is displayed, which is also the screen line of the > ligature. Here's how a similar line with ligatures looks here: > > (gdb) pgrow > TEXT: 80 glyphs > 0 0: CHAR[ ] pos=3D857 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 1 9: CHAR[ ] pos=3D858 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 2 18: CHAR[ ] pos=3D859 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 3 27: CHAR[ ] pos=3D860 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 4 36: CHAR[ ] pos=3D861 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 5 45: CHAR[ ] pos=3D862 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 6 54: CHAR[ ] pos=3D863 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 7 63: CHAR[ ] pos=3D864 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 8 72: CHAR[ ] pos=3D865 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 9 81: CHAR[ ] pos=3D866 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 10 90: CHAR[ ] pos=3D867 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 11 99: CHAR[ ] pos=3D868 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 12 108: CHAR[ ] pos=3D869 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 13 117: CHAR[ ] pos=3D870 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 14 126: CHAR[ ] pos=3D871 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 15 135: CHAR[ ] pos=3D872 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 16 144: CHAR[ ] pos=3D873 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 17 153: CHAR[ ] pos=3D874 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 18 162: CHAR[ ] pos=3D875 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 19 171: CHAR[ ] pos=3D876 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 20 180: CHAR[ ] pos=3D877 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 21 189: CHAR[ ] pos=3D878 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 22 198: CHAR[ ] pos=3D879 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 23 207: CHAR[ ] pos=3D880 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 24 216: CHAR[ ] pos=3D881 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 25 225: CHAR[ ] pos=3D882 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 26 234: CHAR[ ] pos=3D883 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 27 243: CHAR[ ] pos=3D884 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 28 252: CHAR[ ] pos=3D885 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 29 261: CHAR[ ] pos=3D886 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 30 270: CHAR["] pos=3D887 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 31 279: COMP[69 (0..0)] pos=3D888 w=3D9 a+d=3D17+4 face=3D24 MB > 32 288: COMP[69 (1..1)] pos=3D889 w=3D9 a+d=3D17+4 face=3D24 MB > 33 297: COMP[69 (2..2)] pos=3D890 w=3D9 a+d=3D17+4 face=3D24 MB > 34 306: CHAR["] pos=3D891 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 35 315: CHAR[ ] pos=3D892 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 36 324: CHAR["] pos=3D893 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 37 333: COMP[70 (0..0)] pos=3D894 w=3D9 a+d=3D17+4 face=3D24 MB > 38 342: COMP[70 (1..1)] pos=3D895 w=3D9 a+d=3D17+4 face=3D24 MB > 39 351: CHAR["] pos=3D896 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 40 360: CHAR[ ] pos=3D897 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 41 369: CHAR["] pos=3D898 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 42 378: COMP[71 (0..0)] pos=3D899 w=3D9 a+d=3D17+4 face=3D24 MB > 43 387: COMP[71 (1..1)] pos=3D900 w=3D9 a+d=3D17+4 face=3D24 MB > 44 396: COMP[71 (2..2)] pos=3D901 w=3D9 a+d=3D17+4 face=3D24 MB > 45 405: CHAR["] pos=3D902 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 46 414: CHAR[ ] pos=3D903 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 47 423: CHAR["] pos=3D904 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 48 432: COMP[72 (0..0)] pos=3D905 w=3D9 a+d=3D17+4 face=3D24 MB > 49 441: COMP[72 (1..1)] pos=3D906 w=3D9 a+d=3D17+4 face=3D24 MB > 50 450: COMP[72 (2..2)] pos=3D907 w=3D9 a+d=3D17+4 face=3D24 MB > 51 459: CHAR["] pos=3D908 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 52 468: CHAR[ ] pos=3D909 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 53 477: CHAR["] pos=3D910 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 54 486: COMP[73 (0..0)] pos=3D911 w=3D9 a+d=3D17+4 face=3D24 MB > 55 495: COMP[73 (1..1)] pos=3D912 w=3D9 a+d=3D17+4 face=3D24 MB > 56 504: CHAR["] pos=3D913 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 57 513: CHAR[ ] pos=3D914 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 58 522: CHAR["] pos=3D915 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 59 531: COMP[74 (0..0)] pos=3D916 w=3D9 a+d=3D17+4 face=3D24 MB > 60 540: COMP[74 (1..1)] pos=3D917 w=3D9 a+d=3D17+4 face=3D24 MB > 61 549: COMP[74 (2..2)] pos=3D918 w=3D9 a+d=3D17+4 face=3D24 MB > 62 558: CHAR["] pos=3D919 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 63 567: CHAR[ ] pos=3D920 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 64 576: CHAR["] pos=3D921 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 65 585: COMP[75 (0..0)] pos=3D922 w=3D9 a+d=3D17+4 face=3D24 MB > 66 594: COMP[75 (1..1)] pos=3D923 w=3D9 a+d=3D17+4 face=3D24 MB > 67 603: COMP[75 (2..2)] pos=3D924 w=3D9 a+d=3D17+4 face=3D24 MB > 68 612: CHAR["] pos=3D925 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 69 621: CHAR[ ] pos=3D926 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 70 630: CHAR["] pos=3D927 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 71 639: COMP[76 (0..0)] pos=3D928 w=3D9 a+d=3D17+4 face=3D24 MB > 72 648: COMP[76 (1..1)] pos=3D929 w=3D9 a+d=3D17+4 face=3D24 MB > 73 657: COMP[76 (2..2)] pos=3D930 w=3D9 a+d=3D17+4 face=3D24 MB > 74 666: CHAR["] pos=3D931 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 75 675: CHAR[ ] pos=3D932 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 MB > 76 684: CHAR["] pos=3D933 blev=3D0,btyp=3DL w=3D9 a+d=3D17+4 face=3D2= 3 MB > 77 693: COMP[77 (0..0)] pos=3D934 w=3D9 a+d=3D17+4 face=3D24 MB > 78 702: COMP[77 (1..1)] pos=3D935 w=3D9 a+d=3D17+4 face=3D24 MB > 79 711: COMP[77 (2..2)] pos=3D936 w=3D9 a+d=3D17+4 face=3D24 MB > > Each line here describes a glyph on display. Where it says "CHAR[X]", > that's a character glyph of character X. Where it says > "COMP[n (i..j)]", that's a composition whose cached ID is n, and i and > j are the characters in the composed sequence represented by this > glyph. > > The "pos=3DNNNN" part is the buffer position from where each glyph came. > > Find the cache ID of the composition which shows the problematic > ligature by its buffer position which you displayed at the beginning. > Let's assume that the ID of that composition is 69 (from the glyph > row shown above). Then type: > > (gdb) pp composition_gstring_from_id(69) > > This will show the composition cached at slot 116. The structure of > the composition is described in the doc string of > composition-get-gstring. Here's what I get here for the ligature > cached at slot 69: > > (gdb) pp composition_gstring_from_id(69) > [[# 45 45 62] 69 [0 0 45 1970 9 1 10 17 4 nil] [1 1 45 1= 969 9 0 10 17 4 nil] [2 2 62 2728 9 0 9 17 4 nil]] > > It clearly shows the font used to display the 3 glyphs of this > ligature and the data of the 3 glyphs themselves. > > The idea is then to compare what you get from the "bad" display with > what you get for the same ligature in a fresh Emacs session, where the > display should be good. > > Let me know if you need more help or more detailed instructions or > have questions. > > Thanks. Thank you very much for the clear instructions. I was testing this in a fresh Emacs session. And (gdb) pp composition_gstring_from_id(ID) seems to show nothing? (gdb) c Continuing. Thread 1 "emacs" hit Breakpoint 3, set_cursor_from_row (w=3D0x55b8c994f= 338, row=3D0x55b8c9e20410, matrix=3D0x55b8c9960480, delta=3D0, delta_bytes= =3D0, dy=3D0, dvpos=3D0) at xdisp.c:18217 18217 struct glyph *glyph =3D row->glyphs[TEXT_AREA]; (gdb) pgrow TEXT: 4 glyphs 0 0: COMP[16 (0..0)] pos=3D5 w=3D9 a+d=3D14+4 face=3D28 MB 1 9: COMP[16 (1..1)] pos=3D6 w=3D9 a+d=3D14+4 face=3D28 MB 2 18: COMP[16 (2..2)] pos=3D7 w=3D9 a+d=3D14+4 face=3D28 MB 3 27: CHAR[ ] pos=3D0 blev=3D0,btyp=3DB w=3D9 a+d=3D14+4 MB (gdb) pp composition_gstring_from_id(16) (gdb) p composition_gstring_from_id(16) $1 =3D XIL(0x55b8cada607d) Am I missing something? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Oct 2024 16:54:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: visuweshm@gmail.com Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173022081810671 (code B ref 73752); Tue, 29 Oct 2024 16:54:02 +0000 Received: (at 73752) by debbugs.gnu.org; 29 Oct 2024 16:53:38 +0000 Received: from localhost ([127.0.0.1]:57413 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5pTN-0002m3-Ly for submit@debbugs.gnu.org; Tue, 29 Oct 2024 12:53:37 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34150) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5pTJ-0002lv-EG for 73752@debbugs.gnu.org; Tue, 29 Oct 2024 12:53:36 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5pR7-0002yT-Bl; Tue, 29 Oct 2024 12:51:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=xQwvBUeqJxPBkQtJPYMln7m27tcar+A0gFvKFH07Ye8=; b=jh0aIPKbVpZM GFgBUxYvXHUXjqaaWN+EHCIbKvmFuM6Yprx/pL34kzM2bfShiihixImxg0/2mIrzI5dPdE4/EyJHC URBiI3JGsVyrF2CNZOxDSv4Z4JPrzDNfMeYzNkhuNftO9Budty78PRhswDSi+vaTBelPXeX0gsE/k 0Ex47RH/n3/WwygCdOX/9HUCHCDOpV23rUcfF7fhPYUOqS0JlaiUyJiEFF7J8zTaru3NgzYkaW7is IL5hVPmwj1eqXEbygooK1YdP2ebno/kYCr/tjY+HxV5J99UftBrDsdGA/iig8MAxXNTdBAFPldBPB Ef1abcXqlSUxLRrXqvRCmw==; Date: Tue, 29 Oct 2024 18:51:15 +0200 Message-Id: <86cyji6ef0.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <86jzdq6hsw.fsf@gnu.org> (message from Eli Zaretskii on Tue, 29 Oct 2024 17:38:07 +0200) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> <87wmhs19rh.fsf@gmail.com> <86frog6thm.fsf@gnu.org> <87o73318ql.fsf@gmail.com> <86wmhr5acv.fsf@gnu.org> <871pzz10bx.fsf@gmail.com> <86jzdq6hsw.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me > Date: Tue, 29 Oct 2024 17:38:07 +0200 > From: Eli Zaretskii > > (gdb) pp composition_gstring_from_id(69) > > This will show the composition cached at slot 116. ^^^ Sorry, a typo: that should have been 69, of course, not 116. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Oct 2024 17:46:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173022395417152 (code B ref 73752); Tue, 29 Oct 2024 17:46:02 +0000 Received: (at 73752) by debbugs.gnu.org; 29 Oct 2024 17:45:54 +0000 Received: from localhost ([127.0.0.1]:57727 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5qHx-0004Sa-T6 for submit@debbugs.gnu.org; Tue, 29 Oct 2024 13:45:54 -0400 Received: from eggs.gnu.org ([209.51.188.92]:48038) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5qHw-0004SS-BC for 73752@debbugs.gnu.org; Tue, 29 Oct 2024 13:45:53 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t5qHq-00012A-3Q; Tue, 29 Oct 2024 13:45:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=thlRr+sblwutB7Wy+OLzxFp+MeNUgbPUuSo6C1S5bAk=; b=lAWUE+iz510853U8OrUP HDzgWla+Gh0vd3PwC7JYw7jrAaCzb4/dg765oqvfYXM127krcWd2N6CwOy9UfgGVCebjDhdatwgp4 rocBZNSUqG5R2fonkiDo+szQpw35h043W0NJAnDGPeJS+a9ttYc7SQ/+l8ccfY8rnjmNZX0qNQ8RT cEtnaj9Vi6NNBvBQbVapTx95hMgTUd4Guko4DyK1bGJOvEhV3uNdAv/mlizvQycjvfGt5VaCwzIAs jQeGAtKWd0yGKFp9bX8MKK4F3MrH699l0Tiz6++XZOAs/cZYSTyHGQt8hut41Zh2jCkIz0MZ5AH6v 7FDT5Yy24g2nfg==; Date: Tue, 29 Oct 2024 19:45:15 +0200 Message-Id: <867c9q6bx0.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87r07yzwl2.fsf@gmail.com> (message from Visuwesh on Tue, 29 Oct 2024 22:16:01 +0530) References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> <87wmhs19rh.fsf@gmail.com> <86frog6thm.fsf@gnu.org> <87o73318ql.fsf@gmail.com> <86wmhr5acv.fsf@gnu.org> <871pzz10bx.fsf@gmail.com> <86jzdq6hsw.fsf@gnu.org> <87r07yzwl2.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me > Date: Tue, 29 Oct 2024 22:16:01 +0530 > > [செவ்வாய் அக்டோபர் 29, 2024] Eli Zaretskii wrote: > > >> From: Visuwesh > >> Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me > >> Date: Tue, 29 Oct 2024 19:24:26 +0530 > >> > >> I seem to have run into the issue. The attached images > >> "cascadia-code-bold-15-good" and "-bad.png" are the desired and > >> misaligned composite text of "-->" rendered in Cascadia Code bold 15 > >> font. The same text is composed fine with Cascadia Code bold 17. > > > > I'm not sure this is the same issue we are talking about, but here are > > the instructions anyway: > > > > . Move the cursor to where this ligature is displayed > > . Use "C-x =" to display the buffer position of the ligature > > . Attaching GDB to Emacs, then type these commands: > > > > (gdb) source /path/to/emacs/src/.gdbinit > > (gdb) thread 1 > > (gdb) break set_cursor_from_row > > (gdb) continue > > > > The breakpoint in set_cursor_from_row will break soon enough. The > > first time it breaks, just type "continue". Second time it breaks, > > type: > > > > (gdb) pgrow > > > > This will show you the entire screen line (a.k.a. "glyph row") where > > the cursor is displayed, which is also the screen line of the > > ligature. Here's how a similar line with ligatures looks here: > > > > (gdb) pgrow > > TEXT: 80 glyphs > > 0 0: CHAR[ ] pos=857 blev=0,btyp=L w=9 a+d=17+4 MB > > 1 9: CHAR[ ] pos=858 blev=0,btyp=L w=9 a+d=17+4 MB > > 2 18: CHAR[ ] pos=859 blev=0,btyp=L w=9 a+d=17+4 MB > > 3 27: CHAR[ ] pos=860 blev=0,btyp=L w=9 a+d=17+4 MB > > 4 36: CHAR[ ] pos=861 blev=0,btyp=L w=9 a+d=17+4 MB > > 5 45: CHAR[ ] pos=862 blev=0,btyp=L w=9 a+d=17+4 MB > > 6 54: CHAR[ ] pos=863 blev=0,btyp=L w=9 a+d=17+4 MB > > 7 63: CHAR[ ] pos=864 blev=0,btyp=L w=9 a+d=17+4 MB > > 8 72: CHAR[ ] pos=865 blev=0,btyp=L w=9 a+d=17+4 MB > > 9 81: CHAR[ ] pos=866 blev=0,btyp=L w=9 a+d=17+4 MB > > 10 90: CHAR[ ] pos=867 blev=0,btyp=L w=9 a+d=17+4 MB > > 11 99: CHAR[ ] pos=868 blev=0,btyp=L w=9 a+d=17+4 MB > > 12 108: CHAR[ ] pos=869 blev=0,btyp=L w=9 a+d=17+4 MB > > 13 117: CHAR[ ] pos=870 blev=0,btyp=L w=9 a+d=17+4 MB > > 14 126: CHAR[ ] pos=871 blev=0,btyp=L w=9 a+d=17+4 MB > > 15 135: CHAR[ ] pos=872 blev=0,btyp=L w=9 a+d=17+4 MB > > 16 144: CHAR[ ] pos=873 blev=0,btyp=L w=9 a+d=17+4 MB > > 17 153: CHAR[ ] pos=874 blev=0,btyp=L w=9 a+d=17+4 MB > > 18 162: CHAR[ ] pos=875 blev=0,btyp=L w=9 a+d=17+4 MB > > 19 171: CHAR[ ] pos=876 blev=0,btyp=L w=9 a+d=17+4 MB > > 20 180: CHAR[ ] pos=877 blev=0,btyp=L w=9 a+d=17+4 MB > > 21 189: CHAR[ ] pos=878 blev=0,btyp=L w=9 a+d=17+4 MB > > 22 198: CHAR[ ] pos=879 blev=0,btyp=L w=9 a+d=17+4 MB > > 23 207: CHAR[ ] pos=880 blev=0,btyp=L w=9 a+d=17+4 MB > > 24 216: CHAR[ ] pos=881 blev=0,btyp=L w=9 a+d=17+4 MB > > 25 225: CHAR[ ] pos=882 blev=0,btyp=L w=9 a+d=17+4 MB > > 26 234: CHAR[ ] pos=883 blev=0,btyp=L w=9 a+d=17+4 MB > > 27 243: CHAR[ ] pos=884 blev=0,btyp=L w=9 a+d=17+4 MB > > 28 252: CHAR[ ] pos=885 blev=0,btyp=L w=9 a+d=17+4 MB > > 29 261: CHAR[ ] pos=886 blev=0,btyp=L w=9 a+d=17+4 MB > > 30 270: CHAR["] pos=887 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 31 279: COMP[69 (0..0)] pos=888 w=9 a+d=17+4 face=24 MB > > 32 288: COMP[69 (1..1)] pos=889 w=9 a+d=17+4 face=24 MB > > 33 297: COMP[69 (2..2)] pos=890 w=9 a+d=17+4 face=24 MB > > 34 306: CHAR["] pos=891 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 35 315: CHAR[ ] pos=892 blev=0,btyp=L w=9 a+d=17+4 MB > > 36 324: CHAR["] pos=893 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 37 333: COMP[70 (0..0)] pos=894 w=9 a+d=17+4 face=24 MB > > 38 342: COMP[70 (1..1)] pos=895 w=9 a+d=17+4 face=24 MB > > 39 351: CHAR["] pos=896 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 40 360: CHAR[ ] pos=897 blev=0,btyp=L w=9 a+d=17+4 MB > > 41 369: CHAR["] pos=898 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 42 378: COMP[71 (0..0)] pos=899 w=9 a+d=17+4 face=24 MB > > 43 387: COMP[71 (1..1)] pos=900 w=9 a+d=17+4 face=24 MB > > 44 396: COMP[71 (2..2)] pos=901 w=9 a+d=17+4 face=24 MB > > 45 405: CHAR["] pos=902 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 46 414: CHAR[ ] pos=903 blev=0,btyp=L w=9 a+d=17+4 MB > > 47 423: CHAR["] pos=904 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 48 432: COMP[72 (0..0)] pos=905 w=9 a+d=17+4 face=24 MB > > 49 441: COMP[72 (1..1)] pos=906 w=9 a+d=17+4 face=24 MB > > 50 450: COMP[72 (2..2)] pos=907 w=9 a+d=17+4 face=24 MB > > 51 459: CHAR["] pos=908 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 52 468: CHAR[ ] pos=909 blev=0,btyp=L w=9 a+d=17+4 MB > > 53 477: CHAR["] pos=910 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 54 486: COMP[73 (0..0)] pos=911 w=9 a+d=17+4 face=24 MB > > 55 495: COMP[73 (1..1)] pos=912 w=9 a+d=17+4 face=24 MB > > 56 504: CHAR["] pos=913 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 57 513: CHAR[ ] pos=914 blev=0,btyp=L w=9 a+d=17+4 MB > > 58 522: CHAR["] pos=915 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 59 531: COMP[74 (0..0)] pos=916 w=9 a+d=17+4 face=24 MB > > 60 540: COMP[74 (1..1)] pos=917 w=9 a+d=17+4 face=24 MB > > 61 549: COMP[74 (2..2)] pos=918 w=9 a+d=17+4 face=24 MB > > 62 558: CHAR["] pos=919 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 63 567: CHAR[ ] pos=920 blev=0,btyp=L w=9 a+d=17+4 MB > > 64 576: CHAR["] pos=921 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 65 585: COMP[75 (0..0)] pos=922 w=9 a+d=17+4 face=24 MB > > 66 594: COMP[75 (1..1)] pos=923 w=9 a+d=17+4 face=24 MB > > 67 603: COMP[75 (2..2)] pos=924 w=9 a+d=17+4 face=24 MB > > 68 612: CHAR["] pos=925 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 69 621: CHAR[ ] pos=926 blev=0,btyp=L w=9 a+d=17+4 MB > > 70 630: CHAR["] pos=927 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 71 639: COMP[76 (0..0)] pos=928 w=9 a+d=17+4 face=24 MB > > 72 648: COMP[76 (1..1)] pos=929 w=9 a+d=17+4 face=24 MB > > 73 657: COMP[76 (2..2)] pos=930 w=9 a+d=17+4 face=24 MB > > 74 666: CHAR["] pos=931 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 75 675: CHAR[ ] pos=932 blev=0,btyp=L w=9 a+d=17+4 MB > > 76 684: CHAR["] pos=933 blev=0,btyp=L w=9 a+d=17+4 face=23 MB > > 77 693: COMP[77 (0..0)] pos=934 w=9 a+d=17+4 face=24 MB > > 78 702: COMP[77 (1..1)] pos=935 w=9 a+d=17+4 face=24 MB > > 79 711: COMP[77 (2..2)] pos=936 w=9 a+d=17+4 face=24 MB > > > > Each line here describes a glyph on display. Where it says "CHAR[X]", > > that's a character glyph of character X. Where it says > > "COMP[n (i..j)]", that's a composition whose cached ID is n, and i and > > j are the characters in the composed sequence represented by this > > glyph. > > > > The "pos=NNNN" part is the buffer position from where each glyph came. > > > > Find the cache ID of the composition which shows the problematic > > ligature by its buffer position which you displayed at the beginning. > > Let's assume that the ID of that composition is 69 (from the glyph > > row shown above). Then type: > > > > (gdb) pp composition_gstring_from_id(69) > > > > This will show the composition cached at slot 116. The structure of > > the composition is described in the doc string of > > composition-get-gstring. Here's what I get here for the ligature > > cached at slot 69: > > > > (gdb) pp composition_gstring_from_id(69) > > [[# 45 45 62] 69 [0 0 45 1970 9 1 10 17 4 nil] [1 1 45 1969 9 0 10 17 4 nil] [2 2 62 2728 9 0 9 17 4 nil]] > > > > It clearly shows the font used to display the 3 glyphs of this > > ligature and the data of the 3 glyphs themselves. > > > > The idea is then to compare what you get from the "bad" display with > > what you get for the same ligature in a fresh Emacs session, where the > > display should be good. > > > > Let me know if you need more help or more detailed instructions or > > have questions. > > > > Thanks. > > Thank you very much for the clear instructions. I was testing this in a > fresh Emacs session. And > > (gdb) pp composition_gstring_from_id(ID) > > seems to show nothing? > > (gdb) c > Continuing. > > Thread 1 "emacs" hit Breakpoint 3, set_cursor_from_row (w=0x55b8c994f338, row=0x55b8c9e20410, matrix=0x55b8c9960480, delta=0, delta_bytes=0, dy=0, dvpos=0) at xdisp.c:18217 > 18217 struct glyph *glyph = row->glyphs[TEXT_AREA]; > (gdb) pgrow > TEXT: 4 glyphs > 0 0: COMP[16 (0..0)] pos=5 w=9 a+d=14+4 face=28 MB > 1 9: COMP[16 (1..1)] pos=6 w=9 a+d=14+4 face=28 MB > 2 18: COMP[16 (2..2)] pos=7 w=9 a+d=14+4 face=28 MB > 3 27: CHAR[ ] pos=0 blev=0,btyp=B w=9 a+d=14+4 MB > (gdb) pp composition_gstring_from_id(16) > (gdb) p composition_gstring_from_id(16) > $1 = XIL(0x55b8cada607d) > > Am I missing something? Maybe your Emacs is not built with enough debug info? What does this produce: (gdb) p composition_gstring_from_id(16) $1 = XIL(0x55b8cada607d) (gdb) xpr If this doesn't work, either, you will have to decypher XIL(0x55b8cada607d) "by hand", using xvector etc... I can give you instructions for that as well. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces References: In-Reply-To: Resent-From: Tim Ruffing Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Oct 2024 01:20:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173025115510258 (code B ref 73752); Wed, 30 Oct 2024 01:20:01 +0000 Received: (at 73752) by debbugs.gnu.org; 30 Oct 2024 01:19:15 +0000 Received: from localhost ([127.0.0.1]:60118 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5xMf-0002fO-BU for submit@debbugs.gnu.org; Tue, 29 Oct 2024 21:19:15 -0400 Received: from mout-p-202.mailbox.org ([80.241.56.172]:57258) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t5vR3-0006yt-E2 for 73752@debbugs.gnu.org; Tue, 29 Oct 2024 19:15:38 -0400 Received: from smtp202.mailbox.org (smtp202.mailbox.org [10.196.197.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4XdR1H0zqhz9t5k for <73752@debbugs.gnu.org>; Wed, 30 Oct 2024 00:14:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=real-or-random.org; s=MBO0001; t=1730243699; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=v2fG9KWEXSb7lE8rqO+k/RDmCsxmN9nDHEud64CM9cA=; b=iw5YT3qGa2sbZA2nDUxpluHOJK796msoOtDnyYhqQ+dEU1Tuv9owIzzsjMVAuK/wkWbAU6 h36M6oEeyQrxZYkwC+sfZP3dDsCq+u4f3sXUg6ilHDMGXOGUXw8HMQnVLxLx72GCCnONtt s3zZix1JaeEZJ3wWQ6wcL79BMk3IU36wCRgDwRLIIdjybb+Th/by6Ng4ruWNIaIDRTSuKR +98Maz0CcmgX0Y3Di/6k/rX1pa1BK+T/MtlbBf0kjMcTpQB/Nc8CHpFbmpgUIJxmlihAxy smQNCClpx+psCK02VDi8ZxYvjH4GOMQPHWKplVarkeXzLWtwbdJxWdJnazQXXA== Message-ID: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> From: Tim Ruffing Date: Wed, 30 Oct 2024 00:14:58 +0100 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Tue, 29 Oct 2024 21:19:12 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) I regularly experience yet another "variant" of this bug. Of course, I can't be sure that is has the same cause but except for the exact distortion in the rendering, the circumstances look pretty similar.=C2=A0 I've seen the bug for a while, and I did some experiments in the past, but then I got distracted and I didn't find the time to report it properly. In fact, I see this quite often, and the xuan's test script makes this very easy to reproduce for me.=20 Here's all the meaningful information I could gather in the past. I had already posted much of this in the mentioned GitHub issue, but let me repeat here. Also, here a video that demonstrates most the following items: https://github.com/user-attachments/assets/56b15dfc-6467-4785-bf1f-f2cd05f3= 3f04 This was recorded on an old Emacs version (should be 29.1, but I can't vouch for it), but the bug has existed much longer, and I still see it on my currently installed Emacs 31.0.50 (commit 174784). * When I experience that bug, it's not only that there's additional spacing at the end of the ligature, but I see this with additional spacing after every partial "character" of the ligature (e.g., the "=3D=3D=3D" ligature is rendered rather like "=3D =3D =3D "). For some ligatures, this means that individual components are also misaligned with respect to each other. For example, the "/" in the "!=3D" (not equal) ligature, which is supposed to strike through the "=3D=3D" is vertically off. (You can see this exact problem in the right half of line 58 in the video.) * This can happen with all kinds of font changes. So the issue appears to be specific to a what I call I "realized face" with selected slope, weight, etc. (no idea what the proper Emacs term is). Ligatures may be broken in upright but not in italics, or ligatures may be broken in bold but not in normal. Once the face is broken, it stays broken.=C2=A0 * In the video, one can see that searching for "=3D" fixes the broken rendering of the "=3D=3D=3D" ligature in line 52. Contrary to the previo= us item, I believe this is *not* due to change in background color, but due to Emacs trying to highlight the individual "=3D" char. Still, it's interesting to see that this fixes the rendering. (In fact, changing the colors doesn't seem to influence the problem. I suspect that just the shapes are cached but not the colors?) * This one may be a nice for debugging: I use GNOME, and changing the font rendering settings triggers a "re-realization" of the fonts, and this will then fix the issue (again, see the video). One may be tempted to think that this should be a possibility to trigger the bug, but I could never observe this. It always fixed the problem for me, but maybe I was just "lucky". * There doesn't seem to be a way to reproduce this deterministically. I made multiple attempts to find a minimal reproducible config and fooled myself every time. I don't think this is an elisp config thing, I believe it can happen whenever there are ligatures (at least on affected systems). I've also tried multiple fonts (Iosevka, JetBrains Mono, Fira Code...). The video uses Iosevka. * Rebuilding the fontconfig cache with `fc-cache -f` or even `-r` doesn't do anything. `(clear-font-cache)` doesn't do anything (see video below). * Now that I saw this thread, I've also checked (clear-font-cache t) and (clear-composition-thread). These don't help. * If it's broken in one frame, then it's broken also in other frames.=C2= =A0 * Notably, I also use the pgtk build on wayland.=C2=A0 * I have found this on the web, which seems yet another variant (?) of the bug: https://web.archive.org/web/20230226082659/https://www.reddit.com/r/emac= s/comments/11c957r/ligatures_character_overlap_and_extreme_squashing/ I've just managed to reproduce this again, and I've attached gdb, but I'm also stuck at pp doesn't displaying: (gdb) pp composition_gstring_from_id(19) (gdb) p composition_gstring_from_id(19) $6 =3D (struct Lisp_X *) 0x58ad4d938225 (gdb) xpr Lisp_Vectorlike PVEC_NORMAL_VECTOR $7 =3D (struct Lisp_Vector *) 0x58ad4d938220 {XIL(0x58ad4f32aabd), make_fixnum(19), XIL(0x58ad4d93f8e5), XIL(0x58ad4d93f93d), XIL(0x58ad4d93f995)} I still have the session open. Also happy to rebuild with more debug info enabled, if you tell me how that works. ``` 3.24.43, cairo version 1.18.2) of 2024-09-13 built on tonno.fritz.box Repository revision: 04e8ad6489ebec121ace7ea6d582429a96af8f04 Repository branch: makepkg System Description: Arch Linux Configured using: 'configure --prefix=3D/usr --sysconfdir=3D/etc --libexecdir=3D/usr/lib --localstatedir=3D/var --mandir=3D/usr/share/man --with-gameuser=3D:games --with-modules --without-m17n-flt --without-gconf --with-native-compilation=3Dyes --with-xinput2 --with-pgtk --without-xaw3d --with-sound=3Dno --with-tree-sitter --without-gpm --without-compress-install '--program-transform-name=3Ds/\([ec]tags\)/\1.emacs/' 'CFLAGS=3D-march=3Dnative -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3D3 -Wformat -Werror=3Dformat-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -g -ffile-prefix-map=3D/home/tim/.cache/pikaur/build/emacs- git/src=3D/usr/src/debug/emacs-git -flto=3Dauto' 'LDFLAGS=3D-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,pack-relative-relocs -flto=3Dauto' 'CXXFLAGS=3D-march=3Dnative -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3D3 -Wformat -Werror=3Dformat-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wp,-D_GLIBCXX_ASSERTIONS -g -ffile-prefix-map=3D/home/tim/.cache/pikaur/build/emacs- git/src=3D/usr/src/debug/emacs-git -flto=3Dauto'' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG LCMS2 LIBOTF LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB ``` From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Oct 2024 05:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: luangruo@yahoo.com, 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173026707710039 (code B ref 73752); Wed, 30 Oct 2024 05:45:02 +0000 Received: (at 73752) by debbugs.gnu.org; 30 Oct 2024 05:44:37 +0000 Received: from localhost ([127.0.0.1]:33184 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t61VV-0002br-6Y for submit@debbugs.gnu.org; Wed, 30 Oct 2024 01:44:37 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:51541) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t61VQ-0002bl-0X for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 01:44:35 -0400 Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-71e592d7f6eso4340983b3a.3 for <73752@debbugs.gnu.org>; Tue, 29 Oct 2024 22:44:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730267006; x=1730871806; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cAkG9TF9v0IbcT1HTz89xBQPmX/P7fWlPKip9h29Dqk=; b=BljjxuJSDGozbq8I8F30DdujSJpfq4Q6b+h3q7Rs0IMP2g43J/ZBX/DUXKSfEd2f8+ Wl7ZytFSLFMkKAUkWFCwfAHtQ8Ac4FaCP/IblNsrEWDomnTc3qS9lhabS85lYJVfmoqn 7GqsCol+m+ld9UbSuxSaSdfs/VnAbsfnBEH75vT/n2tY75b6KlgHXYiZqILhs4cEQ5sr /gCfG8vJcv1U815gaRhKsSEkw2ajqwULWhZKb1PhsNN/RDSL686t4fn1LuaegeWZjrRy XKEDCpd08yEvRF8bt4o1d74DKYDrzWzz0e5ve0mG7FWfgRztJBbfY7ocCfzgK6/4EPSD zJaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730267006; x=1730871806; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=cAkG9TF9v0IbcT1HTz89xBQPmX/P7fWlPKip9h29Dqk=; b=OL/iJGGBAL/FZfWbK3/Ea51U9t7zw9RywhDb04AAPZXNnO8vj9IRNyuTixdcCnxiZK MWUasK/L41LrZ9ClAQh3svZc+ZI1Krjvc4hq/jJQDLjsvrd5vuQbHPPJas2KK5FU4MHL QVPggjOR8A3CeIdAqW2+kpp1vT3umEQFbGx32tEDKApXLduq2DPVKBkQpRT/14dUvDGR 7ukZszRf2tkLyaAh0sitx1NiiV4tnB+7w7Hcxuubi0S3myexJgBAyu6kQTUCYbebuj9A 5UTabH0sR424xiSohuzBhIWcM9DlDILgr0E0SbcsJb8N9KZuxLGAGRaOxLtpyAnDhciG zrjw== X-Forwarded-Encrypted: i=1; AJvYcCVnKI900keMiRQf12gj1U3k4XcFXqU6yNfsZWkqO13xQsjwYMf5yjwhf8o0kbSlOu3ChKJHuQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzZieEF5zXAsbwEOKQigntw82Cvtdfwq91iVM3cYBJa3so6ICS5 JYHHfl4jpu69SSK1uTNVTdHLmwDatpJLc3bETMuW2VIsamEdn6Zx X-Google-Smtp-Source: AGHT+IHs6FVxZGEeh9e9ViNJvokB8bETRsiV7h9o2s5i0e5tW+e7buTWAGsipgsfiYZ9IarnFMay+Q== X-Received: by 2002:a05:6a00:9a4:b0:71d:f15e:d023 with SMTP id d2e1a72fcca58-72062fa55damr20130506b3a.11.1730267005805; Tue, 29 Oct 2024 22:43:25 -0700 (PDT) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72057932189sm8445341b3a.52.2024.10.29.22.43.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Oct 2024 22:43:25 -0700 (PDT) From: Visuwesh In-Reply-To: <867c9q6bx0.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 29 Oct 2024 19:45:15 +0200") References: <86zfn9ycis.fsf@gnu.org> <86o735als7.fsf@gnu.org> <87o73534dn.fsf@gmail.com> <86h68x8nuz.fsf@gnu.org> <86ed418niu.fsf@gnu.org> <87jzds3lay.fsf@gmail.com> <86iktc6zp5.fsf@gnu.org> <87wmhs19rh.fsf@gmail.com> <86frog6thm.fsf@gnu.org> <87o73318ql.fsf@gmail.com> <86wmhr5acv.fsf@gnu.org> <871pzz10bx.fsf@gmail.com> <86jzdq6hsw.fsf@gnu.org> <87r07yzwl2.fsf@gmail.com> <867c9q6bx0.fsf@gnu.org> Date: Wed, 30 Oct 2024 11:13:21 +0530 Message-ID: <87msimywli.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=9A=E0=AF=86=E0=AE=B5=E0=AF=8D=E0=AE=B5=E0=AE=BE=E0=AE=AF=E0=AF=8D = =E0=AE=85=E0=AE=95=E0=AF=8D=E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D 29= , 2024] Eli Zaretskii wrote: >> Thank you very much for the clear instructions. I was testing this in a >> fresh Emacs session. And >>=20 >> (gdb) pp composition_gstring_from_id(ID) >>=20 >> seems to show nothing? >>=20 >> (gdb) c >> Continuing. >>=20 >> Thread 1 "emacs" hit Breakpoint 3, set_cursor_from_row (w=3D0x55b8c9= 94f338, row=3D0x55b8c9e20410, matrix=3D0x55b8c9960480, delta=3D0, delta_byt= es=3D0, dy=3D0, dvpos=3D0) at xdisp.c:18217 >> 18217 struct glyph *glyph =3D row->glyphs[TEXT_AREA]; >> (gdb) pgrow >> TEXT: 4 glyphs >> 0 0: COMP[16 (0..0)] pos=3D5 w=3D9 a+d=3D14+4 face=3D28 MB >> 1 9: COMP[16 (1..1)] pos=3D6 w=3D9 a+d=3D14+4 face=3D28 MB >> 2 18: COMP[16 (2..2)] pos=3D7 w=3D9 a+d=3D14+4 face=3D28 MB >> 3 27: CHAR[ ] pos=3D0 blev=3D0,btyp=3DB w=3D9 a+d=3D14+4 MB >> (gdb) pp composition_gstring_from_id(16) >> (gdb) p composition_gstring_from_id(16) >> $1 =3D XIL(0x55b8cada607d) >>=20 >> Am I missing something? > > Maybe your Emacs is not built with enough debug info? I built a debug version of Emacs specifically for this. ./configure --with-sound=3Dalsa --with-x-toolkit=3Dlucid --without-xaw3= d \ --without-gconf --without-libsystemd --with-cairo \ --enable-checking=3D'yes,glyphs' \ --enable-check-lisp-object-type CFLAGS=3D'-O0 -g3' > What does this produce: > > (gdb) p composition_gstring_from_id(16) > $1 =3D XIL(0x55b8cada607d) > (gdb) xpr > > If this doesn't work, either, you will have to decypher > XIL(0x55b8cada607d) "by hand", using xvector etc... I can give you > instructions for that as well. (gdb) p composition_gstring_from_id(16) $3 =3D XIL(0x55b8cada607d) (gdb) xpr Lisp_Vectorlike PVEC_NORMAL_VECTOR $4 =3D (struct Lisp_Vector *) 0x55b8cada6078 {XIL(0x55b8cada60ad), make_fixnum(16), XIL(0x55b8cada60d5), XIL(0x55b8c= ada612d), XIL(0x55b8cada6185)} So I am guessing we do need to decypher it "by hand"? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Oct 2024 15:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing , Paul Eggert Cc: 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173030117220783 (code B ref 73752); Wed, 30 Oct 2024 15:13:01 +0000 Received: (at 73752) by debbugs.gnu.org; 30 Oct 2024 15:12:52 +0000 Received: from localhost ([127.0.0.1]:35579 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6ANQ-0005P9-CX for submit@debbugs.gnu.org; Wed, 30 Oct 2024 11:12:52 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43960) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6ANO-0005P2-34 for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 11:12:50 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t6ANG-0000KX-Nd; Wed, 30 Oct 2024 11:12:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=Su2wnL+VtNVO0R1pIx8K9bAPiyhWe1veLTK7RcQDzc8=; b=ZrlshNTKQpqC hh7l6JNkI8NYGS6wFqATaxl7g4Ccj9Ru6TgNAX7mTylQfiEi4iHiO4JgaLQcJIeJ86my5xof0QX0h r0Gm0cELcNvW0OFvI2yr7ew4WhbE94TJF5D/2ALWINnCUXwL0bJ58A+1O6MXlK7o9PGReA56yf/7r fPon24wLUYjEGtSfqQVob95lAS3DQxOIzG+Mms8fUTTQrhUu7mVXX5Mrj2ciKMbj2nzWfu+zLM0XZ OPcbaTrtD/8gdjG+PYn0in+EHRoHLfnLEJzcHDOek66empYbn7mfklqAuQCS5czU/4+1kRA6zaQtB uP6ZXgZyAJ2OW9OiGqBMWQ==; Date: Wed, 30 Oct 2024 17:12:33 +0200 Message-Id: <86wmhp4obi.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> (message from Tim Ruffing on Wed, 30 Oct 2024 00:14:58 +0100) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Tim Ruffing > Date: Wed, 30 Oct 2024 00:14:58 +0100 > > I've just managed to reproduce this again, and I've attached gdb, but > I'm also stuck at pp doesn't displaying: > (gdb) pp composition_gstring_from_id(19) > (gdb) p composition_gstring_from_id(19) > $6 = (struct Lisp_X *) 0x58ad4d938225 > (gdb) xpr > Lisp_Vectorlike > PVEC_NORMAL_VECTOR > $7 = (struct Lisp_Vector *) 0x58ad4d938220 > {XIL(0x58ad4f32aabd), make_fixnum(19), XIL(0x58ad4d93f8e5), > XIL(0x58ad4d93f93d), XIL(0x58ad4d93f995)} Paul, any ideas why pp would fail to work? I never say anything like that, but maybe external-debugging-output doesn't work when GDB is attached to a running Emacs? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Oct 2024 15:46:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Paul Eggert Cc: dev@real-or-random.org, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173030313125315 (code B ref 73752); Wed, 30 Oct 2024 15:46:01 +0000 Received: (at 73752) by debbugs.gnu.org; 30 Oct 2024 15:45:31 +0000 Received: from localhost ([127.0.0.1]:35770 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6At0-0006aF-TV for submit@debbugs.gnu.org; Wed, 30 Oct 2024 11:45:31 -0400 Received: from eggs.gnu.org ([209.51.188.92]:60994) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Asy-0006a3-L4 for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 11:45:29 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t6Asr-0005Tz-59; Wed, 30 Oct 2024 11:45:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=y21z6SAFM1e+3QdhcC2kR398uZKCCM2V0A2vh0tH8JQ=; b=R9Q5ONE+9pMd /kN8PgEl06w140vlGUe1UavljesaFmGss9eZCNYsJA2NS2atFbOG309pY5lpFHMApWDxFuimqS1bO LCMHkIvGHWG6Vt25nGXKG7yPoBx6CHjhWXZkbYZTyZYfhF1cf27W2nJVRXg7wKwJW2UGhfD/h+LiO nwF6k46j/6OAUS967ZenUph5KHz0WS4W/dse+jTGUOzNrLK31/kTaeLfeU+28oq/cGIHOlZDhCiOs QalnrF2WPg+I/MROWoSjD0WOuHkNJ7SOyIJ+g47Ur4hd91sxnBOvgj9l7Ao6CgewOMUeoE9lkaP7H VKF3yBYe9ngsvYbwp+89dA==; Date: Wed, 30 Oct 2024 17:45:18 +0200 Message-Id: <86o7314msx.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <86wmhp4obi.fsf@gnu.org> (message from Eli Zaretskii on Wed, 30 Oct 2024 17:12:33 +0200) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 73752@debbugs.gnu.org > Date: Wed, 30 Oct 2024 17:12:33 +0200 > From: Eli Zaretskii > > > From: Tim Ruffing > > Date: Wed, 30 Oct 2024 00:14:58 +0100 > > > > I've just managed to reproduce this again, and I've attached gdb, but > > I'm also stuck at pp doesn't displaying: > > (gdb) pp composition_gstring_from_id(19) > > (gdb) p composition_gstring_from_id(19) > > $6 = (struct Lisp_X *) 0x58ad4d938225 > > (gdb) xpr > > Lisp_Vectorlike > > PVEC_NORMAL_VECTOR > > $7 = (struct Lisp_Vector *) 0x58ad4d938220 > > {XIL(0x58ad4f32aabd), make_fixnum(19), XIL(0x58ad4d93f8e5), > > XIL(0x58ad4d93f93d), XIL(0x58ad4d93f995)} > > Paul, any ideas why pp would fail to work? I never say anything like ^^^ "saw" > that, but maybe external-debugging-output doesn't work when GDB is > attached to a running Emacs? > > > > From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Oct 2024 15:48:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Andreas Schwab Cc: dev@real-or-random.org, 73752@debbugs.gnu.org, eggert@cs.ucla.edu Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173030325125506 (code B ref 73752); Wed, 30 Oct 2024 15:48:02 +0000 Received: (at 73752) by debbugs.gnu.org; 30 Oct 2024 15:47:31 +0000 Received: from localhost ([127.0.0.1]:35794 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Aux-0006dK-9s for submit@debbugs.gnu.org; Wed, 30 Oct 2024 11:47:31 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52364) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Auv-0006d9-Dc for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 11:47:30 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t6Aun-0005sA-8o; Wed, 30 Oct 2024 11:47:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=G8CTliISnAVQha2HqYXeB1WMcoAavACu9530DPLhwnw=; b=TcgXh5q3VUAK N6tOYgffaR7apRNZabwDIhNWB+8OVmhuJbTguQeL/ThhgNYk10oNdKOV35EtFisFLyqZwpeYXwI+o JXC4Nrx7I2pebesDtB0ZCvfuMaJbY1ETWE/oVYvt8a5tfShfFp4Vp+/n+gRhYp0cYTT2zriE1kfsI g+zr3XNH2GIAeX1cgbw6BA51kjb+Z80/8AksGbpeRUqiWmidjHa1NZ6fQsppU+KHadlex2EeANZdo L9gtvb0m87P9g7UeQaU4YwzLBw3n1f6LPDH9g3qJnUxClbyVwp1AaH6KWcH/noAI/JmhjH+lbAeqP XSkLFMPGNQlHNbvC9I6gZw==; Date: Wed, 30 Oct 2024 17:47:16 +0200 Message-Id: <86msil4mpn.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Andreas Schwab on Wed, 30 Oct 2024 16:22:29 +0100) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Andreas Schwab > Cc: Tim Ruffing , Paul Eggert , > 73752@debbugs.gnu.org > Date: Wed, 30 Oct 2024 16:22:29 +0100 > > On Okt 30 2024, Eli Zaretskii wrote: > > >> From: Tim Ruffing > >> Date: Wed, 30 Oct 2024 00:14:58 +0100 > >> > >> I've just managed to reproduce this again, and I've attached gdb, but > >> I'm also stuck at pp doesn't displaying: > >> (gdb) pp composition_gstring_from_id(19) > >> (gdb) p composition_gstring_from_id(19) > >> $6 = (struct Lisp_X *) 0x58ad4d938225 > >> (gdb) xpr > >> Lisp_Vectorlike > >> PVEC_NORMAL_VECTOR > >> $7 = (struct Lisp_Vector *) 0x58ad4d938220 > >> {XIL(0x58ad4f32aabd), make_fixnum(19), XIL(0x58ad4d93f8e5), > >> XIL(0x58ad4d93f93d), XIL(0x58ad4d93f995)} > > > > Paul, any ideas why pp would fail to work? I never say anything like > > that, but maybe external-debugging-output doesn't work when GDB is > > attached to a running Emacs? > > pp is calling Emacs to print to its stderr. If that is redirected > somewhere else you won't see the output. That's what I suspected, thanks. So there's no way to use pp when GDB is attached to an Emacs that was not started from a shell prompt? Or can the user do something to make that output show somewhere? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Tim Ruffing Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Oct 2024 17:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii , Andreas Schwab Cc: dev@real-or-random.org, 73752@debbugs.gnu.org, eggert@cs.ucla.edu Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17303096966200 (code B ref 73752); Wed, 30 Oct 2024 17:35:02 +0000 Received: (at 73752) by debbugs.gnu.org; 30 Oct 2024 17:34:56 +0000 Received: from localhost ([127.0.0.1]:36300 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Cau-0001bw-9a for submit@debbugs.gnu.org; Wed, 30 Oct 2024 13:34:56 -0400 Received: from mout-p-102.mailbox.org ([80.241.56.152]:52656) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Cas-0001bk-38 for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 13:34:54 -0400 Received: from smtp102.mailbox.org (smtp102.mailbox.org [IPv6:2001:67c:2050:b231:465::102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 4XdvPh2606z9sZt; Wed, 30 Oct 2024 18:34:16 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=real-or-random.org; s=MBO0001; t=1730309656; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Id0d89H9QpHZCKLSXPv/bTlzL06I2gD1OhSe5lb/fnM=; b=mI28OmiVjaJ2WRIgJRZHM2wLcv5Tu5lISf90pQm8Ziv+rzOxN4ftsaMzsRLeTdyCS8Nzld H/cXAuZjj1Bu3GiPGbyFGTZuVuf0pUYNAwQ0LvKLDhsgkbKsdJyUqQ8PeojMRwgXfHYTNI fQ1E+gPFwwlDCwdnD8ORcTm53G4hcFgY//Vc+yBSFXClwETBucWWiBsu1ahQoHvV6PhtZk o5+7JG02k8f4Rg2jYoYw/gV6d88JJ/RnnYmQtZcDRfzs8FyMt00CPeSUOjVzP5+hESsKL4 0iWnrHWob2bNIllQcFXa5oq4nTLIriLIheGlJjhlQi6JcBqaRytpKKsG5kPE+g== Message-ID: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> From: Tim Ruffing Date: Wed, 30 Oct 2024 18:34:14 +0100 In-Reply-To: <86msil4mpn.fsf@gnu.org> References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Rspamd-Queue-Id: 4XdvPh2606z9sZt X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > > pp is calling Emacs to print to its stderr.=C2=A0 If that is redirected > > somewhere else you won't see the output. >=20 Ah, this was the right hint. I'm using emacs in daemon mode, started from systemd, so I can inspect stderr via journalctl. ------ Broken rendering for ligature "=3D=3D=3D" starting at pos 1290 (emacs happe= ns to be in daemon mode) [...] 39 480: COMP[19 (0..0)] pos=3D1290 w=3D20 a+d=3D20+6 face=3D39 MB 40 500: COMP[19 (1..1)] pos=3D1291 w=3D20 a+d=3D20+6 face=3D39 MB 41 520: COMP[19 (2..2)] pos=3D1292 w=3D20 a+d=3D20+6 face=3D39 MB [...] $ pp composition_gstring_from_id(19) =20 [[# 61 61 61] 19 [0 0 61 5852 10 1 11 11 -4 [0 0 20]] [1 1 61 = 5896 10 -1 11 11 -4 [0 0 20]] [2 2 61 5891 10 -1 9 11 -4 [0 0 20]]] ------- Proper rendering (emacs happens to be not in daemon mode): 39 390: COMP[13 (0..0)] pos=3D1290 w=3D10 a+d=3D20+6 face=3D39 MB 40 400: COMP[13 (1..1)] pos=3D1291 w=3D10 a+d=3D20+6 face=3D39 MB 41 410: COMP[13 (2..2)] pos=3D1292 w=3D10 a+d=3D20+6 face=3D39 MB $ pp composition_gstring_from_id(13)=20 [[# 61 61 61] 13 [0 0 61 5852 10 1 11 11 -4 nil] [1 1 61 5896 = 10 -1 11 11 -4 nil] [2 2 61 5891 10 -1 9 11 -4 nil]]=20 Both sessions are still running. I Hope this helps. Let me know if need more remote hands. Best, Tim=20 From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Oct 2024 17:47:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing Cc: dev@real-or-random.org, Visuwesh , xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17303103798163 (code B ref 73752); Wed, 30 Oct 2024 17:47:02 +0000 Received: (at 73752) by debbugs.gnu.org; 30 Oct 2024 17:46:19 +0000 Received: from localhost ([127.0.0.1]:36355 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Clu-00027a-Jq for submit@debbugs.gnu.org; Wed, 30 Oct 2024 13:46:18 -0400 Received: from eggs.gnu.org ([209.51.188.92]:58668) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Clr-00027P-Kv for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 13:46:17 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t6Clk-0005wZ-PM; Wed, 30 Oct 2024 13:46:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=kZtqGkgG9o+zsb4hgc0JI8wZG1LSbGy3eaEJb+A5eK4=; b=UojL752CFdLdbCADMvY8 z7tiqrgK3REMnYVWwf5balWdeU4j5A6MWBB6aa9kQMmc1oA/p5KPCprutyWNSz3YORgDFP8iC+7cQ WCKI/oHk/H1tgW7xjehONKt2LNF4LVeTBNBLJwIhKliW6xubDYNpxpxDDJUEkqBQGPic+DFXL7eZw IHfRzkiPK4oGhuXrxN/1GOB1Pr2ReVLApsN3WlxJh1GUtArlpW/k3UnpVwIcZ8FsYK+8bkAa3C8mg HtNfF05mf31NJuoE4nRUjvUIF+6aDwrs0FkYIFATc6WwdPs20qZ+66zczdJ0iQ+yRDjiXec9ZHOKI e+TCh+BhuciJdA==; Date: Wed, 30 Oct 2024 19:46:05 +0200 Message-Id: <86ed3x4h7m.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> (message from Tim Ruffing on Wed, 30 Oct 2024 18:34:14 +0100) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Tim Ruffing > Cc: dev@real-or-random.org, eggert@cs.ucla.edu, 73752@debbugs.gnu.org > Date: Wed, 30 Oct 2024 18:34:14 +0100 > > > > > pp is calling Emacs to print to its stderr.  If that is redirected > > > somewhere else you won't see the output. > > > > Ah, this was the right hint. I'm using emacs in daemon mode, started > from systemd, so I can inspect stderr via journalctl. > > ------ > > Broken rendering for ligature "===" starting at pos 1290 (emacs happens > to be in daemon mode) > > [...] > 39 480: COMP[19 (0..0)] pos=1290 w=20 a+d=20+6 face=39 MB > 40 500: COMP[19 (1..1)] pos=1291 w=20 a+d=20+6 face=39 MB > 41 520: COMP[19 (2..2)] pos=1292 w=20 a+d=20+6 face=39 MB > [...] > > $ pp composition_gstring_from_id(19) > > [[# 61 61 61] 19 [0 0 61 5852 10 1 11 11 -4 [0 0 20]] [1 1 61 5896 10 -1 11 11 -4 [0 0 20]] [2 2 61 5891 10 -1 9 11 -4 [0 0 20]]] > > ------- > > Proper rendering (emacs happens to be not in daemon mode): > > 39 390: COMP[13 (0..0)] pos=1290 w=10 a+d=20+6 face=39 MB > 40 400: COMP[13 (1..1)] pos=1291 w=10 a+d=20+6 face=39 MB > 41 410: COMP[13 (2..2)] pos=1292 w=10 a+d=20+6 face=39 MB > > $ pp composition_gstring_from_id(13) > > [[# 61 61 61] 13 [0 0 61 5852 10 1 11 11 -4 nil] [1 1 61 5896 10 -1 11 11 -4 nil] [2 2 61 5891 10 -1 9 11 -4 nil]] > > > Both sessions are still running. I Hope this helps. Let me know if need > more remote hands. Did the "bad" display start from "good" at the beginning of a session? Or did it start from "bad" to begin with? If the former, the next idea is to put a watchpoint on the cached composition in a session with "good" display, and then do whatever it takes to make it "bad", hoping that the watchpoint will break at some point and show us the code which replaces nil with these [X-OFF Y-OFF WADJUST] vectors. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Tim Ruffing Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Oct 2024 18:01:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii , Tim Ruffing Cc: 73752@debbugs.gnu.org, xuan@xlk.me, Visuwesh Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173031123010553 (code B ref 73752); Wed, 30 Oct 2024 18:01:02 +0000 Received: (at 73752) by debbugs.gnu.org; 30 Oct 2024 18:00:30 +0000 Received: from localhost ([127.0.0.1]:36429 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Cze-0002k9-FJ for submit@debbugs.gnu.org; Wed, 30 Oct 2024 14:00:30 -0400 Received: from mout-p-202.mailbox.org ([80.241.56.172]:40208) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Czc-0002jz-3l for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 14:00:29 -0400 Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:b231:465::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4Xdvzk62mmz9tZV; Wed, 30 Oct 2024 19:00:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=real-or-random.org; s=MBO0001; t=1730311218; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Y/S4sxE6bp8fD5VVZbq2V01m3fF1BmDHiMJOc9ARJlg=; b=yhwn46TLSGjzB0VDJ7zNrGbWK/JnD3RHRwfqJ/W0KWTfvd+Po8zptOXg+ZJrxmx0EmQEDl tYhL69l+HtM3GVwEg4LyvVdMZrI4XKUrH2UyzMz1tjX9uUQpXqENgrtiJD12WoOY6q+UmU 2NotP/+vW1P58HfpHeZAIx5vy6DGZdPlCiee3UamZSrHF7AdHzOdDiaJ4wOBkORk56CZa7 tz7N9UElTsyo35ZyctaezD1dR6Lc8P3v1cZNPY/DmDf/XXXfW65250FyPcyuHcAB69Hh4o mv3876hYy4+C7oDB7nagh+lZq7e3Z3AUlzSl9+cLNx8ms9Uejds37djs6i7cJQ== Message-ID: From: Tim Ruffing Date: Wed, 30 Oct 2024 19:00:17 +0100 In-Reply-To: <86ed3x4h7m.fsf@gnu.org> References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Rspamd-Queue-Id: 4Xdvzk62mmz9tZV X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) On Wed, 2024-10-30 at 19:46 +0200, Eli Zaretskii wrote: >=20 > Did the "bad" display start from "good" at the beginning of a > session? Or did it start from "bad" to begin with? I'm rather sure that it started bad from the beginning of the session yesterday. In general, I'm not so sure, unfortunately. (I had disabled ligatures in the past months because this bug was too annoying.) Don't rely on any of this: I can't recall that it ever flipped suddenly from good to bad *when the affected ligatures was in the visible array of the buffer*. But I'm not so sure if this has really never flipped from good to bad during a session, when the ligature was not visible. Perhaps the other reporters have a better memory.=20 Tim From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Oct 2024 18:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing Cc: 73752@debbugs.gnu.org, xuan@xlk.me, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173031465218730 (code B ref 73752); Wed, 30 Oct 2024 18:58:02 +0000 Received: (at 73752) by debbugs.gnu.org; 30 Oct 2024 18:57:32 +0000 Received: from localhost ([127.0.0.1]:36760 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Dsp-0004rp-IE for submit@debbugs.gnu.org; Wed, 30 Oct 2024 14:57:32 -0400 Received: from eggs.gnu.org ([209.51.188.92]:33514) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Dsk-0004qi-4c for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 14:57:26 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t6Dsd-0005cv-MD; Wed, 30 Oct 2024 14:57:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=AXqFVQwdvGWZzCWCtObNmG/Jygx797/41ZJprTImjjw=; b=QgHIXckql2i9 UY48i3jEdObHiTl/707ZxHB02oXVuWLe5Lsr8DN0BjZ8A3LeHjft/2LEre6rGQRC7sHh9a7mouMgj P8+Gw34DEkMYYuv4Ia0j64JRKZuyWATwcR8d8GQ+Ph5pmC3vDNBeG4El5fYYkMLThfwCq4Z/fPy81 f3LCIr6eIWWUg9wHyoTHx6nSZQbQPV/Xq0acC/lUJLKHWbbBZmn1xMIMWvLOjB/DlNupEucr9iSgu 8J4x1QqZA2PZDQwXfTcqaT0ruw1QYv/T8qO9W1P9BKCVd32horMMGTu6164hz+hMWj4AScg/cn9/D 2B1P/FvXu5TdtSmOarlNwQ==; Date: Wed, 30 Oct 2024 20:57:10 +0200 Message-Id: <86cyjh4dx5.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Tim Ruffing on Wed, 30 Oct 2024 19:00:17 +0100) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Tim Ruffing > Cc: 73752@debbugs.gnu.org, Visuwesh , xuan@xlk.me > Date: Wed, 30 Oct 2024 19:00:17 +0100 > > > > On Wed, 2024-10-30 at 19:46 +0200, Eli Zaretskii wrote: > > > > Did the "bad" display start from "good" at the beginning of a > > session? Or did it start from "bad" to begin with? > > I'm rather sure that it started bad from the beginning of the session > yesterday. > > In general, I'm not so sure, unfortunately. (I had disabled ligatures > in the past months because this bug was too annoying.) Don't rely on > any of this: I can't recall that it ever flipped suddenly from good to > bad *when the affected ligatures was in the visible array of the > buffer*. But I'm not so sure if this has really never flipped from good > to bad during a session, when the ligature was not visible. Then what exactly is the difference between the session with "good" display and the one with the "bad" display? How come they show the same ligature differently? What did you do to make them have different looks? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Tim Ruffing Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 31 Oct 2024 01:40:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii , Tim Ruffing Cc: 73752@debbugs.gnu.org, xuan@xlk.me, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17303387635636 (code B ref 73752); Thu, 31 Oct 2024 01:40:02 +0000 Received: (at 73752) by debbugs.gnu.org; 31 Oct 2024 01:39:23 +0000 Received: from localhost ([127.0.0.1]:38809 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6K9j-0001Sq-CZ for submit@debbugs.gnu.org; Wed, 30 Oct 2024 21:39:23 -0400 Received: from mout-p-102.mailbox.org ([80.241.56.152]:37272) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6K9h-0001Sk-5U for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 21:39:22 -0400 Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:b231:465::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 4Xf69C5Dx2z9t5C; Thu, 31 Oct 2024 02:39:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=real-or-random.org; s=MBO0001; t=1730338751; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fQlcJ+xKbyCXYL8lqVMLG+q6I+HMIbnMkr1fgJDeYp4=; b=aCgv36A4NguRG9P3Q+Txy4/OgnNmEFNLAFC+I8Luy73LM6MmlAfvzKRgf9Ui9nLhWMwRur eCH+R3yJBlbbUZyFQybS3FMWuI0td40D7KX4NuxpDT45cX71zI38hNY2yQC4lcedMoWXaq f7+gtAisy22TDybYcjDn2NssJGcgY2KEGTboICO7GpJB2ICMOCdR1R294wfE6/16IQbYad crwpycVPwdC58nla99NCaI6DoGAVwwi2dymv0G406B5XALVmZnQIMM3JhDfEf1nk3NoKT4 AlHMRerfInWJuO9IEsv2YffFPYXZND5sBf9iqm/CNdHDnB1YAnmRoNlw3aPs2A== Message-ID: <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> From: Tim Ruffing Date: Thu, 31 Oct 2024 02:39:09 +0100 In-Reply-To: <86cyjh4dx5.fsf@gnu.org> References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Rspamd-Queue-Id: 4Xf69C5Dx2z9t5C X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) On Wed, 2024-10-30 at 20:57 +0200, Eli Zaretskii wrote: >=20 >=20 > Then what exactly is the difference between the session with "good" > display and the one with the "bad" display?=C2=A0 How come they show the > same ligature differently?=C2=A0 What did you do to make them have > different looks? Nothing (that I'm aware of.) This appears to be non-deterministic. Sometimes it works, sometimes it doesn't. And Yixuan seems to say the same when he says that this looks like race condition. It will still be useful to figure out what sets the [X-OFF Y-OFF WADJUST] vectors instead of nil. After digging into the code a bit, I strongly suspect it's composition_gstring_adjust_zero_width. I'm not sure if I have the time to verify this in the coming days, I'd appreciate if some of the other affected users could give it a try.=C2=A0 I'm not claiming that composition_gstring_adjust_zero_width is wrong, but if my theory is right that it sets the vector if and only if the rendering is bad, then we'll be a step further. This function was introduced in cd88f6de4be1f8eba1db038b371d769f584be53b because of bug#50951. AFAIU it is supposed to correct a grapheme width of 0 pixels to 1 pixel, so that won't explain why large spaces are added. But I skimmed bug#50951 and there are some mentions that composition_gstring_adjust_zero_width is supposed to suppress adding the "space width of the font", which is what some people see here, so all of this sounds a bit related. Next question would be why emacs thinks that the grapheme width was zero in the first place. Tim =20 From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 31 Oct 2024 05:23:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing , Eli Zaretskii Cc: 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17303521313588 (code B ref 73752); Thu, 31 Oct 2024 05:23:02 +0000 Received: (at 73752) by debbugs.gnu.org; 31 Oct 2024 05:22:11 +0000 Received: from localhost ([127.0.0.1]:39858 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6NdL-0000vl-1r for submit@debbugs.gnu.org; Thu, 31 Oct 2024 01:22:11 -0400 Received: from qs51p00im-qukt01071501.me.com ([17.57.155.4]:21113) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6L3c-0003LO-IX for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 22:37:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730342223; bh=X3IOTwv2M21NS5QtYquezT1ZRNgM3g6853ocwzAgl+o=; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type: x-icloud-hme; b=E4vOSLp/jqQotOiIXtrr4sK9hprpZloj5njqkeuZcQN11fjvvOf7Mgu4cf8Os4xtX WlKnTVWjBLoDiNLVeZIN8vYkmeiHqq9+AFObJOi7ly6g56qO8VQgjMge5/Fx5b5Lpz EmyG03sptvqD1olIK+PiC/qGwj9joFfQS0yFH0jUTu4wE47m/jBU119rh7FoA8uq0S gpSDh3yhlGfms38g9qZpSF771qt1uhxeFiTNEQSx5VO7vD+FLzgnEZnPr60fNETHdU e6XVvOngT2xtch22XadA+YiNj49NFEoQoUSym+vsJHL4DMQSoNqEfKqd/noiGMUnMn hrz8jUNNqbZdg== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01071501.me.com (Postfix) with ESMTPSA id 9472E1C40302; Thu, 31 Oct 2024 02:37:01 +0000 (UTC) Message-ID: <135b8c1a-5f0f-4144-b3b0-71c4f28572bc@xlk.me> Date: Wed, 30 Oct 2024 22:36:59 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> Content-Language: en-US From: Yixuan Chen In-Reply-To: <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-ORIG-GUID: OtX1UNygErTwtxl4RaWroIzV7OqrYgxe X-Proofpoint-GUID: OtX1UNygErTwtxl4RaWroIzV7OqrYgxe X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-30_14,2024-10-30_01,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 mlxlogscore=576 malwarescore=0 bulkscore=0 suspectscore=0 adultscore=0 phishscore=0 clxscore=1030 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410310020 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Thu, 31 Oct 2024 01:22:10 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 10/30/24 21:39, Tim Ruffing wrote: > I'm not sure if I have the time to verify this in the coming days, I'd > appreciate if some of the other affected users could give it a try. I'm sorry I wasn't following this thread closely for the last few days. I'm currently busy with a submission due in two weeks so I don't have continuous time to investigate the problem using GDB before Nov. 14. > I can't recall that it ever flipped suddenly from good to > bad *when the affected ligatures was in the visible array of the > buffer*. But I'm not so sure if this has really never flipped from good > to bad during a session, when the ligature was not visible. I'm pretty certain it doesn't happen to a line spontaneously. I usually encounter this behavior (with a probability) when 1. after a font changes, like what the script I submitted did. 2. after switching to a different buffer, even if both buffers contains ligatures and uses the same font/fontset setting (though maybe one of the buffers contains certain characters with bold/italic/etc font attributes, I don't recall it exactly). 3. (maybe) after scrolling down/up the buffer into a position where a line contains ligatures appears. Best, Yixuan From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Yixuan Chen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 31 Oct 2024 05:23:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing , Eli Zaretskii Cc: 73752@debbugs.gnu.org, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17303521323595 (code B ref 73752); Thu, 31 Oct 2024 05:23:02 +0000 Received: (at 73752) by debbugs.gnu.org; 31 Oct 2024 05:22:12 +0000 Received: from localhost ([127.0.0.1]:39860 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6NdL-0000vp-Nt for submit@debbugs.gnu.org; Thu, 31 Oct 2024 01:22:12 -0400 Received: from qs51p00im-qukt01072502.me.com ([17.57.155.15]:7903) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6LCp-0003gn-2f for 73752@debbugs.gnu.org; Wed, 30 Oct 2024 22:46:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xlk.me; s=sig1; t=1730342793; bh=1LUOf2ZG1L7b6t5H2e9zRE5jn7FWSd0LlPHoKGjhkX4=; h=Message-ID:Date:MIME-Version:Subject:From:To:Content-Type: x-icloud-hme; b=P5gwna38aUuJKbaMikIICUIcJsmwEImBiHQ9HETUcafNHNdJ98YaQErycJVa3KRfN PFgFaddSFd/sRauYkWz/DPV9B+X3wDI6rHDW68ObcQQx9O6iLvMqLhrO6Cqh1T5p91 n8WaxYnIIJxJF4/c3MPVp8EhaRM9uPn6FiD0k1RQrMhOjPp0mgBarjrwsie5z96FRt sUCG01/WZmYmsWUsAY+wz2EaQGWRznpu8RSdCjAISYjVotA6BK714o0yYCzhCTB/Hj +17YVnnWRtiFMERQcbP+ABXKHygXjlenkE71U5C+XGVR6bNlPNMswy1agEPfpbeRyn oGjg1PWCkIIyQ== Received: from [192.168.1.14] (qs51p00im-dlb-asmtp-mailmevip.me.com [17.57.155.28]) by qs51p00im-qukt01072502.me.com (Postfix) with ESMTPSA id E0DC36EC01F4; Thu, 31 Oct 2024 02:46:31 +0000 (UTC) Message-ID: <1297a8f4-a2a7-4737-8feb-8580028d6d78@xlk.me> Date: Wed, 30 Oct 2024 22:46:30 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Yixuan Chen References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <135b8c1a-5f0f-4144-b3b0-71c4f28572bc@xlk.me> Content-Language: en-US In-Reply-To: <135b8c1a-5f0f-4144-b3b0-71c4f28572bc@xlk.me> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-ORIG-GUID: 3YzYdvYpMFjaoFC4qrSRvRfO981zj3II X-Proofpoint-GUID: 3YzYdvYpMFjaoFC4qrSRvRfO981zj3II X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-30_14,2024-10-30_01,2024-09-30_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 malwarescore=0 mlxscore=0 mlxlogscore=823 clxscore=1030 adultscore=0 bulkscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2410310020 X-Spam-Score: 0.0 (/) X-Mailman-Approved-At: Thu, 31 Oct 2024 01:22:10 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli, An idea on reproducibility: if I can build an container image (I don't know if it will work, but the idea is through wayland socket bind mount) or an VM image where emacs can consistently demonstrate the problem, would that be acceptable? That way maybe you can have a first hand experience with the problem. If so, what format do you accept? On 10/30/24 22:36, Yixuan Chen wrote: > On 10/30/24 21:39, Tim Ruffing wrote: >> I'm not sure if I have the time to verify this in the coming days, I'd >> appreciate if some of the other affected users could give it a try. > > I'm sorry I wasn't following this thread closely for the last few days. > I'm currently busy with a submission due in two weeks so I don't have > continuous time to investigate the problem using GDB before Nov. 14. > >> I can't recall that it ever flipped suddenly from good to >> bad *when the affected ligatures was in the visible array of the >> buffer*. But I'm not so sure if this has really never flipped from good >> to bad during a session, when the ligature was not visible. > > I'm pretty certain it doesn't happen to a line spontaneously. I usually > encounter this behavior (with a probability) when > 1. after a font changes, like what the script I submitted did. > 2. after switching to a different buffer, even if both buffers contains > ligatures and uses the same font/fontset setting (though maybe one of > the buffers contains certain characters with bold/italic/etc font > attributes, I don't recall it exactly). > 3. (maybe) after scrolling down/up the buffer into a position where a > line contains ligatures appears. > > Best, > Yixuan From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 31 Oct 2024 07:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yixuan Chen Cc: dev@real-or-random.org, visuweshm@gmail.com, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173036066221411 (code B ref 73752); Thu, 31 Oct 2024 07:45:02 +0000 Received: (at 73752) by debbugs.gnu.org; 31 Oct 2024 07:44:22 +0000 Received: from localhost ([127.0.0.1]:40592 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Pqv-0005ZH-V5 for submit@debbugs.gnu.org; Thu, 31 Oct 2024 03:44:22 -0400 Received: from eggs.gnu.org ([209.51.188.92]:35704) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Pqt-0005Z9-Hh for 73752@debbugs.gnu.org; Thu, 31 Oct 2024 03:44:20 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t6Pqn-0002h2-Gs; Thu, 31 Oct 2024 03:44:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=6jfiemqN7kjv70VVPA+TBCsClg5vtRaA74c2lMDm0OI=; b=OP/ISSQ4Of7Y kHRvKujh8NemnvyPCOhc199lqYxdEA0wuosQlir+6IN+33mPvqyY55aIgItxVAlcRfcNAPJvojPB4 z0XjG+LDQ8r0XoGrGJpv4zmMchETrr1Q5UqKNgvOAQyyzfDJb652ZXZj9IBWQ/uZbfZ9kedso5dRB U93oOuvswMUQXrAyrqd9ZfpTNoImkAwbo8wTWPDv92CEaCLOEjCUgP2C68OO3bkg0MLoXmM/WtvbU KapKIeAvx7vK6nZEUrQz+rK/+i5Kh6ewrK4mXUwPpQSSrOWaOvIdT5bGR4g0+to7zunEoErEjzdYb HwjLJlyBH3+FMKpJThEURQ==; Date: Thu, 31 Oct 2024 09:44:11 +0200 Message-Id: <8634kc4sz8.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <1297a8f4-a2a7-4737-8feb-8580028d6d78@xlk.me> (message from Yixuan Chen on Wed, 30 Oct 2024 22:46:30 -0400) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <135b8c1a-5f0f-4144-b3b0-71c4f28572bc@xlk.me> <1297a8f4-a2a7-4737-8feb-8580028d6d78@xlk.me> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 30 Oct 2024 22:46:30 -0400 > From: Yixuan Chen > Cc: 73752@debbugs.gnu.org, visuweshm@gmail.com > > An idea on reproducibility: if I can build an container image (I don't > know if it will work, but the idea is through wayland socket bind mount) > or an VM image where emacs can consistently demonstrate the problem, > would that be acceptable? I don't think so, no. I have no system where I could run such an image with debugging capabilities I need. Let's try to follow up the information we already uncovered, it might be that we have good leads already. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 31 Oct 2024 08:14:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: Tim Ruffing , xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173036239525200 (code B ref 73752); Thu, 31 Oct 2024 08:14:02 +0000 Received: (at 73752) by debbugs.gnu.org; 31 Oct 2024 08:13:15 +0000 Received: from localhost ([127.0.0.1]:40779 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6QIs-0006YO-MH for submit@debbugs.gnu.org; Thu, 31 Oct 2024 04:13:15 -0400 Received: from mail-pj1-f68.google.com ([209.85.216.68]:46426) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6QIo-0006YE-VX for 73752@debbugs.gnu.org; Thu, 31 Oct 2024 04:13:13 -0400 Received: by mail-pj1-f68.google.com with SMTP id 98e67ed59e1d1-2e3fca72a41so573341a91.1 for <73752@debbugs.gnu.org>; Thu, 31 Oct 2024 01:13:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730362330; x=1730967130; darn=debbugs.gnu.org; h=mime-version:message-id:date:user-agent:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=t59N5Nsn5HAqC10LUmuRgF9xJEON7LsK2aAAZZKRR9U=; b=TY+mn+Q37oOnFIw8OpI60xyrUt2qJeGrAI2VUaWvEoE2zxiOJpVoEg3+z6RqHUrSva myfOBLD6ZT2PXOl9WcWZhafWzOiKcqAXp1PnOMIlr4G+UlYjuuGKWihEiqxh6Y4vk9tJ CTsg3P3NGBrmlOmaRt5SDu6fQWTssjBnF6dz6IAB0y/qMJR9/axeWdnHdUNbEtfF5y7J dZdzviOWCZDgd2Vz8rSRWdja6B7hoYj+Wt74XnKDrgaIBQWwFQDXr0Npg+ZfaiTowKgW aB/5P+bgzcofCgdRWggpNurxkpDc5k3GLRtHXXR2i4sN2Fvt3IRqzVlWbn6a3uEWAsuX Y2+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730362330; x=1730967130; h=mime-version:message-id:date:user-agent:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=t59N5Nsn5HAqC10LUmuRgF9xJEON7LsK2aAAZZKRR9U=; b=kgNGpmdSlWt3hXkls4M8pUWUYSmF+bcKzIQlfYrPaQeq6WRual4bsEu2Zn8TQ1kbXK q/HONLtJ//ar3xXeXTCa9CmpsCD5pirOV1gsyK/WpUvZj5cp/8+sPyPjT+4uOOzQVaf5 6lnKuHJCYEW8EV5tANTKWAQfsd0GIQDiQviNZE9ZPbRp1hTo69e0VfyCW+AjFoL9hmFY yZgEOw1POJHVvc2yCDBP675rvkXafXpD5Xkab3/Hj/9hiXvwm6AXOP66H9L93xljiw53 9wDjxFLMow3RbJrt9M01BvvtiuZOib0WL0K6XOCoz0U+OU238+2RHirxJQrxphYu41IQ 9sHQ== X-Forwarded-Encrypted: i=1; AJvYcCWKn5ByySCFcrA5UoQjoye+6no+XIYGWIeTbCYIUw0SjveSOCt7r2X7uIvpEPhSaU5tCNz9VQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzUFbg7E3cqBuq1MYFiFFF7/lrPxsqPZqDyzkXTK1BgXBCm8TYF UgYzut/j5DPMuA372/nCEHOJhsDVAepzBwGe2ZNxtM48t+GPG2oY X-Google-Smtp-Source: AGHT+IGSPA9+kKq8u0rfFT5RagyBOMIomwTebPb71vfPdSI7ndB1/CY0g3biee6ooeuC7y08Ogfohw== X-Received: by 2002:a17:90b:1805:b0:2e2:e743:7501 with SMTP id 98e67ed59e1d1-2e93c158ce6mr2828277a91.8.1730362330018; Thu, 31 Oct 2024 01:12:10 -0700 (PDT) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e92fa5836csm3018917a91.28.2024.10.31.01.12.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Oct 2024 01:12:09 -0700 (PDT) From: Visuwesh In-Reply-To: <86ed3x4h7m.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 30 Oct 2024 19:46:05 +0200") References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Date: Thu, 31 Oct 2024 13:42:06 +0530 Message-ID: <87zfmky9m1.fsf@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable [=E0=AE=AA=E0=AF=81=E0=AE=A4=E0=AE=A9=E0=AF=8D =E0=AE=85=E0=AE=95=E0=AF=8D= =E0=AE=9F=E0=AF=8B=E0=AE=AA=E0=AE=B0=E0=AF=8D 30, 2024] Eli Zaretskii wrote: >> From: Tim Ruffing >> Cc: dev@real-or-random.org, eggert@cs.ucla.edu, 73752@debbugs.gnu.org >> Date: Wed, 30 Oct 2024 18:34:14 +0100 >>=20 >>=20 >> > > pp is calling Emacs to print to its stderr.=C2=A0 If that is redirec= ted >> > > somewhere else you won't see the output. >> >=20 >>=20 >> Ah, this was the right hint. I'm using emacs in daemon mode, started >> from systemd, so I can inspect stderr via journalctl. >>=20 >> ------ >>=20 >> Broken rendering for ligature "=3D=3D=3D" starting at pos 1290 (emacs ha= ppens >> to be in daemon mode) >>=20 >> [...] >> 39 480: COMP[19 (0..0)] pos=3D1290 w=3D20 a+d=3D20+6 face=3D39 MB >> 40 500: COMP[19 (1..1)] pos=3D1291 w=3D20 a+d=3D20+6 face=3D39 MB >> 41 520: COMP[19 (2..2)] pos=3D1292 w=3D20 a+d=3D20+6 face=3D39 MB >> [...] >>=20 >> $ pp composition_gstring_from_id(19) >>=20=20 >> [[# 61 61 61] 19 [0 0 61 5852 10 1 11 11 -4 [0 0 20]] [1 1 = 61 5896 10 -1 11 11 -4 [0 0 20]] [2 2 61 5891 10 -1 9 11 -4 [0 0 20]]] >>=20 >> ------- >>=20 >> Proper rendering (emacs happens to be not in daemon mode): >>=20 >> 39 390: COMP[13 (0..0)] pos=3D1290 w=3D10 a+d=3D20+6 face=3D39 MB >> 40 400: COMP[13 (1..1)] pos=3D1291 w=3D10 a+d=3D20+6 face=3D39 MB >> 41 410: COMP[13 (2..2)] pos=3D1292 w=3D10 a+d=3D20+6 face=3D39 MB >>=20 >> $ pp composition_gstring_from_id(13)=20 >>=20 >> [[# 61 61 61] 13 [0 0 61 5852 10 1 11 11 -4 nil] [1 1 61 58= 96 10 -1 11 11 -4 nil] [2 2 61 5891 10 -1 9 11 -4 nil]]=20 >>=20 >>=20 >> Both sessions are still running. I Hope this helps. Let me know if need >> more remote hands. I observe very similar results: Properly rendered (in a fresh Emacs session): [[# 45 45 62] 2 [0 0 45 1970 9 0 9 7 -4 nil] [1 1 45 1969 9 -1 10 = 7 -4 nil] [2 2 62 2728 9 -1 9 11 0 nil]] Misaligned: [[# 45 45 62] 2231 [0 0 45 1970 9 0 9 7 -4 [0 0 10]] [1 1 45 1969 = 9 -1 10 7 -4 [0 0 10]] [2 2 62 2728 9 -1 9 11 0 [0 0 10]]] In the misaligned session, cached entry for the same text ("-->") that is rendered properly at a different font size: [[# 45 45 62] 2179 [0 0 45 1970 10 0 11 7 -4 nil] [1 1 45 1969 10 = -1 11 7 -4 nil] [2 2 62 2728 10 -1 10 12 0 nil]] --=-=-= Content-Type: text/plain > Did the "bad" display start from "good" at the beginning of a session? > Or did it start from "bad" to begin with? If the former, the next > idea is to put a watchpoint on the cached composition in a session > with "good" display, and then do whatever it takes to make it "bad", > hoping that the watchpoint will break at some point and show us the > code which replaces nil with these [X-OFF Y-OFF WADJUST] vectors. I think it starts from "bad" to begin with. But the former theory could still apply, if you do not mind this vague answer, can you provide instructions to set a watchpoint? If the watchpoint never triggers, we might be able to at least rule out the former theory. --=-=-=-- From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 31 Oct 2024 09:43:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing Cc: 73752@debbugs.gnu.org, xuan@xlk.me, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17303677463926 (code B ref 73752); Thu, 31 Oct 2024 09:43:02 +0000 Received: (at 73752) by debbugs.gnu.org; 31 Oct 2024 09:42:26 +0000 Received: from localhost ([127.0.0.1]:41197 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6RhC-00011G-2U for submit@debbugs.gnu.org; Thu, 31 Oct 2024 05:42:26 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59764) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Rh9-000114-6G for 73752@debbugs.gnu.org; Thu, 31 Oct 2024 05:42:24 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t6Rh0-0008J4-S5; Thu, 31 Oct 2024 05:42:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=QlCXt40m+Pu6NwT6aBCifCC0VIgEJi5lnuxBEAQ2mPs=; b=S7YaLtKel/hbQMUhLhc3 gonPBao7gLxi/voHp9hkWC3K0UYQOluyF7uVgfBLVXBBHlxFODjbCJIF7y28MKr7mWnwPs3qj9gx+ DfiBAl8SKtGIjN7N0lYA3sdow+OKvASPV+4so6rEHXOoRWlc3puMIxGMorh5feCHa9Hh3zwceUoHd WEKJURziSVZ1mxCdk9UvzEhRsQ6GBnudnocG8j79INfrBSpF3R7SSuQF9C+NU2PL3zQFLyRxsWI2I mLNcz9yvkIN+cxr/5TXtrXrveTxvTp2ih0lJN846HSoO8HVhJLbq3XF3IEEHRETKUENksEJrOaj8y duhgy4BLEinHtw==; Date: Thu, 31 Oct 2024 11:42:12 +0200 Message-Id: <86wmho38y3.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> (message from Tim Ruffing on Thu, 31 Oct 2024 02:39:09 +0100) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Tim Ruffing > Cc: 73752@debbugs.gnu.org, visuweshm@gmail.com, xuan@xlk.me > Date: Thu, 31 Oct 2024 02:39:09 +0100 > > > Then what exactly is the difference between the session with "good" > > display and the one with the "bad" display?  How come they show the > > same ligature differently?  What did you do to make them have > > different looks? > > Nothing (that I'm aware of.) This appears to be non-deterministic. > Sometimes it works, sometimes it doesn't. And Yixuan seems to say the > same when he says that this looks like race condition. If that's the case, we need to understand what causes such a "race condition". Emacs is single-threaded, so it's hard to imagine something like that. > It will still be useful to figure out what sets the [X-OFF Y-OFF > WADJUST] vectors instead of nil. After digging into the code a bit, I > strongly suspect it's composition_gstring_adjust_zero_width. > > I'm not sure if I have the time to verify this in the coming days, I'd > appreciate if some of the other affected users could give it a try.  > > I'm not claiming that composition_gstring_adjust_zero_width is wrong, > but if my theory is right that it sets the vector if and only if the > rendering is bad, then we'll be a step further. > > This function was introduced in > cd88f6de4be1f8eba1db038b371d769f584be53b because of bug#50951. AFAIU it > is supposed to correct a grapheme width of 0 pixels to 1 pixel, so that > won't explain why large spaces are added. But I skimmed bug#50951 and > there are some mentions that composition_gstring_adjust_zero_width is > supposed to suppress adding the "space width of the font", which is > what some people see here, so all of this sounds a bit related. Next > question would be why emacs thinks that the grapheme width was zero in > the first place. The way forward would be to set a breakpoint inside the width == 0 condition in that function: if (NILP (glyph) || from != LGLYPH_FROM (glyph)) { eassert (i > 0); Lisp_Object last = LGSTRING_GLYPH (gstring, i - 1); if (width == 0) { if (NILP (LGLYPH_ADJUSTMENT (last))) <<<<<<<<<<<<<<<<<<<<<<<<< LGLYPH_SET_ADJUSTMENT (last, CALLN (Fvector, make_fixnum (0), make_fixnum (0), make_fixnum (LGLYPH_WIDTH (last) + 1))); else ASET (LGLYPH_ADJUSTMENT (last), 2, make_fixnum (LGLYPH_WADJUST (last) + 1)); } and see if it ever breaks in the scenario(s) where you see the corrupted display. In my testing, that breakpoint never breaks, which is consistent with the fact that none of the glyphs we compose have zero width. They don't have zero width in your "broken rendering" case, either: > $ pp composition_gstring_from_id(19) > > [[# 61 61 61] 19 [0 0 61 5852 10 1 11 11 -4 [0 0 20]] [1 1 61 5896 10 -1 11 11 -4 [0 0 20]] [2 2 61 5891 10 -1 9 11 -4 [0 0 20]]] (The width is the 5th component of the glyph vector, and they are all positive there.) Same in the example shown by Visuwesh: > Misaligned: > > [[# 45 45 62] 2231 [0 0 45 1970 9 0 9 7 -4 [0 0 10]] [1 1 45 1969 9 -1 10 7 -4 [0 0 10]] [2 2 62 2728 9 -1 9 11 0 [0 0 10]]] So there's something we are missing here. Also note that in Visuwesh's case the WADJUST element corresponds to the width of the previous glyph (9 + 1 = 10), but in your case it doesn't (11 + 1 ≠ 20). So this is another mystery. There are a few calls to lglyph-set-adjustment in composite.el, which could be responsible for this. So if the breakpoint inside composition_gstring_adjust_zero_width never breaks in your sessions, either, the next step is to put a watchpoint on the cached composition created by font-shape-gstring and wait for some code to modify the adjustment part. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 31 Oct 2024 09:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17303678484075 (code B ref 73752); Thu, 31 Oct 2024 09:45:02 +0000 Received: (at 73752) by debbugs.gnu.org; 31 Oct 2024 09:44:08 +0000 Received: from localhost ([127.0.0.1]:41208 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Rip-00013f-OH for submit@debbugs.gnu.org; Thu, 31 Oct 2024 05:44:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:35866) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6Rio-00013B-Il for 73752@debbugs.gnu.org; Thu, 31 Oct 2024 05:44:07 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t6Rij-0008TC-2Y; Thu, 31 Oct 2024 05:44:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=uNqtKc6/5KqMK4owg4bxNo+4MEa9IXqhuYSKXMFcoR8=; b=K4NLoyQqa+wI 9JlTOx3Fc7ZPB5+PxrRrz+Frh51M8aLiammbtYrGobTC+R4cNCHMHHaxSQCHJd8s/evMKVey2oqIs HAzKEeACCzHsMY2lHtufYwZ9/QFUWZ5eiw8t4f1DBa1gri1i2eTYiIdm721X+cAh83nB/2ZQOk/tB dURdMqgEUqykYWt7n81CmNMrtEZKd76ZDLVfagS59eSA9xVzXKPh1P47KhnI78j98F8G5q57LZSM0 mk7Z6HzH3UjL9EGiGimb+I4GdIuyGwSQO91T1xPpNo1gk1e6kpBkE+cKG5MT+8H4nvsEak7wlDTRP 7bTMlgKGU/V44JGBcNnVHw==; Date: Thu, 31 Oct 2024 11:43:58 +0200 Message-Id: <86v7x838v5.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87zfmky9m1.fsf@gmail.com> (message from Visuwesh on Thu, 31 Oct 2024 13:42:06 +0530) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <87zfmky9m1.fsf@gmail.com> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: Tim Ruffing , 73752@debbugs.gnu.org, xuan@xlk.me > Date: Thu, 31 Oct 2024 13:42:06 +0530 > > > Did the "bad" display start from "good" at the beginning of a session? > > Or did it start from "bad" to begin with? If the former, the next > > idea is to put a watchpoint on the cached composition in a session > > with "good" display, and then do whatever it takes to make it "bad", > > hoping that the watchpoint will break at some point and show us the > > code which replaces nil with these [X-OFF Y-OFF WADJUST] vectors. > > I think it starts from "bad" to begin with. But the former theory could > still apply, if you do not mind this vague answer, can you provide > instructions to set a watchpoint? If the watchpoint never triggers, we > might be able to at least rule out the former theory. Let's first see if a breakpoint inside composition_gstring_adjust_zero_width ever breaks in your cases. If it doesn't we will try the watchpoint technique. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 01 Nov 2024 17:07:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: dev@real-or-random.org, visuweshm@gmail.com Cc: 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173048076830007 (code B ref 73752); Fri, 01 Nov 2024 17:07:01 +0000 Received: (at 73752) by debbugs.gnu.org; 1 Nov 2024 17:06:08 +0000 Received: from localhost ([127.0.0.1]:50685 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6v67-0007nv-NN for submit@debbugs.gnu.org; Fri, 01 Nov 2024 13:06:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:60012) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t6v62-0007n8-Nu for 73752@debbugs.gnu.org; Fri, 01 Nov 2024 13:06:06 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t6v5v-0005jr-UA; Fri, 01 Nov 2024 13:05:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=c7cehOQ4tuw381pgiVqt3o4fiNHlIszP8AW2PFlAdss=; b=c+5CgJ6XjzDVHUfWBKLg Xn81CJMUlImsUPxrl2OUMAFz5+bZtXP8NesANeiAEo3IFnXAoSsdL0JmhAb24ux2lK4ahLNBD1tKA MRFyFd2flV4y82E5JW+obcCRhEfedDsi9PBOS20ZjAbVK6ZqeEjmzjf09sNrHYC4bDIO5/T5IOejm kZV1Xtak8guPHDu61ZJRfV7wrj7mufWTiCoYZnzhW3eRrXtM8r/cn1aASqf0TO5edzvkt1ZvoeXbR 20x5GSP7RqZXfDT4qS1dM8sQOdHabWutCl9HUCVZbQ8IbkFOSYa8GaQlspvtIuPWaZWkKrPZ+lXM8 Kuj+uEHI61VvOg==; Date: Fri, 01 Nov 2024 19:05:20 +0200 Message-Id: <861pzu28bz.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <86wmho38y3.fsf@gnu.org> (message from Eli Zaretskii on Thu, 31 Oct 2024 11:42:12 +0200) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 73752@debbugs.gnu.org, xuan@xlk.me, visuweshm@gmail.com > Date: Thu, 31 Oct 2024 11:42:12 +0200 > From: Eli Zaretskii > > In my testing, that breakpoint never breaks, which is consistent with > the fact that none of the glyphs we compose have zero width. They > don't have zero width in your "broken rendering" case, either: > > > $ pp composition_gstring_from_id(19) > > > > [[# 61 61 61] 19 [0 0 61 5852 10 1 11 11 -4 [0 0 20]] [1 1 61 5896 10 -1 11 11 -4 [0 0 20]] [2 2 61 5891 10 -1 9 11 -4 [0 0 20]]] > > (The width is the 5th component of the glyph vector, and they are all > positive there.) Same in the example shown by Visuwesh: > > > Misaligned: > > > > [[# 45 45 62] 2231 [0 0 45 1970 9 0 9 7 -4 [0 0 10]] [1 1 45 1969 9 -1 10 7 -4 [0 0 10]] [2 2 62 2728 9 -1 9 11 0 [0 0 10]]] > > So there's something we are missing here. > > Also note that in Visuwesh's case the WADJUST element corresponds to > the width of the previous glyph (9 + 1 = 10), but in your case it > doesn't (11 + 1 ≠ 20). So this is another mystery. > > There are a few calls to lglyph-set-adjustment in composite.el, which > could be responsible for this. So if the breakpoint inside > composition_gstring_adjust_zero_width never breaks in your sessions, > either, the next step is to put a watchpoint on the cached composition > created by font-shape-gstring and wait for some code to modify the > adjustment part. Btw, is your Emacs built with only HarfBuz, or with both HarfBuz and m17n-flt? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Tim Ruffing Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 03:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii , dev@real-or-random.org, visuweshm@gmail.com Cc: 73752@debbugs.gnu.org, xuan@xlk.me Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17305184706105 (code B ref 73752); Sat, 02 Nov 2024 03:35:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 03:34:30 +0000 Received: from localhost ([127.0.0.1]:52718 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t74uE-0001aP-7f for submit@debbugs.gnu.org; Fri, 01 Nov 2024 23:34:30 -0400 Received: from mout-p-101.mailbox.org ([80.241.56.151]:34226) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t74uB-0001aF-86 for 73752@debbugs.gnu.org; Fri, 01 Nov 2024 23:34:28 -0400 Received: from smtp2.mailbox.org (smtp2.mailbox.org [IPv6:2001:67c:2050:b231:465::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 4XgNd75NH3z9sQb; Sat, 2 Nov 2024 04:34:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=real-or-random.org; s=MBO0001; t=1730518459; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=dQFpPXwjhWHjGbKRWbPfqjxBENNBfvmSt6aN06sEwwE=; b=Rrs0XGk0ixlUPKt3YFwGsZCxYiszMtVboLzCjsF0w984o7BscHnyqvZTj71HOhYODS0ysM /is7vkojPZ7V1bStSiYihNPSQSblC6sTLUPTNuQLn6tKfaCW9DW6NEqL134+k9hPVn+dVI f12e/93SIEMffzh3pG32aJhwza7VEulkiQ3jHGJfwpufr9cFLQIJM6GiAXdPkJqz0TTlb5 wtfJ4UE5kc4DfzeAFgsDLaom/p4g3CrKj86IpLHSbXTJSdv5+x2UPFD2kpxXWfjY7IH7cv sZiUgtt3T9xq/Jhgo4KWRJDL2ikBe/oCPiPn25BptElU/9tDttgASgKeQsiElQ== Message-ID: <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> From: Tim Ruffing Date: Sat, 02 Nov 2024 04:34:17 +0100 In-Reply-To: <861pzu28bz.fsf@gnu.org> References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> Content-Type: multipart/mixed; boundary="=-cVHvUP9jqM/HjIYFti3L" MIME-Version: 1.0 X-Rspamd-Queue-Id: 4XgNd75NH3z9sQb X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-cVHvUP9jqM/HjIYFti3L Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Okay, here's what I think is a breakthrough: > > There are a few calls to lglyph-set-adjustment in composite.el, > > which > > could be responsible for this.=C2=A0 So if the breakpoint inside > > composition_gstring_adjust_zero_width never breaks in your > > sessions, > > either, the next step is to put a watchpoint on the cached > > composition > > created by font-shape-gstring and wait for some code to modify the > > adjustment part. >=20 Neither the critical line in composition_gstring_adjust_zero_width nor the calls to lglyph-set-adjustment in composite.el are triggered. But this hack in hbfont_shape means I can't reproduce the bug anymore using Yixuan's init file: diff --git a/src/hbfont.c b/src/hbfont.c index 37ed4132492..6fae513069a 100644 --- a/src/hbfont.c +++ b/src/hbfont.c @@ -592,11 +592,12 @@ hbfont_shape (Lisp_Object lgstring, Lisp_Object direction) LGLYPH_SET_ASCENT (lglyph, metrics.ascent); LGLYPH_SET_DESCENT (lglyph, metrics.descent); =20 xoff =3D lround (pos[i].x_offset * position_unit); yoff =3D - lround (pos[i].y_offset * position_unit); - wadjust =3D lround (pos[i].x_advance * position_unit); + /* wadjust =3D lround (pos[i].x_advance * position_unit); */ + wadjust =3D metrics.width; if (xoff || yoff || wadjust !=3D metrics.width) LGLYPH_SET_ADJUSTMENT (lglyph, CALLN (Fvector, make_fixnum (xoff), make_fixnum (yoff), make_fixnum (wadjust))); Without this patch, what I see with his init file matches his screenshots in the initial bug report (with the same ligatures affected, as far as I can see), namely a single additional "space" at the end of the ligature. Let me note again that this is different from I typically see when I use emacs daily, namely a space after (almost?) every character which is part of the ligature. We may or may not be chasing multiple bugs here. Anyway, I tried adding a printf inside the critical "if" in hbfont.c. This is what I see when the bug triggers: xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * positio= n_unit: 18.000000 xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * positio= n_unit: 18.000000 xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * positio= n_unit: 18.000000 xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * positio= n_unit: 18.000000 xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * positio= n_unit: 18.000000 xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * positio= n_unit: 18.000000 xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * positio= n_unit: 18.000000 So this is not a rounding error at least. ;) Much more interesting: I can reproduce this only when "enough" (or I guess, the right) ligatures are visible in the buffer. With Yixuan's init file, when I not only load but also visit this init file -- just for testing the rendering, because it contains relevant ligatures -- then I can trigger the bug. But I can't trigger it with a reduced version (that notably doesn't contain arrow ligatures)! Eli, perhaps this is precise enough already so that you can reproduce it? See the attached archive: Use it as init-dir. It contains the init script (but I removed the automatic repeat). Visit bad.el. Press C=3D# to initialize the font randomization, and then keep pressing C-RET until you hopefully hit the bug. And I can't reproduce the bug with good.el that has fewer ligatures. So it seems that harfbuzz gives different results for some composition depending on the "context", i.e., the other characters (and ligatures?) that appear in the buffer passed to harfbuzz. Is this a bug in harfbuzz? If you still can't reproduce, what's a good way to pretty print the lgstring passed to hbfont_shape? (I'd prefer changing the code, that's a bit easier than gdb, at least for me.) --=-cVHvUP9jqM/HjIYFti3L Content-Type: application/x-xz-compressed-tar; name="bug-73752.tar.xz" Content-Disposition: attachment; filename="bug-73752.tar.xz" Content-Transfer-Encoding: base64 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 --=-cVHvUP9jqM/HjIYFti3L-- From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 09:53:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing Cc: 73752@debbugs.gnu.org, xuan@xlk.me, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173054116118367 (code B ref 73752); Sat, 02 Nov 2024 09:53:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 09:52:41 +0000 Received: from localhost ([127.0.0.1]:53151 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7AoD-0004mA-7C for submit@debbugs.gnu.org; Sat, 02 Nov 2024 05:52:41 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39240) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7AoA-0004m2-G4 for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 05:52:39 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t7Ao4-0005vV-6P; Sat, 02 Nov 2024 05:52:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=HKbnqdLeIu1330SXrvHBTT4BbYJpEwt+RujfbMv8q74=; b=BNFNmDd17woE dcf+GFhUekvK1f6/nl1bnwWighyUj29prR6/TMIaacrnMCLoFkyp2Efy4KMnrWS5SchGE50kNut59 iwJ1NHT8ozRU3Rl4WqF5Zak4bB3fuZJPjUs5v4z3mBGh0c+pPp/ottw5ndpiaS4yEV2n7eVUPM7Dd 71rnJODUcvVII5ylv7w0nIPGKL+uGT9z92c99Ns1D9CFUbFDaPzsRAOlpNYZoajbnUZHsHguh3DYZ 1dUlLBa2K6/ZAW6XDrmMzsFmR0X5nUV5QhmdaY/omiGkHXaAXqxE1pSIfziFLgJ9MwL95YuDsTPXF 4TGHvfK3rY8NrmQjWaULqw==; Date: Sat, 02 Nov 2024 11:52:29 +0200 Message-Id: <86msiiync2.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> (message from Tim Ruffing on Sat, 02 Nov 2024 04:34:17 +0100) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Tim Ruffing > Cc: 73752@debbugs.gnu.org, xuan@xlk.me > Date: Sat, 02 Nov 2024 04:34:17 +0100 > > Neither the critical line in composition_gstring_adjust_zero_width nor > the calls to lglyph-set-adjustment in composite.el are triggered. But > this hack in hbfont_shape means I can't reproduce the bug anymore using > Yixuan's init file: > > diff --git a/src/hbfont.c b/src/hbfont.c > index 37ed4132492..6fae513069a 100644 > --- a/src/hbfont.c > +++ b/src/hbfont.c > @@ -592,11 +592,12 @@ hbfont_shape (Lisp_Object lgstring, Lisp_Object > direction) > LGLYPH_SET_ASCENT (lglyph, metrics.ascent); > LGLYPH_SET_DESCENT (lglyph, metrics.descent); > > xoff = lround (pos[i].x_offset * position_unit); > yoff = - lround (pos[i].y_offset * position_unit); > - wadjust = lround (pos[i].x_advance * position_unit); > + /* wadjust = lround (pos[i].x_advance * position_unit); */ > + wadjust = metrics.width; > if (xoff || yoff || wadjust != metrics.width) > LGLYPH_SET_ADJUSTMENT (lglyph, CALLN (Fvector, > make_fixnum (xoff), > make_fixnum (yoff), > make_fixnum (wadjust))); Which leads me to the original suggestion in bug#50951, to do this: diff --git a/src/hbfont.c b/src/hbfont.c index 37ed413..040658a 100644 --- a/src/hbfont.c +++ b/src/hbfont.c @@ -600,6 +600,8 @@ hbfont_shape (Lisp_Object lgstring, Lisp_Object direction) make_fixnum (xoff), make_fixnum (yoff), make_fixnum (wadjust))); + else + LGLYPH_SET_ADJUSTMENT (lglyph, Qnil); } return make_fixnum (glyph_len); In bug#50951, an alternative change in fill_gstring_body was proposed (see https://debbugs.gnu.org/cgi/bugreport.cgi?bug=50951#97), which was eventually installed, but I guess that might not be enough? Can you and Visuwesh please confirm that we sometimes get an lgstring argument to hbfont_shape whose glyphs already have a non-nil LGLYPH_ADJUSTMENT component, and we leave it unmodified because the condition to use LGLYPH_SET_ADJUSTMENT isn't satisfied? Like this: (gdb) break hbfont.c:598 if xoff == 0 && yoff == 0 && wadjust == metrics.width && LGLYPH_ADJUSTMENT(lglyph) != Qnil In my testing, a breakpoint with this condition never breaks. But that could be because I use a different font (Cascadia Code, instead of JetBrains Mono, which I don't have), or because my version of HarfBuzz is much older than yours, or for some other reason. > Anyway, I tried adding a printf inside the critical "if" in hbfont.c. > This is what I see when the bug triggers: > > xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * position_unit: 18.000000 > xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * position_unit: 18.000000 > xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * position_unit: 18.000000 > xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * position_unit: 18.000000 > xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * position_unit: 18.000000 > xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * position_unit: 18.000000 > xoff: 0, yoff: 0, wadjust: 18, metrics.width: 9, pos[i].x_advance * position_unit: 18.000000 And what do you see for LGLYPH_ADJUSTMENT in those cases? are they nil or some non-nil vector? If they are always nil, there's some other factor at work here. > Much more interesting: > I can reproduce this only when "enough" (or I guess, the right) > ligatures are visible in the buffer. With Yixuan's init file, when I > not only load but also visit this init file -- just for testing the > rendering, because it contains relevant ligatures -- then I can trigger > the bug. But I can't trigger it with a reduced version (that notably > doesn't contain arrow ligatures)! Alas, this explains nothing, except that there's some mysterious factor that rears its ugly head only under some unknown conditions. Which is something we already knew. > Eli, perhaps this is precise enough already so that you can reproduce > it? See the attached archive: Use it as init-dir. It contains the init > script (but I removed the automatic repeat). Visit bad.el. Press C=# to > initialize the font randomization, and then keep pressing C-RET until > you hopefully hit the bug. It never happens here, no matter how long I hold C-RET when displaying bad.el. > So it seems that harfbuzz gives different results for some composition > depending on the "context", i.e., the other characters (and ligatures?) > that appear in the buffer passed to harfbuzz. Is this a bug in > harfbuzz? We did not yet capture in GDB even a single case when such "bad" grapheme clusters are produced by HarfBuzz, at the moment of their production. So we don't have a C backtrace for those cases, and cannot go up the call-stack to understand the conditions under which this happens. Until we do, we cannot claim this to be a bug in HarfBuzz. (The code in question was written by a HarfBuzz developer, btw, so it presumably is correct.) It could be due to how we call HarfBuzz, or what we pass to it (which is determined, among other things, by the code in ligature.el). > If you still can't reproduce, what's a good way to pretty print the > lgstring passed to hbfont_shape? Use the "pp" command defined on our src/.gdbinit, of course. If you start Emacs from GDB, the result of "pp" will be shown in the GDB interaction window. If you attach GDB to an already running Emacs, be sure to start Emacs from a shell prompt, and don't close the window where the shell runs -- in which case the result of "pp" will show in that window, because we tell Emacs to write the result to its stderr. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 10:34:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173054361223267 (code B ref 73752); Sat, 02 Nov 2024 10:34:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 10:33:32 +0000 Received: from localhost ([127.0.0.1]:53202 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7BRk-00063D-2v for submit@debbugs.gnu.org; Sat, 02 Nov 2024 06:33:32 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:43216) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7BRi-000635-23 for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 06:33:30 -0400 Received: by mail-pl1-f193.google.com with SMTP id d9443c01a7336-20c8c50fdd9so25483415ad.0 for <73752@debbugs.gnu.org>; Sat, 02 Nov 2024 03:33:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730543549; x=1731148349; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tyFuby4yT0DKvQK8iW+mlrpqa3QKrKfY7oMNQ37SwLs=; b=c5Qld9b70HrRI1peAIr88M04R0I8/e1IPi2SNX7/5bAsO8F9jWT5Zau4XNWOnr+WE/ b52PwPRlSF0uU1aIOTZeX4m0biYMTyLtFv5dYVsAt7Cswv6az9MC0XzrFR4xJz6SAWXZ LMxBofHZrmCKsHqk7sR02w0GA+04maIQUdM7cWv8PmOWRYUBp1Y8NteCUEV03eUtq7bM a2B/NpM7hg7G4bDS8tlgtF7j+2OYo/+N6r4Et3TjGAwcsOe6F77iIpiruSbF1ovYc+AD VQS05CW6o1dIhQ+1iAza+ceQmbwsus9cHKM6SA1va29Q9g1/yVtJwYe+dHKMVFwJJgvc bADw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730543549; x=1731148349; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=tyFuby4yT0DKvQK8iW+mlrpqa3QKrKfY7oMNQ37SwLs=; b=d0Sb2QR4rvcz5+OpZpUg9Td2eolTZQsa1grJM8PO440tJx4xM/SSxZLe/xbmoz1m77 CH64SWUv8tkubYIXh6krfTrYuezJLAQZ010UAlx4UZSOdc85qsqU4bxVyhRP7xLt027V 2qxbPBkQlo6lohMCtqKbgUCrnT+PwLJZhYgngRfZhcilm5oo5eFECKEnnCdr18ZTPlTA e/Xj3PJWJ7TZLnqNzD6pVsJzGk49OoEwuri9BlfRisTzJm9O/NvkZ0AU2Y1pgXuvYHgK AB8AKJeBgoPB/Ys3WDSs5XtUom6pC7bifxdBOS3jSo9xCPQoxlwNiApMRbE4yA7YFLgI 3quA== X-Forwarded-Encrypted: i=1; AJvYcCUR4VNbET6bcWE4dijXDqvNzY2MF3kDW5J9VgBiHqSB8JYD02/5dBCyIbJsQ//CPO/7kcEHxQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YxqqPRGzKJ0xITf0bQfMfohRft9FxlGGHCJgAFcP2r/MxXrr/ei pbiWokzyUbWF0IS/Sat0QcpT4wb5CBKMXVW9k6cP/ZjvXMangQdp X-Google-Smtp-Source: AGHT+IGS62TAU9MzrFrGNTMc+zyVStxoube4rpFJwPW7gT1uJ1FLLfJx/GxYXMaFQoi9nCZbfTVY2g== X-Received: by 2002:a17:902:d4cf:b0:20c:8f98:5dbb with SMTP id d9443c01a7336-21105712fa5mr128533045ad.16.1730543548643; Sat, 02 Nov 2024 03:32:28 -0700 (PDT) Received: from localhost ([1.7.159.70]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-211057084casm32095265ad.92.2024.11.02.03.32.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Nov 2024 03:32:27 -0700 (PDT) From: Visuwesh In-Reply-To: <861pzu28bz.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 01 Nov 2024 19:05:20 +0200") References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> Date: Sat, 02 Nov 2024 16:02:24 +0530 Message-ID: <87froax6x3.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=B5=E0=AF=86=E0=AE=B3=E0=AF=8D=E0=AE=B3=E0=AE=BF =E0=AE=A8=E0=AE=B5= =E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AE=B0=E0=AF=8D 01, 2024] Eli Zaretskii wrote: > Btw, is your Emacs built with only HarfBuz, or with both HarfBuz and > m17n-flt? configure log says Does Emacs use -lm17n-flt? no and system-configuration-features does not list m17n either so I am guessing the answer is only HarfBuzz. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 10:41:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: Tim Ruffing , xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173054402924388 (code B ref 73752); Sat, 02 Nov 2024 10:41:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 10:40:29 +0000 Received: from localhost ([127.0.0.1]:53234 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7BYS-0006LG-9C for submit@debbugs.gnu.org; Sat, 02 Nov 2024 06:40:28 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:56405) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7BYQ-0006L8-2v for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 06:40:26 -0400 Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-71e3fce4a60so2245496b3a.0 for <73752@debbugs.gnu.org>; Sat, 02 Nov 2024 03:40:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730543965; x=1731148765; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XdoE8i09+mTHletawy3oYQW/4KYL7ddzsR95GJFtIh8=; b=Sw1ttvD0QSrpXX9ZJw0ySZpBI9DsQM3TvZV0zsrq0RtXMAXbUvcJzDENx8DgJJ7HWt 3oCnEtfFt8NsJcpNO15lwahuLVORr48NeamHRx7l/PMfXeazcJVO+BQGeg6k2lJtrc6E pHvNeucFYBNxOmTH0l+T1wSYAH6jOgBEn4c0wG9+cVqBegFM30sBhXEB8WmfD/w6JNVc Xi4od0Lk55dD6hG9JId+0/ZBfvwbvL9RjqnppQo64PZS3jb9X/YlruDOBrrymRXUcZpA D33Fif8Kt7KIF95Au3xdQyp/G/+RaK8IRY9/55yAc7Orzwy34EpxBh6Gmr1S1T93Nx/m aCzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730543965; x=1731148765; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=XdoE8i09+mTHletawy3oYQW/4KYL7ddzsR95GJFtIh8=; b=wArC4Or8UrZGaiJJ/RjecZrfOiE4aNxu5LY/zZowMZ+6uYqXvOxwacKhgXXnZj+DKT Ag0BLbjyyLFRzEppW5FgnYWV4HzdJUS0ADZlh+lV5Kp4jcQI0oJazGF7LaI2QIWUb/zZ bqfpr2Ra7TU+JTmUFYXYi1oOBG1j+t+PtwS9w/5o0CGRNiKNHjkkTC3ZyYmKupoMfekv VVXhL1LWu7cQkCrHO1EkjKUNTtdQ9sIxFT0wqXgWVSPOB6PyJqSPCnyIBcbcrjy59ni6 Ovowpu5wvm4B3oM7wVYZ8kJDrVE+NYjbh9GvHsTyJbZSKQGxhr+Ypx4QsH6A2JZWbovq iNMw== X-Forwarded-Encrypted: i=1; AJvYcCXxq0p0TUYv0Y5rzuoNgZeNHLvF3YRp8Gmrmx5E37cl7OdNoJqts2SDRW9URG7EaYXYT/jDNw==@debbugs.gnu.org X-Gm-Message-State: AOJu0YwXDUkIArk63byQQIPHTWBuJL8etVb9blDC3Ww+lMPwX3NVspd5 bLmpE5gyqfFGoKcHpOaP2B4fKl5y54GIx3k86lB27/pTMEXLan71 X-Google-Smtp-Source: AGHT+IFGLkeFFQ1gTWA+xAgHGT0jsnlzIwTvSrlvyz2bV+jIpUhIN4U9jKV0FjVz02HMvNuBjZ4roA== X-Received: by 2002:a05:6a00:cc4:b0:71e:79a8:1d84 with SMTP id d2e1a72fcca58-72062eccf33mr35860912b3a.3.1730543965224; Sat, 02 Nov 2024 03:39:25 -0700 (PDT) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-720bc316357sm3887423b3a.204.2024.11.02.03.39.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Nov 2024 03:39:24 -0700 (PDT) From: Visuwesh In-Reply-To: <86msiiync2.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 02 Nov 2024 11:52:29 +0200") References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> Date: Sat, 02 Nov 2024 16:09:15 +0530 Message-ID: <87bjyxyl64.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA= =E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: >> From: Tim Ruffing >> Cc: 73752@debbugs.gnu.org, xuan@xlk.me >> Date: Sat, 02 Nov 2024 04:34:17 +0100 >>=20 >> Neither the critical line in composition_gstring_adjust_zero_width nor >> the calls to lglyph-set-adjustment in composite.el are triggered. But >> this hack in hbfont_shape means I can't reproduce the bug anymore using >> Yixuan's init file: >>=20 >> diff --git a/src/hbfont.c b/src/hbfont.c >> index 37ed4132492..6fae513069a 100644 >> --- a/src/hbfont.c >> +++ b/src/hbfont.c >> @@ -592,11 +592,12 @@ hbfont_shape (Lisp_Object lgstring, Lisp_Object >> direction) >> LGLYPH_SET_ASCENT (lglyph, metrics.ascent); >> LGLYPH_SET_DESCENT (lglyph, metrics.descent); >>=20=20 >> xoff =3D lround (pos[i].x_offset * position_unit); >> yoff =3D - lround (pos[i].y_offset * position_unit); >> - wadjust =3D lround (pos[i].x_advance * position_unit); >> + /* wadjust =3D lround (pos[i].x_advance * position_unit); */ >> + wadjust =3D metrics.width; >> if (xoff || yoff || wadjust !=3D metrics.width) >> LGLYPH_SET_ADJUSTMENT (lglyph, CALLN (Fvector, >> make_fixnum (xoff), >> make_fixnum (yoff), >> make_fixnum (wadjust))); > > Which leads me to the original suggestion in bug#50951, to do this: > > diff --git a/src/hbfont.c b/src/hbfont.c > index 37ed413..040658a 100644 > --- a/src/hbfont.c > +++ b/src/hbfont.c > @@ -600,6 +600,8 @@ hbfont_shape (Lisp_Object lgstring, Lisp_Object direc= tion) > make_fixnum (xoff), > make_fixnum (yoff), > make_fixnum (wadjust))); > + else > + LGLYPH_SET_ADJUSTMENT (lglyph, Qnil); > } >=20=20 > return make_fixnum (glyph_len); > > In bug#50951, an alternative change in fill_gstring_body was proposed > (see https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D50951#97), which > was eventually installed, but I guess that might not be enough? Can > you and Visuwesh please confirm that we sometimes get an lgstring > argument to hbfont_shape whose glyphs already have a non-nil > LGLYPH_ADJUSTMENT component, and we leave it unmodified because the > condition to use LGLYPH_SET_ADJUSTMENT isn't satisfied? Like this: > > (gdb) break hbfont.c:598 if xoff =3D=3D 0 && yoff =3D=3D 0 && wadjust = =3D=3D metrics.width && LGLYPH_ADJUSTMENT(lglyph) !=3D Qnil > > In my testing, a breakpoint with this condition never breaks. But > that could be because I use a different font (Cascadia Code, instead > of JetBrains Mono, which I don't have), or because my version of > HarfBuzz is much older than yours, or for some other reason. I am not sure if you wanted me to apply the above patch or not. But just loading a file that contains (set-face-attribute 'default nil :family "Cascadia Code" :height 110 :weight 'bold) (load "/tmp/ligature.el") (ligature-set-ligatures 'prog-mode '("--" "---" "=3D=3D" "=3D=3D=3D" "!= =3D" "!=3D=3D" "=3D!=3D" "=3D:=3D" "=3D/=3D" "<=3D" ">=3D" = "&&" "&&&" "&=3D" "++" "+++" "***" ";;" "!!" "??" "???" "?:" "?." "?=3D" "<:" "= :<" ":>" ">:" "<:<" "<>" "<<<" ">>>" "<<" ">>" "||" "-|" "_|_" "|-" "||= -" "|=3D" "||=3D" "##" "###" "####" "#{" "#[" "]#" "#(" "#?" "#_" "#_(= " "#:" "#!" "#=3D" "^=3D" "<$>" "<$" "$>" "<+>" "<+" "+>" "<*>" "<*" "*= >" "" "/>" "" "->" "->>" "<<-" "<-" "<=3D<= " "=3D<<" "<<=3D" "<=3D=3D" "<=3D>" "<=3D=3D>" "=3D=3D>" "=3D>" "=3D>>" ">=3D>" "= >>=3D" ">>-" ">-" "-<" "-<<" ">->" "<-<" "<-|" "<=3D|" "|=3D>" "|->" "<->" "<~~" = "<~" "<~>" "~~" "~~>" "~>" "~-" "-~" "~@" "[||]" "|]" "[|" "|}" "{|" "[= <" ">]" "|>" "<|" "||>" "<||" "|||>" "<|||" "<|>" "..." ".." ".= =3D" "..<" ".?" "::" ":::" ":=3D" "::=3D" ":?" ":?>" "//" "///" "/*" "*/" "/= =3D" "//=3D" "/=3D=3D" "@_" "__" "???" "<:<" ";;;")) (global-ligature-mode t) was enough to trigger the breakpoint for me. This is, of course, before I got a chance to even reproduce the misalignment. Here's what the gdb buffer looks like: (gdb) source .gdbinit SIGINT is used by the debugger. Are you sure you want to change it? (y or n) [answered Y; input not fro= m terminal] DISPLAY =3D :0.0 TERM =3D dumb Breakpoint 1 at 0x20b4b7: file emacs.c, line 432. Breakpoint 2 at 0x1cfa8a: file xterm.c, line 27102. (gdb) break hbfont.c:598 if xoff =3D=3D 0 && yoff =3D=3D 0 && wadjust = =3D=3D metrics.width && LGLYPH_ADJUSTMENT(lglyph) !=3D Qnil Breakpoint 3 at 0x3c3ad7: file hbfont.c, line 598. (gdb) run -Q Starting program: /home/viz/lib/ports/emacs/src/emacs -Q [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.= 1". [New Thread 0x7ffff1b8f6c0 (LWP 198125)] [New Thread 0x7ffff118f6c0 (LWP 198126)] [New Thread 0x7fffebf8f6c0 (LWP 198127)] [New Thread 0x7fffeb58f6c0 (LWP 198128)] Error in testing condition for breakpoint 3: Attempt to take address of value not located in memory. Thread 1 "emacs" hit Breakpoint 3, hbfont_shape (lgstring=3DXIL(0x7ffff= 2a9c745), direction=3DXIL(0x33c0)) at hbfont.c:598 598 if (xoff || yoff || wadjust !=3D metrics.width) From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 12:08:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17305492462362 (code B ref 73752); Sat, 02 Nov 2024 12:08:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 12:07:26 +0000 Received: from localhost ([127.0.0.1]:53401 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7Cuc-0000c2-8u for submit@debbugs.gnu.org; Sat, 02 Nov 2024 08:07:26 -0400 Received: from eggs.gnu.org ([209.51.188.92]:42978) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7CuZ-0000bs-MV for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 08:07:24 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t7CuT-0004Jt-FT; Sat, 02 Nov 2024 08:07:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=qmgECtz2iCs9qJAXXRkMrOssmR+fKu+2X56Jm7z8Rn4=; b=j0SOcLCtxm7BjOwOzGDE bCscA0ND11Q6/2f7Z6UAQRBJqM2vE5l/dGXXB9o8KIRPy5bLqmaAy04aUCZtopJmM8R8OhnViAx5b o5mdPQlByBZ2cm3a9ZKeaLNIfTLJUiig9c2BdUmmRTIBBDvYafumXNB1WiilvqBwmNtbW+8wAqWtd agtBHOp7RJwG+dNMrIHqxHYUYN857vXcdKPPgAirkzWiKVekR8Xu0o1WsQrJBTUm1NpN8qUunrbpx Iun57NJ5yD4/CIHqJ15+iW4V4QvHhXONb0M+J8bk1ms56B0fY43aOQkNB82NWJhiJKS6u30c/NPHY 0ON8SeTMjwdtMA==; Date: Sat, 02 Nov 2024 14:07:12 +0200 Message-Id: <86ses9yh3j.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87bjyxyl64.fsf@gmail.com> (message from Visuwesh on Sat, 02 Nov 2024 16:09:15 +0530) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: Tim Ruffing , 73752@debbugs.gnu.org, xuan@xlk.me > Date: Sat, 02 Nov 2024 16:09:15 +0530 > > [சனி நவம்பர் 02, 2024] Eli Zaretskii wrote: > > > In bug#50951, an alternative change in fill_gstring_body was proposed > > (see https://debbugs.gnu.org/cgi/bugreport.cgi?bug=50951#97), which > > was eventually installed, but I guess that might not be enough? Can > > you and Visuwesh please confirm that we sometimes get an lgstring > > argument to hbfont_shape whose glyphs already have a non-nil > > LGLYPH_ADJUSTMENT component, and we leave it unmodified because the > > condition to use LGLYPH_SET_ADJUSTMENT isn't satisfied? Like this: > > > > (gdb) break hbfont.c:598 if xoff == 0 && yoff == 0 && wadjust == metrics.width && LGLYPH_ADJUSTMENT(lglyph) != Qnil > > > > In my testing, a breakpoint with this condition never breaks. But > > that could be because I use a different font (Cascadia Code, instead > > of JetBrains Mono, which I don't have), or because my version of > > HarfBuzz is much older than yours, or for some other reason. > > I am not sure if you wanted me to apply the above patch or not. no patch should be applied, not yet. > But just loading a file that contains > > (set-face-attribute 'default nil > :family "Cascadia Code" > :height 110 > :weight 'bold) > > (load "/tmp/ligature.el") > > (ligature-set-ligatures 'prog-mode '("--" "---" "==" "===" "!=" "!==" "=!=" > "=:=" "=/=" "<=" ">=" "&&" "&&&" "&=" "++" "+++" "***" ";;" "!!" > "??" "???" "?:" "?." "?=" "<:" ":<" ":>" ">:" "<:<" "<>" "<<<" ">>>" > "<<" ">>" "||" "-|" "_|_" "|-" "||-" "|=" "||=" "##" "###" "####" > "#{" "#[" "]#" "#(" "#?" "#_" "#_(" "#:" "#!" "#=" "^=" "<$>" "<$" > "$>" "<+>" "<+" "+>" "<*>" "<*" "*>" "" "/>" "" "->" "->>" "<<-" "<-" "<=<" "=<<" "<<=" "<==" "<=>" "<==>" > "==>" "=>" "=>>" ">=>" ">>=" ">>-" ">-" "-<" "-<<" ">->" "<-<" "<-|" > "<=|" "|=>" "|->" "<->" "<~~" "<~" "<~>" "~~" "~~>" "~>" "~-" "-~" > "~@" "[||]" "|]" "[|" "|}" "{|" "[<" ">]" "|>" "<|" "||>" "<||" > "|||>" "<|||" "<|>" "..." ".." ".=" "..<" ".?" "::" ":::" ":=" "::=" > ":?" ":?>" "//" "///" "/*" "*/" "/=" "//=" "/==" "@_" "__" "???" > "<:<" ";;;")) > (global-ligature-mode t) > > was enough to trigger the breakpoint for me. This is, of course, before > I got a chance to even reproduce the misalignment. > > Here's what the gdb buffer looks like: > > (gdb) source .gdbinit > SIGINT is used by the debugger. > Are you sure you want to change it? (y or n) [answered Y; input not from terminal] > DISPLAY = :0.0 > TERM = dumb > Breakpoint 1 at 0x20b4b7: file emacs.c, line 432. > Breakpoint 2 at 0x1cfa8a: file xterm.c, line 27102. > (gdb) break hbfont.c:598 if xoff == 0 && yoff == 0 && wadjust == metrics.width && LGLYPH_ADJUSTMENT(lglyph) != Qnil > Breakpoint 3 at 0x3c3ad7: file hbfont.c, line 598. > (gdb) run -Q > Starting program: /home/viz/lib/ports/emacs/src/emacs -Q > [Thread debugging using libthread_db enabled] > Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". > [New Thread 0x7ffff1b8f6c0 (LWP 198125)] > [New Thread 0x7ffff118f6c0 (LWP 198126)] > [New Thread 0x7fffebf8f6c0 (LWP 198127)] > [New Thread 0x7fffeb58f6c0 (LWP 198128)] > Error in testing condition for breakpoint 3: > Attempt to take address of value not located in memory. > > Thread 1 "emacs" hit Breakpoint 3, hbfont_shape (lgstring=XIL(0x7ffff2a9c745), direction=XIL(0x33c0)) at hbfont.c:598 > 598 if (xoff || yoff || wadjust != metrics.width) Good. Now please do this: (gdb) pp lgstring (gdb) p wadjust (gdb) p metrics.width (gdb) bt And post the results here. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 13:31:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173055421712634 (code B ref 73752); Sat, 02 Nov 2024 13:31:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 13:30:17 +0000 Received: from localhost ([127.0.0.1]:53513 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7ECm-0003Hi-2L for submit@debbugs.gnu.org; Sat, 02 Nov 2024 09:30:16 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:52573) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7ECk-0003Er-6u for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 09:30:15 -0400 Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-7205b6f51f3so2458815b3a.1 for <73752@debbugs.gnu.org>; Sat, 02 Nov 2024 06:30:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730554148; x=1731158948; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WNLIRrGnZsWskEOOCYlwn5zWfusr7LOUuJtY1/4eyxg=; b=L9mH8YE2KgVuj0HYLwRiU483G6lW5WQTEbddedIaSioZSGVt5YTWaBpJQC70935TZr s5IZ/MBv2GuQiJFe6cYBj49pr4k1/WKwQNuUDaTXyd1RmjhpFdu1eDZtIMkLudDC2/IL siViOlBfIutprBsrRxVphk0EEuEtg3vb5QpnMyuhsfw2TvQUYTe7ZbH6E5N6IcPIKO0q XgezdK2tvFVkbBL1VIeAe5EFP10yp6q2ROvaoS+xgZLAOi7B+V4WLc9FnRrtCH58k5Dw QF+wfNHzadjr9QYlLyffgpkbK6txWtrDWPcL5ZWBqaEO+Nk8NPoe3BuW3GftS5pGUJpe uayQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730554148; x=1731158948; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=WNLIRrGnZsWskEOOCYlwn5zWfusr7LOUuJtY1/4eyxg=; b=mIlnaO3tkPckTURfrzGD3RZvcF/1OaQGAmw4pEDkcJDCdC0rMOaw5PD7VgoHKVKY1c SVDKU/A5wJ56pgmef11EdCX1sbXW46eLrh0uCQjltKgdN6w1rAlmcCNfoCG0wKDFjVv5 OhTKlpAmtdu1L/wvPNj/Zg/Yazq/sNNbCx0pm58HPqEpMlgZVV3JuCJ6CjAw2wKWkutZ hmoukwXrV/GQ/Op5NeJ/D62mr/VU0qjj8pbVOZyqpZRxhhDgd7VShNxUpk6m5dMOnIxG 8vo+LM0jGS06YViZdLgewx06KDD4k3UeGhSJg9wDksMZzGikmf/b2GGAEa4RrYL8n6j4 rxUw== X-Forwarded-Encrypted: i=1; AJvYcCVZ3W7ewYqYcN6Ms3o46i2W0B9pRIcOlER8cBOR3vilgz5gXaXuz9jrdf5e7LFENu0Im+zhYg==@debbugs.gnu.org X-Gm-Message-State: AOJu0YwHSBHjZcsCxgSQLFtl991iOK4cU+i8UuozxRro9pGUrB0HGMqC +gfZLpFQEMX91BeLYDXHtbeVFcpvZAS1MuKngsVpSg/hBdmZZ9DU X-Google-Smtp-Source: AGHT+IGTCubhQ8obote5FUhC3jl8BLow8dcC8AedLdey2KMwqwLV2LmZ+1EwN/UGAQrouZpiVTF4uA== X-Received: by 2002:a05:6a21:6b0a:b0:1d9:9b2:8c2a with SMTP id adf61e73a8af0-1dba54a5af6mr9467198637.34.1730554148156; Sat, 02 Nov 2024 06:29:08 -0700 (PDT) Received: from localhost ([1.7.159.70]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-7ee452a809fsm3855383a12.26.2024.11.02.06.29.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Nov 2024 06:29:07 -0700 (PDT) From: Visuwesh In-Reply-To: <86ses9yh3j.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 02 Nov 2024 14:07:12 +0200") References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> Date: Sat, 02 Nov 2024 18:59:03 +0530 Message-ID: <8734k9ydb4.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA= =E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: >> But just loading a file that contains >>=20 >> (set-face-attribute 'default nil >> :family "Cascadia Code" >> :height 110 >> :weight 'bold) >>=20 >> (load "/tmp/ligature.el") >>=20 >> (ligature-set-ligatures 'prog-mode '("--" "---" "=3D=3D" "=3D=3D=3D"= "!=3D" "!=3D=3D" "=3D!=3D" >> "=3D:=3D" "=3D/=3D" "<=3D" ">= =3D" "&&" "&&&" "&=3D" "++" "+++" "***" ";;" "!!" >> "??" "???" "?:" "?." "?=3D" "<:= " ":<" ":>" ">:" "<:<" "<>" "<<<" ">>>" >> "<<" ">>" "||" "-|" "_|_" "|-" = "||-" "|=3D" "||=3D" "##" "###" "####" >> "#{" "#[" "]#" "#(" "#?" "#_" "= #_(" "#:" "#!" "#=3D" "^=3D" "<$>" "<$" >> "$>" "<+>" "<+" "+>" "<*>" "<*"= "*>" "" "/>" "" "->" "->>" "<<-" "<-" "<= =3D<" "=3D<<" "<<=3D" "<=3D=3D" "<=3D>" "<=3D=3D>" >> "=3D=3D>" "=3D>" "=3D>>" ">=3D>= " ">>=3D" ">>-" ">-" "-<" "-<<" ">->" "<-<" "<-|" >> "<=3D|" "|=3D>" "|->" "<->" "<~= ~" "<~" "<~>" "~~" "~~>" "~>" "~-" "-~" >> "~@" "[||]" "|]" "[|" "|}" "{|"= "[<" ">]" "|>" "<|" "||>" "<||" >> "|||>" "<|||" "<|>" "..." ".." = ".=3D" "..<" ".?" "::" ":::" ":=3D" "::=3D" >> ":?" ":?>" "//" "///" "/*" "*/"= "/=3D" "//=3D" "/=3D=3D" "@_" "__" "???" >> "<:<" ";;;")) >> (global-ligature-mode t) >>=20 >> was enough to trigger the breakpoint for me. This is, of course, before >> I got a chance to even reproduce the misalignment. >>=20 >> Here's what the gdb buffer looks like: >>=20 >> (gdb) source .gdbinit >> SIGINT is used by the debugger. >> Are you sure you want to change it? (y or n) [answered Y; input not = from terminal] >> DISPLAY =3D :0.0 >> TERM =3D dumb >> Breakpoint 1 at 0x20b4b7: file emacs.c, line 432. >> Breakpoint 2 at 0x1cfa8a: file xterm.c, line 27102. >> (gdb) break hbfont.c:598 if xoff =3D=3D 0 && yoff =3D=3D 0 && wadjus= t =3D=3D metrics.width && LGLYPH_ADJUSTMENT(lglyph) !=3D Qnil >> Breakpoint 3 at 0x3c3ad7: file hbfont.c, line 598. >> (gdb) run -Q >> Starting program: /home/viz/lib/ports/emacs/src/emacs -Q >> [Thread debugging using libthread_db enabled] >> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.= so.1". >> [New Thread 0x7ffff1b8f6c0 (LWP 198125)] >> [New Thread 0x7ffff118f6c0 (LWP 198126)] >> [New Thread 0x7fffebf8f6c0 (LWP 198127)] >> [New Thread 0x7fffeb58f6c0 (LWP 198128)] >> Error in testing condition for breakpoint 3: >> Attempt to take address of value not located in memory. >>=20 >> Thread 1 "emacs" hit Breakpoint 3, hbfont_shape (lgstring=3DXIL(0x7f= fff2a9c745), direction=3DXIL(0x33c0)) at hbfont.c:598 >> 598 if (xoff || yoff || wadjust !=3D metrics.width) > > Good. Now please do this: > > (gdb) pp lgstring > (gdb) p wadjust > (gdb) p metrics.width > (gdb) bt > > And post the results here. (gdb) pp lgstring [[# 59 59] nil [0 0 59 1935 9 4 14 8 4 nil] [1 1 59 1865 9 2 6 8 4= nil] nil nil nil nil nil nil] (gdb) p wadjust $1 =3D 9 (gdb) p metrics.width $2 =3D 9 (gdb) bt #0 hbfont_shape (lgstring=3DXIL(0x7ffff2a9c745), direction=3DXIL(0x33c= 0)) at hbfont.c:598 #1 0x00005555558795a7 in Ffont_shape_gstring (gstring=3DXIL(0x7ffff2a9= c745), direction=3DXIL(0x33c0)) at font.c:4617 #2 0x000055555584b330 in funcall_subr (subr=3D0x5555560333a0 , numargs=3D2, args=3D0x7ffff1c00070) at eval.c:3149 #3 0x00005555558a95f3 in exec_byte_code (fun=3DXIL(0x7ffff2934d8d), ar= gs_template=3D1542, nargs=3D6, args=3D0x7fffffff6d68) at bytecode.c:813 #4 0x000055555584b978 in funcall_lambda (fun=3DXIL(0x7ffff2934d8d), na= rgs=3D6, arg_vector=3D0x7fffffff6d38) at eval.c:3238 #5 0x000055555584ad18 in funcall_general (fun=3DXIL(0x7ffff2934d8d), n= umargs=3D6, args=3D0x7fffffff6d38) at eval.c:3030 #6 0x000055555584afd9 in Ffuncall (nargs=3D7, args=3D0x7fffffff6d30) a= t eval.c:3079 #7 0x00005555558473bc in internal_condition_case_n (bfun=3D0x55555584a= e63 , nargs=3D7, args=3D0x7fffffff6d30, handlers=3DXIL(0x30), hfu= n=3D0x55555584b059 ) at eval.c:1687 #8 0x000055555584b117 in safe_funcall (nargs=3D7, args=3D0x7fffffff6d3= 0) at eval.c:3107 #9 0x00005555558f1047 in autocmp_chars (rule=3DXIL(0x5555561300ed), ch= arpos=3D1, bytepos=3D1, limit=3D3, win=3D0x55555628c3f8, face=3D0x5555566b7= 780, string=3DXIL(0), direction=3DXIL(0x33c0), ch=3D59) at composite.c:979 #10 0x00005555558f1fb3 in composition_reseat_it (cmp_it=3D0x7fffffff8e8= 0, charpos=3D1, bytepos=3D1, endpos=3D148, w=3D0x55555628c3f8, bidi_level= =3D0 '\000', face=3D0x5555566b7780, string=3DXIL(0)) at composite.c:1346 #11 0x00005555555ea807 in next_element_from_buffer (it=3D0x7fffffff85c0= ) at xdisp.c:9808 #12 0x00005555555e6324 in get_next_display_element (it=3D0x7fffffff85c0= ) at xdisp.c:8306 #13 0x0000555555620630 in display_line (it=3D0x7fffffff85c0, cursor_vpo= s=3D3) at xdisp.c:25443 #14 0x0000555555610972 in try_window (window=3DXIL(0x55555628c3fd), pos= =3D..., flags=3D1) at xdisp.c:21261 #15 0x000055555560d30b in redisplay_window (window=3DXIL(0x55555628c3fd= ), just_this_one_p=3Dfalse) at xdisp.c:20641 #16 0x0000555555603eea in redisplay_window_0 (window=3DXIL(0x55555628c3= fd)) at xdisp.c:18124 #17 0x00005555558471d8 in internal_condition_case_1 (bfun=3D0x555555603= ea8 , arg=3DXIL(0x55555628c3fd), handlers=3DXIL(0x7ffff= 2a75de3), hfun=3D0x555555603d85 ) at eval.c:1631 #18 0x0000555555603d57 in redisplay_windows (window=3DXIL(0x55555628c3f= d)) at xdisp.c:18093 #19 0x0000555555602430 in redisplay_internal () at xdisp.c:17492 #20 0x00005555555fff75 in redisplay () at xdisp.c:16667 #21 0x000055555576bffb in read_char (commandflag=3D1, map=3DXIL(0x7ffff= 5109073), prev_event=3DXIL(0), used_mouse_menu=3D0x7fffffffdcaf, end_time= =3D0x0) at keyboard.c:2673 #22 0x0000555555780075 in read_key_sequence (keybuf=3D0x7fffffffde60, p= rompt=3DXIL(0), dont_downcase_last=3Dfalse, can_return_switch_frame=3Dtrue,= fix_current_buffer=3Dtrue, prevent_redisplay=3Dfalse, disable_text_convers= ion_p=3Dfalse) at keyboard.c:10747 #23 0x0000555555768380 in command_loop_1 () at keyboard.c:1424 #24 0x00005555558470f7 in internal_condition_case (bfun=3D0x555555767f5= 1 , handlers=3DXIL(0x90), hfun=3D0x5555557673d2 = ) at eval.c:1607 #25 0x0000555555767b18 in command_loop_2 (handlers=3DXIL(0x90)) at keyb= oard.c:1163 #26 0x000055555584654d in internal_catch (tag=3DXIL(0x12330), func=3D0x= 555555767aee , arg=3DXIL(0x90)) at eval.c:1286 #27 0x0000555555767aaa in command_loop () at keyboard.c:1141 #28 0x0000555555766e74 in recursive_edit_1 () at keyboard.c:749 #29 0x00005555557670a0 in Frecursive_edit () at keyboard.c:832 #30 0x0000555555762937 in main (argc=3D2, argv=3D0x7fffffffe498) at ema= cs.c:2625 Lisp Backtrace: "font-shape-gstring" (0xf1c00070) "auto-compose-chars" (0xffff6d38) "redisplay_internal (C function)" (0x0) From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 16:48:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17305660523433 (code B ref 73752); Sat, 02 Nov 2024 16:48:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 16:47:32 +0000 Received: from localhost ([127.0.0.1]:54386 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7HHg-0000tJ-5u for submit@debbugs.gnu.org; Sat, 02 Nov 2024 12:47:32 -0400 Received: from eggs.gnu.org ([209.51.188.92]:42232) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7HHb-0000tB-JT for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 12:47:30 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t7HHV-0007fB-DC; Sat, 02 Nov 2024 12:47:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=Ob1S80oP7MT/Sil+erQtfB37VJhI9n5EtBZv/WB86Qk=; b=fXowtmjtBDIuF80+hEpz HOW5SkBO15R7L5S2AjIRzkMfvgl1svXZMyBZZaU6jFYMtp9LQUd0FK3Edv8i6Nx0v9Wfmt1kD/4Ij 7iy+venVU8wI43uZYStgs/Kg0+r+m6MK7678T0otCl0onVq8rMtjo7F3lHBkYd8MLr9v6nFhjqWLw v3KQfmlWG26PE1CS471MdU33U/k8S/7JUXtdPg8YKxbxrg949yg+GyjkPFIZewz1st42uXGpK2OEZ qtMrahGRQqohcMU7CzruMhUjJnLVGgNRuGs2WFXSl1dyC0imVePq6cKJ0vPZrsqxQgo9/IZWMS8Z0 QQwM225pVINEYQ==; Date: Sat, 02 Nov 2024 18:47:18 +0200 Message-Id: <86ikt5y44p.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <8734k9ydb4.fsf@gmail.com> (message from Visuwesh on Sat, 02 Nov 2024 18:59:03 +0530) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org > Date: Sat, 02 Nov 2024 18:59:03 +0530 > > [சனி நவம்பர் 02, 2024] Eli Zaretskii wrote: > > >> But just loading a file that contains > >> > >> (set-face-attribute 'default nil > >> :family "Cascadia Code" > >> :height 110 > >> :weight 'bold) > >> > >> (load "/tmp/ligature.el") > >> > >> (ligature-set-ligatures 'prog-mode '("--" "---" "==" "===" "!=" "!==" "=!=" > >> "=:=" "=/=" "<=" ">=" "&&" "&&&" "&=" "++" "+++" "***" ";;" "!!" > >> "??" "???" "?:" "?." "?=" "<:" ":<" ":>" ">:" "<:<" "<>" "<<<" ">>>" > >> "<<" ">>" "||" "-|" "_|_" "|-" "||-" "|=" "||=" "##" "###" "####" > >> "#{" "#[" "]#" "#(" "#?" "#_" "#_(" "#:" "#!" "#=" "^=" "<$>" "<$" > >> "$>" "<+>" "<+" "+>" "<*>" "<*" "*>" "" "/>" "" "->" "->>" "<<-" "<-" "<=<" "=<<" "<<=" "<==" "<=>" "<==>" > >> "==>" "=>" "=>>" ">=>" ">>=" ">>-" ">-" "-<" "-<<" ">->" "<-<" "<-|" > >> "<=|" "|=>" "|->" "<->" "<~~" "<~" "<~>" "~~" "~~>" "~>" "~-" "-~" > >> "~@" "[||]" "|]" "[|" "|}" "{|" "[<" ">]" "|>" "<|" "||>" "<||" > >> "|||>" "<|||" "<|>" "..." ".." ".=" "..<" ".?" "::" ":::" ":=" "::=" > >> ":?" ":?>" "//" "///" "/*" "*/" "/=" "//=" "/==" "@_" "__" "???" > >> "<:<" ";;;")) > >> (global-ligature-mode t) > >> > >> was enough to trigger the breakpoint for me. This is, of course, before > >> I got a chance to even reproduce the misalignment. > >> > >> Here's what the gdb buffer looks like: > >> > >> (gdb) source .gdbinit > >> SIGINT is used by the debugger. > >> Are you sure you want to change it? (y or n) [answered Y; input not from terminal] > >> DISPLAY = :0.0 > >> TERM = dumb > >> Breakpoint 1 at 0x20b4b7: file emacs.c, line 432. > >> Breakpoint 2 at 0x1cfa8a: file xterm.c, line 27102. > >> (gdb) break hbfont.c:598 if xoff == 0 && yoff == 0 && wadjust == metrics.width && LGLYPH_ADJUSTMENT(lglyph) != Qnil > >> Breakpoint 3 at 0x3c3ad7: file hbfont.c, line 598. > >> (gdb) run -Q > >> Starting program: /home/viz/lib/ports/emacs/src/emacs -Q > >> [Thread debugging using libthread_db enabled] > >> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". > >> [New Thread 0x7ffff1b8f6c0 (LWP 198125)] > >> [New Thread 0x7ffff118f6c0 (LWP 198126)] > >> [New Thread 0x7fffebf8f6c0 (LWP 198127)] > >> [New Thread 0x7fffeb58f6c0 (LWP 198128)] > >> Error in testing condition for breakpoint 3: > >> Attempt to take address of value not located in memory. > >> > >> Thread 1 "emacs" hit Breakpoint 3, hbfont_shape (lgstring=XIL(0x7ffff2a9c745), direction=XIL(0x33c0)) at hbfont.c:598 > >> 598 if (xoff || yoff || wadjust != metrics.width) > > > > Good. Now please do this: > > > > (gdb) pp lgstring > > (gdb) p wadjust > > (gdb) p metrics.width > > (gdb) bt > > > > And post the results here. > > (gdb) pp lgstring > [[# 59 59] nil [0 0 59 1935 9 4 14 8 4 nil] [1 1 59 1865 9 2 6 8 4 nil] nil nil nil nil nil nil] > (gdb) p wadjust > $1 = 9 > (gdb) p metrics.width > $2 = 9 Thanks, but this is a false alarm: the lgstring's glyphs don't have the [XOFF YOFF WADJUST] component. So either my breakpoint condition is somehow wrong, or you mistyped it, or something else. What does GDB show if you type (gdb) p LGLYPH_ADJUSTMENT(lglyph) (gdb) p Qnil From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 17:06:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17305671535731 (code B ref 73752); Sat, 02 Nov 2024 17:06:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 17:05:53 +0000 Received: from localhost ([127.0.0.1]:54473 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7HZQ-0001UM-Dj for submit@debbugs.gnu.org; Sat, 02 Nov 2024 13:05:52 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:57585) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7HZN-0001UF-Mf for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 13:05:51 -0400 Received: by mail-pf1-f195.google.com with SMTP id d2e1a72fcca58-71e467c3996so2510369b3a.2 for <73752@debbugs.gnu.org>; Sat, 02 Nov 2024 10:05:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730567089; x=1731171889; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MLqkIBQdZWu9i3TLI0NzKtTmJgy/CNutRbUc+Ldke9c=; b=UojEKFKSDCRLINg/HEUiBnDSpjAjHQ+eYC21Q/UDHLZyQ9eQFyO8Wp5AMURS2szoxh yCg0XsEBFKvc/tYM2GIl2m3Ds59TrGuWcmVdXiXzDL8sOMXeBu4lf0HhXiTaCNF2AOGO ub/gozPEk9LPm/5QHSUIQ1kkYIS+isvInxwRs/I5hUrt+gzKT/vf+qxFs+Vwxz8634fy 4BkgUez/7XjSiH9YAXZUzIvZccp5JAONuVegDM5ZvVfyPgToBcEJfMfAm15eojweOK7F 52akGwpNl44mDQi5Ta679UpVv7KEdvRZiTXUAHSFlDw44iT6V7ufZTuT9U+wOFzeqfHV 8b1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730567089; x=1731171889; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=MLqkIBQdZWu9i3TLI0NzKtTmJgy/CNutRbUc+Ldke9c=; b=ohJOoHyhbisCb12jWGh4hMMVEk/fZoXMa1A15BZHAlWmgn57ZJ8bjVmGAVUy2m64T2 TQ0ZjPJVrKApnjghcT0yKVQjnoRbH0ieVRBTsWlQ69IlxMXOJVA8PLuayzBWFEVgmO9i TeG8f6L+rnziudKGfF4lDCuIy+zKMnwo2c1CKid/9NNXdh45hu3axYUvAOBiVxE886NJ zWUc2SLUa2qKKhXBFf7ieFUZzvN/ERi/VhD+7D+S0bkeKRvHg1x60eKSmPA5tLd1d82A GK/1vrPWxk8PU6cqPA4+cNUX4cyaLLWLlQhI2epsb13SLNP5p7N4DbEMLLQGij/K0PAE z4jg== X-Forwarded-Encrypted: i=1; AJvYcCUaXZvdNo5/AZOBBL5WzoAt1td+Zv+cVfnYfckdJocRRqwHm8c/P6SNrtHvllhBmdo73y4FLA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YwlU+vwsrFeunawiR70KqJyyxmMdFZjyggvfBpj9/QOIlxLR5sO jdZPkTLHS3R+4ImKpNIpM4dE7uwkeEPrkKccx9zPuD+SdU3E05PH X-Google-Smtp-Source: AGHT+IETGRVxj6HHPWMOO7F71X+JScZEunPQ2NNGfivGJHZFIpXHovxXp1kccrHo04+O4AqyQXhrUw== X-Received: by 2002:a05:6a00:181b:b0:71e:7d52:fa6d with SMTP id d2e1a72fcca58-72063028666mr38308570b3a.21.1730567088455; Sat, 02 Nov 2024 10:04:48 -0700 (PDT) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-720bc2c4bdfsm4289169b3a.130.2024.11.02.10.04.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Nov 2024 10:04:47 -0700 (PDT) From: Visuwesh In-Reply-To: <86ikt5y44p.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 02 Nov 2024 18:47:18 +0200") References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> Date: Sat, 02 Nov 2024 22:34:44 +0530 Message-ID: <87y121wor7.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA= =E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: >> From: Visuwesh >> Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org >> Date: Sat, 02 Nov 2024 18:59:03 +0530 >>=20 >> [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE= =AA=E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: >>=20 >> >> But just loading a file that contains >> >>=20 >> >> (set-face-attribute 'default nil >> >> :family "Cascadia Code" >> >> :height 110 >> >> :weight 'bold) >> >>=20 >> >> (load "/tmp/ligature.el") >> >>=20 >> >> (ligature-set-ligatures 'prog-mode '("--" "---" "=3D=3D" "=3D=3D= =3D" "!=3D" "!=3D=3D" "=3D!=3D" >> >> "=3D:=3D" "=3D/=3D" "<=3D" "= >=3D" "&&" "&&&" "&=3D" "++" "+++" "***" ";;" "!!" >> >> "??" "???" "?:" "?." "?=3D" = "<:" ":<" ":>" ">:" "<:<" "<>" "<<<" ">>>" >> >> "<<" ">>" "||" "-|" "_|_" "|= -" "||-" "|=3D" "||=3D" "##" "###" "####" >> >> "#{" "#[" "]#" "#(" "#?" "#_= " "#_(" "#:" "#!" "#=3D" "^=3D" "<$>" "<$" >> >> "$>" "<+>" "<+" "+>" "<*>" "= <*" "*>" "" "/>" "" "->" "->>" "<<-" "<-" = "<=3D<" "=3D<<" "<<=3D" "<=3D=3D" "<=3D>" "<=3D=3D>" >> >> "=3D=3D>" "=3D>" "=3D>>" ">= =3D>" ">>=3D" ">>-" ">-" "-<" "-<<" ">->" "<-<" "<-|" >> >> "<=3D|" "|=3D>" "|->" "<->" = "<~~" "<~" "<~>" "~~" "~~>" "~>" "~-" "-~" >> >> "~@" "[||]" "|]" "[|" "|}" "= {|" "[<" ">]" "|>" "<|" "||>" "<||" >> >> "|||>" "<|||" "<|>" "..." ".= ." ".=3D" "..<" ".?" "::" ":::" ":=3D" "::=3D" >> >> ":?" ":?>" "//" "///" "/*" "= */" "/=3D" "//=3D" "/=3D=3D" "@_" "__" "???" >> >> "<:<" ";;;")) >> >> (global-ligature-mode t) >> >>=20 >> >> was enough to trigger the breakpoint for me. This is, of course, bef= ore >> >> I got a chance to even reproduce the misalignment. >> >>=20 >> >> Here's what the gdb buffer looks like: >> >>=20 >> >> (gdb) source .gdbinit >> >> SIGINT is used by the debugger. >> >> Are you sure you want to change it? (y or n) [answered Y; input n= ot from terminal] >> >> DISPLAY =3D :0.0 >> >> TERM =3D dumb >> >> Breakpoint 1 at 0x20b4b7: file emacs.c, line 432. >> >> Breakpoint 2 at 0x1cfa8a: file xterm.c, line 27102. >> >> (gdb) break hbfont.c:598 if xoff =3D=3D 0 && yoff =3D=3D 0 && wad= just =3D=3D metrics.width && LGLYPH_ADJUSTMENT(lglyph) !=3D Qnil >> >> Breakpoint 3 at 0x3c3ad7: file hbfont.c, line 598. >> >> (gdb) run -Q >> >> Starting program: /home/viz/lib/ports/emacs/src/emacs -Q >> >> [Thread debugging using libthread_db enabled] >> >> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_= db.so.1". >> >> [New Thread 0x7ffff1b8f6c0 (LWP 198125)] >> >> [New Thread 0x7ffff118f6c0 (LWP 198126)] >> >> [New Thread 0x7fffebf8f6c0 (LWP 198127)] >> >> [New Thread 0x7fffeb58f6c0 (LWP 198128)] >> >> Error in testing condition for breakpoint 3: >> >> Attempt to take address of value not located in memory. >> >>=20 >> >> Thread 1 "emacs" hit Breakpoint 3, hbfont_shape (lgstring=3DXIL(0= x7ffff2a9c745), direction=3DXIL(0x33c0)) at hbfont.c:598 >> >> 598 if (xoff || yoff || wadjust !=3D metrics.width) >> > >> > Good. Now please do this: >> > >> > (gdb) pp lgstring >> > (gdb) p wadjust >> > (gdb) p metrics.width >> > (gdb) bt >> > >> > And post the results here. >>=20 >> (gdb) pp lgstring >> [[#> Code-bold-normal-normal-*-15-*-*-*-m-0-iso10646-1"> 59 59] nil [0 0 >> 59 1935 9 4 14 8 4 nil] [1 1 59 1865 9 2 6 8 4 nil] nil nil nil nil >> nil nil] >> (gdb) p wadjust >> $1 =3D 9 >> (gdb) p metrics.width >> $2 =3D 9 > > Thanks, but this is a false alarm: the lgstring's glyphs don't have > the [XOFF YOFF WADJUST] component. So either my breakpoint condition > is somehow wrong, or you mistyped it, or something else. I don't think I mistyped the condition at least. Here's what I typed: (gdb) break hbfont.c:598 if xoff =3D=3D 0 && yoff =3D=3D 0 && wadjust = =3D=3D metrics.width && LGLYPH_ADJUSTMENT(lglyph) !=3D Qnil > What does GDB show if you type > > (gdb) p LGLYPH_ADJUSTMENT(lglyph) > (gdb) p Qnil (gdb) p LGLYPH_ADJUSTMENT(lglyph) $3 =3D XIL(0) (gdb) p Qnil $4 =3D XIL(0) From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 17:19:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17305678986995 (code B ref 73752); Sat, 02 Nov 2024 17:19:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 17:18:18 +0000 Received: from localhost ([127.0.0.1]:54540 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7HlS-0001ol-3O for submit@debbugs.gnu.org; Sat, 02 Nov 2024 13:18:18 -0400 Received: from eggs.gnu.org ([209.51.188.92]:38188) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7HlQ-0001ob-6I for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 13:18:17 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t7HlJ-0007w9-5S; Sat, 02 Nov 2024 13:18:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=HcERA6GUIU60y7J0D51O5sejRXq5oD+mF/+F+uYPiMs=; b=WuNPzWYJsJ8tLORKxRsx OlEObPxfN6fQGpI7s1Hca2A7wBiQKNbC17Aq7xMpoIR/V4g301YU/EKEIT4oOjFajHnhndfQfKONr eeNHcVoeH/MG1ezQbNrgq1bHK/3s2NAwspCCif3lWvcWe6HgYQ351E/M1jYCwzVdvlu3EkCKwmJba oU9DXPS3e3896RCbEZBEJWLkDOHamUVeF0sCRCCnDLr0PlDdXhQ9LxB8vMgHKTI+bbC4+NhMdg6eQ Nr4pNwVNxNS1pSGzZr0e5nQdY3FsRDvD7kDphEwJmsrFJiH0CAqu2fjhc30zzfj1ub9Lu6/9nEcmE Lj1FWOUjH6SHxA==; Date: Sat, 02 Nov 2024 19:18:05 +0200 Message-Id: <86ed3ty2pe.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87y121wor7.fsf@gmail.com> (message from Visuwesh on Sat, 02 Nov 2024 22:34:44 +0530) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org > Date: Sat, 02 Nov 2024 22:34:44 +0530 > > [சனி நவம்பர் 02, 2024] Eli Zaretskii wrote: > > > Thanks, but this is a false alarm: the lgstring's glyphs don't have > > the [XOFF YOFF WADJUST] component. So either my breakpoint condition > > is somehow wrong, or you mistyped it, or something else. > > I don't think I mistyped the condition at least. Here's what I typed: > > (gdb) break hbfont.c:598 if xoff == 0 && yoff == 0 && wadjust == metrics.width && LGLYPH_ADJUSTMENT(lglyph) != Qnil > > > What does GDB show if you type > > > > (gdb) p LGLYPH_ADJUSTMENT(lglyph) > > (gdb) p Qnil > > (gdb) p LGLYPH_ADJUSTMENT(lglyph) > $3 = XIL(0) > (gdb) p Qnil > $4 = XIL(0) OK, but then why did the breakpoint break, when the condition is obviously false: LGLYPH_ADJUSTMENT(lglyph) == Qnil. What happens if you type this: (gdb) p Qnil+0 From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 17:33:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17305687728739 (code B ref 73752); Sat, 02 Nov 2024 17:33:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 17:32:52 +0000 Received: from localhost ([127.0.0.1]:54607 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7HzX-0002Gt-Nn for submit@debbugs.gnu.org; Sat, 02 Nov 2024 13:32:52 -0400 Received: from mail-pj1-f67.google.com ([209.85.216.67]:50675) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7HzU-0002Gl-3P for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 13:32:50 -0400 Received: by mail-pj1-f67.google.com with SMTP id 98e67ed59e1d1-2e2dc61bc41so2076111a91.1 for <73752@debbugs.gnu.org>; Sat, 02 Nov 2024 10:32:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730568702; x=1731173502; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wQ93kwoHIezDxEBURDmn3xyTi22NoY7xU2XqD2wdRg0=; b=L0gXCM6sjZ9Lq/6rN1tqssp1frl4P/l1EzqzqQMsh+iBMRYXs973IpF+X2QW+FFQyZ 5NDOoxPc7eR8YFA4aDYqCbLK+NFsgR7Evg2OMpCoIVtXfYQNfmsiOqzKPiQhp8qugSmM AiUg6s3cRx0Y9348pauSUpNL6KhNgb6AKtu3yB2h5bN64JWUQOWkOeKj79VUx24bmx9k RJBexle9ZfJXToq0eBnPUZfH3H2RVEdMYv0di1k6FwpO05Isz+b3DImXdwDSwQ3TDccu R3XCI0AYajUP4pA40+7gdlNsqt3urStwb1Met0vozdTX9dENXEGmoKIDhXmeX08DzdAv NycA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730568702; x=1731173502; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wQ93kwoHIezDxEBURDmn3xyTi22NoY7xU2XqD2wdRg0=; b=lXLe0iwEfXpbvtE+fD7dzxlPcNT0PuEYWSkagEcACamJhrHr2VF0RzLuS/GqchIIkc IZPGaAs0FawdQFWecpm4ACl6RIxy4OdLCDzkxuQwjqR1NiyD5YtpuucUAdzAtr2oYV2l LP8b2spM6ASBtG2mOGIDjsseb+kFaSD/sfTCQUjsF+gQUCO6JfpffeVVxmmZs8I3N2H0 C/lpkvuOpTKjku1AjK1i378r4u0dN7g9MUitkwdCPB4LyyJGwCWRmsZSOt2LAoxg5mW6 J4V8EPHamhalBO1PT7eJuF212VaSxLuG0gG/blYTmke9mk1syd9ujW+HI9ZT/eCbp/SD luQQ== X-Forwarded-Encrypted: i=1; AJvYcCWeVyJ3FQdJJtu7/1GWm7ULyeTJdNVBKDb3+r041AoT3PpHc0Q9DQPbP44Hnmwy2ERVQ3slXg==@debbugs.gnu.org X-Gm-Message-State: AOJu0YwNUmCDGt0a79wwryxNdGvMeKrZ971M5p+v7sqi/tgSFkqhoxgf maw6kSvYDZzaAEcPj/A85A2BK10Sh2fSR5PIjq6eckyZjPTFW8LH X-Google-Smtp-Source: AGHT+IFcPwBlmgr5XrDahBjfSX/wtwd9YSwDpaZaFimpYnppP4t7Bp5bljS+G22nCB+WUJNkBMOsGA== X-Received: by 2002:a17:90b:4a91:b0:2e2:c423:8e17 with SMTP id 98e67ed59e1d1-2e94c295063mr10727598a91.7.1730568702076; Sat, 02 Nov 2024 10:31:42 -0700 (PDT) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e92fc04fc2sm6732664a91.57.2024.11.02.10.31.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Nov 2024 10:31:40 -0700 (PDT) From: Visuwesh In-Reply-To: <86ed3ty2pe.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 02 Nov 2024 19:18:05 +0200") References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> Date: Sat, 02 Nov 2024 23:01:37 +0530 Message-ID: <87ttcpwnie.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA= =E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: >> From: Visuwesh >> Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org >> Date: Sat, 02 Nov 2024 22:34:44 +0530 >>=20 >> [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE= =AA=E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: >>=20 >> > Thanks, but this is a false alarm: the lgstring's glyphs don't have >> > the [XOFF YOFF WADJUST] component. So either my breakpoint condition >> > is somehow wrong, or you mistyped it, or something else. >>=20 >> I don't think I mistyped the condition at least. Here's what I typed: >>=20 >> (gdb) break hbfont.c:598 if xoff =3D=3D 0 && yoff =3D=3D 0 && wadjus= t =3D=3D >> metrics.width && LGLYPH_ADJUSTMENT(lglyph) !=3D Qnil >>=20 >> > What does GDB show if you type >> > >> > (gdb) p LGLYPH_ADJUSTMENT(lglyph) >> > (gdb) p Qnil >>=20 >> (gdb) p LGLYPH_ADJUSTMENT(lglyph) >> $3 =3D XIL(0) >> (gdb) p Qnil >> $4 =3D XIL(0) > > OK, but then why did the breakpoint break, when the condition is > obviously false: LGLYPH_ADJUSTMENT(lglyph) =3D=3D Qnil. > > What happens if you type this: > > (gdb) p Qnil+0 (gdb) p Qnil+0 Attempt to take address of value not located in memory. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 17:36:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17305689079051 (code B ref 73752); Sat, 02 Nov 2024 17:36:02 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 17:35:07 +0000 Received: from localhost ([127.0.0.1]:54622 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7I1j-0002Kq-Af for submit@debbugs.gnu.org; Sat, 02 Nov 2024 13:35:07 -0400 Received: from eggs.gnu.org ([209.51.188.92]:38918) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7I1h-0002IP-Ax for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 13:35:06 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t7I1b-0002u6-3o; Sat, 02 Nov 2024 13:34:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=0TNz9RO5qS498e+yWeGDidtT5ggZ60nMQNIu6C6xTIg=; b=oC9goXxpp7c94E6n2l1W 3N0BvMu9fJYxy3qwvwqIR50exhzNNiDKe/rlfNls7moRl0K0LL6OSIeXoIEKWe0N/dfEZoR7U74Bh E+UPE9pBbsGzzaeNfAuMuklz1LxauZLHFT8Zp0clfaZrfEkurw4ZBkqrrVdCwwEypxDCXsfmdgZC6 YtDjDh8O+X12xSknj0LYsDDI/hJ/fvOdtMa98oNQix64V1Z9Favzp9p4oUvoT9aKUqhxJq9328LqL isl2a3jKRL9OyKZax1O+FQJgsh4BY7lp95ItpeSxChB9MrJOsRuo0ZiQGHRMmzMuLEclR0SqkLvhu LWqsGhGJn9gjKw==; Date: Sat, 02 Nov 2024 19:34:56 +0200 Message-Id: <86cyjdy1xb.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87ttcpwnie.fsf@gmail.com> (message from Visuwesh on Sat, 02 Nov 2024 23:01:37 +0530) References: <91cb4d5a6c979bf096ca9fa26711395ab29b941b.camel@timruffing.de> <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org > Date: Sat, 02 Nov 2024 23:01:37 +0530 > > [சனி நவம்பர் 02, 2024] Eli Zaretskii wrote: > > >> From: Visuwesh > >> Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org > >> Date: Sat, 02 Nov 2024 22:34:44 +0530 > >> > >> [சனி நவம்பர் 02, 2024] Eli Zaretskii wrote: > >> > >> > Thanks, but this is a false alarm: the lgstring's glyphs don't have > >> > the [XOFF YOFF WADJUST] component. So either my breakpoint condition > >> > is somehow wrong, or you mistyped it, or something else. > >> > >> I don't think I mistyped the condition at least. Here's what I typed: > >> > >> (gdb) break hbfont.c:598 if xoff == 0 && yoff == 0 && wadjust == > >> metrics.width && LGLYPH_ADJUSTMENT(lglyph) != Qnil > >> > >> > What does GDB show if you type > >> > > >> > (gdb) p LGLYPH_ADJUSTMENT(lglyph) > >> > (gdb) p Qnil > >> > >> (gdb) p LGLYPH_ADJUSTMENT(lglyph) > >> $3 = XIL(0) > >> (gdb) p Qnil > >> $4 = XIL(0) > > > > OK, but then why did the breakpoint break, when the condition is > > obviously false: LGLYPH_ADJUSTMENT(lglyph) == Qnil. > > > > What happens if you type this: > > > > (gdb) p Qnil+0 > > (gdb) p Qnil+0 > Attempt to take address of value not located in memory. And this: (gdb) ptype Qnil From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 17:41:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17305692539797 (code B ref 73752); Sat, 02 Nov 2024 17:41:01 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 17:40:53 +0000 Received: from localhost ([127.0.0.1]:54651 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7I7I-0002Xx-65 for submit@debbugs.gnu.org; Sat, 02 Nov 2024 13:40:52 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:53490) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7I7G-0002Xp-4U for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 13:40:51 -0400 Received: by mail-pf1-f195.google.com with SMTP id d2e1a72fcca58-72041ff06a0so2538556b3a.2 for <73752@debbugs.gnu.org>; Sat, 02 Nov 2024 10:40:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730569184; x=1731173984; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=S6pRIgOXMKdEQmIrB72XQmzGllgj0elocwvfppWkazw=; b=MDd9EKMlaqP2J8yox6mpNUGmCrJAd7qpwH5Fxg41VcifHSYX5bHB77ABRD6zVmlQ7x HGvhVJttzG1wG5qw5AiwXKV03CurCTgj0WWecJElqbVzkqmvsD2jIhOW8ZTEWnbJ2wSp nXCbwac17euWJkC2xpwq+Rsduw+yNrKSobT9UsFSufvr4Fx5prZl2TA414xkKosKLWbd b6XxD1nDAUOoKNgXTfRdIREH6cwxMYFUl6hKV0cDSgCyANDa1BeIjmFkvBQMKeKov4bg +L3HmzExxXSBPH7PpgHbT14MYVDGNLX5yA/NB4oWrfoyOpb4Qhiu33Xlg6UcIAbDJ7bB UStw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730569184; x=1731173984; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=S6pRIgOXMKdEQmIrB72XQmzGllgj0elocwvfppWkazw=; b=WvGz8W279YmbkpMw07jDHD/d7sIOGF0yfLGUHjwzuPSt4qlfzM285zaJ7t7Htd/4WQ HkbZ8Ar181+6zxDVXrsGge3CMv9YPe+8q1pNlYr2JbZSuuX90rMJFduec8gJ412p+ZI1 4ungfH2xhORRvArlEyZLxiNFme/aWd5Y64lG7rRK8IXK0PfMCg5hc3FBRhlfG0zBY7p3 WUr4NaYqmnFXwVs3Nkm1rrJpgQPuMU+7lstyjWHpAOoUQWRPk82KZXNMU5uU/WDDi4Ea 1u7qWHxHSluUOIPnylhGX5ULlmdOt3T/oYYVXKGevB4z8El+4Q+fT3p/KkJ2EO7lMaLH Ww6g== X-Forwarded-Encrypted: i=1; AJvYcCX1Odyw8i3X2BpXlQdVTHVIg/1F07hkGLNXvAfgUit54UU7h+0B+7g85he80vA04OPtRKQkQA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YwCRSJXHfewnl3sY6TxCnc+5eCysLFvrEYgsv2+d7IDItwDALld GSEUjQObv1vnsmsh2PBAeBeYR3Fj3Hotivu3c45BXZMZwOMabc5u X-Google-Smtp-Source: AGHT+IETqh7gWdxkgxDaVT+Nx+CE3kqrYh/EgsprFfZ8VwjEXbjzA0JplUQG48ibeUzQoCINPzrFPQ== X-Received: by 2002:a05:6a00:b8a:b0:70d:2a88:a483 with SMTP id d2e1a72fcca58-720c96513e9mr11872020b3a.0.1730569184409; Sat, 02 Nov 2024 10:39:44 -0700 (PDT) Received: from localhost ([1.7.159.70]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-720bc313888sm4378591b3a.185.2024.11.02.10.39.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Nov 2024 10:39:43 -0700 (PDT) From: Visuwesh In-Reply-To: <86cyjdy1xb.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 02 Nov 2024 19:34:56 +0200") References: <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> Date: Sat, 02 Nov 2024 23:09:40 +0530 Message-ID: <87plndwn4z.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA= =E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: >> From: Visuwesh >> Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org >> Date: Sat, 02 Nov 2024 23:01:37 +0530 >>=20 >> [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE= =AA=E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: >>=20 >> >> From: Visuwesh >> >> Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org >> >> Date: Sat, 02 Nov 2024 22:34:44 +0530 >> >>=20 >> >> [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0= =AE=AA=E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: >> >>=20 >> >> > Thanks, but this is a false alarm: the lgstring's glyphs don't have >> >> > the [XOFF YOFF WADJUST] component. So either my breakpoint conditi= on >> >> > is somehow wrong, or you mistyped it, or something else. >> >>=20 >> >> I don't think I mistyped the condition at least. Here's what I typed: >> >>=20 >> >> (gdb) break hbfont.c:598 if xoff =3D=3D 0 && yoff =3D=3D 0 && wad= just =3D=3D >> >> metrics.width && LGLYPH_ADJUSTMENT(lglyph) !=3D Qnil >> >>=20 >> >> > What does GDB show if you type >> >> > >> >> > (gdb) p LGLYPH_ADJUSTMENT(lglyph) >> >> > (gdb) p Qnil >> >>=20 >> >> (gdb) p LGLYPH_ADJUSTMENT(lglyph) >> >> $3 =3D XIL(0) >> >> (gdb) p Qnil >> >> $4 =3D XIL(0) >> > >> > OK, but then why did the breakpoint break, when the condition is >> > obviously false: LGLYPH_ADJUSTMENT(lglyph) =3D=3D Qnil. >> > >> > What happens if you type this: >> > >> > (gdb) p Qnil+0 >>=20 >> (gdb) p Qnil+0 >> Attempt to take address of value not located in memory. > > And this: > > (gdb) ptype Qnil (gdb) ptype Qnil type =3D struct Lisp_Object { Lisp_Word i; } From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 17:45:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173056948710001 (code B ref 73752); Sat, 02 Nov 2024 17:45:01 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 17:44:47 +0000 Received: from localhost ([127.0.0.1]:54669 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7IB5-0002bF-9Y for submit@debbugs.gnu.org; Sat, 02 Nov 2024 13:44:47 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40928) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7IB3-0002b4-GC for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 13:44:46 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t7IAr-0004Up-0W; Sat, 02 Nov 2024 13:44:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=S4KQbutI+6ptkTC3ruK9G+1CnCN090yQvxThCoUvtww=; b=o6clQ4BquyLho4kbjm0e pcNKgpyHvJMd3f7tGAsxIIxsEw8qu2u5SK0RtfhAe/X5pMUw12Hsot5cQc2FpTbafq9OcK3H5mS59 lXaJKiS8u/X8cJlNmG2B2nfOujeeBB3A7a1QJ08OLkQXqaUeZHsyfSDIfqZuloH74MpQ70x1pDhls fPVsgjxgaPegUOwekWqOtwdLST2TJJ1K5WvBizjFtU53uP+oID+bBqA5iOilDMuDvyze0zYucFK7f iVsbSPYRCGEF2DksqZzkEigDimxNa+vRP4t5i/Hgw4Xrm/qFIR5AnOvLFN8++n/qWj8tAUFIBTky2 QlJFLiXUsJDxvA==; Date: Sat, 02 Nov 2024 19:44:31 +0200 Message-Id: <86a5ehy1hc.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87plndwn4z.fsf@gmail.com> (message from Visuwesh on Sat, 02 Nov 2024 23:09:40 +0530) References: <86wmhp4obi.fsf@gnu.org> <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org > Date: Sat, 02 Nov 2024 23:09:40 +0530 > > [சனி நவம்பர் 02, 2024] Eli Zaretskii wrote: > > >> >> > What does GDB show if you type > >> >> > > >> >> > (gdb) p LGLYPH_ADJUSTMENT(lglyph) > >> >> > (gdb) p Qnil > >> >> > >> >> (gdb) p LGLYPH_ADJUSTMENT(lglyph) > >> >> $3 = XIL(0) > >> >> (gdb) p Qnil > >> >> $4 = XIL(0) > >> > > >> > OK, but then why did the breakpoint break, when the condition is > >> > obviously false: LGLYPH_ADJUSTMENT(lglyph) == Qnil. > >> > > >> > What happens if you type this: > >> > > >> > (gdb) p Qnil+0 > >> > >> (gdb) p Qnil+0 > >> Attempt to take address of value not located in memory. > > > > And this: > > > > (gdb) ptype Qnil > > (gdb) ptype Qnil > type = struct Lisp_Object { > Lisp_Word i; > } Ah, that explains the problem. Then please change the breakpoint condition to say this instead, and re-run the experiment: break hbfont.c:598 if xoff == 0 && yoff == 0 && wadjust == metrics.width && ((struct Lisp_Object)LGLYPH_ADJUSTMENT(lglyph)).i != 0 From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 17:56:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173057014211632 (code B ref 73752); Sat, 02 Nov 2024 17:56:01 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 17:55:42 +0000 Received: from localhost ([127.0.0.1]:54740 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7ILd-00031Y-QW for submit@debbugs.gnu.org; Sat, 02 Nov 2024 13:55:42 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:57651) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7ILc-00031Q-Ct for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 13:55:41 -0400 Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-720c286bcd6so2142964b3a.3 for <73752@debbugs.gnu.org>; Sat, 02 Nov 2024 10:55:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730570075; x=1731174875; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6vZfu+44iCtDziMtowQg8jmYVKW5re8S2xxe/yb/ikA=; b=OGJi/yQ3PAhWM5cJ7id3LjtNqAdaDYvmVCJZu269A7HLIw5oNew5TBrljXoWOtPABx xba+aCoLTkgHi87TYYfka9j3cDlhMZ+4asBxeyBroR5RyjoCZSCOvyIBOYYOIVm5Npb6 zn7RFInoyiEO872ZVN4fNLF8RFV+KhtxcACoN1MR8tIuTCvKix9ILj6wUGl45ehsvPjl H1EqNywcIcKZF8wLI1hmH7epdX9G2r864CrHSzn5fQXCAumGBWeWG6Nevth2cj5L5tFU JbgzEr4bs8R29A63o0hw1kmLeMTK80jttIuYs6IYp/47yVZMQAI9H/yTv1BaIxVBjVV5 Oy2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730570075; x=1731174875; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=6vZfu+44iCtDziMtowQg8jmYVKW5re8S2xxe/yb/ikA=; b=KQyPRUpaZ0kZ58YRozRXIomBkLd9KHi82htHFvFtA2DHctbsBgH5/FRBoU74cQX6SY 6iDChSKYDfI1mfPQCUYp5SAVSFKPDrv6DBQB3V/NZigQxLpIr0SqlyAyS2LImlnR6fKZ dOG8QJMRFVaTe/D/vRH7/dlcVZnxVICruFzIsTXYLN1ytYHRjeU9bDq6G4EoyFuEeBws JmfIRsNT4nXPJoQo6JCPeVeROcWOpkh/9bpwsy7jlYQX/g3SElrL+Mc3IOc1a9MhgWV9 94N3LZ83tASEb+DyWWxwWgCh71ILhdKp63xs8N7UoFwXRnbEzcNH/GvfX1k8JyE/PeZZ 8f3w== X-Forwarded-Encrypted: i=1; AJvYcCX8derT/V3z8NvfZyXPPA+uhvIk8CnHIcmmErDlqBIJHVRRbdIbIQII7b9vIpTzzSKQNNESgA==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yy9756NPtgUl8QyP2m33H9TnFZ8jw53IML2ZIguo9FwkafjU6hF nVDB53K3VoGX/JRGVRkQgYOTQVJenFzTBoMrMHBujbxfTfCJD1Zk X-Google-Smtp-Source: AGHT+IHz4YyxepEdcPYl4MgWBGTsWtKu54GpTvmrWX/4PGSZb3Vf/vjZKGPRnZv7GBRwP3cALnLmyg== X-Received: by 2002:a05:6a00:4606:b0:71e:68ae:aae1 with SMTP id d2e1a72fcca58-72063028d99mr37019491b3a.19.1730570074552; Sat, 02 Nov 2024 10:54:34 -0700 (PDT) Received: from localhost ([1.7.159.70]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-720bc2c3934sm4378440b3a.109.2024.11.02.10.54.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Nov 2024 10:54:34 -0700 (PDT) From: Visuwesh In-Reply-To: <86a5ehy1hc.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 02 Nov 2024 19:44:31 +0200") References: <86msil4mpn.fsf@gnu.org> <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> Date: Sat, 02 Nov 2024 23:24:30 +0530 Message-ID: <87ldy1wmg9.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA= =E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: > Ah, that explains the problem. Then please change the breakpoint > condition to say this instead, and re-run the experiment: > > break hbfont.c:598 if xoff =3D=3D 0 && yoff =3D=3D 0 && wadjust =3D=3D m= etrics.width && ((struct Lisp_Object)LGLYPH_ADJUSTMENT(lglyph)).i !=3D 0 It doesn't break immediately anymore. I will report back once the breakpoint breaks. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 18:05:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173057064612494 (code B ref 73752); Sat, 02 Nov 2024 18:05:01 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 18:04:06 +0000 Received: from localhost ([127.0.0.1]:54781 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7ITm-0003FS-AP for submit@debbugs.gnu.org; Sat, 02 Nov 2024 14:04:06 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:47483) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7ITj-0003F1-Pc for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 14:04:04 -0400 Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-71e8235f0b6so2603699b3a.3 for <73752@debbugs.gnu.org>; Sat, 02 Nov 2024 11:04:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730570578; x=1731175378; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=szgY6sP7tVLw0rXb2GbbUYjvAGuirv/keP+ieYawF4I=; b=NEi77QjJ2o5ji3bHxVbN+HReW6MmzvHTkeb3UyNh7hN10rmiwoX7GXiWW8OBQZP5WI 3d5OCTTxRz9jr0F0ohfP7mzGw0SKZuSzOmfCQViuAvf19U0LNi6wqj8o9GnnM8mQzXJC todP5BOZJ0KqFRpESDk2Ak1fyUYZpswOl6873GmW7Q+Jfn4zkujyvkjbH09CNUM2rgX0 OlUXeijr3rUb+iKIsQ5dDPK661JvbsnGBAhUXu66sEKGPXcVvbay64SmgzKBPqGJT9cd GHkYaTR/YCEetlFIgbeE2+Wug08cCJBmFHub76aTyy9mqmH/49Gc2l/YuRnulXhJSd5R q0OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730570578; x=1731175378; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=szgY6sP7tVLw0rXb2GbbUYjvAGuirv/keP+ieYawF4I=; b=CgqHVkbXrOXyqtN9HWDUcyA9lVyB7Z+ZFcOOd5TYVmmz5ldmrCbWsNb5ls82pyk19y 2+mtrrQzHaGhEuJ5v7up7m3+cl/GLVRiagyMCrxpb5eVMAr/cP8uhMApOe+BDwSVoXrI x71TdC/2a6dNTT/m9st0Qr+vqxzlhfJhuDPG0DyoiSu5NezcHNf/AZcbUPHkIbOcfd2j Gyl78+C22w7r/wq0JoKg4HaHSfHuOWSpQUsCpCEbh8TmmOyasplQ8oh4U9KrPnkOB4bO X1Hqipjr51HqaL7ZWVPcrqws1WFnJ77+jAuJ4GpYJ3OBv10vo9iVpcgfg0gMC7TSiRo4 vHgA== X-Forwarded-Encrypted: i=1; AJvYcCVjtsdA+Hlhi83cMIdZVX3dcCISRbyNuSEfisV9LBdwoLLtVrSCmUHl3yBa/6mcHYrwo8tjAQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yx8a0+zMxCVWw5U3LHpl+QWc9xZ94kqWibagGhUcycjmWWjES7/ 9pL2knDDapOVa1gChwlTRxOfGnTZC7OyxDKMbCA1gnyIvXg+pJ0/EI/Z5vRS61g= X-Google-Smtp-Source: AGHT+IHHlGBcoHXLqC2Fh5p/xXONjIpAj7xJ2QEgiLEsGJjSGejB4GiTjJVppjDafgk5vLHDmW9Qnw== X-Received: by 2002:a05:6a00:3d09:b0:71e:44f6:6904 with SMTP id d2e1a72fcca58-720b9c291e0mr15197817b3a.13.1730570578108; Sat, 02 Nov 2024 11:02:58 -0700 (PDT) Received: from localhost ([1.7.159.70]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-720bc2eb3bfsm4372741b3a.156.2024.11.02.11.02.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Nov 2024 11:02:57 -0700 (PDT) From: Visuwesh In-Reply-To: <87ldy1wmg9.fsf@gmail.com> (Visuwesh's message of "Sat, 02 Nov 2024 23:24:30 +0530") References: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> Date: Sat, 02 Nov 2024 23:32:53 +0530 Message-ID: <87h68pwm2a.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA= =E0=AE=B0=E0=AF=8D 02, 2024] Visuwesh wrote: > [=E0=AE=9A=E0=AE=A9=E0=AE=BF =E0=AE=A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE= =AA=E0=AE=B0=E0=AF=8D 02, 2024] Eli Zaretskii wrote: > >> Ah, that explains the problem. Then please change the breakpoint >> condition to say this instead, and re-run the experiment: >> >> break hbfont.c:598 if xoff =3D=3D 0 && yoff =3D=3D 0 && wadjust =3D=3D >> metrics.width && ((struct Lisp_Object)LGLYPH_ADJUSTMENT(lglyph)).i >> !=3D 0 > > It doesn't break immediately anymore. I will report back once the > breakpoint breaks. I tried reproducing it again. The misalignment occurred but the breakpoint was not triggered: (gdb) pgrow TEXT: 4 glyphs 0 0: COMP[3457 (0..0)] pos=3D1 w=3D10 a+d=3D14+4 face=3D23 MB 1 10: COMP[3457 (1..1)] pos=3D2 w=3D10 a+d=3D14+4 face=3D23 MB 2 20: COMP[3457 (2..2)] pos=3D3 w=3D10 a+d=3D14+4 face=3D23 MB 3 30: CHAR[ ] pos=3D0 blev=3D0,btyp=3DB w=3D9 a+d=3D14+4 MB (gdb) pp composition_gstring_from_id(3457) [[# 45 45 62] 3457 [0 0 45 1970 9 0 9 7 -4 [0 0 10]] [1 1 45 1969 = 9 -1 10 7 -4 [0 0 10]] [2 2 62 2728 9 -1 9 11 0 [0 0 10]]] where to get to type `pgrow' I said % kill -TSTP 222729 then set the breakpoint for set_cursor_from_row like you instructed earlier. I can try to reproduce this issue once again to see if the breakpoint gets triggered. This type though, the glyph made from --> was rendered properly using the same font but started misrendering after letting the timer run a while. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 02 Nov 2024 18:29:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173057209415559 (code B ref 73752); Sat, 02 Nov 2024 18:29:01 +0000 Received: (at 73752) by debbugs.gnu.org; 2 Nov 2024 18:28:14 +0000 Received: from localhost ([127.0.0.1]:54895 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7Ir7-00042t-NF for submit@debbugs.gnu.org; Sat, 02 Nov 2024 14:28:14 -0400 Received: from eggs.gnu.org ([209.51.188.92]:36202) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7Ir4-00042k-KT for 73752@debbugs.gnu.org; Sat, 02 Nov 2024 14:28:13 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t7Iqu-0007cb-A5; Sat, 02 Nov 2024 14:28:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=ZQFY6SBwgUqCLlj3FrSaPX2Dt4H7nsRPO0CYhDrnVjA=; b=iIee4HfJPfxPdQwsyVeH imIgzCfsEBGaXGXZjUcP2pbrfpvjI0yt/LChABcjl/7/CDuhOxUia0KvNVciQwh6rdT5n5fIyDqt8 pLdIorZU2TUeBlTsJhO9IWLZ5adHpDB7Y/coOXCC3doLYrzARgfauE1xaeEynMjNqfj9BphW3QtgC Ts1g5dbtFcJSI33j3t9P378KMPkyvt8lam3eKiLAm3y1553u0lkgVEyuUq478ido9ebLLs7EZIJAH kK37irPdR9MIiYzR3JUsXYmsxaGRd8iuIxPiJ8Xn1pLRSffzvKmGXVDT7WLAEColgsrNvNC1tFcAh NUepW6h8846DKw==; Date: Sat, 02 Nov 2024 20:27:44 +0200 Message-Id: <868qu1xzhb.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87h68pwm2a.fsf@gmail.com> (message from Visuwesh on Sat, 02 Nov 2024 23:32:53 +0530) References: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org > Date: Sat, 02 Nov 2024 23:32:53 +0530 > > [சனி நவம்பர் 02, 2024] Visuwesh wrote: > > > [சனி நவம்பர் 02, 2024] Eli Zaretskii wrote: > > > >> Ah, that explains the problem. Then please change the breakpoint > >> condition to say this instead, and re-run the experiment: > >> > >> break hbfont.c:598 if xoff == 0 && yoff == 0 && wadjust == > >> metrics.width && ((struct Lisp_Object)LGLYPH_ADJUSTMENT(lglyph)).i > >> != 0 > > > > It doesn't break immediately anymore. I will report back once the > > breakpoint breaks. > > I tried reproducing it again. The misalignment occurred but the > breakpoint was not triggered: > > (gdb) pgrow > TEXT: 4 glyphs > 0 0: COMP[3457 (0..0)] pos=1 w=10 a+d=14+4 face=23 MB > 1 10: COMP[3457 (1..1)] pos=2 w=10 a+d=14+4 face=23 MB > 2 20: COMP[3457 (2..2)] pos=3 w=10 a+d=14+4 face=23 MB > 3 30: CHAR[ ] pos=0 blev=0,btyp=B w=9 a+d=14+4 MB > (gdb) pp composition_gstring_from_id(3457) > [[# 45 45 62] 3457 [0 0 45 1970 9 0 9 7 -4 [0 0 10]] [1 1 45 1969 9 -1 10 7 -4 [0 0 10]] [2 2 62 2728 9 -1 9 11 0 [0 0 10]]] > > where to get to type `pgrow' I said > > % kill -TSTP 222729 > > then set the breakpoint for set_cursor_from_row like you instructed > earlier. > > I can try to reproduce this issue once again to see if the breakpoint > gets triggered. Please also put a breakpoint in composite.c on the line shown below, before you try reproducing again: if (NILP (glyph) || from != LGLYPH_FROM (glyph)) { eassert (i > 0); Lisp_Object last = LGSTRING_GLYPH (gstring, i - 1); if (width == 0) { if (NILP (LGLYPH_ADJUSTMENT (last))) <<<<<<<<<<<<<<<<<<<<< LGLYPH_SET_ADJUSTMENT (last, CALLN (Fvector, make_fixnum (0), make_fixnum (0), make_fixnum (LGLYPH_WIDTH (last) + 1))); else ASET (LGLYPH_ADJUSTMENT (last), 2, make_fixnum (LGLYPH_WADJUST (last) + 1)); } From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Tim Ruffing Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Nov 2024 00:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii , Visuwesh Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173067914411376 (code B ref 73752); Mon, 04 Nov 2024 00:13:01 +0000 Received: (at 73752) by debbugs.gnu.org; 4 Nov 2024 00:12:24 +0000 Received: from localhost ([127.0.0.1]:35883 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7khj-0002xP-HP for submit@debbugs.gnu.org; Sun, 03 Nov 2024 19:12:23 -0500 Received: from mout-p-101.mailbox.org ([80.241.56.151]:59876) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7khh-0002xG-7P for 73752@debbugs.gnu.org; Sun, 03 Nov 2024 19:12:22 -0500 Received: from smtp2.mailbox.org (smtp2.mailbox.org [10.196.197.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 4XhX2P1PZ0z9svK; Mon, 4 Nov 2024 01:11:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=real-or-random.org; s=MBO0001; t=1730679101; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NDuaW/4EvR0ME8TfdfAJ4E9Eqvvz2+gNrmECOLtyKbQ=; b=K4ZF6jPUSsbxthl+6o1OJqNGxAVJYU+FfKtvoL/mJrb127ha4s7xWyfyv9+nyfMQ6O7jjn CZNxhxCoj+cLKI9RSeQGc+DSjL0NncFW40+Fto2uQLhkFj82dpERDEne9U4wHDSZAi0Cyx tH39oqYIVj5bZAYiNKACBya3uAh8gDrP0slSbXpgkzuWAQ6jBhCG4R/HOFnUPV0f2qm25z b7UszcLv/Q0Ut+Lcl/ugMCaRtj3mw4v92KBZj4aiixxryYebi+VSaqnifwHWt3zNbrVQkb VuVes5IGwjXq1P2R6lqE8+sFdAyqugY7strwGYettehSe6L6phbLItuFoJkCsQ== Message-ID: From: Tim Ruffing Date: Mon, 04 Nov 2024 01:11:39 +0100 In-Reply-To: <868qu1xzhb.fsf@gnu.org> References: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This fixes the problem: =20 diff --git a/src/ftfont.c b/src/ftfont.c index 882d3eec256..2be443108f1 100644 --- a/src/ftfont.c +++ b/src/ftfont.c @@ -2994,9 +2994,8 @@ fthbfont_begin_hb_font (struct font *font, double *position_unit) struct font_info *ftfont_info =3D (struct font_info *) font; =20 *position_unit =3D 1.0 / (1 << 6); - if (! ftfont_info->hb_font) - ftfont_info->hb_font - =3D hb_ft_font_create_referenced (ftfont_info->ft_size->face); + ftfont_info->hb_font + =3D hb_ft_font_create_referenced (ftfont_info->ft_size->face); return ftfont_info->hb_font; } =20 That is, it makes at least the bug with Yixuan's script disappear. I haven't yet verified if this fixes what I often see during my daily usage. The above patch seems to a bit crude at first glance. While I don't notice any impact on performance, the following should be faster according to https://harfbuzz.github.io/integration-freetype.html : diff --git a/src/ftfont.c b/src/ftfont.c index 882d3eec256..cd685af4d89 100644 --- a/src/ftfont.c +++ b/src/ftfont.c @@ -2997,6 +2997,8 @@ fthbfont_begin_hb_font (struct font *font, double *position_unit) if (! ftfont_info->hb_font) ftfont_info->hb_font =3D hb_ft_font_create_referenced (ftfont_info->ft_size->face); + else + hb_ft_font_changed (ftfont_info->hb_font); return ftfont_info->hb_font; } But unfortunately, that one doesn't work. With this patch, the rendering is still bad, it's just bad in a difference way: Instead of the last character having wadjust > width, all characters in the bad ligature have the same wadjust > width. If we care about this, then we may want to reach out to harfbuzz to understand why. (Or at least that seems beyond my superficial text rendering skills, but perhaps the experts here understand what's going on.) =20 From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Nov 2024 17:46:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing , YAMAMOTO Mitsuharu Cc: 73752@debbugs.gnu.org, dev@real-or-random.org, xuan@xlk.me, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173074235411783 (code B ref 73752); Mon, 04 Nov 2024 17:46:01 +0000 Received: (at 73752) by debbugs.gnu.org; 4 Nov 2024 17:45:54 +0000 Received: from localhost ([127.0.0.1]:41356 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8194-00033t-Qk for submit@debbugs.gnu.org; Mon, 04 Nov 2024 12:45:54 -0500 Received: from eggs.gnu.org ([209.51.188.92]:33568) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8190-00033l-Mt for 73752@debbugs.gnu.org; Mon, 04 Nov 2024 12:45:40 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t818q-0002Ni-SK; Mon, 04 Nov 2024 12:45:29 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=XECVXj9SmBueBS3Lga1B3/g7XHSVjDtPw2j/+RtDVc0=; b=SbC0D2bJRHLf bW2/7yLHCby0QTmYj7xEC0F7IXtQ8wRiSjHQQxCpk+eTht9UFvwtA11KQJjVVyva7b6EX/f7+Z1nv rEyOYcy9fcvQX//p9VeNw+KEPg6+sdCXnEboa2TBL0OjlAO9Tp1ixmxZbLdbVcVPxR2zdD9Jct3k9 wVQ0RW+99pR8EkjZuBGi4NB2arQoDUa686yr3i7cbwMJUFiFl7k1T+yV1ySDVDewev+HouC19R/HB RYOpDD4PFOWWwmxhJEzfPdvEHCfZMHWvTwxm8eI+2ro7+5aABbK3DIULmwZ/3Tjnm2JG5yTJiCprE VhaDf8I3B/iYO3sA9S1Erw==; Date: Mon, 04 Nov 2024 19:45:22 +0200 Message-Id: <86y11yuc3x.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Tim Ruffing on Mon, 04 Nov 2024 01:11:39 +0100) References: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > From: Tim Ruffing > Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org > Date: Mon, 04 Nov 2024 01:11:39 +0100 > > This fixes the problem: Thanks. But do you understand why? And how did you arrive to the conclusion that this is the change which might help? > diff --git a/src/ftfont.c b/src/ftfont.c > index 882d3eec256..2be443108f1 100644 > --- a/src/ftfont.c > +++ b/src/ftfont.c > @@ -2994,9 +2994,8 @@ fthbfont_begin_hb_font (struct font *font, double > *position_unit) > struct font_info *ftfont_info = (struct font_info *) font; > > *position_unit = 1.0 / (1 << 6); > - if (! ftfont_info->hb_font) > - ftfont_info->hb_font > - = hb_ft_font_create_referenced (ftfont_info->ft_size->face); > + ftfont_info->hb_font > + = hb_ft_font_create_referenced (ftfont_info->ft_size->face); > return ftfont_info->hb_font; > } > > That is, it makes at least the bug with Yixuan's script disappear. I > haven't yet verified if this fixes what I often see during my daily > usage. That code was written by a leading HarfBuzz developer, so it's hard for me to believe that it is so incorrect. OTOH, I see that ftcrhbfont is the _only_ HarfBuzz-based font backend which implements the end_hb_font method, and I think you both told me that only the Cairo build has this problem? If so, I think the code to look at is the end_hb_font method and what it does to the hb_font object. The end_hb_font method is called each time the shaper is called, so whatever it does to the hb_font object is inherited by the next call to the shaper. Visuwesh, do the problems you see also disappear when you install the change in fthbfont_begin_hb_font which removes the !ftfont_info->hb_font condition for calling hb_ft_font_create_referenced? I'm also adding Yamamoto-san to this discussion, in the hope that he could have some ideas or suggestions. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Nov 2024 18:04:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: Tim Ruffing , xuan@xlk.me, YAMAMOTO Mitsuharu , 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173074340313908 (code B ref 73752); Mon, 04 Nov 2024 18:04:02 +0000 Received: (at 73752) by debbugs.gnu.org; 4 Nov 2024 18:03:23 +0000 Received: from localhost ([127.0.0.1]:41446 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t81QA-0003cG-QR for submit@debbugs.gnu.org; Mon, 04 Nov 2024 13:03:23 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:57816) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t81Q8-0003c8-F3 for 73752@debbugs.gnu.org; Mon, 04 Nov 2024 13:03:21 -0500 Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-720c286bcd6so3537351b3a.3 for <73752@debbugs.gnu.org>; Mon, 04 Nov 2024 10:03:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730743339; x=1731348139; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Na7+FFCc0/liBCRjHrdwCtXRV6k33Gn3DU0QYD9flqo=; b=QF2JQ9PIRMf0dPGm9rFZobf41YrB2xkMjp7B21byfqrKRkWg0/u+h4GSAmhmqMbTqN r/RjwCTTZlHAo5EPYy2uz2MG4ON3vebaa++wbW+4JNuupsZoMgf9TqYnY5IuHhNtbwon sJcmCCalpsC7s7EjaXbyBlL2Hyb2FOtmojlGLtucuT9vyXWvgdf/TWYDR2hSPd6jOOxm c7bEazwVGmYTIrGn30alF3wQ9dAjYYGoQIuRzDprcDK8697vP+e3q/qYbVh+I5bmwmQ3 jrkkmti+k3aHKHxstNHJKc1yfHvsiXI+/5OPpE1mfPhzflxtMsB6mNku42naC0Eh5A42 pj3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730743339; x=1731348139; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Na7+FFCc0/liBCRjHrdwCtXRV6k33Gn3DU0QYD9flqo=; b=WgnVlLK1Rl7UQanr1pLjqNmg0Whn5MG99tCkUkuTMhpzwkeIOVxsEeWYR5AzP/dprP X3kbNiAMUrsfQK3UdSSkFCnmTKJJ0x0f+vuqjBa9F/P/OnUla4KGoIJ3MqXDpnHZWRVn 6P5bgD9J1wczrKeIVoTmzicqdErHxNGQ83xh3bD7g4i32pmOCbgrL92MQSAqyP6JQl2I Z4aiE5TjiBWi6FD7/N0JmH0rbZaFyV+rvb5tGcJ1M+0jx8exaGlhgtLKiloSvx706PaL 6dTylmHox+1ddsRGC4ktl1uoC8hKfKoWd0CLlvTICIbOWwEI1jX6EnH5I9GneMPdk8Xe O/Yg== X-Forwarded-Encrypted: i=1; AJvYcCUvkrZ+YxDIXXeGsxiAZye0LDva02z9kEtdRlQoJ6c9kB4GgBqNWECFGO3CqUbttkpSATO3jw==@debbugs.gnu.org X-Gm-Message-State: AOJu0YyW7ap4j+QnNX4uwevIZw0hFcvf36SIcvqiFX4GFC7mtBLV6KHW q6QSVy7t3DfjgakYvqtNIBUzZKJxKx9M3GJdVHP28tshxbW8KAvG X-Google-Smtp-Source: AGHT+IGyjknq55YylKcRhNHqw4S3ddHNXK+G8oHFdxKtOH27nvRrR539s5tSDfuDXgPzljT10Blxdw== X-Received: by 2002:a05:6a00:3d4c:b0:71e:cc7:c511 with SMTP id d2e1a72fcca58-72063059fffmr49271256b3a.23.1730743338872; Mon, 04 Nov 2024 10:02:18 -0800 (PST) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-720bc3158c0sm7698956b3a.196.2024.11.04.10.02.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2024 10:02:17 -0800 (PST) From: Visuwesh In-Reply-To: <86y11yuc3x.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 04 Nov 2024 19:45:22 +0200") References: <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> Date: Mon, 04 Nov 2024 23:32:13 +0530 Message-ID: <87y11yvpwa.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=A4=E0=AE=BF=E0=AE=99=E0=AF=8D=E0=AE=95=E0=AE=B3=E0=AF=8D =E0=AE=A8= =E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AE=B0=E0=AF=8D 04, 2024] Eli Zarets= kii wrote: > Visuwesh, do the problems you see also disappear when you install the > change in fthbfont_begin_hb_font which removes the > !ftfont_info->hb_font condition for calling > hb_ft_font_create_referenced? I will try to test it ASAP. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Tim Ruffing Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Nov 2024 23:35:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii , Tim Ruffing , YAMAMOTO Mitsuharu Cc: 73752@debbugs.gnu.org, xuan@xlk.me, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173076324422491 (code B ref 73752); Mon, 04 Nov 2024 23:35:01 +0000 Received: (at 73752) by debbugs.gnu.org; 4 Nov 2024 23:34:04 +0000 Received: from localhost ([127.0.0.1]:42873 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t86aB-0005qh-PP for submit@debbugs.gnu.org; Mon, 04 Nov 2024 18:34:04 -0500 Received: from mout-p-202.mailbox.org ([80.241.56.172]:45380) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t86a7-0005qE-H7 for 73752@debbugs.gnu.org; Mon, 04 Nov 2024 18:34:02 -0500 Received: from smtp1.mailbox.org (smtp1.mailbox.org [10.196.197.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4Xj77g73Gjz9ssZ; Tue, 5 Nov 2024 00:33:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=real-or-random.org; s=MBO0001; t=1730763200; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AwPq8wnv6MJmvxrEdeqsRXio3DVv9Azulvc5zX5gcUs=; b=gPKvDgLEPJPH17TOi/Ylt7fiXlhx81hiLvM16H5E89yIGnZfhalBmXwKMHciVZH6wd9eq0 KblLfvroIw6KIgmeKvHyDLuf7zPC0bJTYFSoAnR8fzcsTUbdf8NY0+ko5mmfuNH45YhOTh qssuG2dgb8qINmRy5c6G7nzHDBiAsnLisfG+3GZ3KVXA0rfl07fsG6aPQ/d0XMXeAvC1h2 xdfERkfu1OyOJvkHWuLB2Hc0N551KE5tSu3w1AB8OLkoX1AzQZ/yZHto9lqGqqgZn07t+u UXfjZ6K4qmN7IJ7Q5IwBrgfGsYsFOXBR55+oSz9ZIaBsCXLN315MPK24IZs/tQ== Message-ID: <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> From: Tim Ruffing Date: Tue, 05 Nov 2024 00:33:17 +0100 In-Reply-To: <86y11yuc3x.fsf@gnu.org> References: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) On Mon, 2024-11-04 at 19:45 +0200, Eli Zaretskii wrote: > > From: Tim Ruffing > > Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org > > Date: Mon, 04 Nov 2024 01:11:39 +0100 > >=20 > > This fixes the problem:=C2=A0=20 >=20 > Thanks.=C2=A0 But do you understand why? >=20 > And how did you arrive to the conclusion that this is the change > which > might help? I was trying to understand why hb_shape_full() gives different results at different times. All the other inputs (e.g., text direction) to hb seemed harmless and fixed for the reproducing script. The only thing that is constantly changing in the script is the font, so this was the obvious candidate. Then I searched harfbuzz's bug tracker for relevant issues, and I found this one, which is rather similar to what we observe (e.g., advance wrong): https://github.com/harfbuzz/harfbuzz/issues/1620=20 > That code was written by a leading HarfBuzz developer, so it's hard > for me to believe that it is so incorrect. >=20 Perhaps it was simply written before harfbuzz implemented caching, so the code was correct for older versions of harfbuzz. The root cause of the aforementioned issue is exactly this. =20 > OTOH, I see that ftcrhbfont is the _only_ HarfBuzz-based font backend > which implements the end_hb_font method, and I think you both told me > that only the Cairo build has this problem?=C2=A0=C2=A0 The Cairo build has this problem, and yeah, I've just checked, I can't reproduce with the the Xft backend.=20 > If so, I think the code > to look at is the end_hb_font method and what it does to the hb_font > object.=C2=A0 The end_hb_font method is called each time the shaper is > called, so whatever it does to the hb_font object is inherited by the > next call to the shaper. This sounds like a plausible cause, but as far as I can tell, end_hb_font doesn't do anything to hb_font. The end function is simply necessary to call cairo_ft_scaled_font_unlock_face(). What I don't understand is whether or how the underlying FT_Face or FT_Size is supposed to change at all. I assume it's not supposed to change? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Tim Ruffing Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Nov 2024 23:49:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing , Eli Zaretskii , YAMAMOTO Mitsuharu Cc: 73752@debbugs.gnu.org, xuan@xlk.me, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173076408124312 (code B ref 73752); Mon, 04 Nov 2024 23:49:02 +0000 Received: (at 73752) by debbugs.gnu.org; 4 Nov 2024 23:48:01 +0000 Received: from localhost ([127.0.0.1]:42888 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t86nh-0006K0-AM for submit@debbugs.gnu.org; Mon, 04 Nov 2024 18:48:01 -0500 Received: from mout-p-202.mailbox.org ([80.241.56.172]:33762) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t86ne-0006Jk-IS for 73752@debbugs.gnu.org; Mon, 04 Nov 2024 18:47:59 -0500 Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:b231:465::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4Xj7SR3LVTz9ss0; Tue, 5 Nov 2024 00:47:51 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=real-or-random.org; s=MBO0001; t=1730764071; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YWM1nXrsY6+g9SztXFr5Y9REu765nt1Lm2NJE6aOI2A=; b=mPwu6ObnvJBsAv36+gmycbGlVXSZJ0sqjvIr5nfOuM569XRl3Lz3p1EyFgJrmpZEFwKaM1 Y1FM8YkjbbXuG2xvHACJQn71aq+oF83mcXl9I/uG7CJaK/Gd3vaP4STwpFoC0t9iim9N8+ SRxZGz/Ul6IUP0zrI4sglSrGbrT+E7PUYUIRVo/C6hEdkE9S2xJunmvZriD595qDMmqV7c dfwsAaRAeSdJXrVnLn+XADfbdssMIMhcKgg76JehLMALcc6NMFc16ZNnSlXIlTaRXx0HOQ u+krUVEv6SCccHj5VV/fMBELHSke2winZcnt5nHi9b9QZxk31dJCBZhgAzELiw== Message-ID: <25366d20dff7673bd966040102e65bc8e02b9c6b.camel@timruffing.de> From: Tim Ruffing Date: Tue, 05 Nov 2024 00:47:49 +0100 In-Reply-To: <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> References: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Rspamd-Queue-Id: 4Xj7SR3LVTz9ss0 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) By the way, I was not suggesting a final patch. If anything, if we call hb_ft_font_create_referenced unconditionally, we should create an _end function and call hb_font_destroy there. But I still think that there should be a cleaner fix. I have no idea why hb_ft_font_changed doesn't work. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Tim Ruffing Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 06 Nov 2024 12:04:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing , Eli Zaretskii , YAMAMOTO Mitsuharu Cc: 73752@debbugs.gnu.org, xuan@xlk.me, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173089459714868 (code B ref 73752); Wed, 06 Nov 2024 12:04:01 +0000 Received: (at 73752) by debbugs.gnu.org; 6 Nov 2024 12:03:17 +0000 Received: from localhost ([127.0.0.1]:39896 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8ekn-0003rj-0H for submit@debbugs.gnu.org; Wed, 06 Nov 2024 07:03:17 -0500 Received: from mout-p-101.mailbox.org ([80.241.56.151]:40216) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8ekl-0003rY-LW for 73752@debbugs.gnu.org; Wed, 06 Nov 2024 07:03:16 -0500 Received: from smtp2.mailbox.org (smtp2.mailbox.org [IPv6:2001:67c:2050:b231:465::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 4Xk3jp0MXCz9sy3; Wed, 6 Nov 2024 13:02:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=real-or-random.org; s=MBO0001; t=1730894558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rnRrVzNUxxkaylAiWTY1G+EPIprJgMOg1JYTlnWbg/Q=; b=m84v/watPIb8Gm6aKwreLtqN+gaY3J2woFsAKNICMzMPu5gkVs3uJcmDz5RqKjcZZXz9tN uBVzWXmz3xSV/6XEXgM4KxeEValbgnfr1I7/HOUZ+UZeLtPphbvGDoTALl5JQ1ZgAbKBbm lAzn24piVyPPZsmLL+8HxPPFnwc3T/Cyj+HXQDxFqeLb1/JBa1fm7Tq0e9nGhGFyUVucFr lkfqqso84apQakd5pVBIuFW5I4WAXr+LsXXN7+SGzXk3rpuuagBKJI5h2ZTL6ktiKXHr7I 9SZIKXR29r9wBGd7ivF8TJcMw7md+am2re9I47LAdMEsLMX9RfgSUWZA3Q174g== Message-ID: From: Tim Ruffing Date: Wed, 06 Nov 2024 13:02:34 +0100 In-Reply-To: <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> References: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Rspamd-Queue-Id: 4Xk3jp0MXCz9sy3 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > > If so, I think the code > > to look at is the end_hb_font method and what it does to the > hb_font > > object. The end_hb_font method is called each time the shaper is > > called, so whatever it does to the hb_font object is inherited by > the > > next call to the shaper. >=20 > This sounds like a plausible cause, but as far as I can tell, > end_hb_font doesn't do anything to hb_font. The end function is > simply > necessary to call cairo_ft_scaled_font_unlock_face(). >=20 Okay, I still have no idea what the root cause is, but this hack also makes the bug disappear for me: diff --git a/src/ftcrfont.c b/src/ftcrfont.c index 3700154e44a..4f62873f8c1 100644 --- a/src/ftcrfont.c +++ b/src/ftcrfont.c @@ -708,7 +708,6 @@ ftcrhbfont_end_hb_font (struct font *font, hb_font_t *hb_font) struct font_info *ftcrfont_info =3D (struct font_info *) font; cairo_scaled_font_t *scaled_font =3D ftcrfont_info->cr_scaled_font; =20 - cairo_ft_scaled_font_unlock_face (scaled_font); ftcrfont_info->ft_size =3D NULL; } This is consistent with your theory about end_hb_font. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 06 Nov 2024 13:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing Cc: 73752@debbugs.gnu.org, dev@real-or-random.org, xuan@xlk.me, mituharu@math.s.chiba-u.ac.jp, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173089872626324 (code B ref 73752); Wed, 06 Nov 2024 13:13:01 +0000 Received: (at 73752) by debbugs.gnu.org; 6 Nov 2024 13:12:06 +0000 Received: from localhost ([127.0.0.1]:40059 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8fpO-0006qU-FD for submit@debbugs.gnu.org; Wed, 06 Nov 2024 08:12:06 -0500 Received: from eggs.gnu.org ([209.51.188.92]:36748) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8fpK-0006px-BL for 73752@debbugs.gnu.org; Wed, 06 Nov 2024 08:12:05 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t8fpB-0001uk-36; Wed, 06 Nov 2024 08:11:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=apY2q4jdpsiJO20FONgJ+BRInu2H+8ZqkqsWTMaolyQ=; b=mqiiSEl2lj0k lcpL/1ZeM3QSBauM0DPX40Qo9qVZ2mLtNUnPSlSrtVvgbLMKIhkonyp+y4yY6ErHL9Ay4hbqwZeZq xQLe1FacXsNlAt09v3D4PC+uHjLqqfLfhWasRMSthQEVqE+UMbfWwPJ0DCWyuOcVyf8mP6d2yIxFb KSjzD0MOfcwYaFt3wcoFz7SNCH34OZPwTRSet+oRLpXhh2CKF8OZA7BuuYwvIEwIyQEYH/pdojlR5 2usKn2zGYRcAikefC0F6IItBo0z3Vz6BASK7JGgeSndLsINw7+1SNS1VahdOgkcmfDuEquohJWtJ6 N4jzOcCyssWV2B/IMXHZuw==; Date: Wed, 06 Nov 2024 15:11:02 +0200 Message-Id: <86ikt0se1l.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Tim Ruffing on Wed, 06 Nov 2024 13:02:34 +0100) References: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Tim Ruffing > Cc: visuweshm@gmail.com, xuan@xlk.me, 73752@debbugs.gnu.org > Date: Wed, 06 Nov 2024 13:02:34 +0100 > > > > If so, I think the code > > > to look at is the end_hb_font method and what it does to the > > hb_font > > > object. The end_hb_font method is called each time the shaper is > > > called, so whatever it does to the hb_font object is inherited by > > the > > > next call to the shaper. > > > > This sounds like a plausible cause, but as far as I can tell, > > end_hb_font doesn't do anything to hb_font. The end function is > > simply > > necessary to call cairo_ft_scaled_font_unlock_face(). > > > > > Okay, I still have no idea what the root cause is, but this hack also > makes the bug disappear for me: > > diff --git a/src/ftcrfont.c b/src/ftcrfont.c > index 3700154e44a..4f62873f8c1 100644 > --- a/src/ftcrfont.c > +++ b/src/ftcrfont.c > @@ -708,7 +708,6 @@ ftcrhbfont_end_hb_font (struct font *font, > hb_font_t *hb_font) > struct font_info *ftcrfont_info = (struct font_info *) font; > cairo_scaled_font_t *scaled_font = ftcrfont_info->cr_scaled_font; > > - cairo_ft_scaled_font_unlock_face (scaled_font); > ftcrfont_info->ft_size = NULL; > } > > This is consistent with your theory about end_hb_font. Thanks. Can you try calling hb_font_destroy in ftcrhbfont_end_hb_font and setting ftcrfont_info->hb_font to NULL right after that? If that solves the problem, we could at least install this for now, until we have a better solution (if one exists). Also, did you see https://github.com/harfbuzz/harfbuzz/issues/4926 ? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 06 Nov 2024 14:52:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: Tim Ruffing , xuan@xlk.me, YAMAMOTO Mitsuharu , 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173090469811369 (code B ref 73752); Wed, 06 Nov 2024 14:52:02 +0000 Received: (at 73752) by debbugs.gnu.org; 6 Nov 2024 14:51:38 +0000 Received: from localhost ([127.0.0.1]:40277 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8hNh-0002xJ-Ma for submit@debbugs.gnu.org; Wed, 06 Nov 2024 09:51:38 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:49437) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8hNe-0002x3-Ux for 73752@debbugs.gnu.org; Wed, 06 Nov 2024 09:51:36 -0500 Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-71e625b00bcso6043479b3a.3 for <73752@debbugs.gnu.org>; Wed, 06 Nov 2024 06:51:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730904629; x=1731509429; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Kt2KbOLnvD81hDYA/BMxdojYq7q9+E2AsglntzmIYTM=; b=WNI+Ak9ZnKY4siv3EHfFGI5ZmxrDyZI+gq0uEyS0Kiy/EpMbYLI1nyOs8npkvqdtuE byR+pguX8y2oqb7pV2Lp5+8vAOtZjakjB6LxABsVikXKOXw6Gw90hOZNUoj3PFpWOa+D x1szmcv2HHaLgK9TCfaUVV2Sh6HUl4GpwHh2f+1pJi5SJZW7WZkgwwk71gjxwsLpk0tL OGK59Y+p6Tikae8rjDtHjkaZEMWEr0BPXyU82Y226KujZRs6sg1nbj6gs4Qs40ca4ezG 3i9O6TR1oYh2+y5HuIq385KH8zeRcubbvtw2CnZsmgCmkdMWSDiftDxgLeUFWC9c3krj ODvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730904629; x=1731509429; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Kt2KbOLnvD81hDYA/BMxdojYq7q9+E2AsglntzmIYTM=; b=gC8mwTbVBuWvjRSAkbuZhJ3nNSbDUnjQ89tAU+QaAB2XHYr2W6KZys3MaKeLk/lZro Ng8zu8ygaYzAPdGwYfT8VOqVqzIDUAdMDXpi+bmDI6VGRxqPZFtKNgA27RZjQkZwfXSR 3bSPNAMW8ucDDRekOXNVslyYivU/f4PLt5L8cLD4IlDhBLB/lDNHlvq/GCPfjA9kqzun FDtn3sMTUAo7D1CeY+5TTaWUBtVOUD0siwZxV4a0ytgEicBSegMvofpa75GBhRRHnfQW v8+gBlQBaqOWobj50aJUOvbfUbREtYi2qucdc2vNNF4fJ3wZ3YUnrrVmkDIcgx+oT4R8 6bEA== X-Forwarded-Encrypted: i=1; AJvYcCUrbGy/D+/cCipIWRn9lWQJQPdOv6EpoDl5kSxhkpI5P/Wu8okAt3fEaWUTPWx1NCwkkMK0wA==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yy1vl+HNdvhrdcS6ODyfdnwos8C/1l5Mbl1hKMPDex5QmnUjSnV uG/riYK5cYAUMFqMnQw1R51PIq938JZ7T0HjLv5jKAJmzEW0htKWsWzCB7B38uc= X-Google-Smtp-Source: AGHT+IE7saR80DOc+2k/n2+dKy0zhsXxZIlogmYbcFBmJVU2xWr4HivrNojQ/lrN2ebD/VHix8gy3g== X-Received: by 2002:a05:6a00:4655:b0:71e:5fa1:d3e4 with SMTP id d2e1a72fcca58-720b9bb3ef2mr30851828b3a.2.1730904628980; Wed, 06 Nov 2024 06:50:28 -0800 (PST) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-7ee45a0dfe2sm11243034a12.83.2024.11.06.06.50.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Nov 2024 06:50:28 -0800 (PST) From: Visuwesh In-Reply-To: <86y11yuc3x.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 04 Nov 2024 19:45:22 +0200") References: <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> Date: Wed, 06 Nov 2024 20:20:03 +0530 Message-ID: <87ldxwv2lg.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=A4=E0=AE=BF=E0=AE=99=E0=AF=8D=E0=AE=95=E0=AE=B3=E0=AF=8D =E0=AE=A8= =E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AE=B0=E0=AF=8D 04, 2024] Eli Zarets= kii wrote: >> From: Tim Ruffing >> Cc: dev@real-or-random.org, xuan@xlk.me, 73752@debbugs.gnu.org >> Date: Mon, 04 Nov 2024 01:11:39 +0100 >>=20 >> This fixes the problem:=20=20 > > Thanks. But do you understand why? > > And how did you arrive to the conclusion that this is the change which > might help? > >> diff --git a/src/ftfont.c b/src/ftfont.c >> index 882d3eec256..2be443108f1 100644 >> --- a/src/ftfont.c >> +++ b/src/ftfont.c >> @@ -2994,9 +2994,8 @@ fthbfont_begin_hb_font (struct font *font, double >> *position_unit) >> struct font_info *ftfont_info =3D (struct font_info *) font; >>=20=20 >> *position_unit =3D 1.0 / (1 << 6); >> - if (! ftfont_info->hb_font) >> - ftfont_info->hb_font >> - =3D hb_ft_font_create_referenced (ftfont_info->ft_size->face); >> + ftfont_info->hb_font >> + =3D hb_ft_font_create_referenced (ftfont_info->ft_size->face); >> return ftfont_info->hb_font; >> } >>=20=20 >> That is, it makes at least the bug with Yixuan's script disappear. I >> haven't yet verified if this fixes what I often see during my daily >> usage. > > That code was written by a leading HarfBuzz developer, so it's hard > for me to believe that it is so incorrect. > > OTOH, I see that ftcrhbfont is the _only_ HarfBuzz-based font backend > which implements the end_hb_font method, and I think you both told me > that only the Cairo build has this problem? If so, I think the code > to look at is the end_hb_font method and what it does to the hb_font > object. The end_hb_font method is called each time the shaper is > called, so whatever it does to the hb_font object is inherited by the > next call to the shaper. > > Visuwesh, do the problems you see also disappear when you install the > change in fthbfont_begin_hb_font which removes the > !ftfont_info->hb_font condition for calling > hb_ft_font_create_referenced? I cannot seem to reproduce the msialignment with that change either. Likewise for the change Tim posted further down the thread which changes ftcrhbfont_end_hb_font. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Tim Ruffing Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 07 Nov 2024 02:13:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii , Tim Ruffing Cc: 73752@debbugs.gnu.org, xuan@xlk.me, mituharu@math.s.chiba-u.ac.jp, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173094555213883 (code B ref 73752); Thu, 07 Nov 2024 02:13:02 +0000 Received: (at 73752) by debbugs.gnu.org; 7 Nov 2024 02:12:32 +0000 Received: from localhost ([127.0.0.1]:46680 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8s0e-0003br-3C for submit@debbugs.gnu.org; Wed, 06 Nov 2024 21:12:32 -0500 Received: from mout-p-101.mailbox.org ([80.241.56.151]:43106) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8s0b-0003bc-Vp for 73752@debbugs.gnu.org; Wed, 06 Nov 2024 21:12:31 -0500 Received: from smtp2.mailbox.org (smtp2.mailbox.org [IPv6:2001:67c:2050:b231:465::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 4XkQZF1PwCz9t43; Thu, 7 Nov 2024 03:12:21 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=real-or-random.org; s=MBO0001; t=1730945541; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=/nOt9EZlseFKMd3ooDwoOHFDzZv9PBDHSaR5Yl4kFkg=; b=NBL6Bcc4gskBKDnb3dUmSmouh6ArPzyXRHGQ071NZQcJKWMWB0Z4bHN7pLV2ICzqLeTpYi CFu6d8mu7bVw+aYve6PCjJ/hTwiW54y1WZa2YTNMndFm0QpBJdJlJjmkYDXDXvG1R+kKT7 TgSNvc/1pRD1VR+vjeV4QMzDc+nfHa8riKFjH6qo0lII9d7zfLSMKI2ouss/aaSW9INMR9 rRi10oBfwpuUfij384UjbI2ZMsV+YhV0dXMuhvpSfJxDr32MpIkAd3w9Xns/HJ0bG17228 0UbX+TSATnUZHnO2wLg6UFD9qdmcYGchHb9qGouTtdyB/19VDFkbwQqMMMLhSg== Message-ID: From: Tim Ruffing Date: Thu, 07 Nov 2024 03:12:19 +0100 In-Reply-To: <86ikt0se1l.fsf@gnu.org> References: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> <86ikt0se1l.fsf@gnu.org> Content-Type: multipart/mixed; boundary="=-a//pwO9X5OgOwKxP5/aS" MIME-Version: 1.0 X-Rspamd-Queue-Id: 4XkQZF1PwCz9t43 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-a//pwO9X5OgOwKxP5/aS Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 2024-11-06 at 15:11 +0200, Eli Zaretskii wrote: >=20 >=20 > Thanks.=C2=A0 Can you try calling hb_font_destroy in > ftcrhbfont_end_hb_font > and setting ftcrfont_info->hb_font to NULL right after that?=C2=A0 If tha= t > solves the problem, we could at least install this for now, until we > have a better solution (if one exists). Yes, that appears to work. And I don't think there's an obvious better solution. See attached patch. And I think I understand the root cause now: What the cairo backend persists is=C2=A0a cairo_font_face_t, from which it will obtain an FT_Face on demand using cairo_ft_scaled_font_lock_face (and cairo_ft_scaled_font_unlock_face), e.g., to pass it to hb_ft_font_create_referenced to create a hb_font_t. The lock/unlock interface implies that we should not keep a reference to the FT_Face in hb_font_t after cairo_ft_scaled_font_unlock_face, and so we should not persist the hb_font_t. Here's an unconfirmed theory what actually happens under the hood:=C2=A0 Cairo internally caches an unscaled FT_Face and scales it on demand to a specific size. That means that cairo_ft_scaled_font_lock_face will scale the one FT_Face to which we still hold possibly multiple references (one for each size) inside the hb_font_t object. Since we call cairo_ft_scaled_font_lock_face every time before accessing the hb_font_t, we happen to see the scaled version with the correct size every time. So far we were lucky. But Cairo's cache is limited to (currently) 10 elements [1]. As a result, if many fonts are used, Cairo will evict a random cached FT_Face, and later create a new one if requested via=20 cairo_ft_scaled_font_lock_face. In that case, we hold a reference to the outdated FT_Face, which won't be scaled any longer by cairo_ft_scaled_font_lock_face, and thus we pass a face with the wrong size to harfbuzz.=20 The caching logic also explains why removing the unlock call makes the problem disappear: Cairo won't evict the FT_Face of locked cairo_scaled_font_t objects, even if this means going over 10. This suggests that removing the cairo_ft_scaled_font_unlock_face call is another fix, probably slightly more efficient, but also somewhat frivolous. The docs explicitly say this: "Since the FT_Face object can be shared between multiple cairo_scaled_font_t objects, you must not lock any other font objects until you unlock this one." Though, if you look at the implementation, they release the mutex explicitly, so there can't be any deadlocks in the end. (Not suggesting we should rely on this...) [1] See MAX_OPEN_FACES in src/cairo-ft-font.c in the Cairo source code. --=-a//pwO9X5OgOwKxP5/aS Content-Disposition: attachment; filename*0=0001-Fix-additional-spacing-in-compositions-Cairo-backend.pat; filename*1=ch Content-Type: text/x-patch; name="0001-Fix-additional-spacing-in-compositions-Cairo-backend.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBiNTJiNDc0NTM2NjVmYmMwODhkY2Q1NzBmZmI3OWFjNzU1ZGZiZThmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaW0gUnVmZmluZyA8ZGV2QHJlYWwtb3ItcmFuZG9tLm9yZz4K RGF0ZTogVGh1LCA3IE5vdiAyMDI0IDAzOjA5OjA5ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gRml4 IGFkZGl0aW9uYWwgc3BhY2luZyBpbiBjb21wb3NpdGlvbnMgKENhaXJvIGJhY2tlbmQpCgoqIHNy Yy9mdGNyZm9udC5jIChmdGNyaGJmb250X2VuZF9oYl9mb250KTogRG9uJ3QgcGVyc2lzdCB0aGUg cmVzdWx0IG9mCmNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZSBpbiB2aW9sYXRpb24gb2Yg dGhlIEFQSSBjb250cmFjdC4KKEJ1ZyM3Mzc1MikKLS0tCiBzcmMvZnRjcmZvbnQuYyB8IDcgKysr KysrKwogMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9m dGNyZm9udC5jIGIvc3JjL2Z0Y3Jmb250LmMKaW5kZXggMzcwMDE1NGU0NGEuLmVlMTExZDE4NzYz IDEwMDY0NAotLS0gYS9zcmMvZnRjcmZvbnQuYworKysgYi9zcmMvZnRjcmZvbnQuYwpAQCAtNzA4 LDYgKzcwOCwxMyBAQCBmdGNyaGJmb250X2VuZF9oYl9mb250IChzdHJ1Y3QgZm9udCAqZm9udCwg aGJfZm9udF90ICpoYl9mb250KQogICBzdHJ1Y3QgZm9udF9pbmZvICpmdGNyZm9udF9pbmZvID0g KHN0cnVjdCBmb250X2luZm8gKikgZm9udDsKICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCAqc2NhbGVk X2ZvbnQgPSBmdGNyZm9udF9pbmZvLT5jcl9zY2FsZWRfZm9udDsKIAorICBlYXNzZXJ0IChoYl9m b250ID09IGZ0Y3Jmb250X2luZm8tPmhiX2ZvbnQpOworICAvKiBmdGNyZm9udF9pbmZvLT5oYl9m b250IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBGVF9GYWNlIHJldHVybmVkIGJ5CisgICAgIGNh aXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZS4gS2VlcGluZyBpdCBhcm91bmQgYWZ0ZXIgdGhl CisgICAgIG1hdGNoaW5nIHVubG9jayBjYWxsIHdvdWxkIHZpb2xhdGUgdGhlIEFQSSBjb250cmFj dCAoQnVnIzczNzUyKS4gKi8KKyAgaGJfZm9udF9kZXN0cm95IChmdGNyZm9udF9pbmZvLT5oYl9m b250KTsKKyAgZnRjcmZvbnRfaW5mby0+aGJfZm9udCA9IE5VTEw7CisKICAgY2Fpcm9fZnRfc2Nh bGVkX2ZvbnRfdW5sb2NrX2ZhY2UgKHNjYWxlZF9mb250KTsKICAgZnRjcmZvbnRfaW5mby0+ZnRf c2l6ZSA9IE5VTEw7CiB9Ci0tIAoyLjQ3LjAKCg== --=-a//pwO9X5OgOwKxP5/aS-- From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 07 Nov 2024 07:06:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tim Ruffing Cc: 73752@debbugs.gnu.org, xuan@xlk.me, mituharu@math.s.chiba-u.ac.jp, visuweshm@gmail.com Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173096313930284 (code B ref 73752); Thu, 07 Nov 2024 07:06:01 +0000 Received: (at 73752) by debbugs.gnu.org; 7 Nov 2024 07:05:39 +0000 Received: from localhost ([127.0.0.1]:46969 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8waI-0007sN-W6 for submit@debbugs.gnu.org; Thu, 07 Nov 2024 02:05:39 -0500 Received: from eggs.gnu.org ([209.51.188.92]:50086) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t8waF-0007s7-FB for 73752@debbugs.gnu.org; Thu, 07 Nov 2024 02:05:37 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t8wa5-0007Qe-PK; Thu, 07 Nov 2024 02:05:25 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=GDzTdmBbP7wYTv3xODSwoL/++93bNXyd5fZxQdcc8ac=; b=f8XT0tSY0vUPvk48CJ7H oDxnrtwquFguR77oFV7yAbRkA7BB34rDcqHU6HiKICDO0hrXYfnLZayi2dLmJh3GyTH8Wyt0WI56x iXAPvRT1M67KkjGyV50tcColDa/1aW2D6aEv73rVL44IW3/wQ2gz0eRFe8wsQqW1clOMpN0/tDNxj 1J8iAYpA1FK7OFTiQ/rHwUrnOU+xYRZVlynbwmafIkgL79yDvJQz/xTtkqBhfH6JbDl66mRiNs1BR JlCqvCH94gjDzbrWTc651uqm7uer2AWb6lk92Hw9EQlHB82PIjJHtreiRHBBvezNTSrQ4dapBZO9n 8UsT5J1bAZ7XBA==; Date: Thu, 07 Nov 2024 09:05:16 +0200 Message-Id: <86msibr0b7.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Tim Ruffing on Thu, 07 Nov 2024 03:12:19 +0100) References: <8f02b0490d2abb0889b760fb80c3ec492c63c784.camel@timruffing.de> <86ed3x4h7m.fsf@gnu.org> <86cyjh4dx5.fsf@gnu.org> <68b51105125b6c7a34ec8c2032588ce72d8557bc.camel@timruffing.de> <86wmho38y3.fsf@gnu.org> <861pzu28bz.fsf@gnu.org> <79a634db4f76e482038539722aab18fbf10a9251.camel@timruffing.de> <86msiiync2.fsf@gnu.org> <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> <86ikt0se1l.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Tim Ruffing > Cc: mituharu@math.s.chiba-u.ac.jp, visuweshm@gmail.com, xuan@xlk.me, > 73752@debbugs.gnu.org > Date: Thu, 07 Nov 2024 03:12:19 +0100 > > On Wed, 2024-11-06 at 15:11 +0200, Eli Zaretskii wrote: > > > > > > Thanks.  Can you try calling hb_font_destroy in > > ftcrhbfont_end_hb_font > > and setting ftcrfont_info->hb_font to NULL right after that?  If that > > solves the problem, we could at least install this for now, until we > > have a better solution (if one exists). > > Yes, that appears to work. And I don't think there's an obvious better > solution. See attached patch. Thanks. Visuwesh, does this patch fix your problem as well? If so, I think we should install this. > And I think I understand the root cause now: Thanks, sounds plausible (but I know nothing about Cairo internals or how we use it in Emacs). From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 07 Nov 2024 13:47:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: Tim Ruffing , xuan@xlk.me, mituharu@math.s.chiba-u.ac.jp, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173098720732214 (code B ref 73752); Thu, 07 Nov 2024 13:47:02 +0000 Received: (at 73752) by debbugs.gnu.org; 7 Nov 2024 13:46:47 +0000 Received: from localhost ([127.0.0.1]:47579 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t92qV-0008NW-0W for submit@debbugs.gnu.org; Thu, 07 Nov 2024 08:46:47 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:59603) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t92qR-0008NH-Ay for 73752@debbugs.gnu.org; Thu, 07 Nov 2024 08:46:43 -0500 Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-71e61b47c6cso754108b3a.2 for <73752@debbugs.gnu.org>; Thu, 07 Nov 2024 05:46:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730987137; x=1731591937; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JzJadl5jGAAufAFaVDplQFQ1tTWU0q8mGrpPqLIjXEE=; b=bVn91FCmtmxOZ3FLIOtj9H3zqu9imJLdYMhIIzpJO2A/J7gLymZNndD0A0zJMUq1bV 4orQiy8zy4GmSZl4bDmQt7vJ/CROYaxm9MOC2gmxgTt7GoRCRVV1uqkzShGwT40Fjy83 kvaoVhcSLt5BO4PmbNb7eWMOBqlwgCOLctBeCc4pbT17B9z8cHMvYhqii4iUT18qGE1f DL5V3fCyXeCqGOI10gyPP3F9uoxNaCirwO1Oq3vU1WhjkRS4UPFFFad6yxY1k6oWQgvA cH3MSSNOiKG70vFglfFHuFpNBoxJ9ZqWO3LWqo6u8IcrCYlX4oyGywYLzMSpnOjt/W8b 49/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730987137; x=1731591937; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=JzJadl5jGAAufAFaVDplQFQ1tTWU0q8mGrpPqLIjXEE=; b=aNI4eUTf0PnVgkcwetmqBdoll2xhdCnCMuKy+8yL1Hpzts4cNC5ZVdE3CB5rvAG/cN znO2bVgrBOvqqJGnDyyT+zDvr0xfAqxnM3yx/8t7zT073o4iDuUR6wZ3bk2ilRg7PxH5 MFFViiax/HOpzBzsyirdEF8WpG6CzlERi+8fjXVhozTwiKK+/kD2+3nkSjfJn7FjLxDC EakCxWT97WrTnv5Qt/pU+3flUnVbQifWsxHanvbDkcIpLC+V3bO+cu488Yhtn71kbrbU B7bkji6he5Sd6BabHFjl7YNlJkDAmxjY7iftf9hZbfmMWqQHY+mjnY0d8t9mAEzNWaKX VfTg== X-Forwarded-Encrypted: i=1; AJvYcCWrFufnMjAB64eO+5Ct+3IM8wMe+79qFXM2wp8kMHGB8DJjuRHVSgec2cPCZ6agBZ/omzeGFQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzMY+oaj2gHoidEZWl55x9FCI8AtZcJnv6Im/OfeV+yBpO4EXsr 25B/j5iC8Jzv2xU8cB/6B3zZIrFNzEv7BRQ9SJX7iSgSLBsVCYaa X-Google-Smtp-Source: AGHT+IEYdXWFkSuh/KzN/AjTelyNY7zA+hmqBbKSt/LVUU+dnb5HQ9WlZwABseHHZ6qxcvMlTeOBSA== X-Received: by 2002:a05:6a00:4616:b0:71e:41b3:a57a with SMTP id d2e1a72fcca58-72063093466mr56571677b3a.24.1730987136640; Thu, 07 Nov 2024 05:45:36 -0800 (PST) Received: from localhost ([1.7.159.70]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-724079a3a9csm1507597b3a.110.2024.11.07.05.45.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Nov 2024 05:45:35 -0800 (PST) From: Visuwesh In-Reply-To: <86msibr0b7.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 07 Nov 2024 09:05:16 +0200") References: <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> <86ikt0se1l.fsf@gnu.org> <86msibr0b7.fsf@gnu.org> Date: Thu, 07 Nov 2024 19:15:30 +0530 Message-ID: <87a5ebuphh.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" [=E0=AE=B5=E0=AE=BF=E0=AE=AF=E0=AE=BE=E0=AE=B4=E0=AE=A9=E0=AF=8D =E0=AE=A8= =E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AE=B0=E0=AF=8D 07, 2024] Eli Zarets= kii wrote: >> From: Tim Ruffing >> Cc: mituharu@math.s.chiba-u.ac.jp, visuweshm@gmail.com, xuan@xlk.me,=20 >> 73752@debbugs.gnu.org >> Date: Thu, 07 Nov 2024 03:12:19 +0100 >>=20 >> On Wed, 2024-11-06 at 15:11 +0200, Eli Zaretskii wrote: >> >=20 >> >=20 >> > Thanks.=C2=A0 Can you try calling hb_font_destroy in >> > ftcrhbfont_end_hb_font >> > and setting ftcrfont_info->hb_font to NULL right after that?=C2=A0 If = that >> > solves the problem, we could at least install this for now, until we >> > have a better solution (if one exists). >>=20 >> Yes, that appears to work. And I don't think there's an obvious better >> solution. See attached patch. > > Thanks. Visuwesh, does this patch fix your problem as well? I cannot reproduce the original issue but it leads to following backtrace when I visit dinamalar.com in eww, and click on any of the links coloured in blue: say the one under the heading named "=E0=AE=B5=E0= =AE=BE=E0=AE=B0=E0=AE=BE=E0=AE=B5=E0=AE=BE=E0=AE=B0=E0=AE=AE=E0=AF=8D". Directly visiting a link doesn't produce the backtrace though. I need to visit a webpage with Tamil text on it twice to trigger it. It might well be a false warning since I see the warning Warning: program compiled against libxml 212 using older 209 Warning: program compiled against libxml 212 using older 209 in stderr printed. I updated my system (kernel updates included) but haven't restarted it yet. Of course, I built Emacs _after_ the update. If you want me to restart and check if you believe it is a false warning, I am to do so. Maybe a `make bootstrap' or somesuch is also in order? (gdb) source .gdbinit SIGINT is used by the debugger. Are you sure you want to change it? (y or n) [answered Y; input not from te= rminal] DISPLAY =3D :0.0 TERM =3D dumb Breakpoint 1 at 0x55555575f4b7: file emacs.c, line 432. Breakpoint 2 at 0x555555723a8a: file xterm.c, line 27102. (gdb) run -Q Starting program: /home/viz/lib/ports/emacs/src/emacs -Q [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [New Thread 0x7ffff198f6c0 (LWP 451634)] [New Thread 0x7fffebf8f6c0 (LWP 451635)] [New Thread 0x7ffff0f8f6c0 (LWP 451636)] [New Thread 0x7fffeb58f6c0 (LWP 451637)] [Detaching after vfork from child process 451650] [Detaching after vfork from child process 451651] [Detaching after vfork from child process 451652] [New Thread 0x7ffff2369dc0 (LWP 451655)] [New Thread 0x7fffe9b8f6c0 (LWP 451656)] [Thread 0x7fffe9b8f6c0 (LWP 451656) exited] [Thread 0x7ffff2369dc0 (LWP 451655) exited] [New Thread 0x7ffff2369dc0 (LWP 451658)] [New Thread 0x7ffff1f7edc0 (LWP 451659)] [New Thread 0x7ffff1f66dc0 (LWP 451660)] [New Thread 0x7ffff1f4edc0 (LWP 451661)] [New Thread 0x7ffff1f36dc0 (LWP 451662)] [New Thread 0x7ffff1f1edc0 (LWP 451663)] [Thread 0x7ffff1f1edc0 (LWP 451663) exited] [Thread 0x7ffff1f36dc0 (LWP 451662) exited] [Thread 0x7ffff1f4edc0 (LWP 451661) exited] [Thread 0x7ffff1f7edc0 (LWP 451659) exited] [Thread 0x7ffff2369dc0 (LWP 451658) exited] [Thread 0x7ffff1f66dc0 (LWP 451660) exited] character.h:380: Emacs fatal error: assertion failed: 0xC0 <=3D c Thread 1 "emacs" hit Breakpoint 1, terminate_due_to_signal (sig=3D6, backtr= ace_limit=3D2147483647) at emacs.c:432 432 signal (sig, SIG_DFL); (gdb) bt full #0 terminate_due_to_signal (sig=3D6, backtrace_limit=3D2147483647) at emac= s.c:432 #1 0x00005555558105ef in die (msg=3D0x55555596707f "0xC0 <=3D c", file=3D0= x55555596702b "character.h", line=3D380) at alloc.c:8057 #2 0x00005555555c7a71 in string_char_and_length (p=3D0x5555580c40b0 "\205= =E0=AE=B2=E0=AF=88\n\n \n=E0=AE=AA=E0=AE=BF=E0=AE=B0=E0=AE=AA=E0=AE=9E=E0= =AF=8D=E0=AE=9A=E0=AE=A4=E0=AF=8D=E0=AE=A4=E0=AE=BF=E0=AE=A9=E0=AF=8D =E0= =AE=A4=E0=AE=BF=E0=AE=B1=E0=AE=B5=E0=AF=81=E0=AE=95=E0=AF=8B=E0=AE=B2=E0=AE= =BE=E0=AE=95=E0=AF=81=E0=AE=AE=E0=AF=8D '=E0=AE=9A=E0=AE=BF=E0=AE=B5 =E0=AE= =B7=E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AF=8B'\n\n=E0=AE=AA=E0=AE=BF=E0=AE=B0=E0= =AE=AA=E0=AE=9E=E0=AF=8D=E0=AE=9A=E0=AE=A4=E0=AF=8D=E0=AE=A4=E0=AE=BF=E0=AE= =A9=E0=AF=8D =E0=AE=A4=E0=AE=BF=E0=AE=B1=E0=AE=B5=E0=AF=81=E0=AE=95=E0=AF= =8B=E0=AE=B2=E0=AE=BE=E0=AE=95=E0=AF=81=E0=AE=AE=E0=AF=8D "..., length=3D0x= 7fffffff1c4c) at /home/viz/lib/ports/emacs/src/character.h:380 c =3D 133 d =3D 3021 #3 0x00005555555c7c6e in STRING_CHAR (p=3D0x5555580c40b0 "\205=E0=AE=B2=E0= =AF=88\n\n \n=E0=AE=AA=E0=AE=BF=E0=AE=B0=E0=AE=AA=E0=AE=9E=E0=AF=8D=E0=AE= =9A=E0=AE=A4=E0=AF=8D=E0=AE=A4=E0=AE=BF=E0=AE=A9=E0=AF=8D =E0=AE=A4=E0=AE= =BF=E0=AE=B1=E0=AE=B5=E0=AF=81=E0=AE=95=E0=AF=8B=E0=AE=B2=E0=AE=BE=E0=AE=95= =E0=AF=81=E0=AE=AE=E0=AF=8D '=E0=AE=9A=E0=AE=BF=E0=AE=B5 =E0=AE=B7=E0=AE=AE= =E0=AF=8D=E0=AE=AA=E0=AF=8B'\n\n=E0=AE=AA=E0=AE=BF=E0=AE=B0=E0=AE=AA=E0=AE= =9E=E0=AF=8D=E0=AE=9A=E0=AE=A4=E0=AF=8D=E0=AE=A4=E0=AE=BF=E0=AE=A9=E0=AF=8D= =E0=AE=A4=E0=AE=BF=E0=AE=B1=E0=AE=B5=E0=AF=81=E0=AE=95=E0=AF=8B=E0=AE=B2= =E0=AE=BE=E0=AE=95=E0=AF=81=E0=AE=AE=E0=AF=8D "...) at /home/viz/lib/ports/= emacs/src/character.h:417 len =3D 0 #4 0x00005555555c8e57 in FETCH_MULTIBYTE_CHAR (pos=3D8753) at /home/viz/li= b/ports/emacs/src/buffer.h:1295 p =3D 0x5555580c40b0 "\205=E0=AE=B2=E0=AF=88\n\n \n=E0=AE=AA=E0=AE= =BF=E0=AE=B0=E0=AE=AA=E0=AE=9E=E0=AF=8D=E0=AE=9A=E0=AE=A4=E0=AF=8D=E0=AE=A4= =E0=AE=BF=E0=AE=A9=E0=AF=8D =E0=AE=A4=E0=AE=BF=E0=AE=B1=E0=AE=B5=E0=AF=81= =E0=AE=95=E0=AF=8B=E0=AE=B2=E0=AE=BE=E0=AE=95=E0=AF=81=E0=AE=AE=E0=AF=8D '= =E0=AE=9A=E0=AE=BF=E0=AE=B5 =E0=AE=B7=E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AF=8B'\= n\n=E0=AE=AA=E0=AE=BF=E0=AE=B0=E0=AE=AA=E0=AE=9E=E0=AF=8D=E0=AE=9A=E0=AE=A4= =E0=AF=8D=E0=AE=A4=E0=AE=BF=E0=AE=A9=E0=AF=8D =E0=AE=A4=E0=AE=BF=E0=AE=B1= =E0=AE=B5=E0=AF=81=E0=AE=95=E0=AF=8B=E0=AE=B2=E0=AE=BE=E0=AE=95=E0=AF=81=E0= =AE=AE=E0=AF=8D "... #5 0x00005555555dc783 in face_before_or_after_it_pos (it=3D0x7fffffffa820,= before_p=3Dfalse) at xdisp.c:5067 c =3D 21845 face =3D 0x7fffffff3080 pos =3D { charpos =3D 5890, bytepos =3D 8753 } face_id =3D 23 limit =3D 5989 next_check_charpos =3D 5894 it_copy =3D { window =3D XIL(0x5555557ef628), w =3D 0x0, f =3D 0x7fffffff2d90, method =3D 1434454367, stop_charpos =3D 0, prev_stop =3D 93825037779108, base_level_stop =3D 93825010904128, end_charpos =3D 3, medium_narrowing_begv =3D 93825037779111, medium_narrowing_zv =3D 93825010904143, large_narrowing_begv =3D 6, large_narrowing_zv =3D 93825037779117, s =3D 0x555556722cae "\016\005", string_nchars =3D 9, multibyte_p =3D true, tab_line_p =3D false, header_line_p =3D true, string_from_display_prop_p =3D true, string_from_prefix_prop_p =3D false, from_disp_prop_p =3D true, ellipsis_p =3D false, avoid_cursor_p =3D true, dp =3D 0x555556722c52, dpvec =3D 0x7fffffff1dc0, dpend =3D 0x5555555e7c4b , dpvec_char_len =3D 0, dpvec_face_id =3D 1, saved_face_id =3D -22496, ctl_chars =3D {XIL(0x5555555c5f4b), XIL(0x7ffff24001b0), XIL(0x7f= ffffff1dc0), make_fixnum(107732301870), XIL(0x5555560b1800), XIL(0xdffffa82= 0), XIL(0x55555822d465), XIL(0x7fffffff1dc0), XIL(0x5555555c879d), XIL(0x55= 555822d465), XIL(0x7fffffff7fc0), make_fixnum(23456248214506), XIL(0x27), X= IL(0xffffffff00000008), make_fixnum(2147483648), XIL(0)}, start =3D { pos =3D { charpos =3D 140737488299856, bytepos =3D 2 }, overlay_string_index =3D 140737488297520, string_pos =3D { charpos =3D 93824995063026, bytepos =3D 0 }, dpvec_index =3D 1472482992 }, current =3D { pos =3D { charpos =3D 8589934593, bytepos =3D 0 }, overlay_string_index =3D 140737488297568, string_pos =3D { charpos =3D 2, bytepos =3D 140737488297584 }, dpvec_index =3D 1434481906 }, n_overlay_strings =3D 0, overlay_strings_charpos =3D 93825024433104, overlay_strings =3D {XIL(0xcffff1ec0), XIL(0x198), XIL(0x7fffffff= 1ea0), XIL(0x55555580769c), XIL(0x198), XIL(0x555557409bd0), XIL(0x31), mak= e_fixnum(12), XIL(0x7fffffff1f00), XIL(0x555555807a55), XIL(0x5555560b0720)= , XIL(0), XIL(0), XIL(0x7fffffff1ee0), make_fixnum(23456248840424), XIL(0xf= fff1ef0)}, string_overlays =3D {XIL(0x7fffffff1f10), XIL(0x555555851b1f), XI= L(0x55555a959713), XIL(0), make_fixnum(23456248840424), XIL(0), XIL(0x7ffff= fff1f80), XIL(0x555557409b65), XIL(0x7fffffff1f50), make_fixnum(23456248866= 773), XIL(0), XIL(0x555557409b65), XIL(0), XIL(0x555557409b65), XIL(0x7ffff= fff1f80), XIL(0x55555586a1a1)}, string =3D XIL(0), from_overlay =3D XIL(0x55555a959713), stack =3D {{ string =3D XIL(0xc), string_nchars =3D 1463851877, end_charpos =3D 140737488297904, stop_charpos =3D 93824995467094, prev_stop =3D 140737488297952, base_level_stop =3D 93825024432997, cmp_it =3D { stop_pos =3D 140737488297920, id =3D 93825024432997, ch =3D -57376, rule_idx =3D 93824995467681, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0xb, charpos =3D 93825024432997, nchars =3D -57312, nbytes =3D 32767, from =3D 1434931549, to =3D 21845, width =3D 1443563296 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0x7fffffff2020), y =3D XIL(0x5555556d7d1f), width =3D XIL(0x9c7180e8), height =3D XIL(0x7fffffff2090) }, image_id =3D 93824993845541 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 140737488298192, bytepos =3D 140737488298368 }, current =3D { pos =3D { charpos =3D 140737488301664, bytepos =3D 140737488298192 }, overlay_string_index =3D 93825005705760, string_pos =3D { charpos =3D 93825005706456, bytepos =3D 93825004209648 }, dpvec_index =3D 65232 }, from_overlay =3D XIL(0), area =3D 78816, method =3D 20, paragraph_embedding =3D (L2R | R2L | unknown: 0x556d7d1c), multibyte_p =3D true, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D true, display_ellipsis_p =3D false, avoid_cursor_p =3D true, bidi_p =3D false, from_disp_prop_p =3D true, line_wrap =3D (unknown: 0x9c7180e8), voffset =3D 10922, space_width =3D XIL(0x7fffffff21c0), font_height =3D XIL(0x5555556de61f) }, { string =3D XIL(0x556d7d1f), string_nchars =3D -56960, end_charpos =3D 140737488301664, stop_charpos =3D 46912257491176, prev_stop =3D 93825005705760, base_level_stop =3D 93825005706456, cmp_it =3D { stop_pos =3D 33120, id =3D 140737261501108, ch =3D 78816, rule_idx =3D 78816, lookback =3D 78816, nglyphs =3D 78816, reversed_p =3D false, parent_it =3D 0x133e0, charpos =3D 78816, nchars =3D 78816, nbytes =3D 0, from =3D 78816, to =3D 0, width =3D 78816 }, face_id =3D 78816, u =3D { image =3D { object =3D XIL(0x133e0), slice =3D { x =3D XIL(0x133e0), y =3D XIL(0x2000133e0), width =3D XIL(0), height =3D XIL(0x133e0) }, image_id =3D 2 }, stretch =3D { object =3D XIL(0x133e0) }, xwidget =3D { object =3D XIL(0x133e0) } }, position =3D { charpos =3D 140737488298384, bytepos =3D 93824995063026 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 93825024433216 }, overlay_string_index =3D 54164291816, string_pos =3D { charpos =3D 296, bytepos =3D 140737488298432 }, dpvec_index =3D 1434482332 }, from_overlay =3D XIL(0x128), area =3D 1463852096, method =3D 21845, paragraph_embedding =3D (L2R | R2L | unknown: 0x20), multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D (unknown: 0x24), voffset =3D 0, space_width =3D XIL(0x7fffffff2220), font_height =3D XIL(0x555555807a55) }, { string =3D XIL(0x7fffffff24a0), string_nchars =3D 112, end_charpos =3D 140737488301664, stop_charpos =3D 408, prev_stop =3D 296, base_level_stop =3D 93825024433104, cmp_it =3D { stop_pos =3D 93825004144416, id =3D 49, ch =3D 0, rule_idx =3D 112, lookback =3D 140737488298592, nglyphs =3D 1519752947, reversed_p =3D 85, parent_it =3D 0x7fffffff2250, charpos =3D 93824995043671, nchars =3D 0, nbytes =3D 0, from =3D 1519752947, to =3D 21845, width =3D -56720 }, face_id =3D 1519752944, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0x55555a9596f3), y =3D XIL(0x7fffffff22b0), width =3D XIL(0x555555806f3f), height =3D XIL(0) }, image_id =3D 93825080334067 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 25769747120, bytepos =3D 93825024433109 }, current =3D { pos =3D { charpos =3D 140737488298704, bytepos =3D 93824995467094 }, overlay_string_index =3D 140737488298752, string_pos =3D { charpos =3D 93825024433109, bytepos =3D 140737488298720 }, dpvec_index =3D 1463851989 }, from_overlay =3D XIL(0x7fffffff2300), area =3D 1434886561, method =3D 21845, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0xb), font_height =3D XIL(0x555557409bd5) }, { string =3D XIL(0x7fffffff2340), string_nchars =3D 1434931650, end_charpos =3D 93825004144416, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 140737488298816, cmp_it =3D { stop_pos =3D 93824993819935, id =3D 4294913664, ch =3D -56400, rule_idx =3D 93824993845541, lookback =3D 140737488298992, nglyphs =3D -56160, reversed_p =3D 255, parent_it =3D 0x7fffffff2e60, charpos =3D 140737488298992, nchars =3D 1445124640, nbytes =3D 21845, from =3D 1445125336, to =3D 21845, width =3D 1443628528 }, face_id =3D 65232, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0x14000133e0), y =3D XIL(0x5555556d7d1f), width =3D XIL(0x2aaa9c8ff600), height =3D XIL(0x7fffffff24e0) }, image_id =3D 93824993846815 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 1433238815, bytepos =3D 140737488299168 }, current =3D { pos =3D { charpos =3D 140737488301664, bytepos =3D 46912259487232 }, overlay_string_index =3D 93825005705760, string_pos =3D { charpos =3D 93825005706456, bytepos =3D 33120 }, dpvec_index =3D 78816 }, from_overlay =3D XIL(0x133e0), area =3D 78816, method =3D GET_FROM_BUFFER, paragraph_embedding =3D (L2R | R2L | unknown: 0xf2ced78c), multibyte_p =3D true, string_from_display_prop_p =3D true, string_from_prefix_prop_p =3D true, display_ellipsis_p =3D true, avoid_cursor_p =3D true, bidi_p =3D true, from_disp_prop_p =3D true, line_wrap =3D (unknown: 0x133e0), voffset =3D 0, space_width =3D XIL(0x133e0), font_height =3D XIL(0x133e0) }, { string =3D XIL(0x133e0), string_nchars =3D 78816, end_charpos =3D 78816, stop_charpos =3D 78816, prev_stop =3D 78816, base_level_stop =3D 78816, cmp_it =3D { stop_pos =3D 78816, id =3D 78816, ch =3D -1670283032, rule_idx =3D 78816, lookback =3D 78816, nglyphs =3D 78816, reversed_p =3D false, parent_it =3D 0x5500558503a2, charpos =3D 140737488299567, nchars =3D -1668286976, nbytes =3D 10922, from =3D 0, to =3D 10922, width =3D -55360 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0x555556515220), slice =3D { x =3D XIL(0x1401ff24e0), y =3D XIL(0x5555556d7d1f), width =3D XIL(0x2aaa9c8ff600), height =3D XIL(0x7fffffff2650) }, image_id =3D 93824993851579 }, stretch =3D { object =3D XIL(0x555556515220) }, xwidget =3D { object =3D XIL(0x555556515220) } }, position =3D { charpos =3D 140737488299968, bytepos =3D 17099872 }, current =3D { pos =3D { charpos =3D 140737488301664, bytepos =3D 46912259487232 }, overlay_string_index =3D 93825005705760, string_pos =3D { charpos =3D 93825005706456, bytepos =3D 93825004223232 }, dpvec_index =3D 78816 }, from_overlay =3D XIL(0x133e0), area =3D 78816, method =3D GET_FROM_BUFFER, paragraph_embedding =3D (L2R | R2L | unknown: 0x556d7d1c), multibyte_p =3D true, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D true, display_ellipsis_p =3D false, avoid_cursor_p =3D true, bidi_p =3D false, from_disp_prop_p =3D true, line_wrap =3D (unknown: 0x9c8ff600), voffset =3D 10922, space_width =3D XIL(0x7fffffff2580), font_height =3D XIL(0x5555556dce8f) }}, sp =3D 33120, selective =3D 93825021281568, what =3D IT_CHARACTER, face_id =3D 0, selective_display_ellipsis_p =3D false, ctl_arrow_p =3D false, face_box_p =3D false, start_of_box_run_p =3D false, end_of_box_run_p =3D false, overlay_strings_at_end_processed_p =3D true, ignore_overlay_strings_at_pos_p =3D true, glyph_not_available_p =3D false, starts_in_middle_of_char_p =3D true, face_before_selective_p =3D false, constrain_row_ascent_descent_p =3D false, line_number_produced_p =3D false, align_visually_p =3D false, line_wrap =3D TRUNCATE, base_face_id =3D -55888, c =3D 32767, len =3D 1433259984, cmp_it =3D { stop_pos =3D 93825006945637, id =3D 93825021281565, ch =3D -55840, rule_idx =3D 93824993823458, lookback =3D 0, nglyphs =3D 1460700445, reversed_p =3D 85, parent_it =3D 0x7fffffff2600, charpos =3D 93825021281568, nchars =3D 1443563296, nbytes =3D 21845, from =3D 0, to =3D 0, width =3D 0 }, char_to_display =3D -55808, glyphless_method =3D 32767, image_id =3D 93824993819935, xwidget =3D 0x5710851d, slice =3D { x =3D XIL(0x7fffffff2650), y =3D XIL(0x5555556dd393), width =3D make_fixnum(23364980785384), height =3D XIL(0x23ffff2710) }, space_width =3D XIL(0x133e0), voffset =3D 9792, tab_width =3D -1, font_height =3D XIL(0x5555560b0720), object =3D XIL(0x41751800000009), position =3D { charpos =3D 0, bytepos =3D 399373912 }, truncation_pixel_width =3D 32031, continuation_pixel_width =3D 21869, first_visible_x =3D 399373912, last_visible_x =3D 1446364512, last_visible_y =3D 21845, extra_line_spacing =3D 17159264, max_extra_line_spacing =3D 0, override_ascent =3D 17159264, override_descent =3D 0, override_boff =3D 211, glyph_row =3D 0x105d460, area =3D -55600, nglyphs =3D 32767, pixel_width =3D 1434851262, ascent =3D 21845, descent =3D -55632, max_ascent =3D 32767, max_descent =3D 1434847944, phys_ascent =3D 4289816, phys_descent =3D 1443642112, max_phys_ascent =3D 21845, max_phys_descent =3D 78816, current_x =3D 0, wrap_prefix_width =3D 78816, continuation_lines_width =3D 0, eol_pos =3D { charpos =3D 78816, bytepos =3D 93824993819935 }, current_y =3D 33120, first_vpos =3D 0, vpos =3D -55552, hpos =3D 32767, lnum =3D 93824993840783, lnum_bytepos =3D 33120, lnum_width =3D 1461353184, lnum_pixel_width =3D 21845, pt_lnum =3D 0, stretch_adjust =3D 33120, left_user_fringe_bitmap =3D 0, right_user_fringe_bitmap =3D 0, left_user_fringe_face_id =3D 993072, right_user_fringe_face_id =3D 32767, bidi_p =3D false, bidi_it =3D { bytepos =3D 93824993841104, charpos =3D 93825006945637, ch =3D 1461353181, nchars =3D 140737488299872, ch_len =3D 93824993823458, type =3D UNKNOWN_BT, type_after_wn =3D UNKNOWN_BT, orig_type =3D 1461353181, resolved_level =3D 85 'U', isolate_level =3D 85 'U', invalid_levels =3D 140737488299904, invalid_isolates =3D 93825021934304, prev =3D { charpos =3D 93825004144416, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, last_strong =3D { charpos =3D 0, type =3D 4294911872, orig_type =3D 32767 }, next_for_neutral =3D { charpos =3D 93824993819935, type =3D 1461353181, orig_type =3D UNKNOWN_BT }, prev_for_neutral =3D { charpos =3D 140737488299984, type =3D 1433260947, orig_type =3D 21845 }, next_for_ws =3D { charpos =3D 93459923141538, type =3D 4294912144, orig_type =3D 35 }, bracket_pairing_pos =3D 78816, bracket_enclosed_type =3D 4294911936, next_en_pos =3D 93825004144416, next_en_type =3D UNKNOWN_BT, sos =3D NEUTRAL_DIR, scan_dir =3D 0, disp_pos =3D 140737488300000, disp_prop =3D 1433238815, stack_idx =3D 21845, level_stack =3D {{ next_for_neutral_pos =3D 17159264, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824993845541, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 2, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 140737488300352, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 1, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 140737488300176, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 0, level =3D 34 '"', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825005706456, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 7, level =3D 12 '\f', flags =3D 86 'V' }, { next_for_neutral_pos =3D 65232, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 12240, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995408133, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 4294967299, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 7, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 12240, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 1, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 17159264, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 0, level =3D 34 '"', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825005706456, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 5, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 78816, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 7, level =3D 1 '\001', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 78816, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 7, level =3D 1 '\001', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 78816, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 7, level =3D 1 '\001', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 78816, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 7, level =3D 1 '\001', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825020854996, next_for_neutral_type =3D 4, last_strong_type =3D 6, prev_for_neutral_type =3D 2, level =3D 10 '\n', flags =3D 87 'W' }, { next_for_neutral_pos =3D 78816, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 7, level =3D 1 '\001', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 78816, next_for_neutral_type =3D 4, last_strong_type =3D 0, prev_for_neutral_type =3D 3, level =3D 55 '7', flags =3D 86 'V' }, { next_for_neutral_pos =3D 1600, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824994966547, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 5, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995015530, next_for_neutral_type =3D 7, last_strong_type =3D 7, prev_for_neutral_type =3D 7, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 16793, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 2, level =3D 12 '\f', flags =3D 88 'X' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 1600, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 5, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824994966547, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 6, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995015530, next_for_neutral_type =3D 4, last_strong_type =3D 4, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 16793, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 2, level =3D 12 '\f', flags =3D 88 'X' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825004107912, next_for_neutral_type =3D 6, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 6, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 1, level =3D 26 '\032', flags =3D 86 'V' }, { next_for_neutral_pos =3D 4294970276, next_for_neutral_type =3D 2, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 12884901889, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 1, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 1600, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 3, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 20, next_for_neutral_type =3D 6, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 6, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 1, level =3D 26 '\032', flags =3D 86 'V' }, { next_for_neutral_pos =3D 2984, next_for_neutral_type =3D 2, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737331473032, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 62, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995408133, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 4294967298, next_for_neutral_type =3D 6, last_strong_type =3D 7, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 70, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 1, level =3D 167 '\247', flags =3D 87 'W' }, { next_for_neutral_pos =3D 140737335126521, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 1, level =3D 167 '\247', flags =3D 87 'W' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737335138460, next_for_neutral_type =3D 5, last_strong_type =3D 0, prev_for_neutral_type =3D 3, level =3D 88 'X', flags =3D 87 'W' }, { next_for_neutral_pos =3D 140737488300999, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 4, last_strong_type =3D 3, prev_for_neutral_type =3D 4, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 1, next_for_neutral_type =3D 0, last_strong_type =3D 1, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825007864917, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 4, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995363916, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93825007864917, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995365293, next_for_neutral_type =3D 4, last_strong_type =3D 6, prev_for_neutral_type =3D 6, level =3D 134 '\206', flags =3D 85 'U' }, { next_for_neutral_pos =3D 11922, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995408133, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 4294967297, next_for_neutral_type =3D 2, last_strong_type =3D 2, prev_for_neutral_type =3D 2, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 11922, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 2, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 102530, next_for_neutral_type =3D 0, last_strong_type =3D 7, prev_for_neutral_type =3D 5, level =3D 162 '\242', flags =3D 85 'U' }, { next_for_neutral_pos =3D 102530, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 6, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 62, next_for_neutral_type =3D 6, last_strong_type =3D 0, prev_for_neutral_type =3D 1, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 102530, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995436311, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 102530, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93825025426277, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995363916, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93825025426277, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995365293, next_for_neutral_type =3D 4, last_strong_type =3D 6, prev_for_neutral_type =3D 6, level =3D 134 '\206', flags =3D 85 'U' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 3, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995409991, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 4294967296, next_for_neutral_type =3D 5, last_strong_type =3D 4, prev_for_neutral_type =3D 5, level =3D 79 'O', flags =3D 87 'W' }, { next_for_neutral_pos =3D 140737262504229, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 2, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995436311, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 1, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 11922, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 2, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 11922, next_for_neutral_type =3D 2, last_strong_type =3D 2, prev_for_neutral_type =3D 2, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93824995365293, next_for_neutral_type =3D 4, last_strong_type =3D 4, prev_for_neutral_type =3D 6, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 3465085955520144975, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 3, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995435877, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488301248, next_for_neutral_type =3D 2, last_strong_type =3D 4, prev_for_neutral_type =3D 6, level =3D 133 '\205', flags =3D 85 'U' }, { next_for_neutral_pos =3D 4294913232, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 3, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995367711, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 4, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93825003550528, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 5, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995373384, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 38, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488301376, next_for_neutral_type =3D 4, last_strong_type =3D 7, prev_for_neutral_type =3D 1, level =3D 126 '~', flags =3D 85 'U' }, { next_for_neutral_pos =3D 1519751683, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 6, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824994959235, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 6, last_strong_type =3D 4, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 30, next_for_neutral_type =3D 5, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 137 '\211', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 38, next_for_neutral_type =3D 1, last_strong_type =3D 1, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 7, next_for_neutral_type =3D 1, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 30, next_for_neutral_type =3D 4, last_strong_type =3D 7, prev_for_neutral_type =3D 1, level =3D 126 '~', flags =3D 85 'U' }, { next_for_neutral_pos =3D 93825020596192, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824994960445, next_for_neutral_type =3D 5, last_strong_type =3D 0, prev_for_neutral_type =3D 6, level =3D 137 '\211', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 93825080332787, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 0, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995347708, next_for_neutral_type =3D 2, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488301648, next_for_neutral_type =3D 3, last_strong_type =3D 7, prev_for_neutral_type =3D 2, level =3D 142 '\216', flags =3D 85 'U' }, { next_for_neutral_pos =3D 4069116197, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488301616, next_for_neutral_type =3D 4, last_strong_type =3D 2, prev_for_neutral_type =3D 2, level =3D 132 '\204', flags =3D 85 'U' }, { next_for_neutral_pos =3D 1460015040, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 2, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 143168688433, next_for_neutral_type =3D 5, last_strong_type =3D 1, prev_for_neutral_type =3D 5, level =3D 147 '\223', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 140737488301664, next_for_neutral_type =3D 7, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 107 'k', flags =3D 85 'U' }, { next_for_neutral_pos =3D 145803700045, next_for_neutral_type =3D 6, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488301696, next_for_neutral_type =3D 7, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 107 'k', flags =3D 85 'U' }, { next_for_neutral_pos =3D 6, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 3, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824993705751, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 107 'k', flags =3D 85 'U' }, { next_for_neutral_pos =3D 140737263167309, next_for_neutral_type =3D 5, last_strong_type =3D 1, prev_for_neutral_type =3D 5, level =3D 147 '\223', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 6, next_for_neutral_type =3D 7, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 107 'k', flags =3D 85 'U' }, { next_for_neutral_pos =3D 140737263167304, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 4, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824993705776, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 107 'k', flags =3D 85 'U' }, { next_for_neutral_pos =3D 140737263158717, next_for_neutral_type =3D 5, last_strong_type =3D 7, prev_for_neutral_type =3D 6, level =3D 147 '\223', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 6, next_for_neutral_type =3D 7, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 107 'k', flags =3D 85 'U' }, { next_for_neutral_pos =3D 140737263158712, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 5, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824993705776, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488301888, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 1, level =3D 107 'k', flags =3D 85 'U' }, { next_for_neutral_pos =3D 4069713512, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 6, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824993706077, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 6, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 140737263024437, next_for_neutral_type =3D 6, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737263024432, next_for_neutral_type =3D 4, last_strong_type =3D 6, prev_for_neutral_type =3D 3, level =3D 142 '\216', flags =3D 85 'U' }, { next_for_neutral_pos =3D 3, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 6, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824996001446, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 6, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93825020854964, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824993821052, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93825033784581, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824993821523, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }}, string =3D { lstring =3D XIL(0), s =3D 0x7fffffff3020 "P0\377\377\377\177", schars =3D 93825033784576, bufpos =3D 140737488302112, from_disp_str =3D true, unibyte =3D false }, w =3D 0x0, paragraph_dir =3D NEUTRAL_DIR, separator_limit =3D 93825033784576, first_elt =3D true, new_paragraph =3D false, frame_window_p =3D true }, paragraph_embedding =3D (unknown: 0xffff3050), min_width_property =3D XIL(0x5555556e512f), min_width_start =3D 1446970624 } it_copy_data =3D 0x0 #6 0x00005555555e7726 in get_next_display_element (it=3D0x7fffffffa820) at= xdisp.c:8718 face_id =3D 24 success_p =3D true #7 0x00005555555eb11d in move_it_in_display_line_to (it=3D0x7fffffffa820, = to_charpos=3D9562, to_x=3D693, op=3DMOVE_TO_X) at xdisp.c:10107 x =3D 177 i =3D 1 ascent =3D 0 descent =3D 0 result =3D MOVE_UNDEFINED saved_glyph_row =3D 0x555556a12930 wrap_it =3D { window =3D XIL(0x1), w =3D 0x0, f =3D 0x0, method =3D GET_FROM_BUFFER, stop_charpos =3D 93825005706461, prev_stop =3D 93825005706456, base_level_stop =3D 93825005705760, end_charpos =3D 0, medium_narrowing_begv =3D 5894, medium_narrowing_zv =3D 0, large_narrowing_begv =3D 5873, large_narrowing_zv =3D 9562, s =3D 0x0, string_nchars =3D 0, multibyte_p =3D false, tab_line_p =3D false, header_line_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, from_disp_prop_p =3D false, ellipsis_p =3D false, avoid_cursor_p =3D false, dp =3D 0x0, dpvec =3D 0x0, dpend =3D 0x0, dpvec_char_len =3D 5, dpvec_face_id =3D 0, saved_face_id =3D 0, ctl_chars =3D {XIL(0), XIL(0), XIL(0), XIL(0x18), XIL(0) }, start =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 5874 }, dpvec_index =3D 8704 }, current =3D { pos =3D { charpos =3D -1, bytepos =3D -1 }, overlay_string_index =3D -1, string_pos =3D { charpos =3D 4294967295, bytepos =3D 5874 }, dpvec_index =3D 8704 }, n_overlay_strings =3D -1, overlay_strings_charpos =3D -1, overlay_strings =3D {XIL(0xffffffffffffffff), XIL(0xffffffff), XI= L(0), make_fixnum(1468), XIL(0) }, string_overlays =3D {XIL(0) }, string =3D XIL(0), from_overlay =3D XIL(0), stack =3D {{ string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }}, sp =3D -1, selective =3D 0, what =3D IT_CHARACTER, face_id =3D 0, selective_display_ellipsis_p =3D false, ctl_arrow_p =3D false, face_box_p =3D false, start_of_box_run_p =3D false, end_of_box_run_p =3D false, overlay_strings_at_end_processed_p =3D false, ignore_overlay_strings_at_pos_p =3D false, glyph_not_available_p =3D false, starts_in_middle_of_char_p =3D false, face_before_selective_p =3D false, constrain_row_ascent_descent_p =3D false, line_number_produced_p =3D false, align_visually_p =3D false, line_wrap =3D TRUNCATE, base_face_id =3D 0, c =3D 0, len =3D 0, cmp_it =3D { stop_pos =3D 103079215105, id =3D 7, ch =3D 0, rule_idx =3D 3, lookback =3D 5874, nglyphs =3D 829, reversed_p =3D false, parent_it =3D 0xba4, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 3, to =3D 0, width =3D -22496 }, char_to_display =3D 5874, glyphless_method =3D GLYPHLESS_DISPLAY_THIN_SPACE, image_id =3D 25769803778, xwidget =3D 0x200000000, slice =3D { x =3D XIL(0x1), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, space_width =3D XIL(0), voffset =3D 0, tab_width =3D 0, font_height =3D XIL(0), object =3D XIL(0), position =3D { charpos =3D 0, bytepos =3D 524288 }, truncation_pixel_width =3D 0, continuation_pixel_width =3D 0, first_visible_x =3D 0, last_visible_x =3D 1450507077, last_visible_y =3D 21845, extra_line_spacing =3D 5874, max_extra_line_spacing =3D 0, override_ascent =3D 8704, override_descent =3D 0, override_boff =3D 9, glyph_row =3D 0x286000002d0, area =3D LEFT_MARGIN_AREA, nglyphs =3D 0, pixel_width =3D -1, ascent =3D 0, descent =3D 0, max_ascent =3D 0, max_descent =3D 1453402416, phys_ascent =3D 21845, phys_descent =3D 1, max_phys_ascent =3D 1, max_phys_descent =3D 12, current_x =3D 19, wrap_prefix_width =3D 9, continuation_lines_width =3D 19, eol_pos =3D { charpos =3D 73014444041, bytepos =3D 73014444039 }, current_y =3D 7, first_vpos =3D 12, vpos =3D 0, hpos =3D 0, lnum =3D 0, lnum_bytepos =3D 0, lnum_width =3D 0, lnum_pixel_width =3D 1, pt_lnum =3D 4294967296, stretch_adjust =3D 0, left_user_fringe_bitmap =3D 0, right_user_fringe_bitmap =3D 0, left_user_fringe_face_id =3D 0, right_user_fringe_face_id =3D 0, bidi_p =3D false, bidi_it =3D { bytepos =3D 0, charpos =3D 0, ch =3D 0, nchars =3D 0, ch_len =3D 0, type =3D UNKNOWN_BT, type_after_wn =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT, resolved_level =3D 0 '\000', isolate_level =3D 0 '\000', invalid_levels =3D 0, invalid_isolates =3D 0, prev =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, last_strong =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, next_for_neutral =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, prev_for_neutral =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, next_for_ws =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, bracket_pairing_pos =3D 0, bracket_enclosed_type =3D UNKNOWN_BT, next_en_pos =3D 0, next_en_type =3D UNKNOWN_BT, sos =3D NEUTRAL_DIR, scan_dir =3D 0, disp_pos =3D 0, disp_prop =3D 0, stack_idx =3D 0, level_stack =3D {{ next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' } }, string =3D { lstring =3D XIL(0), s =3D 0x0, schars =3D 0, bufpos =3D 0, from_disp_str =3D false, unibyte =3D false }, w =3D 0x0, paragraph_dir =3D NEUTRAL_DIR, separator_limit =3D 0, first_elt =3D false, new_paragraph =3D false, frame_window_p =3D false }, paragraph_embedding =3D (unknown: 0x5622dcd8), min_width_property =3D XIL(0), min_width_start =3D 0 } atpos_it =3D { window =3D XIL(0x7fffffff6d40), w =3D 0xcde, f =3D 0x869, method =3D 4294930000, stop_charpos =3D 93825005706461, prev_stop =3D 93825005706456, base_level_stop =3D 93825005705760, end_charpos =3D 0, medium_narrowing_begv =3D 5894, medium_narrowing_zv =3D 0, large_narrowing_begv =3D 5873, large_narrowing_zv =3D 9562, s =3D 0x0, string_nchars =3D 0, multibyte_p =3D false, tab_line_p =3D false, header_line_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, from_disp_prop_p =3D false, ellipsis_p =3D false, avoid_cursor_p =3D false, dp =3D 0x0, dpvec =3D 0x0, dpend =3D 0x0, dpvec_char_len =3D 5, dpvec_face_id =3D 0, saved_face_id =3D 0, ctl_chars =3D {XIL(0), XIL(0), XIL(0), XIL(0x18), XIL(0) }, start =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 5874 }, dpvec_index =3D 8704 }, current =3D { pos =3D { charpos =3D -1, bytepos =3D -1 }, overlay_string_index =3D -1, string_pos =3D { charpos =3D 4294967295, bytepos =3D 5874 }, dpvec_index =3D 8704 }, n_overlay_strings =3D -1, overlay_strings_charpos =3D -1, overlay_strings =3D {XIL(0xffffffffffffffff), XIL(0xffffffff), XI= L(0), make_fixnum(1468), XIL(0) }, string_overlays =3D {XIL(0) }, string =3D XIL(0), from_overlay =3D XIL(0), stack =3D {{ string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }}, sp =3D -1, selective =3D 0, what =3D IT_CHARACTER, face_id =3D 0, selective_display_ellipsis_p =3D false, ctl_arrow_p =3D false, face_box_p =3D false, start_of_box_run_p =3D false, end_of_box_run_p =3D false, overlay_strings_at_end_processed_p =3D false, ignore_overlay_strings_at_pos_p =3D false, glyph_not_available_p =3D false, starts_in_middle_of_char_p =3D false, face_before_selective_p =3D false, constrain_row_ascent_descent_p =3D false, line_number_produced_p =3D false, align_visually_p =3D false, line_wrap =3D TRUNCATE, base_face_id =3D 0, c =3D 0, len =3D 0, cmp_it =3D { stop_pos =3D 103079215105, id =3D 7, ch =3D 0, rule_idx =3D 3, lookback =3D 5874, nglyphs =3D 829, reversed_p =3D false, parent_it =3D 0xba4, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 3, to =3D 0, width =3D -22496 }, char_to_display =3D 5874, glyphless_method =3D GLYPHLESS_DISPLAY_THIN_SPACE, image_id =3D 25769803778, xwidget =3D 0x200000000, slice =3D { x =3D XIL(0x1), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, space_width =3D XIL(0), voffset =3D 0, tab_width =3D 0, font_height =3D XIL(0), object =3D XIL(0), position =3D { charpos =3D 0, bytepos =3D 524288 }, truncation_pixel_width =3D 0, continuation_pixel_width =3D 0, first_visible_x =3D 0, last_visible_x =3D 1450507077, last_visible_y =3D 21845, extra_line_spacing =3D 5874, max_extra_line_spacing =3D 0, override_ascent =3D 8704, override_descent =3D 0, override_boff =3D 9, glyph_row =3D 0x286000002d0, area =3D LEFT_MARGIN_AREA, nglyphs =3D 0, pixel_width =3D -1, ascent =3D 0, descent =3D 0, max_ascent =3D 0, max_descent =3D 1453402416, phys_ascent =3D 21845, phys_descent =3D 1, max_phys_ascent =3D 1, max_phys_descent =3D 12, current_x =3D 19, wrap_prefix_width =3D 9, continuation_lines_width =3D 19, eol_pos =3D { charpos =3D 73014444041, bytepos =3D 73014444039 }, current_y =3D 7, first_vpos =3D 12, vpos =3D 0, hpos =3D 0, lnum =3D 0, lnum_bytepos =3D 0, lnum_width =3D 0, lnum_pixel_width =3D 1, pt_lnum =3D 4294967296, stretch_adjust =3D 0, left_user_fringe_bitmap =3D 0, right_user_fringe_bitmap =3D 0, left_user_fringe_face_id =3D 0, right_user_fringe_face_id =3D 0, bidi_p =3D false, bidi_it =3D { bytepos =3D 0, charpos =3D 0, ch =3D 0, nchars =3D 0, ch_len =3D 0, type =3D UNKNOWN_BT, type_after_wn =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT, resolved_level =3D 0 '\000', isolate_level =3D 0 '\000', invalid_levels =3D 0, invalid_isolates =3D 0, prev =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, last_strong =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, next_for_neutral =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, prev_for_neutral =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, next_for_ws =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, bracket_pairing_pos =3D 0, bracket_enclosed_type =3D UNKNOWN_BT, next_en_pos =3D 0, next_en_type =3D UNKNOWN_BT, sos =3D NEUTRAL_DIR, scan_dir =3D 0, disp_pos =3D 0, disp_prop =3D 0, stack_idx =3D 0, level_stack =3D {{ next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' } }, string =3D { lstring =3D XIL(0), s =3D 0x0, schars =3D 0, bufpos =3D 0, from_disp_str =3D false, unibyte =3D false }, w =3D 0x0, paragraph_dir =3D NEUTRAL_DIR, separator_limit =3D 0, first_elt =3D false, new_paragraph =3D false, frame_window_p =3D false }, paragraph_embedding =3D (unknown: 0x5622dcd8), min_width_property =3D XIL(0), min_width_start =3D 0 } atx_it =3D { window =3D XIL(0), w =3D 0x0, f =3D 0x0, method =3D 24, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, end_charpos =3D 0, medium_narrowing_begv =3D 0, medium_narrowing_zv =3D 0, large_narrowing_begv =3D 0, large_narrowing_zv =3D 0, s =3D 0x0, string_nchars =3D 0, multibyte_p =3D false, tab_line_p =3D false, header_line_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, from_disp_prop_p =3D false, ellipsis_p =3D false, avoid_cursor_p =3D false, dp =3D 0x0, dpvec =3D 0x0, dpend =3D 0x0, dpvec_char_len =3D 0, dpvec_face_id =3D 0, saved_face_id =3D 0, ctl_chars =3D {make_fixnum(1468), XIL(0x2200), XIL(0xffffffffffff= ffff), XIL(0xffffffffffffffff), XIL(0xffffffffffffffff), XIL(0xffffffff), X= IL(0x16f0), XIL(0x21fc), XIL(0xffffffffffffffff), XIL(0xffffffffffffffff), = XIL(0xffffffffffffffff), XIL(0xffffffff), XIL(0), make_fixnum(1468), XIL(0)= , XIL(0)}, start =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, n_overlay_strings =3D 0, overlay_strings_charpos =3D 0, overlay_strings =3D {XIL(0) }, string_overlays =3D {XIL(0) }, string =3D XIL(0), from_overlay =3D XIL(0), stack =3D {{ string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 103079215105, bytepos =3D 7 }, current =3D { pos =3D { charpos =3D 12799002542080, bytepos =3D 3 }, overlay_string_index =3D 5874, string_pos =3D { charpos =3D 829, bytepos =3D 2980 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LAST_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D (unknown: 0xffffa820), multibyte_p =3D true, string_from_display_prop_p =3D true, string_from_prefix_prop_p =3D true, display_ellipsis_p =3D true, avoid_cursor_p =3D true, bidi_p =3D true, from_disp_prop_p =3D true, line_wrap =3D (WINDOW_WRAP | unknown: 0x16f0), voffset =3D 0, space_width =3D make_fixnum(6442450944), font_height =3D XIL(0x200000000) }}, sp =3D -1, selective =3D 0, what =3D IT_CHARACTER, face_id =3D 0, selective_display_ellipsis_p =3D false, ctl_arrow_p =3D false, face_box_p =3D false, start_of_box_run_p =3D false, end_of_box_run_p =3D false, overlay_strings_at_end_processed_p =3D false, ignore_overlay_strings_at_pos_p =3D false, glyph_not_available_p =3D false, starts_in_middle_of_char_p =3D false, face_before_selective_p =3D false, constrain_row_ascent_descent_p =3D false, line_number_produced_p =3D false, align_visually_p =3D false, line_wrap =3D TRUNCATE, base_face_id =3D 0, c =3D 0, len =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 524288, lookback =3D 0, nglyphs =3D 1450507077, reversed_p =3D 85, parent_it =3D 0x16f2, charpos =3D 8704, nchars =3D 9, nbytes =3D 0, from =3D 720, to =3D 646, width =3D 0 }, char_to_display =3D -1, glyphless_method =3D GLYPHLESS_DISPLAY_THIN_SPACE, image_id =3D 0, xwidget =3D 0x555556a12930, slice =3D { x =3D XIL(0x100000001), y =3D make_fixnum(20401094659), width =3D XIL(0x1300000009), height =3D XIL(0x1100000009) }, space_width =3D XIL(0x1100000007), voffset =3D 7, tab_width =3D 0, font_height =3D XIL(0), object =3D XIL(0), position =3D { charpos =3D 0, bytepos =3D 4294967296 }, truncation_pixel_width =3D 0, continuation_pixel_width =3D 0, first_visible_x =3D 1, last_visible_x =3D 0, last_visible_y =3D 0, extra_line_spacing =3D 0, max_extra_line_spacing =3D 0, override_ascent =3D 0, override_descent =3D 0, override_boff =3D 0, glyph_row =3D 0x0, area =3D LEFT_MARGIN_AREA, nglyphs =3D 0, pixel_width =3D 0, ascent =3D 0, descent =3D 0, max_ascent =3D 0, max_descent =3D 0, phys_ascent =3D 0, phys_descent =3D 0, max_phys_ascent =3D 0, max_phys_descent =3D 0, current_x =3D 0, wrap_prefix_width =3D 0, continuation_lines_width =3D 0, eol_pos =3D { charpos =3D 0, bytepos =3D 0 }, current_y =3D 0, first_vpos =3D 0, vpos =3D 0, hpos =3D 0, lnum =3D 0, lnum_bytepos =3D 0, lnum_width =3D 0, lnum_pixel_width =3D 0, pt_lnum =3D 0, stretch_adjust =3D 0, left_user_fringe_bitmap =3D 0, right_user_fringe_bitmap =3D 0, left_user_fringe_face_id =3D 0, right_user_fringe_face_id =3D 0, bidi_p =3D false, bidi_it =3D { bytepos =3D 0, charpos =3D 0, ch =3D 0, nchars =3D 0, ch_len =3D 0, type =3D UNKNOWN_BT, type_after_wn =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT, resolved_level =3D 0 '\000', isolate_level =3D 0 '\000', invalid_levels =3D 0, invalid_isolates =3D 0, prev =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, last_strong =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, next_for_neutral =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, prev_for_neutral =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, next_for_ws =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, bracket_pairing_pos =3D 0, bracket_enclosed_type =3D UNKNOWN_BT, next_en_pos =3D 0, next_en_type =3D UNKNOWN_BT, sos =3D NEUTRAL_DIR, scan_dir =3D 0, disp_pos =3D 0, disp_prop =3D 0, stack_idx =3D 0, level_stack =3D {{ next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' } , { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 3, prev_for_neutral_type =3D 3, level =3D 34 '"', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488317424, next_for_neutral_type =3D 3, last_strong_type =3D 1, prev_for_neutral_type =3D 5, level =3D 92 '\\', flags =3D 85 'U' }, { next_for_neutral_pos =3D 1445125336, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 255 '\377', flags =3D 255 '\377' }}, string =3D { lstring =3D XIL(0x5555556c062f), s =3D 0x7fffffff6c30 "\300\223\377\377\377\177", schars =3D 93824993727756, bufpos =3D 4294967308, from_disp_str =3D false, unibyte =3D false }, w =3D 0x20, paragraph_dir =3D NEUTRAL_DIR, separator_limit =3D 140737488327616, first_elt =3D true, new_paragraph =3D false, frame_window_p =3D true }, paragraph_embedding =3D (unknown: 0xffff6d08), min_width_property =3D XIL(0x7fffffffa820), min_width_start =3D -164103488 } ppos_it =3D { window =3D XIL(0), w =3D 0xac8, f =3D 0x16800000c30, method =3D GET_FROM_BUFFER, stop_charpos =3D 4294967295, prev_stop =3D 140737488308384, base_level_stop =3D 0, end_charpos =3D 0, medium_narrowing_begv =3D 0, medium_narrowing_zv =3D 547, large_narrowing_begv =3D 7215545057282, large_narrowing_zv =3D 3360, s =3D 0xd2000000690 , string_nchars =3D 15461882267520, multibyte_p =3D false, tab_line_p =3D false, header_line_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, from_disp_prop_p =3D true, ellipsis_p =3D false, avoid_cursor_p =3D false, dp =3D 0xffffffff, dpvec =3D 0x7fffffff4480, dpend =3D 0x7fffffff46e8, dpvec_char_len =3D -47912, dpvec_face_id =3D 32767, saved_face_id =3D 0, ctl_chars =3D {XIL(0xaf5), make_fixnum(2061584302080), XIL(0xc30)= , XIL(0xc3000000780), XIL(0xd2000000690), XIL(0xd2000000c30), XIL(0xfffffff= f), XIL(0x7fffffff4428), XIL(0x7fffffff4690), XIL(0x7fffffff45e0), XIL(0), = XIL(0xc33), make_fixnum(2061584302080), XIL(0xc30), XIL(0xc3000000780), XIL= (0xd2000000870)}, start =3D { pos =3D { charpos =3D 14431090117680, bytepos =3D 1 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 140737488307504 }, dpvec_index =3D 0 }, current =3D { pos =3D { charpos =3D 3120, bytepos =3D 9277129359362 }, overlay_string_index =3D 3360, string_pos =3D { charpos =3D 14431090116720, bytepos =3D 15461882267520 }, dpvec_index =3D 3360 }, n_overlay_strings =3D 1, overlay_strings_charpos =3D 0, overlay_strings =3D {XIL(0), XIL(0x7fffffff44d8), XIL(0), XIL(0xd= 98), make_fixnum(2963527434240), make_fixnum(697), XIL(0xae600000ac8), make= _fixnum(3092376453787), make_fixnum(3092376453817), XIL(0x1), XIL(0), XIL(0= ), XIL(0x7fffffff4530), XIL(0), make_fixnum(697), make_fixnum(1159641169920= )}, string_overlays =3D {make_fixnum(697), XIL(0xae600000438), make_f= ixnum(3092376453412), make_fixnum(3092376453817), XIL(0xffffffff), XIL(0x7f= ffffff4428), XIL(0x7fffffff4740), XIL(0x7fffffff4530), XIL(0), XIL(0x9cd), = make_fixnum(1159641169920), make_fixnum(112), XIL(0x1c200000438), XIL(0xae6= 00000438), make_fixnum(2995739689072), XIL(0xffffffff)}, string =3D XIL(0x7fffffff4428), from_overlay =3D XIL(0x7fffffff48f8), stack =3D {{ string =3D XIL(0x7fffffff4798), string_nchars =3D 0, end_charpos =3D 2725, stop_charpos =3D 5025111736322, prev_stop =3D 360, base_level_stop =3D 1546188227730, cmp_it =3D { stop_pos =3D 1932735284280, id =3D 1932735283560, ch =3D -1, rule_idx =3D 140737488307240, lookback =3D 140737488308384, nglyphs =3D -47120, reversed_p =3D 255, parent_it =3D 0x0, charpos =3D 1381, nchars =3D 2, nbytes =3D 2670, from =3D 360, to =3D 0, width =3D 2670 }, face_id =3D 2760, u =3D { image =3D { object =3D XIL(0x1c200000168), slice =3D { x =3D XIL(0x1), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0x7fffffff4530) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0x1c200000168) }, xwidget =3D { object =3D XIL(0x1c200000168) } }, position =3D { charpos =3D 360, bytepos =3D 11854109736962 }, current =3D { pos =3D { charpos =3D 450, bytepos =3D 1932735285960 }, overlay_string_index =3D 11982958758600, string_pos =3D { charpos =3D 11982958756290, bytepos =3D 1 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D -47824, method =3D 32767, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D (WINDOW_WRAP | unknown: 0x1c0), voffset =3D 0, space_width =3D make_fixnum(2093796556800), font_height =3D XIL(0x675) }, { string =3D make_fixnum(1774895235559), string_nchars =3D 1950, end_charpos =3D 9848360011381, stop_charpos =3D 4294967295, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 140737488307152, id =3D 0, ch =3D 1964, rule_idx =3D 15981573308418, lookback =3D 1653, nglyphs =3D 3721, reversed_p =3D 117, parent_it =3D 0x7ac00000ea6, charpos =3D 8435315770997, nchars =3D 1, nbytes =3D 0, from =3D -46768, to =3D 32767, width =3D 0 }, face_id =3D -48176, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D make_fixnum(978178801664), width =3D XIL(0x758), height =3D XIL(0x7580000038f) }, image_id =3D 8705898709882 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 8705898710872, bytepos =3D 4294967295 }, current =3D { pos =3D { charpos =3D 140737488307328, bytepos =3D 140737488308560 }, overlay_string_index =3D 140737488308648, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 2 }, from_overlay =3D XIL(0x4a4), area =3D 2704, method =3D 1188, paragraph_embedding =3D (L2R | R2L | unknown: 0x38c), multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D true, avoid_cursor_p =3D true, bidi_p =3D false, from_disp_prop_p =3D true, line_wrap =3D (unknown: 0x4a4), voffset =3D 1880, space_width =3D XIL(0xffffffff), font_height =3D XIL(0x7fffffff4428) }, { string =3D XIL(0x7fffffff4950), string_nchars =3D -46592, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 11613591568386, base_level_stop =3D 1188, cmp_it =3D { stop_pos =3D 5102421150352, id =3D 5729486375698, ch =3D 1188, rule_idx =3D 1, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x7fffffff45e0, charpos =3D 0, nchars =3D 1188, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0x7fffffff4c08), string_nchars =3D -46128, end_charpos =3D 0, stop_charpos =3D 32, prev_stop =3D 0, base_level_stop =3D 3745211483112, cmp_it =3D { stop_pos =3D 140737488309352, id =3D 140737488309320, ch =3D 3840, rule_idx =3D 140737488307328, lookback =3D 0, nglyphs =3D -46104, reversed_p =3D 255, parent_it =3D 0xf00, charpos =3D 140737488307416, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 3600 }, face_id =3D -47648, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0x7fffffff4c28), y =3D XIL(0xe10), width =3D XIL(0x7fffffff46e8), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 2548, bytepos =3D 93825082857248 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 140737488309224 }, overlay_string_index =3D 3721, string_pos =3D { charpos =3D 93825082854256, bytepos =3D 0 }, dpvec_index =3D -45880 }, from_overlay =3D make_fixnum(716), area =3D 1522274896, method =3D 21845, paragraph_embedding =3D (L2R | R2L | unknown: 0xfffffffc), multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D (unknown: 0xffff4c68), voffset =3D 32767, space_width =3D XIL(0x9f4), font_height =3D XIL(0x55555abc16c8) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D -1 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 214748364801 }, dpvec_index =3D 3 }, from_overlay =3D XIL(0xb9a00000000), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D L2R, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D (unknown: 0x2c8), voffset =3D 0, space_width =3D make_fixnum(742), font_height =3D XIL(0) }}, sp =3D 0, selective =3D 1, what =3D 4294944672, face_id =3D 32767, selective_display_ellipsis_p =3D true, ctl_arrow_p =3D false, face_box_p =3D false, start_of_box_run_p =3D false, end_of_box_run_p =3D false, overlay_strings_at_end_processed_p =3D false, ignore_overlay_strings_at_pos_p =3D false, glyph_not_available_p =3D false, starts_in_middle_of_char_p =3D false, face_before_selective_p =3D false, constrain_row_ascent_descent_p =3D false, line_number_produced_p =3D false, align_visually_p =3D false, line_wrap =3D TRUNCATE, base_face_id =3D 1, c =3D 3, len =3D 0, cmp_it =3D { stop_pos =3D 1, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 524288, to =3D 0, width =3D 0 }, char_to_display =3D 1473344525, glyphless_method =3D 21845, image_id =3D 1, xwidget =3D 0x1, slice =3D { x =3D XIL(0x90000), y =3D XIL(0x286000002d0), width =3D XIL(0), height =3D XIL(0xffffffff) }, space_width =3D XIL(0), voffset =3D 10288, tab_width =3D 22177, font_height =3D XIL(0x100000001), object =3D XIL(0xf0000000c), position =3D { charpos =3D 6, bytepos =3D 64424509440 }, truncation_pixel_width =3D 6, continuation_pixel_width =3D 0, first_visible_x =3D 15, last_visible_x =3D 6, last_visible_y =3D 0, extra_line_spacing =3D 0, max_extra_line_spacing =3D 0, override_ascent =3D 0, override_descent =3D 0, override_boff =3D 0, glyph_row =3D 0x0, area =3D LEFT_MARGIN_AREA, nglyphs =3D 0, pixel_width =3D 0, ascent =3D 0, descent =3D 0, max_ascent =3D 0, max_descent =3D 0, phys_ascent =3D 0, phys_descent =3D 0, max_phys_ascent =3D 0, max_phys_descent =3D 0, current_x =3D 0, wrap_prefix_width =3D 0, continuation_lines_width =3D 0, eol_pos =3D { charpos =3D 0, bytepos =3D 0 }, current_y =3D 0, first_vpos =3D 0, vpos =3D 0, hpos =3D 0, lnum =3D 0, lnum_bytepos =3D 0, lnum_width =3D 0, lnum_pixel_width =3D 0, pt_lnum =3D 0, stretch_adjust =3D 0, left_user_fringe_bitmap =3D 0, right_user_fringe_bitmap =3D 0, left_user_fringe_face_id =3D 0, right_user_fringe_face_id =3D 0, bidi_p =3D false, bidi_it =3D { bytepos =3D 0, charpos =3D 0, ch =3D 0, nchars =3D 4398046511104, ch_len =3D 140737488310240, type =3D UNKNOWN_BT, type_after_wn =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT, resolved_level =3D 0 '\000', isolate_level =3D 0 '\000', invalid_levels =3D 140737488309256, invalid_isolates =3D 140737488309224, prev =3D { charpos =3D 140737488309256, type =3D 4294921192, orig_type =3D 32767 }, last_strong =3D { charpos =3D 140737488309384, type =3D 4294921352, orig_type =3D 32767 }, next_for_neutral =3D { charpos =3D 140737488309320, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, prev_for_neutral =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, next_for_ws =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, bracket_pairing_pos =3D 0, bracket_enclosed_type =3D UNKNOWN_BT, next_en_pos =3D 0, next_en_type =3D UNKNOWN_BT, sos =3D NEUTRAL_DIR, scan_dir =3D 0, disp_pos =3D 0, disp_prop =3D 0, stack_idx =3D 0, level_stack =3D {{ next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825084191728, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825084191728, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 5, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995347755, next_for_neutral_type =3D 2, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488310672, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488310640, next_for_neutral_type =3D 4, last_strong_type =3D 2, prev_for_neutral_type =3D 2, level =3D 132 '\204', flags =3D 85 'U' }, { next_for_neutral_pos =3D 1460017216, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 3712, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 6, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824994966495, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 2, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825020598336, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824994966894, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 3712, next_for_neutral_type =3D 0, last_strong_type =3D 5, prev_for_neutral_type =3D 0, level =3D 126 '~', flags =3D 85 'U' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 5, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995035487, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 1, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 1, last_strong_type =3D 5, prev_for_neutral_type =3D 4, level =3D 18 '\022', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825060053572, next_for_neutral_type =3D 6, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825004643114, next_for_neutral_type =3D 4, last_strong_type =3D 0, prev_for_neutral_type =3D 1, level =3D 96 '`', flags =3D 89 'Y' }, { next_for_neutral_pos =3D 9, next_for_neutral_type =3D 3, last_strong_type =3D 5, prev_for_neutral_type =3D 4, level =3D 18 '\022', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825060053572, next_for_neutral_type =3D 4, last_strong_type =3D 1, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825004643116, next_for_neutral_type =3D 4, last_strong_type =3D 0, prev_for_neutral_type =3D 1, level =3D 96 '`', flags =3D 89 'Y' }, { next_for_neutral_pos =3D 15, next_for_neutral_type =3D 5, last_strong_type =3D 5, prev_for_neutral_type =3D 4, level =3D 18 '\022', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825060053572, next_for_neutral_type =3D 2, last_strong_type =3D 2, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825004643118, next_for_neutral_type =3D 4, last_strong_type =3D 0, prev_for_neutral_type =3D 1, level =3D 96 '`', flags =3D 89 'Y' }, { next_for_neutral_pos =3D 21, next_for_neutral_type =3D 7, last_strong_type =3D 5, prev_for_neutral_type =3D 4, level =3D 18 '\022', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825060053572, next_for_neutral_type =3D 0, last_strong_type =3D 3, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825004643120, next_for_neutral_type =3D 4, last_strong_type =3D 0, prev_for_neutral_type =3D 1, level =3D 96 '`', flags =3D 89 'Y' }, { next_for_neutral_pos =3D 27, next_for_neutral_type =3D 1, last_strong_type =3D 6, prev_for_neutral_type =3D 4, level =3D 18 '\022', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825060053572, next_for_neutral_type =3D 6, last_strong_type =3D 3, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825004643122, next_for_neutral_type =3D 4, last_strong_type =3D 0, prev_for_neutral_type =3D 1, level =3D 96 '`', flags =3D 89 'Y' }, { next_for_neutral_pos =3D 33, next_for_neutral_type =3D 3, last_strong_type =3D 6, prev_for_neutral_type =3D 4, level =3D 18 '\022', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825060053572, next_for_neutral_type =3D 4, last_strong_type =3D 4, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825004643124, next_for_neutral_type =3D 4, last_strong_type =3D 0, prev_for_neutral_type =3D 1, level =3D 96 '`', flags =3D 89 'Y' }, { next_for_neutral_pos =3D 39, next_for_neutral_type =3D 5, last_strong_type =3D 6, prev_for_neutral_type =3D 4, level =3D 18 '\022', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825060053572, next_for_neutral_type =3D 2, last_strong_type =3D 5, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825004643126, next_for_neutral_type =3D 4, last_strong_type =3D 0, prev_for_neutral_type =3D 1, level =3D 96 '`', flags =3D 89 'Y' }, { next_for_neutral_pos =3D 45, next_for_neutral_type =3D 7, last_strong_type =3D 6, prev_for_neutral_type =3D 4, level =3D 18 '\022', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825060053572, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825004643128, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488311200, next_for_neutral_type =3D 3, last_strong_type =3D 7, prev_for_neutral_type =3D 3, level =3D 135 '\207', flags =3D 85 'U' }, { next_for_neutral_pos =3D 1434766635, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 0, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995553409, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 3, next_for_neutral_type =3D 3, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488311907, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488311280, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D -997, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488311910, next_for_neutral_type =3D 0, last_strong_type =3D 3, prev_for_neutral_type =3D 4, level =3D 191 '\277', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 100, next_for_neutral_type =3D 0, last_strong_type =3D 3, prev_for_neutral_type =3D 4, level =3D 191 '\277', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 140737488311344, next_for_neutral_type =3D 3, last_strong_type =3D 5, prev_for_neutral_type =3D 4, level =3D 130 '\202', flags =3D 85 'U' }, { next_for_neutral_pos =3D 140737266045208, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995168311, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 1, level =3D 191 '\277', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 140737266045208, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 6, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995180560, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 2, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737266045208, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 6, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995180560, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 2, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 140737263369016, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737266047552, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995180560, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 1, level =3D 191 '\277', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 1, level =3D 191 '\277', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 140737488311536, next_for_neutral_type =3D 4, last_strong_type =3D 5, prev_for_neutral_type =3D 3, level =3D 130 '\202', flags =3D 85 'U' }, { next_for_neutral_pos =3D 140737266047584, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 4, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995168086, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 4, level =3D 191 '\277', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 140737266047584, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 4, level =3D 191 '\277', flags =3D 242 '\362' }, { next_for_neutral_pos =3D 140737488311600, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488311632, next_for_neutral_type =3D 2, last_strong_type =3D 4, prev_for_neutral_type =3D 6, level =3D 133 '\205', flags =3D 85 'U' }, { next_for_neutral_pos =3D 1450507077, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488311696, next_for_neutral_type =3D 2, last_strong_type =3D 4, prev_for_neutral_type =3D 6, level =3D 133 '\205', flags =3D 85 'U' }, { next_for_neutral_pos =3D 1434823429, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488311744, next_for_neutral_type =3D 2, last_strong_type =3D 4, prev_for_neutral_type =3D 6, level =3D 133 '\205', flags =3D 85 'U' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 0, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995395398, next_for_neutral_type =3D 3, last_strong_type =3D 2, prev_for_neutral_type =3D 3, level =3D 23 '\027', flags =3D 87 'W' }, { next_for_neutral_pos =3D 28752, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488311824, next_for_neutral_type =3D 6, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 141 '\215', flags =3D 85 'U' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 1, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995954781, next_for_neutral_type =3D 2, last_strong_type =3D 0, prev_for_neutral_type =3D 7, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 4294967296, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825080158979, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 3, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 17149872, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 2, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93825005706461, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 2, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995954300, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825080158979, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 3, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995974109, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825011088197, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 23490, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824995975109, next_for_neutral_type =3D 0, last_strong_type =3D 7, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93825011088197, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 23490, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 5872, next_for_neutral_type =3D 1, last_strong_type =3D 6, prev_for_neutral_type =3D 3, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 1, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 17089760, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 11 '\v', flags =3D 86 'V' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488312160, next_for_neutral_type =3D 6, last_strong_type =3D 4, prev_for_neutral_type =3D 4, level =3D 141 '\215', flags =3D 85 'U' }, { next_for_neutral_pos =3D 1519577827, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824996508298, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 3, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488317408, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 8, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 4611686018427387904, next_for_neutral_type =3D 7, last_strong_type =3D 7, prev_for_neutral_type =3D 7, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 8, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 93825013983536, next_for_neutral_type =3D 0, last_strong_type =3D 2, prev_for_neutral_type =3D 1, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93823560581132, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 72198327231315968, next_for_neutral_type =3D 1, last_strong_type =3D 6, prev_for_neutral_type =3D 3, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 55834574848, next_for_neutral_type =3D 5, last_strong_type =3D 0, prev_for_neutral_type =3D 5, level =3D 116 't', flags =3D 86 'V' }, { next_for_neutral_pos =3D 140737488312384, next_for_neutral_type =3D 5, last_strong_type =3D 3, prev_for_neutral_type =3D 6, level =3D 92 '\\', flags =3D 85 'U' }, { next_for_neutral_pos =3D 93825011088197, next_for_neutral_type =3D 0, last_strong_type =3D 6, prev_for_neutral_type =3D 0, level =3D 255 '\377', flags =3D 255 '\377' }, { next_for_neutral_pos =3D 93824992867370, next_for_neutral_type =3D 0, last_strong_type =3D 1, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D -1, next_for_neutral_type =3D 2, last_strong_type =3D 6, prev_for_neutral_type =3D 3, level =3D 0 '\000', flags =3D 0 '\000' }, { next_for_neutral_pos =3D 140737488322544, next_for_neutral_type =3D 5, last_strong_type =3D 3, prev_for_neutral_type =3D 3, level =3D 34 '"', flags =3D 86 'V' }, { next_for_neutral_pos =3D 93825005706456, next_for_neutral_type =3D 0, last_strong_type =3D 4, prev_for_neutral_type =3D 0, level =3D 34 '"', flags =3D 86 'V' }}, string =3D { lstring =3D XIL(0), s =3D 0x1706 , schars =3D 0, bufpos =3D 0, from_disp_str =3D false, unibyte =3D true }, w =3D 0x0, paragraph_dir =3D NEUTRAL_DIR, separator_limit =3D 0, first_elt =3D false, new_paragraph =3D false, frame_window_p =3D false }, paragraph_embedding =3D NEUTRAL_DIR, min_width_property =3D XIL(0), min_width_start =3D 5 } wrap_data =3D 0x0 atpos_data =3D 0x0 atx_data =3D 0x0 ppos_data =3D 0x0 may_wrap =3D false prev_method =3D GET_FROM_BUFFER closest_pos =3D 0 prev_pos =3D 5887 saw_smaller_pos =3D true line_number_pending =3D false this_line_subject_to_line_prefix =3D 0 atx_flag =3D 0 atpos_flag =3D 5874 wrap_flag =3D 0 #8 0x00005555555ee3e5 in move_it_in_display_line (it=3D0x7fffffffa820, to_= charpos=3D9562, to_x=3D693, op=3DMOVE_TO_X) at xdisp.c:10728 #9 0x00005555557e4733 in Fvertical_motion (lines=3Dmake_fixnum(0), window= =3DXIL(0), cur_col=3DXIL(0)) at indent.c:2451 it_start =3D 5874 start_col =3D 0 start_x =3D 0 it_overshoot_count =3D 1 first_x =3D 0 overshoot_handled =3D false disp_string_at_start_p =3D false vpos_init =3D 0 start_x_given =3D false nlines =3D 0 to_x =3D 693 lnum_width =3D 0 lnum_pixel_width =3D 0 it =3D { window =3D XIL(0x55555622dcdd), w =3D 0x55555622dcd8, f =3D 0x55555622da20, method =3D GET_FROM_BUFFER, stop_charpos =3D 5894, prev_stop =3D 0, base_level_stop =3D 5873, end_charpos =3D 9562, medium_narrowing_begv =3D 0, medium_narrowing_zv =3D 0, large_narrowing_begv =3D 0, large_narrowing_zv =3D 0, s =3D 0x0, string_nchars =3D 0, multibyte_p =3D true, tab_line_p =3D false, header_line_p =3D true, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, from_disp_prop_p =3D false, ellipsis_p =3D false, avoid_cursor_p =3D false, dp =3D 0x0, dpvec =3D 0x0, dpend =3D 0x0, dpvec_char_len =3D 0, dpvec_face_id =3D 0, saved_face_id =3D 24, ctl_chars =3D {XIL(0) }, start =3D { pos =3D { charpos =3D 5874, bytepos =3D 8704 }, overlay_string_index =3D -1, string_pos =3D { charpos =3D -1, bytepos =3D -1 }, dpvec_index =3D -1 }, current =3D { pos =3D { charpos =3D 5889, bytepos =3D 8747 }, overlay_string_index =3D -1, string_pos =3D { charpos =3D -1, bytepos =3D -1 }, dpvec_index =3D -1 }, n_overlay_strings =3D 0, overlay_strings_charpos =3D 5874, overlay_strings =3D {XIL(0) }, string_overlays =3D {XIL(0) }, string =3D XIL(0), from_overlay =3D XIL(0), stack =3D {{ string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }, { string =3D XIL(0), string_nchars =3D 0, end_charpos =3D 0, stop_charpos =3D 0, prev_stop =3D 0, base_level_stop =3D 0, cmp_it =3D { stop_pos =3D 0, id =3D 0, ch =3D 0, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 0, reversed_p =3D false, parent_it =3D 0x0, charpos =3D 0, nchars =3D 0, nbytes =3D 0, from =3D 0, to =3D 0, width =3D 0 }, face_id =3D 0, u =3D { image =3D { object =3D XIL(0), slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, image_id =3D 0 }, stretch =3D { object =3D XIL(0) }, xwidget =3D { object =3D XIL(0) } }, position =3D { charpos =3D 0, bytepos =3D 0 }, current =3D { pos =3D { charpos =3D 0, bytepos =3D 0 }, overlay_string_index =3D 0, string_pos =3D { charpos =3D 0, bytepos =3D 0 }, dpvec_index =3D 0 }, from_overlay =3D XIL(0), area =3D LEFT_MARGIN_AREA, method =3D GET_FROM_BUFFER, paragraph_embedding =3D NEUTRAL_DIR, multibyte_p =3D false, string_from_display_prop_p =3D false, string_from_prefix_prop_p =3D false, display_ellipsis_p =3D false, avoid_cursor_p =3D false, bidi_p =3D false, from_disp_prop_p =3D false, line_wrap =3D TRUNCATE, voffset =3D 0, space_width =3D XIL(0), font_height =3D XIL(0) }}, sp =3D 0, selective =3D 0, what =3D IT_COMPOSITION, face_id =3D 24, selective_display_ellipsis_p =3D true, ctl_arrow_p =3D true, face_box_p =3D true, start_of_box_run_p =3D false, end_of_box_run_p =3D false, overlay_strings_at_end_processed_p =3D false, ignore_overlay_strings_at_pos_p =3D false, glyph_not_available_p =3D false, starts_in_middle_of_char_p =3D false, face_before_selective_p =3D false, constrain_row_ascent_descent_p =3D false, line_number_produced_p =3D false, align_visually_p =3D false, line_wrap =3D TRUNCATE, base_face_id =3D 0, c =3D 2980, len =3D 6, cmp_it =3D { stop_pos =3D 5887, id =3D 827, ch =3D 2984, rule_idx =3D 0, lookback =3D 0, nglyphs =3D 3, reversed_p =3D false, parent_it =3D 0x7fffffffa820, charpos =3D 5889, nchars =3D 1, nbytes =3D 3, from =3D 2, to =3D 3, width =3D 1 }, char_to_display =3D 32, glyphless_method =3D GLYPHLESS_DISPLAY_THIN_SPACE, image_id =3D 0, xwidget =3D 0x0, slice =3D { x =3D XIL(0), y =3D XIL(0), width =3D XIL(0), height =3D XIL(0) }, space_width =3D XIL(0), voffset =3D 0, tab_width =3D 8, font_height =3D XIL(0), object =3D XIL(0x55555674fb45), position =3D { charpos =3D 5889, bytepos =3D 8747 }, truncation_pixel_width =3D 9, continuation_pixel_width =3D 0, first_visible_x =3D 0, last_visible_x =3D 720, last_visible_y =3D 646, extra_line_spacing =3D 0, max_extra_line_spacing =3D 0, override_ascent =3D -1, override_descent =3D 0, override_boff =3D 0, glyph_row =3D 0x0, area =3D TEXT_AREA, nglyphs =3D 1, pixel_width =3D 14, ascent =3D 19, descent =3D 9, max_ascent =3D 19, max_descent =3D 10, phys_ascent =3D 17, phys_descent =3D 7, max_phys_ascent =3D 17, max_phys_descent =3D 8, current_x =3D 177, wrap_prefix_width =3D 0, continuation_lines_width =3D 0, eol_pos =3D { charpos =3D 0, bytepos =3D 0 }, current_y =3D 0, first_vpos =3D 1, vpos =3D 0, hpos =3D 10, lnum =3D 0, lnum_bytepos =3D 0, lnum_width =3D 0, lnum_pixel_width =3D 0, pt_lnum =3D 0, stretch_adjust =3D 0, left_user_fringe_bitmap =3D 0, right_user_fringe_bitmap =3D 0, left_user_fringe_face_id =3D 0, right_user_fringe_face_id =3D 0, bidi_p =3D false, bidi_it =3D { bytepos =3D 0, charpos =3D 0, ch =3D 0, nchars =3D 0, ch_len =3D 0, type =3D UNKNOWN_BT, type_after_wn =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT, resolved_level =3D 0 '\000', isolate_level =3D 0 '\000', invalid_levels =3D 0, invalid_isolates =3D 0, prev =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, last_strong =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, next_for_neutral =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, prev_for_neutral =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, next_for_ws =3D { charpos =3D 0, type =3D UNKNOWN_BT, orig_type =3D UNKNOWN_BT }, bracket_pairing_pos =3D 0, bracket_enclosed_type =3D UNKNOWN_BT, next_en_pos =3D 0, next_en_type =3D UNKNOWN_BT, sos =3D NEUTRAL_DIR, scan_dir =3D 0, disp_pos =3D 0, disp_prop =3D 0, stack_idx =3D 0, level_stack =3D {{ next_for_neutral_pos =3D 0, next_for_neutral_type =3D 0, last_strong_type =3D 0, prev_for_neutral_type =3D 0, level =3D 0 '\000', flags =3D 0 '\000' } }, string =3D { lstring =3D XIL(0), s =3D 0x0, schars =3D 0, bufpos =3D 0, from_disp_str =3D false, unibyte =3D false }, w =3D 0x55555622dcd8, paragraph_dir =3D NEUTRAL_DIR, separator_limit =3D 0, first_elt =3D false, new_paragraph =3D false, frame_window_p =3D false }, paragraph_embedding =3D L2R, min_width_property =3D XIL(0), min_width_start =3D 0 } pt =3D { charpos =3D 5874, bytepos =3D 8704 } w =3D 0x55555622dcd8 lcols =3D make_fixnum(77) itdata =3D 0x0 count =3D { bytes =3D 1504 } #10 0x000055555584b363 in funcall_subr (subr=3D0x55555602c420 , numargs=3D1, args=3D0x7ffff1a004a0) at eval.c:3151 argbuf =3D {XIL(0x55555a959d73), XIL(0), XIL(0), XIL(0x5c0), XIL(0x= 7fffffffbc70), XIL(0x12558a8305), XIL(0x55555602c425), XIL(0x7fffffffbc90)} a =3D 0x7fffffffbc40 maxargs =3D 3 fun =3D make_fixnum(23456248930209) #11 0x00005555558a95f3 in exec_byte_code (fun=3DXIL(0x55555710f7d5), args_t= emplate=3D257, nargs=3D1, args=3D0x7ffff1a00438) at bytecode.c:813 call_nargs =3D 1 call_fun =3D XIL(0x55555602c425) count1 =3D { bytes =3D 1472 } val =3D make_fixnum(9) call_args =3D 0x7ffff1a004a0 original_fun =3D XIL(0x2aaa9c361bf8) op =3D 1 type =3D CATCHER targets =3D {0x5555558ad53d , 0x5555558ad565 = , 0x5555558ad567 , 0x5555558ad5= 69 , 0x5555558ad56b , 0x5555558= ad56b , 0x5555558ad5d0 , 0x5555= 558ad644 , 0x5555558a8d31 , 0x55= 55558a8d33 , 0x5555558a8d35 , 0x5= 555558a8d37 , 0x5555558a8d39 , 0x= 5555558a8d39 , 0x5555558a8d3f , 0= x5555558a8d00 , 0x5555558a9114 , = 0x5555558a9116 , 0x5555558a9118 ,= 0x5555558a911a , 0x5555558a911c = , 0x5555558a911c , 0x5555558a9151 , 0x5555558a9122 , 0x5555558a92fe , 0x5555558a9300 , 0x5555558a9302 , 0x5555558a9304 , 0x5555558a9306 , 0x5555558a9306 , 0x5555558a92b8 , 0x5555558a92cf , 0x5555558a93b4 , 0x5555558a93b6 , 0x5555558a93b8 , 0x5555558a93ba , 0x5555558a93bc , 0x5555558a93bc , 0x5555558a936e , 0x5555558a9385 , 0x5555558a9727 , 0x5555558a9729 , 0x5555558a972b , 0x5555558a972d , 0x5555558a972f , 0x5555558a972f , 0x5555558a96e1 , 0x5555558a96f8 , 0x5555558a9fc8 , 0x5555558a9dd0 , 0x5555558a9dc7 , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d <= exec_byte_code+19770>, 0x5555558ad53d , 0x5555558aa21= 0 , 0x5555558aa394 , 0x5555558aa4= 03 , 0x5555558aa470 , 0x5555558aa= 4df , 0x5555558a8f62 , 0x5555558a= 8ff1 , 0x5555558aa565 , 0x5555558= a8eab , 0x5555558a905c , 0x555555= 8aa5da , 0x5555558aa645 , 0x55555= 58aa690 , 0x5555558aa6fb , 0x5555= 558aa764 , 0x5555558aa853 , 0x555= 5558aa89e , 0x5555558aaa47 , 0x55= 55558aac17 , 0x5555558aac62 , 0x5= 555558aacad , 0x5555558aad18 , 0x= 5555558aad83 , 0x5555558aadee , 0= x5555558aae76 , 0x5555558aaec8 , = 0x5555558aaf1a , 0x5555558aafea , 0x5555558ab0fa , 0x5555558ab20a , 0x5555558ab30e , 0x5555558ab422 , 0x5555558ab536 , 0x5555558ab64a , 0x5555558ab75e , 0x5555558ab8f0 , 0x5555558aba01 , 0x5555558abb90 , 0x5555558abc59 , 0x5555558abd22 , 0x5555558ac1d9 , 0x5555558a9c41 = , 0x5555558ac237 , 0x5555558ac28= 2 , 0x5555558ac34d , 0x5555558a= c3ab , 0x5555558ac409 , 0x55555= 58ac454 , 0x5555558ac49a , 0x55= 55558ac4e0 , 0x5555558ac52e , 0= x5555558ad53d , 0x5555558ac589 = , 0x5555558ac5cf , 0x5555558ac615 , 0x5555558ac65b , 0x5555558ac6a1 , 0x5555558ac6e7 , 0x5555558a9c41 , 0x5555558ad53d , 0x5555558ac732 , 0x5555558ac785 , 0x5555558ac7d0 , 0x5555558ac81b , 0x5555558ac886 , 0x5555558ac8f1 , 0x5555558ac93c , 0x5555558ac987 , 0x5555558ac9f2= , 0x5555558aca5d , 0x5555558ac= ac8 , 0x5555558acb0e , 0x555555= 8ad53d , 0x5555558a9b8b , 0x5555= 558a9795 , 0x5555558a8e19 , 0x555= 5558a9837 , 0x5555558a98bb , 0x55= 55558a993c , 0x5555558a99bd , 0x5= 555558a9b54 , 0x5555558a9265 , 0x= 5555558a9c0a , 0x5555558a9c78 , 0= x5555558a9d0c , 0x5555558a9d55 , = 0x5555558aa014 , 0x5555558aa091 ,= 0x5555558aa119 , 0x5555558aa17f = , 0x5555558ad53d , 0x5555558acb59 , 0x5555558acbe1 , 0x5555558acc2c , 0x5555558acc77 , 0x5555558accc2 , 0x5555558acd0d , 0x5555558acd78 , 0x5555558acde3 , 0x5555558ace4e , 0x5555558aceb9 , 0x5555558ad052 , 0x5555558ad0bd , 0x5555558ad128 <= exec_byte_code+18725>, 0x5555558ad173 , 0x5555558ad27= 5 , 0x5555558ad377 , 0x5555558a= d3c2 , 0x5555558ad40d , 0x55555= 58abec8 , 0x5555558ac077 , 0x55= 55558ad45f , 0x5555558ad4ce , 0= x5555558ad53d , 0x5555558ad53d = , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d , 0x5555558aa7d5 , 0x5555558aaf6c , 0x5555558ac2cf , 0x5555558ad6d3 , 0x5555558ad748 , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad7da , 0x5555558ad861 , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d= , 0x5555558ad53d , 0x5555558ad= 53d , 0x5555558ad53d , 0x555555= 8ad53d , 0x5555558ad53d , 0x555= 5558ada1a } quitcounter =3D 86 'V' bc =3D 0x55555601f930 top =3D 0x7ffff1a00498 pc =3D 0x5555571118cf "\210l?\205\037" bytestr =3D XIL(0x555557111504) vector =3D XIL(0x55555710f79d) maxdepth =3D make_fixnum(4) const_length =3D 6 bytestr_length =3D 32 vectorp =3D 0x55555710f7a0 max_stack =3D 4 frame_base =3D 0x7ffff1a00490 fp =3D 0x7ffff1a004b0 bytestr_data =3D 0x5555571118b8 "\b\204\b" rest =3D false mandatory =3D 1 nonrest =3D 1 pushedargs =3D 1 saved_quitcounter =3D 20 '\024' saved_vectorp =3D 0x5555579c1258 saved_bytestr_data =3D 0x555557338888 "\211@\301\002A!\3022\205" result =3D XIL(0x48) #12 0x000055555584b978 in funcall_lambda (fun=3DXIL(0x55555634bc45), nargs= =3D0, arg_vector=3D0x7fffffffc2e8) at eval.c:3238 syms_left =3D make_fixnum(0) lexenv =3D XIL(0x7fffffffc2b0) count =3D { bytes =3D 72198331526267408 } i =3D 140737488339472 optional =3D false rest =3D false previous_rest =3D 85 val =3D XIL(0) #13 0x000055555584ad18 in funcall_general (fun=3DXIL(0x55555634bc45), numar= gs=3D0, args=3D0x7fffffffc2e8) at eval.c:3030 original_fun =3D XIL(0x55555634bc45) #14 0x000055555584afd9 in Ffuncall (nargs=3D1, args=3D0x7fffffffc2e0) at ev= al.c:3079 count =3D { bytes =3D 896 } val =3D XIL(0x5555571a4da0) #15 0x0000555555846298 in Ffuncall_with_delayed_message (timeout=3Dmake_fix= num(2), message=3DXIL(0x5555571b8b34), function=3DXIL(0x55555634bc45)) at e= val.c:1172 count =3D { bytes =3D 864 } interval =3D { tv_sec =3D 2, tv_nsec =3D 0 } timer =3D 0x55555629c1b0 result =3D XIL(0x4) #16 0x000055555584b363 in funcall_subr (subr=3D0x555556030920 , numargs=3D3, args=3D0x7ffff1a002b0) at eval.c:3151 argbuf =3D {XIL(0x1f2bfd730), XIL(0x30), XIL(0x555557060ce0), XIL(0= x340), XIL(0x7fffffffc380), XIL(0x12558a8305), XIL(0x555556030925), XIL(0x7= fffffffc3a0)} a =3D 0x7ffff1a002b0 maxargs =3D 3 fun =3D make_fixnum(23456248930209) #17 0x00005555558a95f3 in exec_byte_code (fun=3DXIL(0x7ffff24268bd), args_t= emplate=3D513, nargs=3D1, args=3D0x7ffff1a00368) at bytecode.c:813 call_nargs =3D 3 call_fun =3D XIL(0x555556030925) count1 =3D { bytes =3D 832 } val =3D XIL(0x55555634bc45) call_args =3D 0x7ffff1a002b0 original_fun =3D XIL(0x2aaa9c8c8d60) op =3D 3 type =3D CATCHER targets =3D {0x5555558ad53d , 0x5555558ad565 = , 0x5555558ad567 , 0x5555558ad5= 69 , 0x5555558ad56b , 0x5555558= ad56b , 0x5555558ad5d0 , 0x5555= 558ad644 , 0x5555558a8d31 , 0x55= 55558a8d33 , 0x5555558a8d35 , 0x5= 555558a8d37 , 0x5555558a8d39 , 0x= 5555558a8d39 , 0x5555558a8d3f , 0= x5555558a8d00 , 0x5555558a9114 , = 0x5555558a9116 , 0x5555558a9118 ,= 0x5555558a911a , 0x5555558a911c = , 0x5555558a911c , 0x5555558a9151 , 0x5555558a9122 , 0x5555558a92fe , 0x5555558a9300 , 0x5555558a9302 , 0x5555558a9304 , 0x5555558a9306 , 0x5555558a9306 , 0x5555558a92b8 , 0x5555558a92cf , 0x5555558a93b4 , 0x5555558a93b6 , 0x5555558a93b8 , 0x5555558a93ba , 0x5555558a93bc , 0x5555558a93bc , 0x5555558a936e , 0x5555558a9385 , 0x5555558a9727 , 0x5555558a9729 , 0x5555558a972b , 0x5555558a972d , 0x5555558a972f , 0x5555558a972f , 0x5555558a96e1 , 0x5555558a96f8 , 0x5555558a9fc8 , 0x5555558a9dd0 , 0x5555558a9dc7 , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d <= exec_byte_code+19770>, 0x5555558ad53d , 0x5555558aa21= 0 , 0x5555558aa394 , 0x5555558aa4= 03 , 0x5555558aa470 , 0x5555558aa= 4df , 0x5555558a8f62 , 0x5555558a= 8ff1 , 0x5555558aa565 , 0x5555558= a8eab , 0x5555558a905c , 0x555555= 8aa5da , 0x5555558aa645 , 0x55555= 58aa690 , 0x5555558aa6fb , 0x5555= 558aa764 , 0x5555558aa853 , 0x555= 5558aa89e , 0x5555558aaa47 , 0x55= 55558aac17 , 0x5555558aac62 , 0x5= 555558aacad , 0x5555558aad18 , 0x= 5555558aad83 , 0x5555558aadee , 0= x5555558aae76 , 0x5555558aaec8 , = 0x5555558aaf1a , 0x5555558aafea , 0x5555558ab0fa , 0x5555558ab20a , 0x5555558ab30e , 0x5555558ab422 , 0x5555558ab536 , 0x5555558ab64a , 0x5555558ab75e , 0x5555558ab8f0 , 0x5555558aba01 , 0x5555558abb90 , 0x5555558abc59 , 0x5555558abd22 , 0x5555558ac1d9 , 0x5555558a9c41 = , 0x5555558ac237 , 0x5555558ac28= 2 , 0x5555558ac34d , 0x5555558a= c3ab , 0x5555558ac409 , 0x55555= 58ac454 , 0x5555558ac49a , 0x55= 55558ac4e0 , 0x5555558ac52e , 0= x5555558ad53d , 0x5555558ac589 = , 0x5555558ac5cf , 0x5555558ac615 , 0x5555558ac65b , 0x5555558ac6a1 , 0x5555558ac6e7 , 0x5555558a9c41 , 0x5555558ad53d , 0x5555558ac732 , 0x5555558ac785 , 0x5555558ac7d0 , 0x5555558ac81b , 0x5555558ac886 , 0x5555558ac8f1 , 0x5555558ac93c , 0x5555558ac987 , 0x5555558ac9f2= , 0x5555558aca5d , 0x5555558ac= ac8 , 0x5555558acb0e , 0x555555= 8ad53d , 0x5555558a9b8b , 0x5555= 558a9795 , 0x5555558a8e19 , 0x555= 5558a9837 , 0x5555558a98bb , 0x55= 55558a993c , 0x5555558a99bd , 0x5= 555558a9b54 , 0x5555558a9265 , 0x= 5555558a9c0a , 0x5555558a9c78 , 0= x5555558a9d0c , 0x5555558a9d55 , = 0x5555558aa014 , 0x5555558aa091 ,= 0x5555558aa119 , 0x5555558aa17f = , 0x5555558ad53d , 0x5555558acb59 , 0x5555558acbe1 , 0x5555558acc2c , 0x5555558acc77 , 0x5555558accc2 , 0x5555558acd0d , 0x5555558acd78 , 0x5555558acde3 , 0x5555558ace4e , 0x5555558aceb9 , 0x5555558ad052 , 0x5555558ad0bd , 0x5555558ad128 <= exec_byte_code+18725>, 0x5555558ad173 , 0x5555558ad27= 5 , 0x5555558ad377 , 0x5555558a= d3c2 , 0x5555558ad40d , 0x55555= 58abec8 , 0x5555558ac077 , 0x55= 55558ad45f , 0x5555558ad4ce , 0= x5555558ad53d , 0x5555558ad53d = , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d , 0x5555558aa7d5 , 0x5555558aaf6c , 0x5555558ac2cf , 0x5555558ad6d3 , 0x5555558ad748 , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad7da , 0x5555558ad861 , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d= , 0x5555558ad53d , 0x5555558ad= 53d , 0x5555558ad53d , 0x555555= 8ad53d , 0x5555558ad53d , 0x555= 5558ada1a } quitcounter =3D 15 '\017' bc =3D 0x55555601f930 top =3D 0x7ffff1a002a8 pc =3D 0x5555571b8e5b "\210\002\203~" bytestr =3D XIL(0x7ffff2426904) vector =3D XIL(0x7ffff24268fd) maxdepth =3D make_fixnum(5) const_length =3D 0 bytestr_length =3D 22 vectorp =3D 0x5555571b79d8 max_stack =3D 5 frame_base =3D 0x7ffff1a003e8 fp =3D 0x7ffff1a00410 bytestr_data =3D 0x5555571b8de8 "\306\307!\204\n" rest =3D false mandatory =3D 1 nonrest =3D 2 pushedargs =3D 1 saved_quitcounter =3D 15 '\017' saved_vectorp =3D 0x5555571ba540 saved_bytestr_data =3D 0x5555571bdd78 "\30120" result =3D XIL(0) #18 0x000055555584b978 in funcall_lambda (fun=3DXIL(0x5555571b7735), nargs= =3D4, arg_vector=3D0x7fffffffc9d8) at eval.c:3238 syms_left =3D make_fixnum(1282) lexenv =3D XIL(0x7ffff25e5190) count =3D { bytes =3D 1542 } i =3D 140737488341280 optional =3D false rest =3D false previous_rest =3D 85 val =3D XIL(0) #19 0x000055555584ad18 in funcall_general (fun=3DXIL(0x5555571b7735), numar= gs=3D4, args=3D0x7fffffffc9d8) at eval.c:3030 original_fun =3D XIL(0xff0660) #20 0x000055555584afd9 in Ffuncall (nargs=3D5, args=3D0x7fffffffc9d0) at ev= al.c:3079 count =3D { bytes =3D 480 } val =3D XIL(0) #21 0x000055555584a474 in Fapply (nargs=3D2, args=3D0x7ffff1a00110) at eval= .c:2751 i =3D 5 funcall_nargs =3D 5 funcall_args =3D 0x7fffffffc9d0 spread_arg =3D XIL(0) fun =3D XIL(0x5555571b7735) sa_avail =3D 16344 sa_count =3D { bytes =3D 480 } numargs =3D 4 retval =3D XIL(0xd00000000) #22 0x000055555584b563 in funcall_subr (subr=3D0x555556030c20 , num= args=3D2, args=3D0x7ffff1a00110) at eval.c:3170 maxargs =3D -2 fun =3D make_fixnum(23456248930209) #23 0x00005555558a95f3 in exec_byte_code (fun=3DXIL(0x5555571ad805), args_t= emplate=3D771, nargs=3D3, args=3D0x7ffff1a00128) at bytecode.c:813 call_nargs =3D 2 call_fun =3D XIL(0x555556030c25) count1 =3D { bytes =3D 448 } val =3D XIL(0) call_args =3D 0x7ffff1a00110 original_fun =3D XIL(0x3e10) op =3D 2 type =3D 1454763048 targets =3D {0x5555558ad53d , 0x5555558ad565 = , 0x5555558ad567 , 0x5555558ad5= 69 , 0x5555558ad56b , 0x5555558= ad56b , 0x5555558ad5d0 , 0x5555= 558ad644 , 0x5555558a8d31 , 0x55= 55558a8d33 , 0x5555558a8d35 , 0x5= 555558a8d37 , 0x5555558a8d39 , 0x= 5555558a8d39 , 0x5555558a8d3f , 0= x5555558a8d00 , 0x5555558a9114 , = 0x5555558a9116 , 0x5555558a9118 ,= 0x5555558a911a , 0x5555558a911c = , 0x5555558a911c , 0x5555558a9151 , 0x5555558a9122 , 0x5555558a92fe , 0x5555558a9300 , 0x5555558a9302 , 0x5555558a9304 , 0x5555558a9306 , 0x5555558a9306 , 0x5555558a92b8 , 0x5555558a92cf , 0x5555558a93b4 , 0x5555558a93b6 , 0x5555558a93b8 , 0x5555558a93ba , 0x5555558a93bc , 0x5555558a93bc , 0x5555558a936e , 0x5555558a9385 , 0x5555558a9727 , 0x5555558a9729 , 0x5555558a972b , 0x5555558a972d , 0x5555558a972f , 0x5555558a972f , 0x5555558a96e1 , 0x5555558a96f8 , 0x5555558a9fc8 , 0x5555558a9dd0 , 0x5555558a9dc7 , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d <= exec_byte_code+19770>, 0x5555558ad53d , 0x5555558aa21= 0 , 0x5555558aa394 , 0x5555558aa4= 03 , 0x5555558aa470 , 0x5555558aa= 4df , 0x5555558a8f62 , 0x5555558a= 8ff1 , 0x5555558aa565 , 0x5555558= a8eab , 0x5555558a905c , 0x555555= 8aa5da , 0x5555558aa645 , 0x55555= 58aa690 , 0x5555558aa6fb , 0x5555= 558aa764 , 0x5555558aa853 , 0x555= 5558aa89e , 0x5555558aaa47 , 0x55= 55558aac17 , 0x5555558aac62 , 0x5= 555558aacad , 0x5555558aad18 , 0x= 5555558aad83 , 0x5555558aadee , 0= x5555558aae76 , 0x5555558aaec8 , = 0x5555558aaf1a , 0x5555558aafea , 0x5555558ab0fa , 0x5555558ab20a , 0x5555558ab30e , 0x5555558ab422 , 0x5555558ab536 , 0x5555558ab64a , 0x5555558ab75e , 0x5555558ab8f0 , 0x5555558aba01 , 0x5555558abb90 , 0x5555558abc59 , 0x5555558abd22 , 0x5555558ac1d9 , 0x5555558a9c41 = , 0x5555558ac237 , 0x5555558ac28= 2 , 0x5555558ac34d , 0x5555558a= c3ab , 0x5555558ac409 , 0x55555= 58ac454 , 0x5555558ac49a , 0x55= 55558ac4e0 , 0x5555558ac52e , 0= x5555558ad53d , 0x5555558ac589 = , 0x5555558ac5cf , 0x5555558ac615 , 0x5555558ac65b , 0x5555558ac6a1 , 0x5555558ac6e7 , 0x5555558a9c41 , 0x5555558ad53d , 0x5555558ac732 , 0x5555558ac785 , 0x5555558ac7d0 , 0x5555558ac81b , 0x5555558ac886 , 0x5555558ac8f1 , 0x5555558ac93c , 0x5555558ac987 , 0x5555558ac9f2= , 0x5555558aca5d , 0x5555558ac= ac8 , 0x5555558acb0e , 0x555555= 8ad53d , 0x5555558a9b8b , 0x5555= 558a9795 , 0x5555558a8e19 , 0x555= 5558a9837 , 0x5555558a98bb , 0x55= 55558a993c , 0x5555558a99bd , 0x5= 555558a9b54 , 0x5555558a9265 , 0x= 5555558a9c0a , 0x5555558a9c78 , 0= x5555558a9d0c , 0x5555558a9d55 , = 0x5555558aa014 , 0x5555558aa091 ,= 0x5555558aa119 , 0x5555558aa17f = , 0x5555558ad53d , 0x5555558acb59 , 0x5555558acbe1 , 0x5555558acc2c , 0x5555558acc77 , 0x5555558accc2 , 0x5555558acd0d , 0x5555558acd78 , 0x5555558acde3 , 0x5555558ace4e , 0x5555558aceb9 , 0x5555558ad052 , 0x5555558ad0bd , 0x5555558ad128 <= exec_byte_code+18725>, 0x5555558ad173 , 0x5555558ad27= 5 , 0x5555558ad377 , 0x5555558a= d3c2 , 0x5555558ad40d , 0x55555= 58abec8 , 0x5555558ac077 , 0x55= 55558ad45f , 0x5555558ad4ce , 0= x5555558ad53d , 0x5555558ad53d = , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d , 0x5555558aa7d5 , 0x5555558aaf6c , 0x5555558ac2cf , 0x5555558ad6d3 , 0x5555558ad748 , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad7da , 0x5555558ad861 , 0x5555558ad53d , 0x5555558ad53d , 0x5555558ad53d= , 0x5555558ad53d , 0x5555558ad= 53d , 0x5555558ad53d , 0x555555= 8ad53d , 0x5555558ad53d , 0x555= 5558ada1a } quitcounter =3D 3 '\003' bc =3D 0x55555601f930 top =3D 0x7ffff1a00108 pc =3D 0x555557261f64 "\207" bytestr =3D XIL(0x5555571bc9e4) vector =3D XIL(0x5555571ad77d) maxdepth =3D make_fixnum(10) const_length =3D 16 bytestr_length =3D 63 vectorp =3D 0x5555570f6060 max_stack =3D 10 frame_base =3D 0x7ffff1a00168 fp =3D 0x7ffff1a001b8 bytestr_data =3D 0x555557261ef8 "\305\b\306\001!\t>\204\021" rest =3D false mandatory =3D 3 nonrest =3D 3 pushedargs =3D 3 saved_quitcounter =3D 0 '\000' saved_vectorp =3D 0x7fffffffcf60 saved_bytestr_data =3D 0x7ffff2bfd700 "\001" result =3D XIL(0x55555581e941) #24 0x000055555584b978 in funcall_lambda (fun=3DXIL(0x55555710c3bd), nargs= =3D2, arg_vector=3D0x7fffffffd138) at eval.c:3238 syms_left =3D make_fixnum(514) lexenv =3D XIL(0x555556b5ec2d) count =3D { bytes =3D 93825004188672 } i =3D 140737488343168 optional =3D false rest =3D false previous_rest =3D 85 val =3D XIL(0) #25 0x000055555584ad18 in funcall_general (fun=3DXIL(0x55555710c3bd), numar= gs=3D2, args=3D0x7fffffffd138) at eval.c:3030 original_fun =3D XIL(0x11b1fc0) #26 0x000055555584afd9 in Ffuncall (nargs=3D3, args=3D0x7fffffffd130) at ev= al.c:3079 count =3D { bytes =3D 320 } val =3D XIL(0) #27 0x000055555584a474 in Fapply (nargs=3D2, args=3D0x7fffffffd1f0) at eval= .c:2751 i =3D 3 funcall_nargs =3D 3 funcall_args =3D 0x7fffffffd130 spread_arg =3D XIL(0) fun =3D XIL(0x55555710c3bd) sa_avail =3D 16360 sa_count =3D { bytes =3D 320 } numargs =3D 2 retval =3D XIL(0x55555612dea0) #28 0x000055555584aa24 in apply1 (fn=3DXIL(0x11b1fc0), arg=3DXIL(0x5555566c= 05a3)) at eval.c:2967 #29 0x00005555558be3ad in read_process_output_call (fun_and_args=3DXIL(0x55= 55566c03e3)) at process.c:6133 #30 0x00005555558471d8 in internal_condition_case_1 (bfun=3D0x5555558be373 = , arg=3DXIL(0x5555566c03e3), handlers=3DXIL(0x90)= , hfun=3D0x5555558be3b3 ) at eval.c:1631 val =3D XIL(0x555558b069c4) c =3D 0x55555616eb60 #31 0x00005555558bf63b in read_and_dispose_of_process_output (p=3D0x5555571= c8708, chars=3D0x555558b19b00 "\\\303\"\"\366\241F\245+M\256\266\351y9\2677= =3D\227;\364\327W|W\221\237=D7=95M\037xKy\331\377)\177\234\303-}\315\322\02= 2x%\301\370\351S\020e\230\371\253\312\371MKHJ\362\301#\261\314\346\035\315R= \222h\342\354uKf\225O&\327-Y\201:[\353{}\217!stj\0226\377bNB\242", nbytes= =3D1169, coding=3D0x55555612dea0) at process.c:6502 outstream =3D XIL(0x11b1fc0) text =3D XIL(0x555558b069c4) outer_running_asynch_code =3D false waiting =3D -1 #32 0x00005555558be94c in read_process_output (proc=3DXIL(0x5555571c870d), = channel=3D11) at process.c:6270 nbytes =3D 1169 p =3D 0x5555571c8708 coding =3D 0x55555612dea0 carryover =3D 0 readmax =3D 65536 count =3D { bytes =3D 192 } odeactivate =3D XIL(0) chars =3D 0x555558b19b00 "\\\303\"\"\366\241F\245+M\256\266\351y9\2= 677=3D\227;\364\327W|W\221\237=D7=95M\037xKy\331\377)\177\234\303-}\315\322= \022x%\301\370\351S\020e\230\371\253\312\371MKHJ\362\301#\261\314\346\035\3= 15R\222h\342\354uKf\225O&\327-Y\201:[\353{}\217!stj\0226\377bNB\242" sa_avail =3D 16384 sa_count =3D { bytes =3D 192 } #33 0x00005555558bdb47 in wait_reading_process_output (time_limit=3D30, nse= cs=3D0, read_kbd=3D-1, do_display=3Dtrue, wait_for_cell=3DXIL(0), wait_proc= =3D0x0, just_wait_proc=3D0) at process.c:5951 nread =3D 8192 process_skipped =3D false wrapped =3D true channel_start =3D 12 child_fd =3D 14 last_read_channel =3D 11 channel =3D 11 nfds =3D 1 Available =3D { fds_bits =3D {2048, 0 } } Writeok =3D { fds_bits =3D {0 } } check_write =3D true check_delay =3D 0 no_avail =3D false xerrno =3D 11 proc =3D XIL(0x5555571c870d) timeout =3D { tv_sec =3D 0, tv_nsec =3D 9051247 } end_time =3D { tv_sec =3D 1730986587, tv_nsec =3D 189821471 } timer_delay =3D { tv_sec =3D 0, tv_nsec =3D 9051247 } got_output_end_time =3D { tv_sec =3D 1730986557, tv_nsec =3D 690698014 } wait =3D TIMEOUT got_some_output =3D 16384 prev_wait_proc_nbytes_read =3D 0 retry_for_async =3D false count =3D { bytes =3D 160 } now =3D { tv_sec =3D 0, tv_nsec =3D -1 } #34 0x00005555555ae650 in sit_for (timeout=3Dmake_fixnum(30), reading=3Dtru= e, display_option=3D1) at dispnew.c:6335 sec =3D 30 nsec =3D 0 do_display =3D true curbuf_eq_winbuf =3D true nbytes =3D 21845 #35 0x000055555576cac4 in read_char (commandflag=3D1, map=3DXIL(0x55555a924= 213), prev_event=3DXIL(0), used_mouse_menu=3D0x7fffffffdc7f, end_time=3D0x0= ) at keyboard.c:2926 tem0 =3D XIL(0xad40) timeout =3D 30 count1 =3D { bytes =3D 128 } delay_level =3D 4 buffer_size =3D 1 c =3D XIL(0) local_getcjmp =3D {{ __jmpbuf =3D {0, -3140284887290424714, 0, 140737488348288, 1407= 37354125312, 93824997286264, -3140284887409962378, -9133824947898494346}, __mask_was_saved =3D 0, __saved_mask =3D { __val =3D {93824995061567, 93825004144416, 0, 0, 0, 938249945= 43679, 0, 140737488345984, 93824994567958, 0, 48, 93824995158337, 938250801= 15731, 140737488345888, 93824995043671, 140737266045088} } }} save_jump =3D {{ __jmpbuf =3D {0, 0, 0, 0, 0, 0, 0, 0}, __mask_was_saved =3D 0, __saved_mask =3D { __val =3D {0 } } }} tem =3D XIL(0x7fffffffd990) save =3D XIL(0x55555674fb45) previous_echo_area_message =3D XIL(0) also_record =3D XIL(0) reread =3D false recorded =3D false polling_stopped_here =3D false orig_kboard =3D 0x555556186490 jmpcount =3D { bytes =3D 128 } c_volatile =3D XIL(0) #36 0x0000555555780075 in read_key_sequence (keybuf=3D0x7fffffffde30, promp= t=3DXIL(0), dont_downcase_last=3Dfalse, can_return_switch_frame=3Dtrue, fix= _current_buffer=3Dtrue, prevent_redisplay=3Dfalse, disable_text_conversion_= p=3Dfalse) at keyboard.c:10747 interrupted_kboard =3D 0x555556186490 interrupted_frame =3D 0x55555622da20 key =3D XIL(0x7fffffffdcc0) used_mouse_menu =3D false echo_local_start =3D 0 last_real_key_start =3D 0 keys_local_start =3D 0 new_binding =3D XIL(0x7fffffffe480) count =3D { bytes =3D 96 } t =3D 0 echo_start =3D 0 keys_start =3D 0 current_binding =3D XIL(0x55555a924213) first_unbound =3D 31 mock_input =3D 0 used_mouse_menu_history =3D {false } fkey =3D { parent =3D XIL(0x7ffff4f47723), map =3D XIL(0x7ffff4f47723), start =3D 0, end =3D 0 } keytran =3D { parent =3D XIL(0x7ffff2bd1d7b), map =3D XIL(0x7ffff2bd1d7b), start =3D 0, end =3D 0 } indec =3D { parent =3D XIL(0x7ffff4f47713), map =3D XIL(0x7ffff4f47713), start =3D 0, end =3D 0 } shift_translated =3D false delayed_switch_frame =3D XIL(0) original_uppercase =3D XIL(0) original_uppercase_position =3D -1 disabled_conversion =3D false starting_buffer =3D 0x55555674fb40 fake_prefixed_keys =3D XIL(0) first_event =3D XIL(0) second_event =3D XIL(0) #37 0x0000555555768380 in command_loop_1 () at keyboard.c:1424 cmd =3D XIL(0x78550) keybuf =3D {XIL(0x555557ebb963), make_fixnum(134217847), XIL(0x7fff= ffffdec0), XIL(0x555555824d93), XIL(0x200000080), XIL(0), XIL(0), XIL(0xb31= 0), XIL(0x7fffffffdee0), XIL(0x7ffff2bfd750), XIL(0x5555560b0720), XIL(0xb3= 10), XIL(0x5555560b0720), XIL(0x7ffff270f0c0), XIL(0), XIL(0x5555560bba30),= XIL(0x55555581e941), XIL(0), XIL(0x7fffffffdf50), XIL(0x555555825908), XIL= (0x7ffff270f0c5), XIL(0x2ffffde70), XIL(0), XIL(0xb310), XIL(0x7ffff2bfd750= ), XIL(0x7ffff2bdc1ab), XIL(0x7ffff296e393), XIL(0x7ffff2bfd750), XIL(0x7ff= fffffdf90), XIL(0xb310)} i =3D 1 last_pt =3D 4105 prev_modiff =3D 8517 prev_buffer =3D 0x55555674fb40 #38 0x00005555558470f7 in internal_condition_case (bfun=3D0x555555767f51 , handlers=3DXIL(0x90), hfun=3D0x5555557673d2 ) at= eval.c:1607 val =3D XIL(0x12330) c =3D 0x55555616ea20 #39 0x0000555555767b18 in command_loop_2 (handlers=3DXIL(0x90)) at keyboard= .c:1163 val =3D XIL(0x12330) #40 0x000055555584654d in internal_catch (tag=3DXIL(0x12330), func=3D0x5555= 55767aee , arg=3DXIL(0x90)) at eval.c:1286 val =3D XIL(0x5555557641bb) c =3D 0x55555616e8e0 #41 0x0000555555767aaa in command_loop () at keyboard.c:1141 #42 0x0000555555766e74 in recursive_edit_1 () at keyboard.c:749 count =3D { bytes =3D 32 } val =3D XIL(0x7fffffffe1b0) #43 0x00005555557670a0 in Frecursive_edit () at keyboard.c:832 count =3D { bytes =3D 0 } buffer =3D XIL(0) #44 0x0000555555762937 in main (argc=3D2, argv=3D0x7fffffffe468) at emacs.c= :2625 stack_bottom_variable =3D 0x0 old_argc =3D 2 dump_file =3D 0x0 no_loadup =3D false junk =3D 0x0 dname_arg =3D 0x0 ch_to_dir =3D 0x0 original_pwd =3D 0x0 dump_mode =3D 0x0 skip_args =3D 0 temacs =3D 0x0 attempt_load_pdump =3D true only_version =3D false rlim =3D { rlim_cur =3D 10022912, rlim_max =3D 18446744073709551615 } lc_all =3D 0x0 sockfd =3D -1 module_assertions =3D false Lisp Backtrace: "vertical-motion" (0xf1a004a0) "shr-vertical-motion" (0xf1a00430) "shr-fill-line" (0xf1a003e0) "shr-fill-lines" (0xf1a00398) "shr-insert-document" (0xf1a00308) 0x5634bc40 PVEC_CLOSURE "funcall-with-delayed-message" (0xf1a002b0) "eww-display-document" (0xf1a00240) "eww-display-html" (0xf1a001b8) "eww-render" (0xffffc9d8) "apply" (0xf1a00110) "url-http-activate-callback" (0xf1a000b0) "url-http-content-length-after-change-function" (0xf1a00050) "url-http-generic-filter" (0xffffd138) (gdb)=20 From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 07 Nov 2024 14:44:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: dev@real-or-random.org, xuan@xlk.me, mituharu@math.s.chiba-u.ac.jp, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.17309905939865 (code B ref 73752); Thu, 07 Nov 2024 14:44:01 +0000 Received: (at 73752) by debbugs.gnu.org; 7 Nov 2024 14:43:13 +0000 Received: from localhost ([127.0.0.1]:47656 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t93j7-0002Z3-8v for submit@debbugs.gnu.org; Thu, 07 Nov 2024 09:43:13 -0500 Received: from eggs.gnu.org ([209.51.188.92]:44286) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t93j5-0002Ym-3q for 73752@debbugs.gnu.org; Thu, 07 Nov 2024 09:43:12 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t93gs-0000cq-Ei; Thu, 07 Nov 2024 09:40:54 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=CfkFPnpvPF7Q+Jt2WRCsiw8hhu4RIBKVs4hEs8V7mmw=; b=VSwMpA/OfxMS9vJ7XjYu kJjj92pzdb0FVOg7zJoFs0WwoswDTYkmdVXGxGO4ozGn/N2J33pBU+PNTH3oV3B/cjporYMJM64WJ f2/l/csEf7QRalBX+xnsXiRa8ok1OxJD5TCqLdy1vblKR8ahTgPoYf4kZLQwOz9OEmc5Em+1bI92F XesfxsmKfiK0nDcx+ev9FHlGbmhCzyhS6Thrj1AdvWXwCKDWzFEQ63M8UPbqE7Th8Zhe8Age9+xBA klo/hgjAqZF4ebSNifg+vCMuI+5F6euMkxopVuuiEJ1PjQvvNAB49HtNVk7Wr5YRlDRT/4H1dPZL7 IT6lr8iv8qD37w==; Date: Thu, 07 Nov 2024 16:40:49 +0200 Message-Id: <86ttcjp0ni.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87a5ebuphh.fsf@gmail.com> (message from Visuwesh on Thu, 07 Nov 2024 19:15:30 +0530) References: <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> <86ikt0se1l.fsf@gnu.org> <86msibr0b7.fsf@gnu.org> <87a5ebuphh.fsf@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Visuwesh > Cc: Tim Ruffing , mituharu@math.s.chiba-u.ac.jp, > xuan@xlk.me, 73752@debbugs.gnu.org > Date: Thu, 07 Nov 2024 19:15:30 +0530 > > [வியாழன் நவம்பர் 07, 2024] Eli Zaretskii wrote: > > >> From: Tim Ruffing > >> Cc: mituharu@math.s.chiba-u.ac.jp, visuweshm@gmail.com, xuan@xlk.me, > >> 73752@debbugs.gnu.org > >> Date: Thu, 07 Nov 2024 03:12:19 +0100 > >> > >> On Wed, 2024-11-06 at 15:11 +0200, Eli Zaretskii wrote: > >> > > >> > > >> > Thanks.  Can you try calling hb_font_destroy in > >> > ftcrhbfont_end_hb_font > >> > and setting ftcrfont_info->hb_font to NULL right after that?  If that > >> > solves the problem, we could at least install this for now, until we > >> > have a better solution (if one exists). > >> > >> Yes, that appears to work. And I don't think there's an obvious better > >> solution. See attached patch. > > > > Thanks. Visuwesh, does this patch fix your problem as well? > > I cannot reproduce the original issue but it leads to following > backtrace when I visit dinamalar.com in eww, and click on any of the > links coloured in blue: say the one under the heading named "வாராவாரம்". > Directly visiting a link doesn't produce the backtrace though. I need > to visit a webpage with Tamil text on it twice to trigger it. It might > well be a false warning since I see the warning > > Warning: program compiled against libxml 212 using older 209 > Warning: program compiled against libxml 212 using older 209 > > in stderr printed. I updated my system (kernel updates included) but > haven't restarted it yet. Of course, I built Emacs _after_ the update. > If you want me to restart and check if you believe it is a false > warning, I am to do so. Maybe a `make bootstrap' or somesuch is also in > order? This abort is unrelated: I also get it, with no changes at all, and also in Emacs 30. It looks like we fail to decode the text there, and a buffer ends up with an invalid byte sequence, which triggers an assertion violation. Please open a separate bug report about that. As for this bug, I will install the patch soon, thanks to all for the efforts to investigate this tricky bug. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 07 Nov 2024 15:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: dev@real-or-random.org, xuan@xlk.me, mituharu@math.s.chiba-u.ac.jp, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173099248916597 (code B ref 73752); Thu, 07 Nov 2024 15:15:02 +0000 Received: (at 73752) by debbugs.gnu.org; 7 Nov 2024 15:14:49 +0000 Received: from localhost ([127.0.0.1]:49245 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t94Dg-0004Jc-HL for submit@debbugs.gnu.org; Thu, 07 Nov 2024 10:14:48 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:44171) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t94De-0004JN-8i for 73752@debbugs.gnu.org; Thu, 07 Nov 2024 10:14:47 -0500 Received: by mail-pg1-f195.google.com with SMTP id 41be03b00d2f7-7cd8803fe0aso800308a12.0 for <73752@debbugs.gnu.org>; Thu, 07 Nov 2024 07:14:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730992420; x=1731597220; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:message-id:references :in-reply-to:user-agent:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to; bh=jvAPeWjCnUG8SwNiicdmfy/2asVI/6EZZwB7MfMRml8=; b=PeBtl8y0M9Y7OM7WJ6jHAI6PA0spKg1SsDhf8p1tEUFRBZcTtIhbTSrKfyVuLbSW07 enoRKkzbn6aw0fOva4+XotxLw+nwWWHsfNKierS3Ojv+Rt3g5aF17UkkV8D5wXA9vhxH 8TakTgez2WXLanaaBRVwVCO3ntCj+JGWPMK1Kwolneo+0EXr3h2UoV/scTF6e3rmcunk LJ462mRH1gUsUc0KycS+iT0le7qjsUy9jvxIE0e6LoQAdL/RbxAKnDeeR+TM+hrDhu6u 6WUM9J8D9Y2AzPnIWCtRa65EvsfwfFmjghYyXs31K7mf9jK7d/l6FMpFiFRbU0kru4I0 vuqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730992420; x=1731597220; h=content-transfer-encoding:mime-version:message-id:references :in-reply-to:user-agent:subject:cc:to:from:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=jvAPeWjCnUG8SwNiicdmfy/2asVI/6EZZwB7MfMRml8=; b=K68bHk97PReFpLgkLn4lUqqAB3rq7yf8WfsTx+wsIh7440dXJnbxhq7s8qFfLuspx+ 5f5JMAPx9jcU0yl1LVEbjVSi3U1HxYXiLc7sRMnS66s8Vu+1/XmmjIwCaQ2ojZlkNhtB pVjiR+1p+Yrt8j8MFlapsJM+S8nWQ9eeZOFnYzMFk6OkBbx2X5dpx0FzvmyVBXxWOL/0 TOevsz+KHmzF8JxLKJWN8+xKd9MjR48D7bcdrjT+OxZ8BSDRng460oCVOoJ8IXvHjcEI 2WSFyJLYdwmA4vR6cxfZM7C4g89KNUU4cm4KYDWpKT0TJ64s3P7cKpV8MYEZ8lLA7x9y tvPg== X-Forwarded-Encrypted: i=1; AJvYcCVKtzu49BKQXCY6n75M+0UoYC4MWE4dfBJY+jzH3l6aCa/aWMJWSUTFxlgJNTwHZ1TS3OBaDA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzZVuV+20q1AnI3EQJoWk5LfiDXq8l1UuFQf40czPhw/fqky/Ve BoDUAtnaiHnR5jRaxhT4hxXKaQbL6/Erd8bXxHkCVo1rg3sEQfhr X-Google-Smtp-Source: AGHT+IGviD/GJ6m4fAVR6B3R7LH/OehE7e07QVTDnWNkPEXQG9vfB1d30sSPAEd76MGMPk6ZQ2LSxQ== X-Received: by 2002:a05:6a21:3e0c:b0:1dc:154a:63a5 with SMTP id adf61e73a8af0-1dc1e3fcb16mr441340637.27.1730992420218; Thu, 07 Nov 2024 07:13:40 -0800 (PST) Received: from [127.0.0.1] ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-7f41f644214sm1515167a12.58.2024.11.07.07.13.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 07 Nov 2024 07:13:39 -0800 (PST) Date: Thu, 07 Nov 2024 20:43:32 +0530 From: Visuwesh User-Agent: K-9 Mail for Android In-Reply-To: <86ttcjp0ni.fsf@gnu.org> References: <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> <86ikt0se1l.fsf@gnu.org> <86msibr0b7.fsf@gnu.org> <87a5ebuphh.fsf@gmail.com> <86ttcjp0ni.fsf@gnu.org> Message-ID: <2AD4A7E0-5A80-4512-BA80-D2FCE7E7F318@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 7 November 2024 20:10:49 GMT+05:30, Eli Zaretskii wrot= e: >> From: Visuwesh >> Cc: Tim Ruffing , mituharu@math=2Es=2Echiba-= u=2Eac=2Ejp, >> xuan@xlk=2Eme, 73752@debbugs=2Egnu=2Eorg >> Date: Thu, 07 Nov 2024 19:15:30 +0530 >>=20 >> [=E0=AE=B5=E0=AE=BF=E0=AE=AF=E0=AE=BE=E0=AE=B4=E0=AE=A9=E0=AF=8D =E0=AE= =A8=E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AE=B0=E0=AF=8D 07, 2024] Eli Zar= etskii wrote: >>=20 >> >> From: Tim Ruffing >> >> Cc: mituharu@math=2Es=2Echiba-u=2Eac=2Ejp, visuweshm@gmail=2Ecom, xu= an@xlk=2Eme,=20 >> >> 73752@debbugs=2Egnu=2Eorg >> >> Date: Thu, 07 Nov 2024 03:12:19 +0100 >> >>=20 >> >> On Wed, 2024-11-06 at 15:11 +0200, Eli Zaretskii wrote: >> >> >=20 >> >> >=20 >> >> > Thanks=2E=C2=A0 Can you try calling hb_font_destroy in >> >> > ftcrhbfont_end_hb_font >> >> > and setting ftcrfont_info->hb_font to NULL right after that?=C2=A0= If that >> >> > solves the problem, we could at least install this for now, until = we >> >> > have a better solution (if one exists)=2E >> >>=20 >> >> Yes, that appears to work=2E And I don't think there's an obvious be= tter >> >> solution=2E See attached patch=2E >> > >> > Thanks=2E Visuwesh, does this patch fix your problem as well? >>=20 >> I cannot reproduce the original issue but it leads to following >> backtrace when I visit dinamalar=2Ecom in eww, and click on any of the >> links coloured in blue: say the one under the heading named "=E0=AE=B5= =E0=AE=BE=E0=AE=B0=E0=AE=BE=E0=AE=B5=E0=AE=BE=E0=AE=B0=E0=AE=AE=E0=AF=8D"= =2E >> Directly visiting a link doesn't produce the backtrace though=2E I nee= d >> to visit a webpage with Tamil text on it twice to trigger it=2E It mig= ht >> well be a false warning since I see the warning >>=20 >> Warning: program compiled against libxml 212 using older 209 >> Warning: program compiled against libxml 212 using older 209 >>=20 >> in stderr printed=2E I updated my system (kernel updates included) but >> haven't restarted it yet=2E Of course, I built Emacs _after_ the updat= e=2E >> If you want me to restart and check if you believe it is a false >> warning, I am to do so=2E Maybe a `make bootstrap' or somesuch is also= in >> order? > >This abort is unrelated: I also get it, with no changes at all, and >also in Emacs 30=2E It looks like we fail to decode the text there, and >a buffer ends up with an invalid byte sequence, which triggers an >assertion violation=2E Please open a separate bug report about that=2E Okay will do so=2E >As for this bug, I will install the patch soon,=20 I would dare to merge bug#54646 with this when you close the bug since I'm= confident they both have the same underlying cause=2E >thanks to all for the efforts to investigate this tricky bug=2E Thank you very much Tim for your investigation! This was a paper cut that= annoyed me to no end when I was viewing composed Tamil text which forced m= e to abandon reading Tamil text altogether inside Emacs=2E From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 07 Nov 2024 15:50:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Visuwesh Cc: dev@real-or-random.org, xuan@xlk.me, mituharu@math.s.chiba-u.ac.jp, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173099455622458 (code B ref 73752); Thu, 07 Nov 2024 15:50:02 +0000 Received: (at 73752) by debbugs.gnu.org; 7 Nov 2024 15:49:16 +0000 Received: from localhost ([127.0.0.1]:49279 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t94l2-0005qA-BB for submit@debbugs.gnu.org; Thu, 07 Nov 2024 10:49:16 -0500 Received: from eggs.gnu.org ([209.51.188.92]:44566) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t94kz-0005pt-7L for 73752@debbugs.gnu.org; Thu, 07 Nov 2024 10:49:14 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t94ks-0004kN-Ad; Thu, 07 Nov 2024 10:49:06 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=uChO2cvY+jQ0jABA7HMRGippeCzaXWkSG8CozyKdh1I=; b=Qo4T+yffOi7B WTlPDFJFR2Id7Dh1DAJnkgC0aQrMw+M3lE4OyQiwQf1NOIXmMkxHOuvR39aneg99VtYCi0oYwT7gY kG781c03iOciIcZkv3PGm2XoTRGaUQsJJFrspneSNKVFSikP2znvp2J2KATJWBvlT7P4GZE3g0m1B A95E50HEod0KlW6ZX1zwnaXAM9LTBW+yDrxKrvBe7eMpLyCP9H+eiGVNqi2CCiBIgXF+qkz7LovwW dDRTiQwIxBV19FjQCw86AgNQ6ZUXLSCzzA6x8oWkwv0KTpeTT4+Z5+Hsca1NTTgsXUPTj0ksY8Ffi ko7dfznU2/V6RmOh6wNNaQ==; Date: Thu, 07 Nov 2024 17:49:01 +0200 Message-Id: <86pln7oxhu.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <2AD4A7E0-5A80-4512-BA80-D2FCE7E7F318@gmail.com> (message from Visuwesh on Thu, 07 Nov 2024 20:43:32 +0530) References: <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> <86ikt0se1l.fsf@gnu.org> <86msibr0b7.fsf@gnu.org> <87a5ebuphh.fsf@gmail.com> <86ttcjp0ni.fsf@gnu.org> <2AD4A7E0-5A80-4512-BA80-D2FCE7E7F318@gmail.com> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Thu, 07 Nov 2024 20:43:32 +0530 > From: Visuwesh > CC: dev@real-or-random.org, mituharu@math.s.chiba-u.ac.jp, xuan@xlk.me, > 73752@debbugs.gnu.org > > > >As for this bug, I will install the patch soon, > > I would dare to merge bug#54646 with this when you close the bug since I'm confident they both have the same underlying cause. Does this mean you no longer see the problems in bug#54646 with this patch? From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Visuwesh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 07 Nov 2024 16:03:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: dev@real-or-random.org, mituharu@math.s.chiba-u.ac.jp, xuan@xlk.me, 73752@debbugs.gnu.org Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173099532424862 (code B ref 73752); Thu, 07 Nov 2024 16:03:01 +0000 Received: (at 73752) by debbugs.gnu.org; 7 Nov 2024 16:02:04 +0000 Received: from localhost ([127.0.0.1]:49310 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t94xP-0006Sv-Qp for submit@debbugs.gnu.org; Thu, 07 Nov 2024 11:02:04 -0500 Received: from mail-pl1-f196.google.com ([209.85.214.196]:44463) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t94xN-0006SU-JK for 73752@debbugs.gnu.org; Thu, 07 Nov 2024 11:02:02 -0500 Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-20cdbe608b3so12296235ad.1 for <73752@debbugs.gnu.org>; Thu, 07 Nov 2024 08:02:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730995260; x=1731600060; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1Q8MwYRUpm+oWB8HiME5nbbpQQNvQBKuJ+lIAHwD3To=; b=db5tS8imVw3es3gx/DkAKM0HpVjij946JqNg3kuPgjm0R81w2cHiUu9oRvFm0AuLUw F+XdMBvq8+dNf0isVyjuLdpCgpNE5mvyapMIaFhawJ8/u2aRzuhdNa2tSXTC7cWwko/i ulmcYncTwSkDG0q6xqtiuszGYylArAPedZtHEcn+l5kmvkFGCxWere9MLZIWRv35qC4/ DR2IEcAm6wzYZksM/8f7QuF56ozc+xK1mJm8OKY0XxHIGowtRNQnNNaRxKBf781B7y+3 958+OdPSBbi95ButbJhSCK9ZVhE89qm5vAPj2HN0KH4GmQHyb3vNYIQJRm1PTD3ZERVd lwZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730995260; x=1731600060; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=1Q8MwYRUpm+oWB8HiME5nbbpQQNvQBKuJ+lIAHwD3To=; b=YlCc6YqLYkED6Rl3s2p87vraR+ThZslBD85ZiFlnnEleEU4gZAZtH0Os0OyriKkaqE tB04ii02oEzMzCKOVfU1cAk/MP73qao5zOLGZgh1P0J20FbO15NmTewu8y039IDfjhUP RMesb8kcaPPz+r82OGAiL3OFZqao1ahtlWYR4/douMZpeJNnKst8k6pe1NNtr4M8z79n OTNVOsENk40NyLPp8ojDlPH5SBrqARvnO5WatDK8jZxSu4emzCvVafdtl1N5eIp2apYJ ZBDDkYsvZ+T4I5CWQdNArO4pI4dAIA3vrIDoeFjMvOhLlrvjrsFjY0uBw9o2/bCLfT+H Kznw== X-Forwarded-Encrypted: i=1; AJvYcCVfIYs3YKSqJxLc/ZBQ3APRu9GYVHPtStwcckS2sv0HZx9TUrQkYmBcabOXe3E8t1yir76uRQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yx71VN3hVrQxoV82ODluhfFNO7kma5Ub104su69oQKdK71uXAbg NfUpk00x4ssDsoN0kudIm/mMnjqNipafkCqr2czIuAniAuM+OhhE X-Google-Smtp-Source: AGHT+IEyj/fdpDSf9Amf0gAo8iNpx+XVGGfmFNQ6LNz8GK1I/YUSyDSEEFm6Q0hQ9nq6abIrW4Cjzw== X-Received: by 2002:a17:903:192:b0:211:18bf:e91d with SMTP id d9443c01a7336-21180fe949fmr5819245ad.27.1730995260267; Thu, 07 Nov 2024 08:01:00 -0800 (PST) Received: from localhost ([115.240.90.130]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21177e5a1d1sm13760005ad.210.2024.11.07.08.00.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Nov 2024 08:00:59 -0800 (PST) From: Visuwesh In-Reply-To: <86pln7oxhu.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 07 Nov 2024 17:49:01 +0200") References: <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> <86ikt0se1l.fsf@gnu.org> <86msibr0b7.fsf@gnu.org> <87a5ebuphh.fsf@gmail.com> <86ttcjp0ni.fsf@gnu.org> <2AD4A7E0-5A80-4512-BA80-D2FCE7E7F318@gmail.com> <86pln7oxhu.fsf@gnu.org> Date: Thu, 07 Nov 2024 21:30:56 +0530 Message-ID: <87y11vt4nb.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=B5=E0=AE=BF=E0=AE=AF=E0=AE=BE=E0=AE=B4=E0=AE=A9=E0=AF=8D =E0=AE=A8= =E0=AE=B5=E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AE=B0=E0=AF=8D 07, 2024] Eli Zarets= kii wrote: >> Date: Thu, 07 Nov 2024 20:43:32 +0530 >> From: Visuwesh >> CC: dev@real-or-random.org, mituharu@math.s.chiba-u.ac.jp, xuan@xlk.me, >> 73752@debbugs.gnu.org >>=20 >>=20 >> >As for this bug, I will install the patch soon,=20 >>=20 >> I would dare to merge bug#54646 with this when you close the bug since I= 'm confident they both have the same underlying cause. > > Does this mean you no longer see the problems in bug#54646 with this > patch? It has become very hard to reproduce the problems in bug#54646 but I am quite confident that they boil down to the same underlying issue as the symptoms are very similar (and I was unable to reproduce the issue in the Xft build). In fact, this bug caught my eye thanks to my experience with bug#54646. If it turns out that I can still reproduce the problems in bug#54646, we can always reopen it. However, I am confident that I would fail to do so. From unknown Fri Aug 15 15:56:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 08 Nov 2024 08:10:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: visuweshm@gmail.com, dev@real-or-random.org, xuan@xlk.me Cc: 73752@debbugs.gnu.org, mituharu@math.s.chiba-u.ac.jp Received: via spool by 73752-submit@debbugs.gnu.org id=B73752.173105334831614 (code B ref 73752); Fri, 08 Nov 2024 08:10:02 +0000 Received: (at 73752) by debbugs.gnu.org; 8 Nov 2024 08:09:08 +0000 Received: from localhost ([127.0.0.1]:50987 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t9K3H-0008Do-S4 for submit@debbugs.gnu.org; Fri, 08 Nov 2024 03:09:08 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34046) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t9K3F-0008DH-7t; Fri, 08 Nov 2024 03:09:06 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t9K36-0004pq-Dx; Fri, 08 Nov 2024 03:08:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=9zY0Fk+8H2gpc63layt5e3hcvhvepdm5loprTA+DaTk=; b=NRjrITcneOYp d4eKmHLVwj7BaAlGJOw77drVP7dfrAClkCF552NpcnidEMNNYsf21rHle9j6GAlHbbuZziXV9DbbZ 6ul8Dm2BZOwAkFWfWocM41DPj1i5ZyGlRVol/YY0XaCAnPPU4+9w7TZ5yd/4+U7mPnpYw3l8X4Cxs mfgvR+cWtU352Gq4t4tZTRF9oNiy2jRNNCSUmkIc+uNBNkQF8h7BSJKHE3Y375gmDC+w+nVxJ83xL yUufs2CQbCqkJ5oNYvMxLrrEq7u5eqo1wO3pbu2cFn8GUVRe5DB6fS/0pqfH5e0x7dBWwIEudTOzq De2EYOjAuQiGZj4EMypljw==; Date: Fri, 08 Nov 2024 10:08:52 +0200 Message-Id: <86bjyqp2p7.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <86ttcjp0ni.fsf@gnu.org> (message from Eli Zaretskii on Thu, 07 Nov 2024 16:40:49 +0200) References: <87bjyxyl64.fsf@gmail.com> <86ses9yh3j.fsf@gnu.org> <8734k9ydb4.fsf@gmail.com> <86ikt5y44p.fsf@gnu.org> <87y121wor7.fsf@gmail.com> <86ed3ty2pe.fsf@gnu.org> <87ttcpwnie.fsf@gmail.com> <86cyjdy1xb.fsf@gnu.org> <87plndwn4z.fsf@gmail.com> <86a5ehy1hc.fsf@gnu.org> <87ldy1wmg9.fsf@gmail.com> <87h68pwm2a.fsf@gmail.com> <868qu1xzhb.fsf@gnu.org> <86y11yuc3x.fsf@gnu.org> <0ac0e3316c0b16e645387450bd48c60b291391eb.camel@timruffing.de> <86ikt0se1l.fsf@gnu.org> <86msibr0b7.fsf@gnu.org> <87a5ebuphh.fsf@gmail.com> <86ttcjp0ni.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) merge 54646 73752 close 73752 30.1 thanks > Cc: dev@real-or-random.org, xuan@xlk.me, mituharu@math.s.chiba-u.ac.jp, > 73752@debbugs.gnu.org > Date: Thu, 07 Nov 2024 16:40:49 +0200 > From: Eli Zaretskii > > As for this bug, I will install the patch soon, thanks to all for the > efforts to investigate this tricky bug. I decided to risk installing this on the emacs-30 branch, since it is such a fundamental issue with display of composed characters. I'm therefore closing this bug (and merging it with bug#54646, which will also close that one).