From 892f55bd20615031132b0ed13b1861be3b645ecc Mon Sep 17 00:00:00 2001 From: James McCoy Date: Tue, 11 Oct 2016 17:33:21 -0400 Subject: 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 --- src/nvim/mbyte.c | 2 +- src/nvim/ui.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c index c08b9e8fcf..e6312f9c00 100644 --- a/src/nvim/mbyte.c +++ b/src/nvim/mbyte.c @@ -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)); diff --git a/src/nvim/ui.c b/src/nvim/ui.c index 648d633e07..cf5e95f88a 100644 --- a/src/nvim/ui.c +++ b/src/nvim/ui.c @@ -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); -- cgit