mirror of
https://github.com/neovim/neovim
synced 2025-07-26 00:01:46 +00:00
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:
@ -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.
|
||||
|
@ -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++;
|
||||
|
Reference in New Issue
Block a user