JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Allow more complex delimiters for word selections.
[st.git] / st.c
diff --git a/st.c b/st.c
index e2e6c57..5251e70 100644 (file)
--- a/st.c
+++ b/st.c
@@ -707,8 +707,10 @@ selsnap(int mode, int *x, int *y, int direction) {
                                }
                        }
 
-                       if(term.line[*y][*x + direction].c[0] == ' ')
+                       if(strchr(worddelimiters,
+                                       term.line[*y][*x + direction].c[0])) {
                                break;
+                       }
 
                        *x += direction;
                }
@@ -900,7 +902,7 @@ bpress(XEvent *e) {
 void
 selcopy(void) {
        char *str, *ptr;
-       int x, y, bufsize, size;
+       int x, y, bufsize, size, i, ex;
        Glyph *gp, *last;
 
        if(sel.bx == -1) {
@@ -938,6 +940,21 @@ selcopy(void) {
                         */
                        if(y < sel.e.y && !((gp-1)->mode & ATTR_WRAP))
                                *ptr++ = '\n';
+
+                       /*
+                        * If the last selected line expands in the selection
+                        * after the visible text '\n' is appended.
+                        */
+                       if(y == sel.e.y) {
+                               i = term.col;
+                               while(--i > 0 && term.line[y][i].c[0] == ' ')
+                                       /* nothing */;
+                               ex = sel.e.x;
+                               if(sel.b.y == sel.e.y && sel.e.x < sel.b.x)
+                                       ex = sel.b.x;
+                               if(i < ex)
+                                       *ptr++ = '\n';
+                       }
                }
                *ptr = 0;
        }