Fix copy of line with len = 0
[st.git] / st.c
diff --git a/st.c b/st.c
index 256f8f5..bd8b815 100644 (file)
--- a/st.c
+++ b/st.c
@@ -17,6 +17,7 @@
 #include <sys/time.h>
 #include <sys/types.h>
 #include <sys/wait.h>
+#include <termios.h>
 #include <time.h>
 #include <unistd.h>
 #include <libgen.h>
@@ -333,6 +334,7 @@ static void xzoomreset(const Arg *);
 static void printsel(const Arg *);
 static void printscreen(const Arg *) ;
 static void toggleprinter(const Arg *);
+static void sendbreak(const Arg *);
 
 /* Config.h for applying patches and the configuration. */
 #include "config.h"
@@ -1002,7 +1004,10 @@ getsel(void)
 
        /* append every set & selected glyph to the selection */
        for (y = sel.nb.y; y <= sel.ne.y; y++) {
-               linelen = tlinelen(y);
+               if ((linelen = tlinelen(y)) == 0) {
+                       *ptr++ = '\n';
+                       continue;
+               }
 
                if (sel.type == SEL_RECTANGULAR) {
                        gp = &term.line[y][sel.nb.x];
@@ -2578,6 +2583,13 @@ strreset(void)
        memset(&strescseq, 0, sizeof(strescseq));
 }
 
+void
+sendbreak(const Arg *arg)
+{
+       if (tcsendbreak(cmdfd, 0))
+               perror("Error sending break");
+}
+
 void
 tprinter(char *s, size_t len)
 {
@@ -4306,7 +4318,7 @@ main(int argc, char *argv[])
 
        xw.l = xw.t = 0;
        xw.isfixed = False;
-       xw.cursor = 0;
+       xw.cursor = cursorshape;
 
        ARGBEGIN {
        case 'a':