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 /st.c | |
parent | 71b09ec4f172da9a89be2add54b5b94da8af3bea (diff) | |
download | st-b56a0da283bd09d5084f472353c1a0b1b084613e.tar.gz st-b56a0da283bd09d5084f472353c1a0b1b084613e.tar.bz2 |
Applying the tab expansion patch from koga.
Diffstat (limited to 'st.c')
-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 */ |