]> Sergey Matveev's repositories - st.git/commitdiff
Copy non set positions as spaces
authorRoberto E. Vargas Caballero <k0ga@shike2.com>
Mon, 17 Sep 2012 20:13:09 +0000 (22:13 +0200)
committerRoberto E. Vargas Caballero <k0ga@shike2.com>
Mon, 17 Sep 2012 20:13:09 +0000 (22:13 +0200)
st selection don't insert in the selection position whose value is not
set. This is correct for the positions in the end of the line, but cause
some problems in the beginning. For example echo -e 'a\tb' will print in the
screen:

a b

but after selecting and copying in some place you get:

ab

because positions from 1 to 7 don't have any value. This patch deals all
positions without value as blank (even at the end of the line).
---
 st.c |   17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

st.c

diff --git a/st.c b/st.c
index c408ca95af00ea71e2e2cad2ccabb6f977716c34..b2e5e2228ae46706a963cbe831b1cc9d400dfbb2 100644 (file)
--- a/st.c
+++ b/st.c
@@ -596,14 +596,17 @@ selcopy(void) {
                /* append every set & selected glyph to the selection */
                for(y = 0; y < term.row; y++) {
                        for(x = 0; x < term.col; x++) {
-                               is_selected = selected(x, y);
-                               if((term.line[y][x].state & GLYPH_SET) && is_selected) {
-                                       int size = utf8size(term.line[y][x].c);
-                                       memcpy(ptr, term.line[y][x].c, size);
-                                       ptr += size;
-                               }
+                               int size;
+                               char *p;
+                               Glyph *gp = &term.line[y][x];
+
+                               if(!(is_selected = selected(x, y)))
+                                       continue;
+                               p = (gp->state & GLYPH_SET) ? gp->c : " ";
+                               size = utf8size(p);
+                               memcpy(ptr, p, size);
+                               ptr += size;
                        }
-
                        /* \n at the end of every selected line except for the last one */
                        if(is_selected && y < sel.e.y)
                                *ptr++ = '\n';