# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit b56a0da283bd09d5084f472353c1a0b1b084613e
    parent 71b09ec4f172da9a89be2add54b5b94da8af3bea
    Author: Christoph Lohmann <20h@r-36.net>
    Date:   Sun, 28 Oct 2012 13:35:00 +0100

    Applying the tab expansion patch from koga.

    Diffstat:
    Mst.c | 22+++++++++++++---------

    1 file changed, 13 insertions(+), 9 deletions(-)
    diff --git a/st.c b/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 */