st
simple terminal
git clone https://9o.is/git/st.git
commit 1b58ae4a6888390bf763febf6b25a4e8145ba57a parent a62a336dda608967b4d54141163c2320569cb959 Author: Shi Tian <shitian@cock.li> Date: Sun, 25 Jun 2023 05:38:33 +0000 Fix for wide character being incorrectly cleared on MODE_INSERT Under insert mode, when inserting a normal character in front of a wide character, the affected region is shifted to the right by one cell. However, the empty cell is reset as if being a part of a wide character, causing the following cell being mishandled as a dummy cell. To reproduce the bug: printf '\033[4h' # set MODE_INSERT printf 妳好 printf '\033[4D' printf 'x' printf '\033[4l\n' Diffstat:
| M | st.c | | | 4 | +++- |
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/st.c b/st.c @@ -2471,8 +2471,10 @@ check_control_code: gp = &term.line[term.c.y][term.c.x]; } - if (IS_SET(MODE_INSERT) && term.c.x+width < term.col) + if (IS_SET(MODE_INSERT) && term.c.x+width < term.col) { memmove(gp+width, gp, (term.col - term.c.x - width) * sizeof(Glyph)); + gp->mode &= ~ATTR_WIDE; + } if (term.c.x+width > term.col) { tnewline(1);