]> Sergey Matveev's repositories - st.git/commitdiff
Fix wide glyphs breaking "nowrap" mode
authorPeter Hofmann <scm@uninformativ.de>
Sat, 7 Oct 2023 05:40:39 +0000 (07:40 +0200)
committerHiltjo Posthuma <hiltjo@codemadness.org>
Sat, 7 Oct 2023 10:16:59 +0000 (12:16 +0200)
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.

st.c

diff --git a/st.c b/st.c
index 3d250ddcdb95707453254d3f717dd8022d122fb9..4754c873405c4fbe30b7b8467f6e469ea25bf231 100644 (file)
--- 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];
        }