st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit 0c2b513d01697aea20bb4a2a144b55e72c625e86
parent 634c247fa76a5f649cdcc51109970e46ddaf5c32
Author: Christoph Lohmann <20h@r-36.net>
Date:   Sat,  4 May 2013 19:00:32 +0200

Expand the last line with '\n' in case of overselection.

Thanks Alexander Rezinsky <alexrez@gmail.com>!

Diffstat:
Mst.c | 17++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/st.c b/st.c
@@ -900,7 +900,7 @@ bpress(XEvent *e) {
 void
 selcopy(void) {
     char *str, *ptr;
-    int x, y, bufsize, size;
+    int x, y, bufsize, size, i, ex;
     Glyph *gp, *last;
 
     if(sel.bx == -1) {
@@ -938,6 +938,21 @@ selcopy(void) {
              */
             if(y < sel.e.y && !((gp-1)->mode & ATTR_WRAP))
                 *ptr++ = '\n';
+
+            /*
+             * If the last selected line expands in the selection
+             * after the visible text '\n' is appended.
+             */
+            if(y == sel.e.y) {
+                i = term.col;
+                while(--i > 0 && term.line[y][i].c[0] == ' ')
+                    /* nothing */;
+                ex = sel.e.x;
+                if(sel.b.y == sel.e.y && sel.e.x < sel.b.x)
+                    ex = sel.b.x;
+                if(i < ex)
+                    *ptr++ = '\n';
+            }
         }
         *ptr = 0;
     }