commit 8abe4bcb41aa7fda0ae00823f6a20271124150db
Author:     Peter Hofmann <[email protected]>
AuthorDate: Sat Oct 7 07:40:39 2023 +0200
Commit:     Hiltjo Posthuma <[email protected]>
CommitDate: Sat Oct 7 12:16:59 2023 +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.

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];
        }
 

Reply via email to