aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Hendrickson <ben@1m7.com>2014-08-22 09:25:04 -0700
committerRoberto E. Vargas Caballero <k0ga@shike2.com>2014-08-23 09:52:18 +0200
commit98a1085d0e7c3d84e19185ba666c4b0c725cd974 (patch)
tree27ea72a119a5a2346e6d3dc917d205e394ffc03c
parent51466e019a67e9319e6c5a7fa4205842ca860b71 (diff)
downloadst-98a1085d0e7c3d84e19185ba666c4b0c725cd974.tar.gz
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>
-rw-r--r--st.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/st.c b/st.c
index 497885b..097775d 100644
--- 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;