all repos — st @ 98a1085d0e7c3d84e19185ba666c4b0c725cd974

st (suckless terminal) config

Removing wrapping newlines from selection

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>
Ben Hendrickson ben@1m7.com
commit

98a1085d0e7c3d84e19185ba666c4b0c725cd974

parent

51466e019a67e9319e6c5a7fa4205842ca860b71

1 files changed, 5 insertions(+), 2 deletions(-)

jump to
M st.cst.c

@@ -662,7 +662,10 @@

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 @@ * '\r', when something to be pasted is received by

* 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;