GNU bug report logs - #73752
29.4; Ligatures are randomly rendered with extra spaces

Previous Next

Package: emacs;

Reported by: xuan <at> xlk.me

Date: Fri, 11 Oct 2024 21:40:02 UTC

Severity: normal

Merged with 54646

Found in versions 29.0.50, 29.4

Fixed in version 30.1

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Eli Zaretskii <eliz <at> gnu.org>
To: Visuwesh <visuweshm <at> gmail.com>
Cc: dev <at> real-or-random.org, xuan <at> xlk.me, 73752 <at> debbugs.gnu.org
Subject: bug#73752: 29.4; Ligatures are randomly rendered with extra spaces
Date: Sat, 02 Nov 2024 20:27:44 +0200
> From: Visuwesh <visuweshm <at> gmail.com>
> Cc: dev <at> real-or-random.org,  xuan <at> xlk.me,  73752 <at> 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)
>     [[#<font-object "-SAJA-Cascadia Code-bold-normal-normal-*-15-*-*-*-m-0-iso10646-1"> 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));
	    }




This bug report was last modified 251 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.