~kris/suckless

tabbed

c6be3a7d9f36725fa968383e979d1ce00488bd8b — Enno Boland (tox) 16 years ago 2265312
tabbed remembers last viewed tab; open new tabs focused/unfocused can be configured now.
2 files changed, 25 insertions(+), 5 deletions(-)

M config.def.h
M tabbed.c
M config.def.h => config.def.h +2 -0
@@ 6,6 6,7 @@ static const char *selfgcolor  = "#ffffff";
static const char *before      = "<";
static const char *after       = ">";
static const int tabwidth      = 200;
static const Bool foreground   = False;

#define MODKEY ControlMask
static Key keys[] = { \


@@ 13,6 14,7 @@ static Key keys[] = { \
	{ MODKEY|ShiftMask,             XK_Return, spawn,          { .v = (char*[]){ "surf", "-e", winid, NULL} } },
	{ MODKEY|ShiftMask,             XK_l,      rotate,         { .i = +1 } },
	{ MODKEY|ShiftMask,             XK_h,      rotate,         { .i = -1 } },
	{ MODKEY,                       XK_Tab,    rotate,         { .i = 0 } },
	{ MODKEY,                       XK_1,      move,           { .i = 0 } },
	{ MODKEY,                       XK_2,      move,           { .i = 1 } },
	{ MODKEY,                       XK_3,      move,           { .i = 2 } },

M tabbed.c => tabbed.c +23 -5
@@ 102,6 102,7 @@ static void enternotify(const XEvent *e);
static void expose(const XEvent *e);
static void focus(Client *c);
static void focusin(const XEvent *e);
static void focusonce(const Arg *arg);
static Client *getclient(Window w);
static unsigned long getcolor(const char *colstr);
static Client *getfirsttab();


@@ 145,12 146,12 @@ static void (*handler[LASTEvent]) (const XEvent *) = {
};
static int bh, wx, wy, ww, wh;
static unsigned int numlockmask = 0;
static Bool running = True;
static Bool running = True, nextfocus;
static Display *dpy;
static DC dc;
static Atom wmatom[WMLast], xembedatom;
static Window root, win;
static Client *clients = NULL, *sel = NULL;
static Client *clients = NULL, *sel = NULL, *lastsel = NULL;
static int (*xerrorxlib)(Display *, XErrorEvent *);
static char winid[64];
/* configuration, allows nested code to access above variables */


@@ 387,6 388,8 @@ focus(Client *c) {
		return;
	}
	if(!c)
		c = sel ? sel : clients;
	if(!c)
		return;
	resize(c, ww, wh - bh);
	XRaiseWindow(dpy, c->win);


@@ 394,6 397,10 @@ focus(Client *c) {
	sendxembed(c, XEMBED_FOCUS_IN, XEMBED_FOCUS_CURRENT, 0, 0);
	sendxembed(c, XEMBED_WINDOW_ACTIVATE, 0, 0, 0);
	XStoreName(dpy, win, c->name);
	if(sel != c) {
		lastsel = sel;
		puts("set");
	}
	sel = c;
	drawbar();
}


@@ 403,6 410,11 @@ focusin(const XEvent *e) {
	focus(sel);
}

void
focusonce(const Arg *arg) {
	nextfocus = True;
}

Client *
getclient(Window w) {
	Client *c;


@@ 591,7 603,8 @@ manage(Window w) {
		e.xclient.data.l[4] = 0;
		XSendEvent(dpy, root, False, NoEventMask, &e);
		XSync(dpy, False);
		focus(c);
		focus(nextfocus ? c : sel);
		nextfocus = foreground;
	}
}



@@ 649,7 662,9 @@ void
rotate(const Arg *arg) {
	Client *c;

	if(arg->i > 0) {
	if(arg->i == 0)
		focus(lastsel);
	else if(arg->i > 0) {
		if(sel && sel->next)
			focus(sel->next);
		else


@@ 731,6 746,7 @@ setup(void) {
	XSetClassHint(dpy, win, &class_hint);
	XSetWMProtocols(dpy, win, &wmatom[WMDelete], 1);
	snprintf(winid, LENGTH(winid), "%u", (int)win);
	nextfocus = foreground;
	focus(clients);
}



@@ 777,7 793,9 @@ unmanage(Client *c) {
		for(pc = clients; pc && pc->next && pc->next != c; pc = pc->next);
		pc->next = c->next;
	}
	focus(c->next ? c->next : pc);
	if(c == lastsel)
		lastsel = pc;
	focus(lastsel);
	free(c);
	XSync(dpy, False);
}