Thu 12 Jan 2017 10:59:34 PM UTC, comment #2:
Oh, it doesn't like the emoji. Third time's a charm:
I use weechat inside a screen session inside mate-terminal for IRC and lately emoji have begun showing up and my terminal gets corrupted. I was able to track this down to screen's wide character handling. Because screen doesn't correctly detect that new emoji (such as U+1F525) are wide characters, it inserts cursor-forward commands where none are necessary.
For example, weechat will print an emoji at 20,20 and 22,20. Screen will receive this and print the character at 20,20, emit cursor-forward (^[C), then print the next emoji at 22,20. This causes mate-terminal to see what is actually a 2 character sequence as a 3 character sequence. This causes all sorts of havoc as later character movements are distorted, leaving emoji and other characters unerased on the screen.
Anyway, I tracked this down to glib (what mate-terminal uses to detect widths of characters) being Unicode 9.0.0 compatible. To test my theory, I patched in the tables that glib uses into screen. With this patch, the newer wide characters appear and are manipulated correctly. It replaces a smaller set of tests which appear to be a subset of the ranges that are now checked.
The table is taken from https://raw.githubusercontent.com/GNOME/glib/glib-2-50/glib/gunichartables.h and is a product of https://github.com/GNOME/glib/blob/glib-2-50/glib/gen-unicode-tables.pl
Note: My patch does not update the ambiguous tables, which might also need updating.
|