/* See LICENSE for licence details. */
-#define _XOPEN_SOURCE 600
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
if(sel.ey == y && sel.by == y) {
bx = MIN(sel.bx, sel.ex);
ex = MAX(sel.bx, sel.ex);
+
return BETWEEN(x, bx, ex);
}
- return ((sel.b.y < y && y < sel.e.y)
- || (y == sel.e.y && x <= sel.e.x))
- || (y == sel.b.y && x >= sel.b.x
- && (x <= sel.e.x || sel.b.y != sel.e.y));
- switch(sel.type) {
- case SEL_REGULAR:
- return ((sel.b.y < y && y < sel.e.y)
- || (y == sel.e.y && x <= sel.e.x))
- || (y == sel.b.y && x >= sel.b.x
- && (x <= sel.e.x || sel.b.y != sel.e.y));
- case SEL_RECTANGULAR:
+ if(sel.type == SEL_RECTANGULAR) {
return ((sel.b.y <= y && y <= sel.e.y)
&& (sel.b.x <= x && x <= sel.e.x));
- };
+ }
+ return ((sel.b.y < y && y < sel.e.y)
+ || (y == sel.e.y && x <= sel.e.x))
+ || (y == sel.b.y && x >= sel.b.x
+ && (x <= sel.e.x || sel.b.y != sel.e.y));
}
void
}
/* \n at the end of every selected line except for the last one */
if(is_selected && y < sel.e.y)
- *ptr++ = '\n';
+ *ptr++ = '\r';
}
*ptr = 0;
}
sel.bx = -1;
return;
}
- switch(sel.type) {
- case SEL_REGULAR:
+ if(sel.type == SEL_RECTANGULAR) {
+ if(sel.by < term.top)
+ sel.by = term.top;
+ if(sel.ey > term.bot)
+ sel.ey = term.bot;
+ } else {
if(sel.by < term.top) {
sel.by = term.top;
sel.bx = 0;
sel.ey = term.bot;
sel.ex = term.col;
}
- break;
- case SEL_RECTANGULAR:
- if(sel.by < term.top)
- sel.by = term.top;
- if(sel.ey > term.bot)
- sel.ey = term.bot;
- break;
- };
+ }
sel.b.y = sel.by, sel.b.x = sel.bx;
sel.e.y = sel.ey, sel.e.x = sel.ex;
}
void
csiparse(void) {
- /* int noarg = 1; */
char *p = csiescseq.buf, *np;
long int v;
p++;
}
+ csiescseq.buf[csiescseq.len] = '\0';
while(p < csiescseq.buf+csiescseq.len) {
+ np = NULL;
v = strtol(p, &np, 10);
if(np == p)
- break;
+ v = 0;
if(v == LONG_MAX || v == LONG_MIN)
v = -1;
csiescseq.arg[csiescseq.narg++] = v;
void
strparse(void) {
- char *p = strescseq.buf, *sp;
+ char *p = strescseq.buf;
+ strescseq.narg = 0;
strescseq.buf[strescseq.len] = '\0';
- for(p = strtok_r(p, ";", &sp); p; p = strtok_r(NULL, ";", &sp)) {
- if(strescseq.narg == STR_ARG_SIZ)
- return;
- strescseq.args[strescseq.narg++] = p;
- }
+ while(p && strescseq.narg < STR_ARG_SIZ)
+ strescseq.args[strescseq.narg++] = strsep(&p, ";");
}
void
if(term.esc & ESC_CSI) {
csiescseq.buf[csiescseq.len++] = ascii;
if(BETWEEN(ascii, 0x40, 0x7E)
- || csiescseq.len >= ESC_BUF_SIZ) {
+ || csiescseq.len >= \
+ sizeof(csiescseq.buf)-1) {
term.esc = 0;
csiparse();
csihandle();
f->lbearing = 0;
f->rbearing = f->match->max_advance_width;
- f->height = f->match->height;
+ f->height = f->ascent + f->descent;
f->width = f->lbearing + f->rbearing;
return 0;