]> git.armaanb.net Git - st.git/commitdiff
Removing wrapping newlines from selection
authorBen Hendrickson <ben@1m7.com>
Fri, 22 Aug 2014 16:25:04 +0000 (09:25 -0700)
committerRoberto E. Vargas Caballero <k0ga@shike2.com>
Sat, 23 Aug 2014 07:52:18 +0000 (09:52 +0200)
When getting selected text, lines that were wrapped because of length
ought not include the wrapping newline in the selection.

This comes up, for example, when copying a bash command that is long
enough to wrap from the console and pasting it back into the console.
The extra newline breaks it.

Similiarly, changes behavior when trimming whitespace from the end of a
physical line to only do so if the line does not wrap. Otherwise we are
trimming whitespace from the middle of a logical line, which may change
its meaning.

Signed-off-by: Roberto E. Vargas Caballero <k0ga@shike2.com>
st.c

diff --git a/st.c b/st.c
index 497885b0b48c03fc19be0de0e558049d05168e51..097775db84e85948a72d9e310ee2e16caac3743d 100644 (file)
--- a/st.c
+++ b/st.c
@@ -662,7 +662,10 @@ y2row(int y) {
 static int tlinelen(int y) {
        int i = term.col;
 
-       while (i > 0 && term.line[y][i - 1].c[0] == ' ')
+       if(term.line[y][i - 1].mode & ATTR_WRAP)
+               return i;
+
+       while(i > 0 && term.line[y][i - 1].c[0] == ' ')
                --i;
 
        return i;
@@ -959,7 +962,7 @@ getsel(void) {
                 * st.
                 * FIXME: Fix the computer world.
                 */
-               if(sel.ne.y > y || lastx >= linelen)
+               if((y < sel.ne.y || lastx >= linelen) && !(last->mode & ATTR_WRAP))
                        *ptr++ = '\n';
        }
        *ptr = 0;