Fix wide glyphs breaking "nowrap" mode - st - simple terminal | |
git clone git://git.suckless.org/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 8abe4bcb41aa7fda0ae00823f6a20271124150db | |
parent 2fc7e532b23e2f820c6b73d352ec7c41fefa45b5 | |
Author: Peter Hofmann <[email protected]> | |
Date: Sat, 7 Oct 2023 07:40:39 +0200 | |
Fix wide glyphs breaking "nowrap" mode | |
Consider the following example: | |
printf '\e[?7l';\ | |
for i in $(seq $(($(tput cols) - 1))); do printf a; done;\ | |
printf '🙈\n';\ | |
printf '\e[?7h' | |
Even though MODE_WRAP has been disabled, the emoji appeared on the next | |
line. This patch keeps wide glyphs on the same line and moves them to | |
the right-most possible position. | |
Diffstat: | |
M st.c | 5 ++++- | |
1 file changed, 4 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/st.c b/st.c | |
@@ -2477,7 +2477,10 @@ check_control_code: | |
} | |
if (term.c.x+width > term.col) { | |
- tnewline(1); | |
+ if (IS_SET(MODE_WRAP)) | |
+ tnewline(1); | |
+ else | |
+ tmoveto(term.col - width, term.c.y); | |
gp = &term.line[term.c.y][term.c.x]; | |
} | |