#define USAGE \
"st-" VERSION ", (c) 2010-2011 st engineers\n" \
- "usage: st [-t title] [-c class] [-v] [-e command...]\n"
+ "usage: st [-t title] [-c class] [-w windowid] [-v] [-e command...]\n"
/* Arbitrary sizes */
#define ESC_TITLE_SIZ 256
[VisibilityNotify] = visibility,
[UnmapNotify] = unmap,
[Expose] = expose,
+ [EnterNotify] = focus,
+ [LeaveNotify] = focus,
[FocusIn] = focus,
[FocusOut] = focus,
[MotionNotify] = bmotion,
static Selection sel;
static char **opt_cmd = NULL;
static char *opt_title = NULL;
+static char *opt_embed = NULL;
static char *opt_class = NULL;
int
if(oldey != sel.ey || oldex != sel.ex) {
int starty = MIN(oldey, sel.ey);
int endy = MAX(oldey, sel.ey);
- drawregion(0, (starty > 0 ? starty : 0), term.col, (sel.ey < term.row ? endy+1 : term.row));
+ drawregion(0, (starty > 0 ? starty : 0), term.col, (endy < term.row ? endy+1 : term.row));
}
}
}
xinit(void) {
XSetWindowAttributes attrs;
Cursor cursor;
+ Window parent;
if(!(xw.dpy = XOpenDisplay(NULL)))
die("Can't open display\n");
xloadcols();
/* window - default size */
- xw.bufh = 24 * xw.ch;
- xw.bufw = 80 * xw.cw;
+ xw.bufh = term.row * xw.ch;
+ xw.bufw = term.col * xw.cw;
xw.h = xw.bufh + 2*BORDER;
xw.w = xw.bufw + 2*BORDER;
attrs.bit_gravity = NorthWestGravity;
attrs.event_mask = FocusChangeMask | KeyPressMask
| ExposureMask | VisibilityChangeMask | StructureNotifyMask
- | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
+ | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask
+ | EnterWindowMask | LeaveWindowMask;
attrs.colormap = xw.cmap;
- xw.win = XCreateWindow(xw.dpy, XRootWindow(xw.dpy, xw.scr), 0, 0,
+ parent = opt_embed ? strtol(opt_embed, NULL, 0) : XRootWindow(xw.dpy, xw.scr);
+ xw.win = XCreateWindow(xw.dpy, parent, 0, 0,
xw.w, xw.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
XDefaultVisual(xw.dpy, xw.scr),
CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask
void
focus(XEvent *ev) {
- if(ev->type == FocusIn) {
+ if(ev->type == FocusIn || ev->type == EnterNotify) {
xw.state |= WIN_FOCUSED;
xseturgency(0);
} else
case 'c':
if(++i < argc) opt_class = argv[i];
break;
+ case 'w':
+ if(++i < argc) opt_embed = argv[i];
+ break;
case 'e':
/* eat every remaining arguments */
if(++i < argc) opt_cmd = &argv[i];