Adding the -n name parameter to set WM_CLASS. Thanks Gavin Wahl
<gavinwahl@gmail.com>!
This commit is contained in:
parent
45409110a2
commit
ef13e0d92e
6
tabbed.1
6
tabbed.1
|
@ -7,6 +7,8 @@ tabbed \- generic tabbed interface
|
|||
.RB [ \-h ]
|
||||
.RB [ \-s ]
|
||||
.RB [ \-v ]
|
||||
.RB [ \-n
|
||||
.IR name ]
|
||||
.IR [ command ... ]
|
||||
.SH DESCRIPTION
|
||||
.B tabbed
|
||||
|
@ -23,6 +25,10 @@ detaches tabbed from the terminal and prints its XID to stdout.
|
|||
.B \-h
|
||||
will print the usage of tabbed.
|
||||
.TP
|
||||
.BI \-n " name"
|
||||
will set the WM_CLASS attribute to
|
||||
.I name.
|
||||
.TP
|
||||
.B \-s
|
||||
will disable automatic spawning of the command.
|
||||
.TP
|
||||
|
|
34
tabbed.c
34
tabbed.c
|
@ -153,6 +153,7 @@ static Client *clients = NULL, *sel = NULL, *lastsel = NULL;
|
|||
static int (*xerrorxlib)(Display *, XErrorEvent *);
|
||||
static char winid[64];
|
||||
static char **cmd = NULL;
|
||||
static char *wmname = "tabbed";
|
||||
|
||||
char *argv0;
|
||||
/* configuration, allows nested code to access above variables */
|
||||
|
@ -732,20 +733,24 @@ void
|
|||
setup(void) {
|
||||
/* clean up any zombies immediately */
|
||||
sigchld(0);
|
||||
|
||||
/* init screen */
|
||||
screen = DefaultScreen(dpy);
|
||||
root = RootWindow(dpy, screen);
|
||||
initfont(font);
|
||||
bh = dc.h = dc.font.height + 2;
|
||||
|
||||
/* init atoms */
|
||||
wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
|
||||
wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
|
||||
xembedatom = XInternAtom(dpy, "_XEMBED", False);
|
||||
|
||||
/* init appearance */
|
||||
wx = 0;
|
||||
wy = 0;
|
||||
ww = 800;
|
||||
wh = 600;
|
||||
|
||||
dc.norm[ColBG] = getcolor(normbgcolor);
|
||||
dc.norm[ColFG] = getcolor(normfgcolor);
|
||||
dc.sel[ColBG] = getcolor(selbgcolor);
|
||||
|
@ -761,11 +766,14 @@ setup(void) {
|
|||
ButtonPressMask|ExposureMask|KeyPressMask|
|
||||
StructureNotifyMask|SubstructureRedirectMask);
|
||||
xerrorxlib = XSetErrorHandler(xerror);
|
||||
|
||||
XClassHint class_hint;
|
||||
class_hint.res_name = "tabbed";
|
||||
class_hint.res_class = "Tabbed";
|
||||
class_hint.res_name = wmname;
|
||||
class_hint.res_class = "tabbed";
|
||||
XSetClassHint(dpy, win, &class_hint);
|
||||
|
||||
XSetWMProtocols(dpy, win, &wmatom[WMDelete], 1);
|
||||
|
||||
snprintf(winid, sizeof winid, "%lu", win);
|
||||
nextfocus = foreground;
|
||||
focus(clients);
|
||||
|
@ -878,7 +886,7 @@ char *argv0;
|
|||
void
|
||||
usage(void)
|
||||
{
|
||||
die("usage: %s [-dhsv] command...\n", argv0);
|
||||
die("usage: %s [-dhsv] [-n name] command...\n", argv0);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -886,22 +894,27 @@ main(int argc, char *argv[]) {
|
|||
int detach = 0;
|
||||
|
||||
ARGBEGIN {
|
||||
case 'd':
|
||||
detach = 1;
|
||||
break;
|
||||
case 'n':
|
||||
wmname = EARGF(usage());
|
||||
break;
|
||||
case 's':
|
||||
doinitspawn = False;
|
||||
break;
|
||||
case 'v':
|
||||
die("tabbed-"VERSION", © 2009-2012"
|
||||
" tabbed engineers, see LICENSE"
|
||||
" for details.\n");
|
||||
case 's':
|
||||
doinitspawn = False;
|
||||
break;
|
||||
default:
|
||||
case 'h':
|
||||
usage();
|
||||
case 'd':
|
||||
detach = 1;
|
||||
break;
|
||||
} ARGEND;
|
||||
|
||||
if(argc < 1)
|
||||
doinitspawn = False;
|
||||
|
||||
setcmd(argc, argv);
|
||||
|
||||
if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
|
||||
|
@ -911,6 +924,7 @@ main(int argc, char *argv[]) {
|
|||
setup();
|
||||
printf("0x%lx\n", win);
|
||||
fflush(NULL);
|
||||
|
||||
if(detach) {
|
||||
if(fork() == 0)
|
||||
fclose(stdout);
|
||||
|
@ -920,9 +934,11 @@ main(int argc, char *argv[]) {
|
|||
return EXIT_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
run();
|
||||
cleanup();
|
||||
XCloseDisplay(dpy);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue