Subject: Re: bug#50865: 28.0.50; Emoji with emoji modifier in Linux console garbles emacs display

From: Eli Zaretskii <[email-masked]>
Date: Tue, 28 Sep 2021 21:35:08 +0300

> From: Aura Kelloniemi <[email-masked]>
> Cc: [email-masked]
> Date: Tue, 28 Sep 2021 20:41:36 +0300
> 
> utf-8-unix
> 
> And the Linux console is properly in Unicode mode. (Which means Unicode as it
> was understood in 2002 or so.)

Which could be too long ago?  Are you saying that the Linux terminal
doesn't understand Unicode beyond the year 2002?  That could explain a
lot.

>  > Does typing the below solve the problem?
> 
>  >   M-: (set-char-table-range char-width-table '(#x1f600 . #x1f64f) 1) RET
> 
> No, not alone, but when I tried
> 
> (set-char-table-range char-width-table '(#x1f300 . #x1f64f) 1)
> 
> the problem is gone. Using the same trick to force some other characters (e.g.
> TIMER CLOCK) to width 1, I was able to get rid of the other problem that I
> mentioned, but could not track.

So it sounds like your terminal cannot handle double-width
characters.  Those "space characters" you see are padding glyphs
output by Emacs when it displays a double-width character.  On my
terminal emulator, the results are satisfactory, and I see no
artifacts.  Are you sure the spaces you saw aren't just visual
surprises, and otherwise don't present any real problems?  If they do
present real problems, can you describe them in more detail, including
the exact sequence of characters you typed for that?

> Now the question is: should this be added to the linux terminal setup in
> Emacs, and for what character range.

No.  That is just a kludgey workaround for some problem I don't yet
understand well enough.

> If I am right, all Unicode code points above 0x20 print just one
> character to the terminal, except if they don't print anything.

That should not be that way.  Some characters are double-width, and
should take up 2 columns on display.

> Probably there is no other documentation than the kernel source – or
> at least the documentation is outdated. Linux console is kind of
> deprecated, but it is still sort of maintained as there is no
> alternative being developed.

Perhaps you should take this up with the developers, then.  But I'd
like to understand better what display problems you saw originally,
because all I read there now is that you saw those extra spaces.

> Is there a way to get a list of code points that Emacs thinks have a width of
> something else than 1?

You can use map-char-table to display all characters that have width
of 2 columns.  Or you can look in lisp/international/characters.el,
around line 1250, where double-width characters are listed.