# st

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

| Log | Files | Refs | README | LICENSE

    commit 74962bf56636e608f0ee35f2076bc6b48923119d
    parent 6681af165b06c32cf65bf970a295600d46cb7025
    Author: noname <noname@inventati.org>
    Date:   Sun, 27 Apr 2014 15:40:23 +0400

    Remove one indentation level in getsel().

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

    1 file changed, 45 insertions(+), 46 deletions(-)
    diff --git a/st.c b/st.c
    @@ -922,60 +922,59 @@ getsel(void) {
     	int x, y, bufsize, size, i, ex;
     	Glyph *gp, *last;

    -	if(sel.ob.x == -1) {
    -		str = NULL;
    -	} else {
    -		bufsize = (term.col+1) * (sel.ne.y-sel.nb.y+1) * UTF_SIZ;
    -		ptr = str = xmalloc(bufsize);
    +	if(sel.ob.x == -1)
    +		return NULL;

    -		/* append every set & selected glyph to the selection */
    -		for(y = sel.nb.y; y < sel.ne.y + 1; y++) {
    -			gp = &term.line[y][0];
    -			last = &gp[term.col-1];
    +	bufsize = (term.col+1) * (sel.ne.y-sel.nb.y+1) * UTF_SIZ;
    +	ptr = str = xmalloc(bufsize);

    -			while(last >= gp && !(selected(last - gp, y) &&
    -			                      strcmp(last->c, " ") != 0)) {
    -				--last;
    -			}
    +	/* append every set & selected glyph to the selection */
    +	for(y = sel.nb.y; y < sel.ne.y + 1; y++) {
    +		gp = &term.line[y][0];
    +		last = &gp[term.col-1];

    -			for(x = 0; gp <= last; x++, ++gp) {
    -				if(!selected(x, y) || (gp->mode & ATTR_WDUMMY))
    -					continue;
    +		while(last >= gp && !(selected(last - gp, y) &&
    +				      strcmp(last->c, " ") != 0)) {
    +			--last;
    +		}

    -				size = utf8len(gp->c);
    -				memcpy(ptr, gp->c, size);
    -				ptr += size;
    -			}
    +		for(x = 0; gp <= last; x++, ++gp) {
    +			if(!selected(x, y) || (gp->mode & ATTR_WDUMMY))
    +				continue;

    -			/*
    -			 * Copy and pasting of line endings is inconsistent
    -			 * in the inconsistent terminal and GUI world.
    -			 * The best solution seems like to produce '\n' when
    -			 * something is copied from st and convert '\n' to
    -			 * '\r', when something to be pasted is received by
    -			 * st.
    -			 * FIXME: Fix the computer world.
    -			 */
    -			if(y < sel.ne.y && x > 0 && !((gp-1)->mode & ATTR_WRAP))
    -				*ptr++ = '\n';
    +			size = utf8len(gp->c);
    +			memcpy(ptr, gp->c, size);
    +			ptr += size;
    +		}

    -			/*
    -			 * If the last selected line expands in the selection
    -			 * after the visible text '\n' is appended.
    -			 */
    -			if(y == sel.ne.y) {
    -				i = term.col;
    -				while(--i > 0 && term.line[y][i].c[0] == ' ')
    -					/* nothing */;
    -				ex = sel.ne.x;
    -				if(sel.nb.y == sel.ne.y && sel.ne.x < sel.nb.x)
    -					ex = sel.nb.x;
    -				if(i < ex)
    -					*ptr++ = '\n';
    -			}
    +		/*
    +		 * Copy and pasting of line endings is inconsistent
    +		 * in the inconsistent terminal and GUI world.
    +		 * The best solution seems like to produce '\n' when
    +		 * something is copied from st and convert '\n' to
    +		 * '\r', when something to be pasted is received by
    +		 * st.
    +		 * FIXME: Fix the computer world.
    +		 */
    +		if(y < sel.ne.y && x > 0 && !((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.ne.y) {
    +			i = term.col;
    +			while(--i > 0 && term.line[y][i].c[0] == ' ')
    +				/* nothing */;
    +			ex = sel.ne.x;
    +			if(sel.nb.y == sel.ne.y && sel.ne.x < sel.nb.x)
    +				ex = sel.nb.x;
    +			if(i < ex)
    +				*ptr++ = '\n';
     		}
    -		*ptr = 0;
     	}
    +	*ptr = 0;
     	return str;
     }