Do not use tmoveto in tputtab.
authornoname@inventati.org <noname@inventati.org>
Mon, 13 Apr 2015 12:03:35 +0000 (14:03 +0200)
committerRoberto E. Vargas Caballero <k0ga@shike2.com>
Mon, 13 Apr 2015 19:33:36 +0000 (21:33 +0200)
tmoveto resets CURSOR_WRAPNEXT.

Simple testcase:

for i in $(seq 1 200); do
printf '\t.';
usleep 100000;
printf '\t@';
usleep 100000;
done

In st executing this script causes @ and . to overwrite each other in
the last column.

st.c

diff --git a/st.c b/st.c
index 6d20977..7051a4a 100644 (file)
--- a/st.c
+++ b/st.c
@@ -2390,7 +2390,7 @@ tputtab(int n) {
                        for(--x; x > 0 && !term.tabs[x]; --x)
                                /* nothing */ ;
        }
-       tmoveto(x, term.c.y);
+       term.c.x = LIMIT(x, 0, term.col-1);
 }
 
 void