MODE_MOUSEX10 = 131072,
MODE_MOUSEMANY = 262144,
MODE_BRCKTPASTE = 524288,
+ MODE_PRINT = 1048576,
MODE_MOUSE = MODE_MOUSEBTN|MODE_MOUSEMOTION|MODE_MOUSEX10\
|MODE_MOUSEMANY,
};
static ssize_t xwrite(int, char *, size_t);
static void *xmalloc(size_t);
static void *xrealloc(void *, size_t);
+static char *xstrdup(char *s);
static void (*handler[LASTEvent])(XEvent *) = {
[KeyPress] = kpress,
static int cmdfd;
static pid_t pid;
static Selection sel;
-static int iofd = -1;
+static int iofd;
static char **opt_cmd = NULL;
static char *opt_io = NULL;
static char *opt_title = NULL;
return p;
}
+char *
+xstrdup(char *s) {
+ char *p = strdup(s);
+
+ if (!p)
+ die("Out of memory\n");
+
+ return p;
+}
+
int
utf8decode(char *s, long *u) {
uchar c;
/* append every set & selected glyph to the selection */
for(y = sel.nb.y; y < sel.ne.y + 1; y++) {
gp = &term.line[y][0];
- last = gp + term.col;
+ last = &gp[term.col-1];
- while(--last >= gp && !(selected(last - gp, y) && \
- strcmp(last->c, " ") != 0))
- /* nothing */;
+ while(last >= gp && !(selected(last - gp, y) &&
+ strcmp(last->c, " ") != 0)) {
+ --last;
+ }
for(x = 0; gp <= last; x++, ++gp) {
if(!selected(x, y) || (gp->mode & ATTR_WDUMMY))
cmdfd = m;
signal(SIGCHLD, sigchld);
if(opt_io) {
+ term.mode |= MODE_PRINT;
iofd = (!strcmp(opt_io, "-")) ?
STDOUT_FILENO :
open(opt_io, O_WRONLY | O_CREAT, 0666);
DEFAULT(csiescseq.arg[0], 1);
tmoveto(term.c.x, term.c.y+csiescseq.arg[0]);
break;
+ case 'i': /* MC -- Media Copy */
+ switch(csiescseq.arg[0]) {
+ case 0:
+ case 1:
+ case 4:
+ term.mode &= ~MODE_PRINT;
+ break;
+ case 5:
+ term.mode |= MODE_PRINT;
+ break;
+ }
+ break;
case 'c': /* DA -- Device Attributes */
if(csiescseq.arg[0] == 0)
ttywrite(VT102ID, sizeof(VT102ID) - 1);
width = wcwidth(u8char);
}
- if(iofd != -1) {
+ if(IS_SET(MODE_PRINT) && iofd != -1) {
if(xwrite(iofd, c, len) < 0) {
fprintf(stderr, "Error writing in %s:%s\n",
opt_io, strerror(errno));
XftDrawRect(xw.draw, fg, winx, winy + font->ascent + 1,
width, 1);
}
- XCopyArea(xw.dpy, xw.buf, xw.win, dc.gc, winx, winy, width,
- CEIL((font->ascent + font->descent) * chscale), winx, winy);
/* Reset clip to none. */
XftDrawSetClip(xw.draw, 0);
void
draw(void) {
drawregion(0, 0, term.col, term.row);
+ XCopyArea(xw.dpy, xw.buf, xw.win, dc.gc, 0, 0, xw.w,
+ xw.h, 0, 0);
XSetForeground(xw.dpy, dc.gc,
dc.col[IS_SET(MODE_REVERSE)?
defaultfg : defaultbg].pixel);
if(argc > 1) {
opt_cmd = &argv[1];
if(argv[1] != NULL && opt_title == NULL) {
- titles = strdup(argv[1]);
+ titles = xstrdup(argv[1]);
opt_title = basename(titles);
}
}