add -w option to embed st. (thx nodus cursorius)

dev
Aurélien Aptel 2011-06-08 21:35:58 +02:00
parent 4736edd469
commit 3959a99293
2 changed files with 14 additions and 2 deletions

6
st.1
View File

@ -7,6 +7,8 @@ st \- simple terminal
.IR class ] .IR class ]
.RB [ \-t .RB [ \-t
.IR title ] .IR title ]
.RB [ \-w
.IR windowid ]
.RB [ \-v ] .RB [ \-v ]
.RB [ \-e .RB [ \-e
.IR command ...] .IR command ...]
@ -21,6 +23,10 @@ defines the window title (default 'st').
.BI \-c " class" .BI \-c " class"
defines the window class (default $TERM). defines the window class (default $TERM).
.TP .TP
.BI \-w " windowid"
embeds st within the window identified by
.I windowid
.TP
.B \-v .B \-v
prints version information to stderr, then exits. prints version information to stderr, then exits.
.TP .TP

10
st.c
View File

@ -35,7 +35,7 @@
#define USAGE \ #define USAGE \
"st-" VERSION ", (c) 2010-2011 st engineers\n" \ "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 */ /* Arbitrary sizes */
#define ESC_TITLE_SIZ 256 #define ESC_TITLE_SIZ 256
@ -260,6 +260,7 @@ static pid_t pid;
static Selection sel; static Selection sel;
static char **opt_cmd = NULL; static char **opt_cmd = NULL;
static char *opt_title = NULL; static char *opt_title = NULL;
static char *opt_embed = NULL;
static char *opt_class = NULL; static char *opt_class = NULL;
int int
@ -1606,6 +1607,7 @@ void
xinit(void) { xinit(void) {
XSetWindowAttributes attrs; XSetWindowAttributes attrs;
Cursor cursor; Cursor cursor;
Window parent;
if(!(xw.dpy = XOpenDisplay(NULL))) if(!(xw.dpy = XOpenDisplay(NULL)))
die("Can't open display\n"); die("Can't open display\n");
@ -1636,7 +1638,8 @@ xinit(void) {
| ButtonMotionMask | ButtonPressMask | ButtonReleaseMask; | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
attrs.colormap = xw.cmap; 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, xw.w, xw.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
XDefaultVisual(xw.dpy, xw.scr), XDefaultVisual(xw.dpy, xw.scr),
CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask
@ -1943,6 +1946,9 @@ main(int argc, char *argv[]) {
case 'c': case 'c':
if(++i < argc) opt_class = argv[i]; if(++i < argc) opt_class = argv[i];
break; break;
case 'w':
if(++i < argc) opt_embed = argv[i];
break;
case 'e': case 'e':
/* eat every remaining arguments */ /* eat every remaining arguments */
if(++i < argc) opt_cmd = &argv[i]; if(++i < argc) opt_cmd = &argv[i];