Subject: Re: bug#36030: Changing the region or the point changes the way characters are displayed

From: Eli Zaretskii <[email-masked]>
Date: Fri, 31 May 2019 23:02:45 +0300

> Cc: [email-masked]
> From: Clément Pit-Claudel <[email-masked]>
> Date: Fri, 31 May 2019 15:28:46 -0400
> 
> I see it with many other scripts.
> >
> > Which ones?  I only see this on the Arabic line, at least in "emacs -Q".
> 
> I see it with Hebrew as well, but not in emacs -Q.  With this string:
> 
>   'ՙա-ևא-תװ-ײؠ-يٮ-ٯٱ-ۓەۥ-ۦۮ-ۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴ-ߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠ-ࢴࢶ'
> 
> (taken from a regular expression)

So this is not at all in the HELLO buffer?  Please be sure to tell
this important detail in the future: I just spent some time trying to
reproduce the problem in HELLO.

> But if I place it at the ܒ, then run (save-excursion (goto-char <position of the beginning of the string>) (what-cursor-position t)) I see xft:-GNU -FreeSans-normal-normal-normal-*-16-*-*-*-*-0-iso10646-1 (#x509) instead.
> 
> Moving the point to a different line, the font changes again, this time to xft:-GNU -FreeMono-normal-normal-normal-*-16-*-*-*-m-0-iso10646-1 (#x4FF) 

The font doesn't change, just the glyph number reported by Emacs
changes (that's what that hex code in parentheses means).

> The rest of the what-cursor-position buffer is unchanged.
> 
> With the string 'ਸ-ਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હઽૐૠ-ૡૹଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହଽଡ଼-ଢ଼ୟ-', it is enough to just resize the frame to change from xft:-GNU -FreeSans-normal-normal-normal-*-16-*-*-*-*-0-iso10646-1 (#x663) to xft:-GNU -FreeSerif-normal-normal-normal-*-16-*-*-*-*-0-iso10646-1 (#x7F2) (but I had to set a timer to investigate this one, because moving the point reverted the font changes caused by resizing the frame.
> 
> Additionally, this seems to be linked to face properties.  In the what-cursor-position buffer, I see this:
> 
>   ਸ (displayed as ਸ) (codepoint 2616, #o5070, #xa38)
>   ^ using one font.
>                   ^ using a different font, with font-lock-string-face on it.
> 
> … and moving around the what-cursor-position buffer changes the second one, but not the first one.

I see none of that in "emacs -Q".  I also don't understand how
resizing the frame could cause these effects.  If the recipe is more
complicated than just copy/paste the strings you show into *scratch*,
please be sure to show the whole recipe.  E.g., where did the face
properties come from?