st
simple terminal
git clone https://9o.is/git/st.git
commit 4d9649e451666f7ece4ca951ce51eafe9f96c8e7 parent 0c90e9ceb5f0107a2e47520959587473a6eb4cb1 Author: Ben Hendrickson <ben@1m7.com> Date: Fri, 22 Aug 2014 09:25:04 -0700 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> Diffstat:
| M | st.c | | | 7 | +++++-- |
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git 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;