From: Peter Hofmann <scm@uninformativ.de>
Date: Sat, 7 Oct 2023 05:40:39 +0000 (+0200)
Subject: Fix wide glyphs breaking "nowrap" mode
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=8abe4bcb41aa7fda0ae00823f6a20271124150db;p=st.git

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.
---

diff --git a/st.c b/st.c
index 3d250dd..4754c87 100644
--- 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];
 	}