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

From: Clément Pit-Claudel <[email-masked]>
Date: Fri, 31 May 2019 15:28:46 -0400

On 2019-05-31 15:02, Eli Zaretskii wrote:
>> Cc: [email-masked]
>> From: Clément Pit-Claudel <[email-masked]>
>> Date: Fri, 31 May 2019 13:06:32 -0400
>>
>>> This is a duplicate of bug#35811, AFAIU.
>>
>> Agh, sorry for the noise.  I should note, though, that the problem isn't specific to Arabic: 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)

  if I place the point at the beginning of the line, I see this:

             position: 21767 of 29526 (74%), column: 25
            character: ת‎ (displayed as ת‎) (codepoint 1514, #o2752, #x5ea)
              charset: unicode-bmp (Unicode Basic Multilingual Plane (U+0000..U+FFFF))
code point in charset: 0x05EA
               script: hebrew
               syntax: w 	which means: word
             category: .:Base, R:Right-to-left (strong)
             to input: type "C-x 8 RET 5ea" or "C-x 8 RET HEBREW LETTER TAV"
          buffer code: #xD7 #xAA
            file code: #xD7 #xAA (encoded by coding system utf-8-unix)
              display: by this font (glyph code)
    xft:-GNU -FreeSerif-normal-normal-normal-*-16-*-*-*-*-0-iso10646-1 (#x587)

  Character code properties: customize what to show
    name: HEBREW LETTER TAV
    general-category: Lo (Letter, Other)
    decomposition: (1514) ('ת')

  There are text properties here:
    face                 font-lock-string-face
    fontified            t

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 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.

Clément.