st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit 3959a99293785e603270d8798fbe0cb2ba0ae0ee
parent 4736edd469d07685f6ceeb4bfe438ba48335bd81
Author: Aurélien Aptel <aurelien.aptel@gmail.com>
Date:   Wed,  8 Jun 2011 21:35:58 +0200

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

Diffstat:
Mst.1 | 6++++++
Mst.c | 10++++++++--
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/st.1 b/st.1
@@ -7,6 +7,8 @@ st \- simple terminal
 .IR class ]
 .RB [ \-t 
 .IR title ]
+.RB [ \-w 
+.IR windowid ]
 .RB [ \-v ]
 .RB [ \-e
 .IR command ...]
@@ -21,6 +23,10 @@ defines the window title (default 'st').
 .BI \-c " class"
 defines the window class (default $TERM).
 .TP
+.BI \-w " windowid"
+embeds st within the window identified by 
+.I windowid
+.TP
 .B \-v
 prints version information to stderr, then exits.
 .TP
diff --git a/st.c b/st.c
@@ -35,7 +35,7 @@
 
 #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
@@ -260,6 +260,7 @@ static pid_t pid;
 static Selection sel;
 static char **opt_cmd  = NULL;
 static char *opt_title = NULL;
+static char *opt_embed = NULL;
 static char *opt_class = NULL;
 
 int
@@ -1606,6 +1607,7 @@ void
 xinit(void) {
     XSetWindowAttributes attrs;
     Cursor cursor;
+    Window parent;
 
     if(!(xw.dpy = XOpenDisplay(NULL)))
         die("Can't open display\n");
@@ -1636,7 +1638,8 @@ xinit(void) {
         | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
     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
@@ -1943,6 +1946,9 @@ main(int argc, char *argv[]) {
         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];