Correct shift amount on MODE_INSERT in tputc()
authorRian Hunter <rian@alum.mit.edu>
Thu, 29 Jan 2015 23:00:39 +0000 (15:00 -0800)
committerRoberto E. Vargas Caballero <k0ga@shike2.com>
Thu, 5 Feb 2015 19:28:00 +0000 (20:28 +0100)
When MODE_INSERT is set we'd shift characters on the same
line forward before inserting our character in tputc().
This did not account for wide characters where width != 1.
This patch makes it so we shift the correct amount.

st.c

diff --git a/st.c b/st.c
index 6a68c3c..1deb7bc 100644 (file)
--- a/st.c
+++ b/st.c
@@ -2676,8 +2676,8 @@ tputc(char *c, int len) {
                gp = &term.line[term.c.y][term.c.x];
        }
 
-       if(IS_SET(MODE_INSERT) && term.c.x+1 < term.col)
-               memmove(gp+1, gp, (term.col - term.c.x - 1) * sizeof(Glyph));
+       if(IS_SET(MODE_INSERT) && term.c.x+width < term.col)
+               memmove(gp+width, gp, (term.col - term.c.x - width) * sizeof(Glyph));
 
        if(term.c.x+width > term.col) {
                tnewline(1);