|
|
@ -663,9 +663,9 @@ bpress(XEvent *e) { |
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
void |
|
|
|
selcopy(void) { |
|
|
|
selcopy(void) { |
|
|
|
char *str, *ptr; |
|
|
|
char *str, *ptr, *p; |
|
|
|
int x, y, bufsize, is_selected = 0, size; |
|
|
|
int x, y, bufsize, is_selected = 0, size; |
|
|
|
Glyph *gp; |
|
|
|
Glyph *gp, *last; |
|
|
|
|
|
|
|
|
|
|
|
if(sel.bx == -1) { |
|
|
|
if(sel.bx == -1) { |
|
|
|
str = NULL; |
|
|
|
str = NULL; |
|
|
@ -675,15 +675,19 @@ selcopy(void) { |
|
|
|
|
|
|
|
|
|
|
|
/* append every set & selected glyph to the selection */ |
|
|
|
/* append every set & selected glyph to the selection */ |
|
|
|
for(y = 0; y < term.row; y++) { |
|
|
|
for(y = 0; y < term.row; y++) { |
|
|
|
for(x = 0; x < term.col; x++) { |
|
|
|
gp = &term.line[y][0]; |
|
|
|
gp = &term.line[y][x]; |
|
|
|
last = gp + term.col; |
|
|
|
|
|
|
|
|
|
|
|
if(!(is_selected = selected(x, y)) |
|
|
|
while(--last >= gp && !(last->state & GLYPH_SET)) |
|
|
|
|| !(gp->state & GLYPH_SET)) { |
|
|
|
/* nothing */; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for(x = 0; gp <= last; x++, ++gp) { |
|
|
|
|
|
|
|
if(!(is_selected = selected(x, y))) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
size = utf8size(gp->c); |
|
|
|
p = (gp->state & GLYPH_SET) ? gp->c : " "; |
|
|
|
memcpy(ptr, gp->c, size); |
|
|
|
size = utf8size(p); |
|
|
|
|
|
|
|
memcpy(ptr, p, size); |
|
|
|
ptr += size; |
|
|
|
ptr += size; |
|
|
|
} |
|
|
|
} |
|
|
|
/* \n at the end of every selected line except for the last one */ |
|
|
|
/* \n at the end of every selected line except for the last one */ |
|
|
|