Fix for wide character being incorrectly cleared on MODE_INSERT - st - simple t… | |
git clone git://git.suckless.org/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 3a6d6d740110e6ee1b092d05ad746244eedabe4b | |
parent 211964d56ee00a7d46e251cbc150afb79138ae37 | |
Author: Shi Tian <[email protected]> | |
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(G… | |
+ gp->mode &= ~ATTR_WIDE; | |
+ } | |
if (term.c.x+width > term.col) { | |
tnewline(1); |