mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-16 05:34:00 -04:00
term: insert-mode: handle combining characters correctly
When the client application emits combining characters, for example multi-codepoint emojis, in insert-mode, we ended up pushing partial graphemes to the right, for each codepoint, resulting in too many cells (and with the wrong content) being inserted. The fix is fairly simple; don't "insert" when appending characters to an existing grapheme cluster. This isn't something we can detect easily in print_insert() (it would require us to do grapheme clustering again). Fortunately, we do have the required information in action_utf8_print(). So, pass this information as a boolean to term_print(). Closes #1947
This commit is contained in:
parent
dd01783f88
commit
88dcde3ed8
5 changed files with 14 additions and 6 deletions
2
csi.c
2
csi.c
|
|
@ -793,7 +793,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
const int width = c32width(term->vt.last_printed);
|
||||
if (width > 0) {
|
||||
for (int i = 0; i < count; i++)
|
||||
term_print(term, term->vt.last_printed, width);
|
||||
term_print(term, term->vt.last_printed, width, false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue