Subject: bug#54970: 28.1; Some emoji no longer display

From: Eli Zaretskii <[email-masked]>
Date: Sun, 17 Apr 2022 21:58:23 +0300

> From: Howard Melman <[email-masked]>
> Date: Sun, 17 Apr 2022 14:44:25 -0400
> Cc: Eli Zaretskii <[email-masked]>,
>  Alan Third <[email-masked]>,
>  Lars Ingebrigtsen <[email-masked]>,
>  [email-masked]
> 
> I'm still confused as to why the above works but this didn't:
> 
> (set-fontset-font t 'emoji '("Apple Color Emoji" . "iso10646-1") nil 'prepend)

Because that character is not in the emoji script:

  (aref char-script-table #x1f37d) => symbol

> And I as I look at script-representative-chars, emoji is defined to be  (emoji 127744 128512)
> which I think means the hex range x1F300 - x1F600 so shouldn't include x1f37d?

You misinterpret script-representative-chars.  That doesn't mean the
range of characters between the values, but only the discrete examples
of the script's characters, which Emacs uses to see if a font supports
a script well enough to use it.  IOW, only those specific codepoints
are used as representatives, not any others.

> Or does it not because the default expression is text?  And if so how is that
> factored into the emoji script symbol passed to set-fontset-font, I don't see
> how that's defined other than as this range.

See lisp/international/charscript.el for how we assign characters to
scripts.  (It's a file generated from the UCD.)

> > Those characters get composed, so they get treated as a single
> > unit. They really donʼt cause any problems.
> 
> Well C-f and C-b seem to move point between them which is somewhat startling.

No, they shouldn't.  If they do, it means you don't have character
composition working.  "C-u C-x =" should describe the composition of
it happened.

> >>> Modulo `use-default-font-for-symbols'
> > 
> >    Howard> FWIW this variable set to t for me which I think is the default.
> > 
> > I meant you should try setting it to 'nil'.
> 
> In an emacs -Q in the scratch buffer I inserted a lone U+1F37D 
> Toggling use-default-font-for-symbols had no effect on its display.  

It will only have effect if the default font has a glyph for that
character.