Переглянути джерело

Expand the last line with '\n' in case of overselection.

Thanks Alexander Rezinsky <alexrez@gmail.com>!
Christoph Lohmann 12 роки тому
батько
коміт
0c2b513d01
1 змінених файлів з 16 додано та 1 видалено
  1. 16 1
      st.c

+ 16 - 1
st.c

@@ -900,7 +900,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 +938,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;
 	}