X-Git-Url: https://git.xinqibao.xyz/st.git/blobdiff_plain/9f6d8845df3f81e2bc86f593a2f93e098422b2fa..bd5fdbe64c8abfb624ad59939ed9b221c8b04eef:/st.c diff --git a/st.c b/st.c index 900534b..2bbf484 100644 --- a/st.c +++ b/st.c @@ -486,6 +486,7 @@ static void *xrealloc(void *, size_t); static char *xstrdup(char *); static void usage(void); +static void version(void); static void (*handler[LASTEvent])(XEvent *) = { [KeyPress] = kpress, @@ -1440,6 +1441,8 @@ ttynew(void) if (openpty(&m, &s, NULL, NULL, &w) < 0) die("openpty failed: %s\n", strerror(errno)); + ttyresize(); + switch (pid = fork()) { case -1: die("fork failed\n"); @@ -1518,15 +1521,13 @@ ttywrite(const char *s, size_t n) continue; die("select failed: %s\n", strerror(errno)); } - if (FD_ISSET(cmdfd, &rfd)) - lim = ttyread(); if (FD_ISSET(cmdfd, &wfd)) { /* - * Only write 256 bytes at maximum. This seems to be a - * reasonable value for a serial line. Bigger values - * might clog the I/O. + * Only write the bytes written by ttywrite() or the + * default of 256. This seems to be a reasonable value + * for a serial line. Bigger values might clog the I/O. */ - if ((r = write(cmdfd, s, (n < 256)? n : 256)) < 0) + if ((r = write(cmdfd, s, (n < lim)? n : lim)) < 0) goto write_error; if (r < n) { /* @@ -1543,6 +1544,8 @@ ttywrite(const char *s, size_t n) break; } } + if (FD_ISSET(cmdfd, &rfd)) + lim = ttyread(); } return; @@ -3237,7 +3240,7 @@ xclear(int x1, int y1, int x2, int y2) void xhints(void) { - XClassHint class = {opt_class ? opt_class : termname, termname}; + XClassHint class = {termname, opt_class ? opt_class : termname}; XWMHints wm = {.flags = InputHint, .input = 1}; XSizeHints *sizeh = NULL; @@ -3469,7 +3472,7 @@ xinit(void) if (xw.gm & XNegative) xw.l += DisplayWidth(xw.dpy, xw.scr) - xw.w - 2; if (xw.gm & YNegative) - xw.t += DisplayWidth(xw.dpy, xw.scr) - xw.h - 2; + xw.t += DisplayHeight(xw.dpy, xw.scr) - xw.h - 2; /* Events */ xw.attrs.background_pixel = dc.col[defaultbg].pixel; @@ -4329,14 +4332,19 @@ run(void) void usage(void) { - die("%s " VERSION " (c) 2010-2015 st engineers\n" - "usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]\n" - " [-i] [-t title] [-T title] [-w windowid] [-e command ...]" - " [command ...]\n" - " st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]\n" - " [-i] [-t title] [-T title] [-w windowid] -l line" - " [stty_args ...]\n", - argv0); + die("usage: %s [-aiv] [-c class] [-f font] [-g geometry]" + " [-o file] [-T title]\n" + " [-t title] [-w windowid] [[-e] command [args ...]]\n" + " %s [-aiv] [-c class] [-f font] [-g geometry]" + " [-o file] [-T title]\n" + " [-t title] [-w windowid] -l line [stty_args ...]\n", + argv0, argv0); +} + +void +version(void) +{ + die("%s " VERSION " (c) 2010-2016 st engineers\n", argv0); } int @@ -4383,6 +4391,8 @@ main(int argc, char *argv[]) opt_embed = EARGF(usage()); break; case 'v': + version(); + break; default: usage(); } ARGEND;