Fix selection: selclear in tputc
[st.git] / st.c
diff --git a/st.c b/st.c
index c161497..8c42a9c 100644 (file)
--- a/st.c
+++ b/st.c
@@ -2153,6 +2153,7 @@ tcontrolcode(uchar ascii)
                return;
        case '\032': /* SUB */
                tsetchar('?', &term.c.attr, term.c.x, term.c.y);
+               /* FALLTHROUGH */
        case '\030': /* CAN */
                csireset();
                break;
@@ -2307,15 +2308,13 @@ tputc(Rune u)
        Glyph *gp;
 
        control = ISCONTROL(u);
-       if (!IS_SET(MODE_UTF8 | MODE_SIXEL)) {
+       if (u < 127 || !IS_SET(MODE_UTF8 | MODE_SIXEL)) {
                c[0] = u;
                width = len = 1;
        } else {
                len = utf8encode(u, c);
-               if (!control && (width = wcwidth(u)) == -1) {
-                       memcpy(c, "\357\277\275", 4); /* UTF_INVALID */
+               if (!control && (width = wcwidth(u)) == -1)
                        width = 1;
-               }
        }
 
        if (IS_SET(MODE_PRINT))
@@ -2413,7 +2412,7 @@ check_control_code:
                 */
                return;
        }
-       if (sel.ob.x != -1 && BETWEEN(term.c.y, sel.ob.y, sel.oe.y))
+       if (selected(term.c.x, term.c.y))
                selclear();
 
        gp = &term.line[term.c.y][term.c.x];