diff --git a/kitty/fonts.c b/kitty/fonts.c index 533f5a6e2..eef6e9114 100644 --- a/kitty/fonts.c +++ b/kitty/fonts.c @@ -123,7 +123,7 @@ ensure_canvas_can_fit(FontGroup *fg, unsigned cells, unsigned scale) { } fg->canvas.current_cells = cells; fg->canvas.current_scale = scale; - if (fg->canvas.buf) memset(fg->canvas.buf, 0, cs(fg->canvas.current_cells, fg->canvas.alloced_scale)); + if (fg->canvas.buf) memset(fg->canvas.buf, 0, cs(cells, scale)); #undef cs } @@ -490,8 +490,7 @@ face_has_codepoint(const void* face, char_type cp) { static bool has_emoji_presentation(const CPUCell *c, const ListOfChars *lc) { - if (!c->is_multicell || c->x || c->y || !lc->count) return false; - return is_emoji(lc->chars[0]) && (lc->count == 1 || lc->chars[1] != VS15); + return c->is_multicell && lc->count && is_emoji(lc->chars[0]) && (lc->count == 1 || lc->chars[1] != VS15); } bool diff --git a/kitty_tests/multicell.py b/kitty_tests/multicell.py index 98c9f6448..a9390ed5f 100644 --- a/kitty_tests/multicell.py +++ b/kitty_tests/multicell.py @@ -106,14 +106,17 @@ def test_multicell(self: TestMulticell) -> None: ac(x, 0, is_multicell=True, width=2, scale=2, subscale_n=3, x=x, y=0, text='', natural_width=False) for x in range(0, 4): ac(x, 1, is_multicell=True, width=2, scale=2, subscale_n=3, x=x, y=1, text='', natural_width=False) + def comb(x, y): + s.reset() + multicell(s, 'a', scale=2) + s.cursor.x, s.cursor.y = x, y + s.draw('\u0301') + assert_cursor_at(x, y) + ac(0, 0, text='a' if y else 'a\u0301', is_multicell=True) for y in range(2): for x in range(1, 3): - s.reset() - multicell(s, 'a', scale=2) - s.cursor.x, s.cursor.y = x, y - s.draw('\u0301') - assert_cursor_at(x, y) - ac(0, 0, text='a' if y else 'a\u0301', is_multicell=True) + comb(x, y) + comb(0, 1) # Test wrapping s.reset()