static void xdrawcursor(void);
static void xinit(void);
static void xloadcols(void);
+static void xresettitle(void);
static void xseturgency(int);
static void xsetsel(char*);
static void xresize(int, int);
static int cmdfd;
static pid_t pid;
static Selection sel;
-static FILE *fileio;
+static int iofd = -1;
static char **opt_cmd = NULL;
static char *opt_io = NULL;
static char *opt_title = NULL;
signal(SIGCHLD, sigchld);
if(opt_io) {
if(!strcmp(opt_io, "-")) {
- fileio = stdout;
+ iofd = STDOUT_FILENO;
} else {
- if(!(fileio = fopen(opt_io, "w"))) {
+ if((iofd = open(opt_io, O_WRONLY | O_CREAT, 0666)) < 0) {
fprintf(stderr, "Error opening %s:%s\n",
opt_io, strerror(errno));
}
case 7:
term.c.attr.mode |= ATTR_REVERSE;
break;
+ case 21:
case 22:
term.c.attr.mode &= ~ATTR_BOLD;
break;
tputc(char *c) {
char ascii = *c;
- if(fileio) {
- putc(ascii, fileio);
- fflush(fileio);
- }
+ if(iofd != -1)
+ write(iofd, c, 1);
if(term.esc & ESC_START) {
if(term.esc & ESC_CSI) {
case 'c': /* RIS -- Reset to inital state */
treset();
term.esc = 0;
+ xresettitle();
break;
case '=': /* DECPAM -- Application keypad */
term.mode |= MODE_APPKEYPAD;
xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False);
- XStoreName(xw.dpy, xw.win, opt_title ? opt_title : "st");
+ xresettitle();
XMapWindow(xw.dpy, xw.win);
xhints();
XSync(xw.dpy, 0);
xcopy();
}
+void
+xresettitle(void) {
+ XStoreName(xw.dpy, xw.win, opt_title ? opt_title : "st");
+}
+
void
redraw(void) {
struct timespec tv = {0, REDRAW_TIMEOUT * 1000};