Terminal.Gui
Terminal.Gui copied to clipboard
CursesDriver doesn't render wide codepoints correctly
Curses is doing something funky with glyphs that report GetColums() of 1 yet are rendered wide. E.g. 0x2064 (invisible times) is reported as 1 column but is rendered as 2. WindowsDriver & NetDriver correctly render this as 1 column, overlapping the next cell.
I've spent many hours trying to figure this out. I'm at a loss.
I'm pretty sure curses is actively trying to determine a codepoint is wide and ignoring wcwidth (which it does use, and I've verified is that latest).
I suspect the way to address this is to stop using Curses.addstr etc... and instead emit ANSI sequences directly to the output stream.
Relevant. Esp 2070.
https://github.com/mintty/mintty/blob/master/wiki/CtrlSeqs.md
Another good set of characters to be sure to test things with is the wide decimal digits. They count as numbers but are multibyte and supposed to render as 2 columns.