|
@@ -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][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;
|
|
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;
|
|
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 */
|