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>
This commit is contained in:
Jonas Rabenstein 2015-08-19 21:11:15 +02:00 committed by Christoph Lohmann
parent 55dc32b27b
commit 5d0c5be102
3 changed files with 17 additions and 0 deletions

View file

@ -55,6 +55,8 @@ static Key keys[] = { \
{ MODKEY, XK_q, killclient, { 0 } },
{ MODKEY, XK_u, focusurgent, { .v = NULL } },
{ 0, XK_F11, fullscreen, { 0 } },
};

View file

@ -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

View file

@ -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);
@ -491,6 +492,17 @@ focusonce(const Arg *arg) {
nextfocus = True;
}
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;