~kris/suckless

tabbed

5d0c5be1028c67f3b499017c5c39019f4b1d8c10 — Jonas Rabenstein 11 years ago 55dc32b
focus urgent tabs

With a lot of open tabs its quite annoying to toggle through all tabs
until reaching the next one with an urgent hint set. Also with using
Ctrl-[0..9] to get to the first 10 tabs, in some cases this may have
disadvantages:
1. with more than 10 tabs, you can not use that quickselection
2. with a small tabbed window, you do not see every tab in the
   statusbar and therefore do not know which tab got urgent

Therefore I created a function, which iterates over all currently
managed tabs, focus the first urgent tab found or stays at the current
tab, if there is no urgent-tab. By default, that function is mapped to
Ctrl-u.

Signed-off-by: Jonas Rabenstein <jonas.rabenstein@studium.uni-erlangen.de>
Signed-off-by: Christoph Lohmann <20h@r-36.net>
3 files changed, 17 insertions(+), 0 deletions(-)

M config.def.h
M tabbed.1
M tabbed.c
M config.def.h => config.def.h +2 -0
@@ 55,6 55,8 @@ static Key keys[] = { \

	{ MODKEY,                       XK_q,      killclient,     { 0 } },

	{ MODKEY,                       XK_u,      focusurgent,    { .v = NULL } },

	{ 0,                            XK_F11,    fullscreen,     { 0 } },
};


M tabbed.1 => tabbed.1 +3 -0
@@ 134,6 134,9 @@ an already existing tab.
.B Ctrl\-q
close tab
.TP
.B Ctrl\-u
focus next urgent tab
.TP
.B Ctrl\-[0..9]
jumps to nth tab
.TP

M tabbed.c => tabbed.c +12 -0
@@ 104,6 104,7 @@ static void expose(const XEvent *e);
static void focus(int c);
static void focusin(const XEvent *e);
static void focusonce(const Arg *arg);
static void focusurgent(const Arg *);
static void fullscreen(const Arg *arg);
static char* getatom(int a);
static int getclient(Window w);


@@ 492,6 493,17 @@ focusonce(const Arg *arg) {
}

void
focusurgent(const Arg *args) {
	int c;
	for(c = (sel+1)%nclients; c != sel; c = (c+1)%nclients) {
		if(clients[c]->urgent) {
			focus(c);
			return;
		}
	}
}

void
fullscreen(const Arg *arg) {
	XEvent e;