From 9e6d334bd8d8a565a7255f91ddb4de849563dbc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Tue, 4 Mar 2025 07:50:03 +0100 Subject: [PATCH] term: reset the grapheme clustering state on cursor movements --- CHANGELOG.md | 1 + terminal.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e9ca7d1..30adad73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -120,6 +120,7 @@ * `--server=` not working on FreeBSD ([#1956][1956]). * Crash when resetting the terminal and an application had previously set a custom app ID ([#1963][1963]) +* Grapheme clustering state not reset on cursor movements. [1918]: https://codeberg.org/dnkl/foot/issues/1918 [1929]: https://codeberg.org/dnkl/foot/issues/1929 diff --git a/terminal.c b/terminal.c index fd1c8937..0cd4fbca 100644 --- a/terminal.c +++ b/terminal.c @@ -2860,6 +2860,8 @@ term_cursor_to(struct terminal *term, int row, int col) term->grid->cursor.point.col = col; term->grid->cursor.point.row = row; + term_reset_grapheme_state(term); + term->grid->cur_row = grid_row(term->grid, row); } @@ -2876,6 +2878,7 @@ term_cursor_col(struct terminal *term, int col) term->grid->cursor.lcf = false; term->grid->cursor.point.col = col; + term_reset_grapheme_state(term); } void @@ -2885,6 +2888,7 @@ term_cursor_left(struct terminal *term, int count) term->grid->cursor.point.col -= move_amount; xassert(term->grid->cursor.point.col >= 0); term->grid->cursor.lcf = false; + term_reset_grapheme_state(term); } void @@ -2894,6 +2898,7 @@ term_cursor_right(struct terminal *term, int count) term->grid->cursor.point.col += move_amount; xassert(term->grid->cursor.point.col < term->cols); term->grid->cursor.lcf = false; + term_reset_grapheme_state(term); } void @@ -3165,6 +3170,8 @@ term_linefeed(struct terminal *term) term_scroll(term, 1); else term_cursor_down(term, 1); + + term_reset_grapheme_state(term); } void