Przeglądaj źródła

Applying the tab expansion patch from koga.

Christoph Lohmann 12 lat temu
rodzic
commit
b56a0da283
1 zmienionych plików z 13 dodań i 9 usunięć
  1. 13 9
      st.c

+ 13 - 9
st.c

@@ -663,9 +663,9 @@ bpress(XEvent *e) {
 
 void
 selcopy(void) {
-	char *str, *ptr;
+	char *str, *ptr, *p;
 	int x, y, bufsize, is_selected = 0, size;
-	Glyph *gp;
+	Glyph *gp, *last;
 
 	if(sel.bx == -1) {
 		str = NULL;
@@ -675,15 +675,19 @@ selcopy(void) {
 
 		/* append every set & selected glyph to the selection */
 		for(y = 0; y < term.row; y++) {
-			for(x = 0; x < term.col; x++) {
-				gp = &term.line[y][x];
+			gp = &term.line[y][0];
+			last = gp + term.col;
 
-				if(!(is_selected = selected(x, y))
-						|| !(gp->state & GLYPH_SET)) {
+			while(--last >= gp && !(last->state & GLYPH_SET))
+				/* nothing */;
+
+			for(x = 0; gp <= last; x++, ++gp) {
+				if(!(is_selected = selected(x, y)))
 					continue;
-				}
-				size = utf8size(gp->c);
-				memcpy(ptr, gp->c, size);
+
+				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 */