Adding a geometry flag to tabbed. - tabbed - tab interface for application supp… | |
git clone git://git.suckless.org/tabbed | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 9b007101f20b0f6cb011111486c79c34078b7b5d | |
parent 97ce0f717a69717ab28bc59072fef42d94b1fda8 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Tue, 20 Aug 2013 18:44:00 +0200 | |
Adding a geometry flag to tabbed. | |
Thanks for the hint Thorsten Glaser! | |
Diffstat: | |
M tabbed.1 | 8 ++++++++ | |
M tabbed.c | 54 +++++++++++++++++++++++++++++… | |
2 files changed, 59 insertions(+), 3 deletions(-) | |
--- | |
diff --git a/tabbed.1 b/tabbed.1 | |
@@ -8,6 +8,8 @@ tabbed \- generic tabbed interface | |
.RB [ \-h ] | |
.RB [ \-s ] | |
.RB [ \-v ] | |
+.RB [ \-g | |
+.IR geometry ] | |
.RB [ \-n | |
.IR name ] | |
.RB [ \-p | |
@@ -37,6 +39,12 @@ closed. Mutually exclusive with -c. | |
.B \-h | |
will print the usage of tabbed. | |
.TP | |
+.BI \-g " geometry" | |
+defines the X11 geometry string, which will fixate the height and width of st. | |
+Them form is [=][<width>{xX}<height>][{+-}<xoffset>{+-}<yoffset>]. See | |
+.BR XParseGeometry (3) | |
+for further details. | |
+.TP | |
.BI \-n " name" | |
will set the WM_CLASS attribute to | |
.I name. | |
diff --git a/tabbed.c b/tabbed.c | |
@@ -160,6 +160,7 @@ static int (*xerrorxlib)(Display *, XErrorEvent *); | |
static char winid[64]; | |
static char **cmd = NULL; | |
static char *wmname = "tabbed"; | |
+static const char *geometry = NULL; | |
char *argv0; | |
@@ -866,6 +867,10 @@ setcmd(int argc, char *argv[], int replace) { | |
void | |
setup(void) { | |
+ int bitm, tx, ty, tw, th, dh, dw, isfixed; | |
+ XClassHint class_hint; | |
+ XSizeHints *size_hint; | |
+ | |
/* clean up any zombies immediately */ | |
sigchld(0); | |
@@ -889,6 +894,34 @@ setup(void) { | |
wy = 0; | |
ww = 800; | |
wh = 600; | |
+ isfixed = 0; | |
+ | |
+ if(geometry) { | |
+ tx = ty = tw = th = 0; | |
+ bitm = XParseGeometry(geometry, &tx, &ty, (unsigned *)&tw, | |
+ (unsigned *)&th); | |
+ if(bitm & XValue) | |
+ wx = tx; | |
+ if(bitm & YValue) | |
+ wy = ty; | |
+ if(bitm & WidthValue) | |
+ ww = tw; | |
+ if(bitm & HeightValue) | |
+ wh = th; | |
+ if(bitm & XNegative && wx == 0) | |
+ wx = -1; | |
+ if(bitm & YNegative && wy == 0) | |
+ wy = -1; | |
+ if(bitm & (HeightValue|WidthValue)) | |
+ isfixed = 1; | |
+ | |
+ dw = DisplayWidth(dpy, screen); | |
+ dh = DisplayHeight(dpy, screen); | |
+ if(wx < 0) | |
+ wx = dw + wx - ww - 1; | |
+ if(wy < 0) | |
+ wy = dh + wy - wh - 1; | |
+ } | |
dc.norm[ColBG] = getcolor(normbgcolor); | |
dc.norm[ColFG] = getcolor(normfgcolor); | |
@@ -908,11 +941,23 @@ setup(void) { | |
StructureNotifyMask|SubstructureRedirectMask); | |
xerrorxlib = XSetErrorHandler(xerror); | |
- XClassHint class_hint; | |
class_hint.res_name = wmname; | |
class_hint.res_class = "tabbed"; | |
XSetClassHint(dpy, win, &class_hint); | |
+ size_hint = XAllocSizeHints(); | |
+ if(!isfixed) { | |
+ size_hint->flags = PSize; | |
+ size_hint->height = wh; | |
+ size_hint->width = ww; | |
+ } else { | |
+ size_hint->flags = PMaxSize | PMinSize; | |
+ size_hint->min_width = size_hint->max_width = ww; | |
+ size_hint->min_height = size_hint->max_height = wh; | |
+ } | |
+ XSetWMProperties(dpy, win, NULL, NULL, NULL, 0, size_hint, NULL, NULL); | |
+ XFree(size_hint); | |
+ | |
XSetWMProtocols(dpy, win, &wmatom[WMDelete], 1); | |
snprintf(winid, sizeof(winid), "%lu", win); | |
@@ -1105,8 +1150,8 @@ char *argv0; | |
void | |
usage(void) { | |
- die("usage: %s [-dfhsv] [-n name] [-p [s+/-]pos] [-r narg]" | |
- " command...\n", argv0); | |
+ die("usage: %s [-dfhsv] [-g geometry] [-n name] [-p [s+/-]pos] " | |
+ "[-r narg] command...\n", argv0); | |
} | |
int | |
@@ -1125,6 +1170,9 @@ main(int argc, char *argv[]) { | |
case 'f': | |
fillagain = True; | |
break; | |
+ case 'g': | |
+ geometry = EARGF(usage()); | |
+ break; | |
case 'n': | |
wmname = EARGF(usage()); | |
break; |