From 3cbaecfa31322873480c7be2b669b3606b8923a8 Mon Sep 17 00:00:00 2001 From: Bakkeby Date: Sun, 8 Oct 2023 20:21:13 +0200 Subject: [PATCH] Fix wide glyphs breaking "nowrap" mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. ref. https://git.suckless.org/st/commit/8abe4bcb41aa7fda0ae00823f6a20271124150db.html --- st.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/st.c b/st.c index 7d359b1..653d3b9 100644 --- a/st.c +++ b/st.c @@ -3265,7 +3265,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]; }