commit 39594f1935e8cd8f27c55b4716b8194a99e4b65d
parent 34a643f79c3c1dc2577990ce0c8d69703f6738b4
Author: Christoph Lohmann <20h@r-36.net>
Date:   Tue, 25 Dec 2012 16:50:32 +0100
Adding the -c option to close on last client close.
Thanks for the suggestion by Kyle Kramer!
Diffstat:
2 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/tabbed.1 b/tabbed.1
@@ -3,6 +3,7 @@
 tabbed \- generic tabbed interface
 .SH SYNOPSIS
 .B tabbed
+.RB [ \-c ]
 .RB [ \-d ]
 .RB [ \-h ]
 .RB [ \-s ]
@@ -21,12 +22,15 @@ disabled by providing the -s parameter. If no command is provided
 tabbed will just print its xid and run no command.
 .SH OPTIONS
 .TP
+.B \-c
+close tabbed when the last tab is closed. Mutually exclusive with -f.
+.TP
 .B \-d
 detaches tabbed from the terminal and prints its XID to stdout.
 .TP
 .B \-f
 fill up tabbed again by spawning the provided command, when the last tab is
-closed.
+closed. Mutually exclusive with -c.
 .TP
 .B \-h
 will print the usage of tabbed.
diff --git a/tabbed.c b/tabbed.c
@@ -147,7 +147,8 @@ static void (*handler[LASTEvent]) (const XEvent *) = {
 };
 static int bh, wx, wy, ww, wh;
 static unsigned int numlockmask = 0;
-static Bool running = True, nextfocus, doinitspawn = True, fillagain = False;
+static Bool running = True, nextfocus, doinitspawn = True,
+	    fillagain = False, closelastclient = False;
 static Display *dpy;
 static DC dc;
 static Atom wmatom[WMLast];
@@ -980,8 +981,13 @@ unmanage(int c) {
 		focus(sel);
 	}
 
-	if(nclients == 0 && fillagain)
-		spawn(NULL);
+	if(nclients == 0) {
+		if (closelastclient) {
+			running = False;
+		} else if (fillagain && running) {
+			spawn(NULL);
+		}
+	}
 
 	drawbar();
 	XSync(dpy, False);
@@ -1057,14 +1063,18 @@ usage(void) {
 
 int
 main(int argc, char *argv[]) {
-	int detach = 0, replace = 0;
+	Bool detach = False;
+	int replace = 0;
 
 	ARGBEGIN {
+	case 'c':
+		closelastclient = True;
+		fillagain = False;
 	case 'd':
-		detach = 1;
+		detach = True;
 		break;
 	case 'f':
-		fillagain = 1;
+		fillagain = True;
 		break;
 	case 'n':
 		wmname = EARGF(usage());
@@ -1101,9 +1111,9 @@ main(int argc, char *argv[]) {
 	fflush(NULL);
 
 	if(detach) {
-		if(fork() == 0)
+		if(fork() == 0) {
 			fclose(stdout);
-		else {
+		} else {
 			if(dpy)
 				close(ConnectionNumber(dpy));
 			return EXIT_SUCCESS;