vim-patch:7.4.1697

Problem:    Display problems when the 'ambiwidth' and 'emoji' options are not
            set properly or the terminal doesn't behave as expected.
Solution:   After drawing an ambiguous width character always position the
            cursor.

cb0700844c
This commit is contained in:
James McCoy
2016-09-22 00:58:46 -04:00
parent 9419a4c86c
commit 9e1c659666
2 changed files with 9 additions and 7 deletions

View File

@ -1724,12 +1724,11 @@ int utf_class(int c)
return 2;
}
/*
* Code for Unicode case-dependent operations. Based on notes in
* http://www.unicode.org/Public/UNIDATA/CaseFolding.txt
* This code uses simple case folding, not full case folding.
* Last updated for Unicode 5.2.
*/
int utf_ambiguous_width(int c)
{
return c >= 0x80 && (intable(ambiguous, ARRAY_SIZE(ambiguous), c)
|| intable(emoji_all, ARRAY_SIZE(emoji_all), c));
}
/*
* Generic conversion function for case operations.

View File

@ -397,7 +397,10 @@ static void send_output(uint8_t **ptr)
size_t clen = (size_t)mb_ptr2len(p);
UI_CALL(put, p, (size_t)clen);
col++;
if (mb_ptr2cells(p) > 1) {
if (utf_ambiguous_width(*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);
col++;