diff options
| author | Christoph Lohmann <20h@r-36.net> | 2012-10-28 13:35:00 +0100 | 
|---|---|---|
| committer | Christoph Lohmann <20h@r-36.net> | 2012-10-28 13:35:00 +0100 | 
| commit | b56a0da283bd09d5084f472353c1a0b1b084613e (patch) | |
| tree | 270495abe0d30f039cec7058e4741e07053d7052 | |
| parent | 71b09ec4f172da9a89be2add54b5b94da8af3bea (diff) | |
| download | st-transparency-b56a0da283bd09d5084f472353c1a0b1b084613e.tar.gz st-transparency-b56a0da283bd09d5084f472353c1a0b1b084613e.tar.xz st-transparency-b56a0da283bd09d5084f472353c1a0b1b084613e.zip  | |
Applying the tab expansion patch from koga.
| -rw-r--r-- | st.c | 22 | 
1 files changed, 13 insertions, 9 deletions
@@ -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 */  | 
