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.
This commit is contained in:
Peter Hofmann 2023-10-07 07:40:39 +02:00 committed by Hiltjo Posthuma
parent 2fc7e532b2
commit 8abe4bcb41
1 changed files with 4 additions and 1 deletions

5
st.c
View File

@ -2477,7 +2477,10 @@ check_control_code:
} }
if (term.c.x+width > term.col) { 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]; gp = &term.line[term.c.y][term.c.x];
} }