ui: Fix the call to utf_ambiguous_width

`utf_ambiguous_width` expects the Unicode character, but in 9e1c6596 I
just passed the first UTF-8 byte to the function.  This led to various
display problems because now many multi-cell characters weren't falling
into that part of the branch.

Also, to better align with the existing Vim code, remove the forced
cursor update.  Setting the flag will cause it to happen in the next
UI_CALL.

Thanks to qvacua for all the help investigating the issue!

Closes #5448
This commit is contained in:
James McCoy 2016-10-11 17:33:21 -04:00
parent 4408431086
commit 892f55bd20
No known key found for this signature in database
GPG Key ID: DFE691AE331BA3DB
2 changed files with 2 additions and 3 deletions

View File

@ -1724,7 +1724,7 @@ int utf_class(int c)
return 2;
}
int utf_ambiguous_width(int c)
bool utf_ambiguous_width(int c)
{
return c >= 0x80 && (intable(ambiguous, ARRAY_SIZE(ambiguous), c)
|| intable(emoji_all, ARRAY_SIZE(emoji_all), c));

View File

@ -397,9 +397,8 @@ static void send_output(uint8_t **ptr)
size_t clen = (size_t)mb_ptr2len(p);
UI_CALL(put, p, (size_t)clen);
col++;
if (utf_ambiguous_width(*p)) {
if (utf_ambiguous_width(utf_ptr2char(p))) {
pending_cursor_update = true;
flush_cursor_update();
} else if (mb_ptr2cells(p) > 1) {
// double cell character, blank the next cell
UI_CALL(put, NULL, 0);