/* If we reached a newline, then delete whatever we have selected */
if (r == '\r' || r == '\n') {
buf->selection.beg = buf_byrune(buf, buf->selection.beg, +1);
+ Sel del = buf->selection;
+ sel.beg -= (del.beg < sel.beg ? (min(del.end, sel.beg) - del.beg) : 0);
+ sel.end -= (del.beg < sel.end ? (min(del.end, sel.end) - del.beg) : 0);
buf_del(buf);
}
/* if current char is not whitespace, then shrink the selection */
- if (r != ' ' && r != '\t') {
+ if (r != ' ' && r != '\t')
buf->selection.beg = buf->selection.end;
- } else {
- if (buf->selection.end <= sel.beg) sel.beg--;
- if (buf->selection.end <= sel.end) sel.end--;
- }
/* move to the next character */
prev = buf->selection.end;