diff options
author | zeertzjq <zeertzjq@outlook.com> | 2021-12-24 08:06:27 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2021-12-24 08:06:27 +0800 |
commit | 28dadd5a54a67b467c08614670c65b0b5b23d247 (patch) | |
tree | d4f004b45abdb5347b86b11866d4c6e05dc8c6b1 | |
parent | bc75544facbf200fc7a7d519c0963ec1becfa508 (diff) | |
download | rneovim-28dadd5a54a67b467c08614670c65b0b5b23d247.tar.gz rneovim-28dadd5a54a67b467c08614670c65b0b5b23d247.tar.bz2 rneovim-28dadd5a54a67b467c08614670c65b0b5b23d247.zip |
fix(screen): truncate when overwriting right half of a double-width char
Unlike the code above, this truncates the character in the same grid.
This is mainly for the pum scrollbar in the next commit.
-rw-r--r-- | src/nvim/screen.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index df911a1228..e62e3ca7bc 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -5965,6 +5965,13 @@ void grid_puts_len(ScreenGrid *grid, char_u *text, int textlen, int row, int col clear_next_cell = true; } + // When at the start of the text and overwriting the right half of a + // two-cell character in the same grid, truncate that into a '>'. + if (ptr == text && col > 0 && grid->chars[off][0] == 0) { + grid->chars[off - 1][0] = '>'; + grid->chars[off - 1][1] = 0; + } + schar_copy(grid->chars[off], buf); grid->attrs[off] = attr; if (mbyte_cells == 2) { |