Style cleanup - tabbed - tab interface for application supporting Xembed | |
git clone git://git.suckless.org/tabbed | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 735bed582460a2150702a74f24b6822397e41fc0 | |
parent 46887ac5505076f3a3907e3fd4a5e3ec00f29d63 | |
Author: Quentin Rameau <[email protected]> | |
Date: Sun, 3 Jan 2016 13:00:57 +0100 | |
Style cleanup | |
Signed-off-by: Christoph Lohmann <[email protected]> | |
Diffstat: | |
M config.def.h | 61 ++++++++++++++++-------------… | |
M config.mk | 1 - | |
M tabbed.c | 699 ++++++++++++++++-------------… | |
M xembed.c | 11 +++++------ | |
4 files changed, 407 insertions(+), 365 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
@@ -23,42 +23,43 @@ static int newposition = 0; | |
static Bool npisrelative = False; | |
#define SETPROP(p) { \ | |
- .v = (char *[]){ "/bin/sh", "-c", \ | |
- "prop=\"`xwininfo -children -id $1 | grep '^ 0x' | sed -e'… | |
- "xprop -id $1 -f $0 8s -set $0 \"$prop\"", \ | |
- p, winid, NULL \ | |
- } \ | |
+ .v = (char *[]){ "/bin/sh", "-c", \ | |
+ "prop=\"`xwininfo -children -id $1 | grep '^ 0x' |" \ | |
+ "sed -e's@^ *\\(0x[0-9a-f]*\\) \"\\([^\"]*\\)\".*@\\1 \\2@' |"… | |
+ "xargs -0 printf %b | dmenu -l 10`\" &&" \ | |
+ "xprop -id $1 -f $0 8s -set $0 \"$prop\"", \ | |
+ p, winid, NULL \ | |
+ } \ | |
} | |
#define MODKEY ControlMask | |
-static Key keys[] = { \ | |
- /* modifier key function argument */ | |
- { MODKEY|ShiftMask, XK_Return, focusonce, { 0 } }, | |
- { MODKEY|ShiftMask, XK_Return, spawn, { 0 } }, | |
- { MODKEY, XK_t, spawn, SETPROP("_T… | |
+static Key keys[] = { | |
+ /* modifier key function argument */ | |
+ { MODKEY|ShiftMask, XK_Return, focusonce, { 0 } }, | |
+ { MODKEY|ShiftMask, XK_Return, spawn, { 0 } }, | |
+ { MODKEY, XK_t, spawn, SETPROP("_TABBED_SELEC… | |
- { MODKEY|ShiftMask, XK_l, rotate, { .i = +1 }… | |
- { MODKEY|ShiftMask, XK_h, rotate, { .i = -1 }… | |
- { MODKEY|ShiftMask, XK_j, movetab, { .i = -1 }… | |
- { MODKEY|ShiftMask, XK_k, movetab, { .i = +1 }… | |
- { MODKEY, XK_Tab, rotate, { .i = 0 } … | |
+ { MODKEY|ShiftMask, XK_l, rotate, { .i = +1 } }, | |
+ { MODKEY|ShiftMask, XK_h, rotate, { .i = -1 } }, | |
+ { MODKEY|ShiftMask, XK_j, movetab, { .i = -1 } }, | |
+ { MODKEY|ShiftMask, XK_k, movetab, { .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 } … | |
- { MODKEY, XK_4, move, { .i = 3 } … | |
- { MODKEY, XK_5, move, { .i = 4 } … | |
- { MODKEY, XK_6, move, { .i = 5 } … | |
- { MODKEY, XK_7, move, { .i = 6 } … | |
- { MODKEY, XK_8, move, { .i = 7 } … | |
- { MODKEY, XK_9, move, { .i = 8 } … | |
- { MODKEY, XK_0, move, { .i = 9 } … | |
+ { MODKEY, XK_1, move, { .i = 0 } }, | |
+ { MODKEY, XK_2, move, { .i = 1 } }, | |
+ { MODKEY, XK_3, move, { .i = 2 } }, | |
+ { MODKEY, XK_4, move, { .i = 3 } }, | |
+ { MODKEY, XK_5, move, { .i = 4 } }, | |
+ { MODKEY, XK_6, move, { .i = 5 } }, | |
+ { MODKEY, XK_7, move, { .i = 6 } }, | |
+ { MODKEY, XK_8, move, { .i = 7 } }, | |
+ { MODKEY, XK_9, move, { .i = 8 } }, | |
+ { MODKEY, XK_0, move, { .i = 9 } }, | |
- { MODKEY, XK_q, killclient, { 0 } }, | |
+ { MODKEY, XK_q, killclient, { 0 } }, | |
- { MODKEY, XK_u, focusurgent, { .v = NULL… | |
- { MODKEY|ShiftMask, XK_u, toggle, { .v = (voi… | |
+ { MODKEY, XK_u, focusurgent, { 0 } }, | |
+ { MODKEY|ShiftMask, XK_u, toggle, { .v = (void*) &urgent… | |
- { 0, XK_F11, fullscreen, { 0 } }, | |
+ { 0, XK_F11, fullscreen, { 0 } }, | |
}; | |
- | |
diff --git a/config.mk b/config.mk | |
@@ -22,4 +22,3 @@ LDFLAGS = -s ${LIBS} | |
# compiler and linker | |
CC = cc | |
- | |
diff --git a/tabbed.c b/tabbed.c | |
@@ -4,12 +4,12 @@ | |
#include <sys/wait.h> | |
#include <locale.h> | |
-#include <stdarg.h> | |
-#include <unistd.h> | |
#include <signal.h> | |
+#include <stdarg.h> | |
#include <stdio.h> | |
-#include <string.h> | |
#include <stdlib.h> | |
+#include <string.h> | |
+#include <unistd.h> | |
#include <X11/Xatom.h> | |
#include <X11/Xlib.h> | |
#include <X11/Xproto.h> | |
@@ -40,15 +40,15 @@ | |
#define XEMBED_FOCUS_LAST 2 | |
/* Macros */ | |
-#define MAX(a, b) ((a) > (b) ? (a) : (b)) | |
-#define MIN(a, b) ((a) < (b) ? (a) : (b)) | |
-#define LENGTH(x) (sizeof((x)) / sizeof(*(x))) | |
-#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask)) | |
-#define TEXTW(x) (textnw(x, strlen(x)) + dc.font.height) | |
+#define MAX(a, b) ((a) > (b) ? (a) : (b)) | |
+#define MIN(a, b) ((a) < (b) ? (a) : (b)) | |
+#define LENGTH(x) (sizeof((x)) / sizeof(*(x))) | |
+#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) | |
+#define TEXTW(x) (textnw(x, strlen(x)) + dc.font.height) | |
-enum { ColFG, ColBG, ColLast }; /* color */ | |
+enum { ColFG, ColBG, ColLast }; /* color */ | |
enum { WMProtocols, WMDelete, WMName, WMState, WMFullscreen, | |
- XEmbed, WMSelectTab, WMLast }; /* default atoms */ | |
+ XEmbed, WMSelectTab, WMLast }; /* default atoms */ | |
typedef union { | |
int i; | |
@@ -78,7 +78,7 @@ typedef struct { | |
} font; | |
} DC; /* draw context */ | |
-typedef struct Client { | |
+typedef struct { | |
char name[256]; | |
Window win; | |
int tabx; | |
@@ -93,7 +93,6 @@ static void clientmessage(const XEvent *e); | |
static void configurenotify(const XEvent *e); | |
static void configurerequest(const XEvent *e); | |
static void createnotify(const XEvent *e); | |
-static void unmapnotify(const XEvent *e); | |
static void destroynotify(const XEvent *e); | |
static void die(const char *errstr, ...); | |
static void drawbar(void); | |
@@ -104,9 +103,9 @@ 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 focusurgent(const Arg *arg); | |
static void fullscreen(const Arg *arg); | |
-static char* getatom(int a); | |
+static char *getatom(int a); | |
static int getclient(Window w); | |
static unsigned long getcolor(const char *colstr); | |
static int getfirsttab(void); | |
@@ -124,13 +123,14 @@ static void resize(int c, int w, int h); | |
static void rotate(const Arg *arg); | |
static void run(void); | |
static void sendxembed(int c, long msg, long detail, long d1, long d2); | |
-static void setup(void); | |
static void setcmd(int argc, char *argv[], int); | |
+static void setup(void); | |
static void sigchld(int unused); | |
static void spawn(const Arg *arg); | |
static int textnw(const char *text, unsigned int len); | |
static void toggle(const Arg *arg); | |
static void unmanage(int c); | |
+static void unmapnotify(const XEvent *e); | |
static void updatenumlockmask(void); | |
static void updatetitle(int c); | |
static int xerror(Display *dpy, XErrorEvent *ee); | |
@@ -153,21 +153,21 @@ static void (*handler[LASTEvent]) (const XEvent *) = { | |
[PropertyNotify] = propertynotify, | |
}; | |
static int bh, wx, wy, ww, wh; | |
-static unsigned int numlockmask = 0; | |
+static unsigned int numlockmask; | |
static Bool running = True, nextfocus, doinitspawn = True, | |
- fillagain = False, closelastclient = False; | |
+ fillagain = False, closelastclient = False; | |
static Display *dpy; | |
static DC dc; | |
static Atom wmatom[WMLast]; | |
static Window root, win; | |
-static Client **clients = NULL; | |
-static int nclients = 0, sel = -1, lastsel = -1; | |
+static Client **clients; | |
+static int nclients, sel = -1, lastsel = -1; | |
static int (*xerrorxlib)(Display *, XErrorEvent *); | |
-static int cmd_append_pos = 0; | |
+static int cmd_append_pos; | |
static char winid[64]; | |
-static char **cmd = NULL; | |
+static char **cmd; | |
static char *wmname = "tabbed"; | |
-static const char *geometry = NULL; | |
+static const char *geometry; | |
char *argv0; | |
@@ -175,21 +175,21 @@ char *argv0; | |
#include "config.h" | |
void | |
-buttonpress(const XEvent *e) { | |
+buttonpress(const XEvent *e) | |
+{ | |
const XButtonPressedEvent *ev = &e->xbutton; | |
- int i; | |
- int fc; | |
+ int i, fc; | |
Arg arg; | |
- if(ev->y < 0 || ev->y > bh) | |
+ if (ev->y < 0 || ev->y > bh) | |
return; | |
- if(((fc = getfirsttab()) > 0 && ev->x < TEXTW(before)) || ev->x < 0) | |
+ if (((fc = getfirsttab()) > 0 && ev->x < TEXTW(before)) || ev->x < 0) | |
return; | |
- for(i = fc; i < nclients; i++) { | |
- if(clients[i]->tabx > ev->x) { | |
- switch(ev->button) { | |
+ for (i = fc; i < nclients; i++) { | |
+ if (clients[i]->tabx > ev->x) { | |
+ switch (ev->button) { | |
case Button1: | |
focus(i); | |
break; | |
@@ -197,7 +197,7 @@ buttonpress(const XEvent *e) { | |
focus(i); | |
killclient(NULL); | |
break; | |
- case Button4: | |
+ case Button4: /* FALLTHROUGH */ | |
case Button5: | |
arg.i = ev->button == Button4 ? -1 : 1; | |
rotate(&arg); | |
@@ -209,10 +209,11 @@ buttonpress(const XEvent *e) { | |
} | |
void | |
-cleanup(void) { | |
+cleanup(void) | |
+{ | |
int i; | |
- for(i = 0; i < nclients; i++) { | |
+ for (i = 0; i < nclients; i++) { | |
focus(i); | |
killclient(NULL); | |
killclient(NULL); | |
@@ -222,11 +223,10 @@ cleanup(void) { | |
free(clients); | |
clients = NULL; | |
- if(dc.font.set) { | |
+ if (dc.font.set) | |
XFreeFontSet(dpy, dc.font.set); | |
- } else { | |
+ else | |
XFreeFont(dpy, dc.font.xfont); | |
- } | |
XFreePixmap(dpy, dc.drawable); | |
XFreeGC(dpy, dc.gc); | |
@@ -236,38 +236,40 @@ cleanup(void) { | |
} | |
void | |
-clientmessage(const XEvent *e) { | |
+clientmessage(const XEvent *e) | |
+{ | |
const XClientMessageEvent *ev = &e->xclient; | |
- if(ev->message_type == wmatom[WMProtocols] | |
- && ev->data.l[0] == wmatom[WMDelete]) { | |
+ if (ev->message_type == wmatom[WMProtocols] && | |
+ ev->data.l[0] == wmatom[WMDelete]) | |
running = False; | |
- } | |
} | |
void | |
-configurenotify(const XEvent *e) { | |
+configurenotify(const XEvent *e) | |
+{ | |
const XConfigureEvent *ev = &e->xconfigure; | |
- if(ev->window == win && (ev->width != ww || ev->height != wh)) { | |
+ if (ev->window == win && (ev->width != ww || ev->height != wh)) { | |
ww = ev->width; | |
wh = ev->height; | |
XFreePixmap(dpy, dc.drawable); | |
dc.drawable = XCreatePixmap(dpy, root, ww, wh, | |
- DefaultDepth(dpy, screen)); | |
- if(sel > -1) | |
+ DefaultDepth(dpy, screen)); | |
+ if (sel > -1) | |
resize(sel, ww, wh - bh); | |
XSync(dpy, False); | |
} | |
} | |
void | |
-configurerequest(const XEvent *e) { | |
+configurerequest(const XEvent *e) | |
+{ | |
const XConfigureRequestEvent *ev = &e->xconfigurerequest; | |
XWindowChanges wc; | |
int c; | |
- if((c = getclient(ev->window)) > -1) { | |
+ if ((c = getclient(ev->window)) > -1) { | |
wc.x = 0; | |
wc.y = bh; | |
wc.width = ww; | |
@@ -280,33 +282,27 @@ configurerequest(const XEvent *e) { | |
} | |
void | |
-createnotify(const XEvent *e) { | |
+createnotify(const XEvent *e) | |
+{ | |
const XCreateWindowEvent *ev = &e->xcreatewindow; | |
- if(ev->window != win && getclient(ev->window) < 0) | |
+ if (ev->window != win && getclient(ev->window) < 0) | |
manage(ev->window); | |
} | |
void | |
-unmapnotify(const XEvent *e) { | |
- const XUnmapEvent *ev = &e->xunmap; | |
- int c; | |
- | |
- if((c = getclient(ev->window)) > -1) | |
- unmanage(c); | |
-} | |
- | |
-void | |
-destroynotify(const XEvent *e) { | |
+destroynotify(const XEvent *e) | |
+{ | |
const XDestroyWindowEvent *ev = &e->xdestroywindow; | |
int c; | |
- if((c = getclient(ev->window)) > -1) | |
+ if ((c = getclient(ev->window)) > -1) | |
unmanage(c); | |
} | |
void | |
-die(const char *errstr, ...) { | |
+die(const char *errstr, ...) | |
+{ | |
va_list ap; | |
va_start(ap, errstr); | |
@@ -316,12 +312,13 @@ die(const char *errstr, ...) { | |
} | |
void | |
-drawbar(void) { | |
+drawbar(void) | |
+{ | |
unsigned long *col; | |
int c, cc, fc, width; | |
char *name = NULL; | |
- if(nclients == 0) { | |
+ if (nclients == 0) { | |
dc.x = 0; | |
dc.w = ww; | |
XFetchName(dpy, win, &name); | |
@@ -334,10 +331,10 @@ drawbar(void) { | |
width = ww; | |
cc = ww / tabwidth; | |
- if(nclients > cc) | |
+ if (nclients > cc) | |
cc = (ww - TEXTW(before) - TEXTW(after)) / tabwidth; | |
- if((fc = getfirsttab()) + cc < nclients) { | |
+ if ((fc = getfirsttab()) + cc < nclients) { | |
dc.w = TEXTW(after); | |
dc.x = width - dc.w; | |
drawtext(after, dc.sel); | |
@@ -345,7 +342,7 @@ drawbar(void) { | |
} | |
dc.x = 0; | |
- if(fc > 0) { | |
+ if (fc > 0) { | |
dc.w = TEXTW(before); | |
drawtext(before, dc.sel); | |
dc.x += dc.w; | |
@@ -353,9 +350,9 @@ drawbar(void) { | |
} | |
cc = MIN(cc, nclients); | |
- for(c = fc; c < fc + cc; c++) { | |
+ for (c = fc; c < fc + cc; c++) { | |
dc.w = width / cc; | |
- if(c == sel) { | |
+ if (c == sel) { | |
col = dc.sel; | |
dc.w += width % cc; | |
} else { | |
@@ -370,14 +367,15 @@ drawbar(void) { | |
} | |
void | |
-drawtext(const char *text, unsigned long col[ColLast]) { | |
+drawtext(const char *text, unsigned long col[ColLast]) | |
+{ | |
int i, x, y, h, len, olen; | |
char buf[256]; | |
XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | |
XSetForeground(dpy, dc.gc, col[ColBG]); | |
XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | |
- if(!text) | |
+ if (!text) | |
return; | |
olen = strlen(text); | |
@@ -386,59 +384,62 @@ drawtext(const char *text, unsigned long col[ColLast]) { | |
x = dc.x + (h / 2); | |
/* shorten text if necessary */ | |
- for(len = MIN(olen, sizeof(buf)); | |
- len && textnw(text, len) > dc.w - h; len--); | |
- if(!len) | |
+ for (len = MIN(olen, sizeof(buf)); | |
+ len && textnw(text, len) > dc.w - h; len--); | |
+ | |
+ if (!len) | |
return; | |
memcpy(buf, text, len); | |
- if(len < olen) { | |
+ if (len < olen) | |
for(i = len; i && i > len - 3; buf[--i] = '.'); | |
- } | |
XSetForeground(dpy, dc.gc, col[ColFG]); | |
- if(dc.font.set) { | |
+ if (dc.font.set) | |
XmbDrawString(dpy, dc.drawable, dc.font.set, | |
- dc.gc, x, y, buf, len); | |
- } else { | |
+ dc.gc, x, y, buf, len); | |
+ else | |
XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); | |
- } | |
} | |
void * | |
-ecalloc(size_t n, size_t size) { | |
+ecalloc(size_t n, size_t size) | |
+{ | |
void *p; | |
- if(!(p = calloc(n, size))) | |
+ if (!(p = calloc(n, size))) | |
die("tabbed: cannot calloc\n"); | |
return p; | |
} | |
void * | |
-erealloc(void *o, size_t size) { | |
+erealloc(void *o, size_t size) | |
+{ | |
void *p; | |
- if(!(p = realloc(o, size))) | |
+ if (!(p = realloc(o, size))) | |
die("tabbed: cannot realloc\n"); | |
return p; | |
} | |
void | |
-expose(const XEvent *e) { | |
+expose(const XEvent *e) | |
+{ | |
const XExposeEvent *ev = &e->xexpose; | |
- if(ev->count == 0 && win == ev->window) | |
+ if (ev->count == 0 && win == ev->window) | |
drawbar(); | |
} | |
void | |
-focus(int c) { | |
+focus(int c) | |
+{ | |
char buf[BUFSIZ] = "tabbed-"VERSION" ::"; | |
size_t i, n; | |
XWMHints* wmh; | |
/* If c, sel and clients are -1, raise tabbed-win itself */ | |
- if(nclients == 0) { | |
+ if (nclients == 0) { | |
cmd[cmd_append_pos] = NULL; | |
for(i = 0, n = strlen(buf); cmd[i] && n < sizeof(buf); i++) | |
n += snprintf(&buf[n], sizeof(buf) - n, " %s", cmd[i]); | |
@@ -449,7 +450,7 @@ focus(int c) { | |
return; | |
} | |
- if(c < 0 || c >= nclients) | |
+ if (c < 0 || c >= nclients) | |
return; | |
resize(c, ww, wh - bh); | |
@@ -459,12 +460,12 @@ focus(int c) { | |
sendxembed(c, XEMBED_WINDOW_ACTIVATE, 0, 0, 0); | |
xsettitle(win, clients[c]->name); | |
- if(sel != c) { | |
+ if (sel != c) { | |
lastsel = sel; | |
sel = c; | |
} | |
- if(clients[c]->urgent && (wmh = XGetWMHints(dpy, clients[c]->win))) { | |
+ if (clients[c]->urgent && (wmh = XGetWMHints(dpy, clients[c]->win))) { | |
wmh->flags &= ~XUrgencyHint; | |
XSetWMHints(dpy, clients[c]->win, wmh); | |
clients[c]->urgent = False; | |
@@ -476,28 +477,32 @@ focus(int c) { | |
} | |
void | |
-focusin(const XEvent *e) { | |
+focusin(const XEvent *e) | |
+{ | |
const XFocusChangeEvent *ev = &e->xfocus; | |
int dummy; | |
Window focused; | |
- if(ev->mode != NotifyUngrab) { | |
+ if (ev->mode != NotifyUngrab) { | |
XGetInputFocus(dpy, &focused, &dummy); | |
- if(focused == win) | |
+ if (focused == win) | |
focus(sel); | |
} | |
} | |
void | |
-focusonce(const Arg *arg) { | |
+focusonce(const Arg *arg) | |
+{ | |
nextfocus = True; | |
} | |
void | |
-focusurgent(const Arg *args) { | |
+focusurgent(const Arg *arg) | |
+{ | |
int c; | |
- for(c = (sel+1)%nclients; c != sel; c = (c+1)%nclients) { | |
- if(clients[c]->urgent) { | |
+ | |
+ for (c = (sel + 1) % nclients; c != sel; c = (c + 1) % nclients) { | |
+ if (clients[c]->urgent) { | |
focus(c); | |
return; | |
} | |
@@ -505,7 +510,8 @@ focusurgent(const Arg *args) { | |
} | |
void | |
-fullscreen(const Arg *arg) { | |
+fullscreen(const Arg *arg) | |
+{ | |
XEvent e; | |
e.type = ClientMessage; | |
@@ -519,7 +525,8 @@ fullscreen(const Arg *arg) { | |
} | |
char * | |
-getatom(int a) { | |
+getatom(int a) | |
+{ | |
static char buf[BUFSIZ]; | |
Atom adummy; | |
int idummy; | |
@@ -527,23 +534,23 @@ getatom(int a) { | |
unsigned char *p = NULL; | |
XGetWindowProperty(dpy, win, wmatom[a], 0L, BUFSIZ, False, XA_STRING, | |
- &adummy, &idummy, &ldummy, &ldummy, &p); | |
- if(p) { | |
+ &adummy, &idummy, &ldummy, &ldummy, &p); | |
+ if (p) | |
strncpy(buf, (char *)p, LENGTH(buf)-1); | |
- } else { | |
+ else | |
buf[0] = '\0'; | |
- } | |
XFree(p); | |
return buf; | |
} | |
int | |
-getclient(Window w) { | |
+getclient(Window w) | |
+{ | |
int i; | |
- for(i = 0; i < nclients; i++) { | |
- if(clients[i]->win == w) | |
+ for (i = 0; i < nclients; i++) { | |
+ if (clients[i]->win == w) | |
return i; | |
} | |
@@ -551,53 +558,56 @@ getclient(Window w) { | |
} | |
unsigned long | |
-getcolor(const char *colstr) { | |
+getcolor(const char *colstr) | |
+{ | |
Colormap cmap = DefaultColormap(dpy, screen); | |
XColor color; | |
- if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color)) | |
+ if (!XAllocNamedColor(dpy, cmap, colstr, &color, &color)) | |
die("tabbed: cannot allocate color '%s'\n", colstr); | |
return color.pixel; | |
} | |
int | |
-getfirsttab(void) { | |
+getfirsttab(void) | |
+{ | |
int cc, ret; | |
- if(sel < 0) | |
+ if (sel < 0) | |
return 0; | |
cc = ww / tabwidth; | |
- if(nclients > cc) | |
+ if (nclients > cc) | |
cc = (ww - TEXTW(before) - TEXTW(after)) / tabwidth; | |
ret = sel - cc / 2 + (cc + 1) % 2; | |
- return ret < 0 ? 0 : (ret + cc > nclients ? MAX(0, nclients - cc) : re… | |
+ return ret < 0 ? 0 : | |
+ ret + cc > nclients ? MAX(0, nclients - cc) : | |
+ ret; | |
} | |
Bool | |
-gettextprop(Window w, Atom atom, char *text, unsigned int size) { | |
+gettextprop(Window w, Atom atom, char *text, unsigned int size) | |
+{ | |
char **list = NULL; | |
int n; | |
XTextProperty name; | |
- if(!text || size == 0) | |
+ if (!text || size == 0) | |
return False; | |
text[0] = '\0'; | |
XGetTextProperty(dpy, w, &name, atom); | |
- if(!name.nitems) | |
+ if (!name.nitems) | |
return False; | |
- if(name.encoding == XA_STRING) { | |
+ if (name.encoding == XA_STRING) { | |
strncpy(text, (char *)name.value, size - 1); | |
- } else { | |
- if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success | |
- && n > 0 && *list) { | |
- strncpy(text, *list, size - 1); | |
- XFreeStringList(list); | |
- } | |
+ } else if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success | |
+ && n > 0 && *list) { | |
+ strncpy(text, *list, size - 1); | |
+ XFreeStringList(list); | |
} | |
text[size - 1] = '\0'; | |
XFree(name.value); | |
@@ -606,38 +616,39 @@ gettextprop(Window w, Atom atom, char *text, unsigned int… | |
} | |
void | |
-initfont(const char *fontstr) { | |
+initfont(const char *fontstr) | |
+{ | |
char *def, **missing, **font_names; | |
- int i, n; | |
XFontStruct **xfonts; | |
+ int i, n; | |
missing = NULL; | |
- if(dc.font.set) | |
+ if (dc.font.set) | |
XFreeFontSet(dpy, dc.font.set); | |
dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def); | |
- if(missing) { | |
- while(n--) | |
+ if (missing) { | |
+ while (n--) | |
fprintf(stderr, "tabbed: missing fontset: %s\n", missi… | |
XFreeStringList(missing); | |
} | |
- if(dc.font.set) { | |
+ if (dc.font.set) { | |
dc.font.ascent = dc.font.descent = 0; | |
n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names); | |
- for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++… | |
+ for (i = 0, dc.font.ascent = 0, dc.font.descent = 0; | |
+ i < n; i++) { | |
dc.font.ascent = MAX(dc.font.ascent, (*xfonts)->ascent… | |
dc.font.descent = MAX(dc.font.descent,(*xfonts)->desce… | |
xfonts++; | |
} | |
} else { | |
- if(dc.font.xfont) | |
+ if (dc.font.xfont) | |
XFreeFont(dpy, dc.font.xfont); | |
dc.font.xfont = NULL; | |
- if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr)) | |
- && !(dc.font.xfont = XLoadQueryFont(dpy, "fixe… | |
+ if (!(dc.font.xfont = XLoadQueryFont(dpy, fontstr)) && | |
+ !(dc.font.xfont = XLoadQueryFont(dpy, "fixed"))) | |
die("tabbed: cannot load font: '%s'\n", fontstr); | |
- } | |
dc.font.ascent = dc.font.xfont->ascent; | |
dc.font.descent = dc.font.xfont->descent; | |
@@ -646,14 +657,15 @@ initfont(const char *fontstr) { | |
} | |
Bool | |
-isprotodel(int c) { | |
+isprotodel(int c) | |
+{ | |
int i, n; | |
Atom *protocols; | |
Bool ret = False; | |
- if(XGetWMProtocols(dpy, clients[c]->win, &protocols, &n)) { | |
- for(i = 0; !ret && i < n; i++) { | |
- if(protocols[i] == wmatom[WMDelete]) | |
+ if (XGetWMProtocols(dpy, clients[c]->win, &protocols, &n)) { | |
+ for (i = 0; !ret && i < n; i++) { | |
+ if (protocols[i] == wmatom[WMDelete]) | |
ret = True; | |
} | |
XFree(protocols); | |
@@ -663,29 +675,30 @@ isprotodel(int c) { | |
} | |
void | |
-keypress(const XEvent *e) { | |
+keypress(const XEvent *e) | |
+{ | |
const XKeyEvent *ev = &e->xkey; | |
unsigned int i; | |
KeySym keysym; | |
keysym = XkbKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0, 0); | |
- for(i = 0; i < LENGTH(keys); i++) { | |
- if(keysym == keys[i].keysym | |
- && CLEANMASK(keys[i].mod) == CLEANMASK(ev->sta… | |
- && keys[i].func) { | |
+ for (i = 0; i < LENGTH(keys); i++) { | |
+ if (keysym == keys[i].keysym && | |
+ CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) && | |
+ keys[i].func) | |
keys[i].func(&(keys[i].arg)); | |
- } | |
} | |
} | |
void | |
-killclient(const Arg *arg) { | |
+killclient(const Arg *arg) | |
+{ | |
XEvent ev; | |
- if(sel < 0) | |
+ if (sel < 0) | |
return; | |
- if(isprotodel(sel) && !clients[sel]->closed) { | |
+ if (isprotodel(sel) && !clients[sel]->closed) { | |
ev.type = ClientMessage; | |
ev.xclient.window = clients[sel]->win; | |
ev.xclient.message_type = wmatom[WMProtocols]; | |
@@ -700,29 +713,29 @@ killclient(const Arg *arg) { | |
} | |
void | |
-manage(Window w) { | |
+manage(Window w) | |
+{ | |
updatenumlockmask(); | |
{ | |
int i, j, nextpos; | |
unsigned int modifiers[] = { 0, LockMask, numlockmask, | |
- numlockmask|LockMask }; | |
+ numlockmask | LockMask }; | |
KeyCode code; | |
Client *c; | |
XEvent e; | |
XWithdrawWindow(dpy, w, 0); | |
XReparentWindow(dpy, w, win, 0, bh); | |
- XSelectInput(dpy, w, PropertyChangeMask | |
- |StructureNotifyMask|EnterWindowMask); | |
+ XSelectInput(dpy, w, PropertyChangeMask | | |
+ StructureNotifyMask | EnterWindowMask); | |
XSync(dpy, False); | |
- for(i = 0; i < LENGTH(keys); i++) { | |
- if((code = XKeysymToKeycode(dpy, keys[i].keysym))) { | |
- for(j = 0; j < LENGTH(modifiers); j++) { | |
- XGrabKey(dpy, code, keys[i].mod | |
- | modifiers[j], w, | |
- True, GrabModeAsync, | |
- GrabModeAsync); | |
+ for (i = 0; i < LENGTH(keys); i++) { | |
+ if ((code = XKeysymToKeycode(dpy, keys[i].keysym))) { | |
+ for (j = 0; j < LENGTH(modifiers); j++) { | |
+ XGrabKey(dpy, code, keys[i].mod | | |
+ modifiers[j], w, True, | |
+ GrabModeAsync, GrabModeAsync); | |
} | |
} | |
} | |
@@ -736,22 +749,20 @@ manage(Window w) { | |
if(npisrelative) { | |
nextpos = sel + newposition; | |
} else { | |
- if(newposition < 0) { | |
+ if (newposition < 0) | |
nextpos = nclients - newposition; | |
- } else { | |
+ else | |
nextpos = newposition; | |
- } | |
} | |
- if(nextpos >= nclients) | |
+ if (nextpos >= nclients) | |
nextpos = nclients - 1; | |
- if(nextpos < 0) | |
+ if (nextpos < 0) | |
nextpos = 0; | |
- if(nclients > 1 && nextpos < nclients - 1) { | |
+ if (nclients > 1 && nextpos < nclients - 1) | |
memmove(&clients[nextpos + 1], &clients[nextpos], | |
- sizeof(Client *) * | |
- (nclients - nextpos - 1)); | |
- } | |
+ sizeof(Client *) * (nclients - nextpos - 1)); | |
+ | |
clients[nextpos] = c; | |
updatetitle(nextpos); | |
@@ -772,44 +783,51 @@ manage(Window w) { | |
XSync(dpy, False); | |
/* Adjust sel before focus does set it to lastsel. */ | |
- if(sel >= nextpos) | |
+ if (sel >= nextpos) | |
sel++; | |
- focus((nextfocus)? nextpos : ((sel < 0)? 0 : sel)); | |
+ focus(nextfocus ? nextpos : | |
+ sel < 0 ? 0 : | |
+ sel); | |
nextfocus = foreground; | |
} | |
} | |
void | |
-maprequest(const XEvent *e) { | |
+maprequest(const XEvent *e) | |
+{ | |
const XMapRequestEvent *ev = &e->xmaprequest; | |
- if(getclient(ev->window) < 0) | |
+ if (getclient(ev->window) < 0) | |
manage(ev->window); | |
} | |
void | |
-move(const Arg *arg) { | |
- if(arg->i >= 0 && arg->i < nclients) | |
+move(const Arg *arg) | |
+{ | |
+ if (arg->i >= 0 && arg->i < nclients) | |
focus(arg->i); | |
} | |
void | |
-movetab(const Arg *arg) { | |
+movetab(const Arg *arg) | |
+{ | |
int c; | |
Client *new; | |
c = (sel + arg->i) % nclients; | |
- if(c < 0) | |
+ if (c < 0) | |
c += nclients; | |
- if(sel < 0 || (c == sel)) | |
+ if (sel < 0 || c == sel) | |
return; | |
new = clients[sel]; | |
- if(sel < c) | |
- memmove(&clients[sel], &clients[sel+1], sizeof(Client *) * (c … | |
+ if (sel < c) | |
+ memmove(&clients[sel], &clients[sel+1], | |
+ sizeof(Client *) * (c - sel)); | |
else | |
- memmove(&clients[c+1], &clients[c], sizeof(Client *) * (sel - … | |
+ memmove(&clients[c+1], &clients[c], | |
+ sizeof(Client *) * (sel - c)); | |
clients[c] = new; | |
sel = c; | |
@@ -817,16 +835,17 @@ movetab(const Arg *arg) { | |
} | |
void | |
-propertynotify(const XEvent *e) { | |
+propertynotify(const XEvent *e) | |
+{ | |
const XPropertyEvent *ev = &e->xproperty; | |
XWMHints *wmh; | |
int c; | |
char* selection = NULL; | |
Arg arg; | |
- if(ev->state == PropertyNewValue && ev->atom == wmatom[WMSelectTab]) { | |
+ if (ev->state == PropertyNewValue && ev->atom == wmatom[WMSelectTab]) { | |
selection = getatom(WMSelectTab); | |
- if(!strncmp(selection, "0x", 2)) { | |
+ if (!strncmp(selection, "0x", 2)) { | |
arg.i = getclient(strtoul(selection, NULL, 0)); | |
move(&arg); | |
} else { | |
@@ -834,38 +853,44 @@ propertynotify(const XEvent *e) { | |
arg.v = cmd; | |
spawn(&arg); | |
} | |
- } else if(ev->state == PropertyNewValue && ev->atom == XA_WM_HINTS | |
- && (c = getclient(ev->window)) > -1 | |
- && (wmh = XGetWMHints(dpy, clients[c]->win))) { | |
- if(wmh->flags & XUrgencyHint) { | |
+ } else if (ev->state == PropertyNewValue && ev->atom == XA_WM_HINTS && | |
+ (c = getclient(ev->window)) > -1 && | |
+ (wmh = XGetWMHints(dpy, clients[c]->win))) { | |
+ if (wmh->flags & XUrgencyHint) { | |
XFree(wmh); | |
wmh = XGetWMHints(dpy, win); | |
- if(c != sel) { | |
- if(urgentswitch && wmh && !(wmh->flags & XUrge… | |
- /* only switch, if tabbed was focused … | |
- * if WMHints could not be received, d… | |
+ if (c != sel) { | |
+ if (urgentswitch && wmh && | |
+ !(wmh->flags & XUrgencyHint)) { | |
+ /* only switch, if tabbed was focused | |
+ * since last urgency hint if WMHints | |
+ * could not be received, | |
+ * default to no switch */ | |
focus(c); | |
} else { | |
- /* if no switch should be performed, m… | |
+ /* if no switch should be performed, | |
+ * mark tab as urgent */ | |
clients[c]->urgent = True; | |
drawbar(); | |
} | |
} | |
- if(wmh && !(wmh->flags & XUrgencyHint)) { | |
- /* update tabbed urgency hint if not set alrea… | |
+ if (wmh && !(wmh->flags & XUrgencyHint)) { | |
+ /* update tabbed urgency hint | |
+ * if not set already */ | |
wmh->flags |= XUrgencyHint; | |
XSetWMHints(dpy, win, wmh); | |
} | |
} | |
XFree(wmh); | |
- } else if(ev->state != PropertyDelete && ev->atom == XA_WM_NAME | |
- && (c = getclient(ev->window)) > -1) { | |
+ } else if (ev->state != PropertyDelete && ev->atom == XA_WM_NAME && | |
+ (c = getclient(ev->window)) > -1) { | |
updatetitle(c); | |
} | |
} | |
void | |
-resize(int c, int w, int h) { | |
+resize(int c, int w, int h) | |
+{ | |
XConfigureEvent ce; | |
XWindowChanges wc; | |
@@ -881,51 +906,54 @@ resize(int c, int w, int h) { | |
ce.override_redirect = False; | |
ce.border_width = 0; | |
- XConfigureWindow(dpy, clients[c]->win, CWWidth|CWHeight, &wc); | |
+ XConfigureWindow(dpy, clients[c]->win, CWWidth | CWHeight, &wc); | |
XSendEvent(dpy, clients[c]->win, False, StructureNotifyMask, | |
- (XEvent *)&ce); | |
+ (XEvent *)&ce); | |
} | |
void | |
-rotate(const Arg *arg) { | |
+rotate(const Arg *arg) | |
+{ | |
int nsel = -1; | |
- if(sel < 0) | |
+ if (sel < 0) | |
return; | |
- if(arg->i == 0) { | |
- if(lastsel > -1) | |
+ if (arg->i == 0) { | |
+ if (lastsel > -1) | |
focus(lastsel); | |
- } else if(sel > -1) { | |
+ } else if (sel > -1) { | |
/* Rotating in an arg->i step around the clients. */ | |
nsel = sel + arg->i; | |
- while(nsel >= nclients) | |
+ while (nsel >= nclients) | |
nsel -= nclients; | |
- while(nsel < 0) | |
+ while (nsel < 0) | |
nsel += nclients; | |
focus(nsel); | |
} | |
} | |
void | |
-run(void) { | |
+run(void) | |
+{ | |
XEvent ev; | |
/* main event loop */ | |
XSync(dpy, False); | |
drawbar(); | |
- if(doinitspawn == True) | |
+ if (doinitspawn == True) | |
spawn(NULL); | |
- while(running) { | |
+ while (running) { | |
XNextEvent(dpy, &ev); | |
- if(handler[ev.type]) | |
+ if (handler[ev.type]) | |
(handler[ev.type])(&ev); /* call handler */ | |
} | |
} | |
void | |
-sendxembed(int c, long msg, long detail, long d1, long d2) { | |
+sendxembed(int c, long msg, long detail, long d1, long d2) | |
+{ | |
XEvent e = { 0 }; | |
e.xclient.window = clients[c]->win; | |
@@ -941,21 +969,23 @@ sendxembed(int c, long msg, long detail, long d1, long d2… | |
} | |
void | |
-setcmd(int argc, char *argv[], int replace) { | |
+setcmd(int argc, char *argv[], int replace) | |
+{ | |
int i; | |
- cmd = ecalloc(argc + 3, sizeof *cmd); | |
+ cmd = ecalloc(argc + 3, sizeof(*cmd)); | |
if (argc == 0) | |
return; | |
- for(i = 0; i < argc; i++) | |
+ for (i = 0; i < argc; i++) | |
cmd[i] = argv[i]; | |
- cmd[(replace > 0)? replace : argc] = winid; | |
+ cmd[replace > 0 ? replace : argc] = winid; | |
cmd_append_pos = argc + !replace; | |
- cmd[cmd_append_pos] = cmd[cmd_append_pos+1] = NULL; | |
+ cmd[cmd_append_pos] = cmd[cmd_append_pos + 1] = NULL; | |
} | |
void | |
-setup(void) { | |
+setup(void) | |
+{ | |
int bitm, tx, ty, tw, th, dh, dw, isfixed; | |
XWMHints *wmh; | |
XClassHint class_hint; | |
@@ -971,13 +1001,14 @@ setup(void) { | |
bh = dc.h = dc.font.height + 2; | |
/* init atoms */ | |
- wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); | |
wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); | |
- wmatom[XEmbed] = XInternAtom(dpy, "_XEMBED", False); | |
+ wmatom[WMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", | |
+ False); | |
wmatom[WMName] = XInternAtom(dpy, "_NET_WM_NAME", False); | |
- wmatom[WMState] = XInternAtom(dpy, "_NET_WM_STATE", False); | |
- wmatom[WMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", Fa… | |
+ wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); | |
wmatom[WMSelectTab] = XInternAtom(dpy, "_TABBED_SELECT_TAB", False); | |
+ wmatom[WMState] = XInternAtom(dpy, "_NET_WM_STATE", False); | |
+ wmatom[XEmbed] = XInternAtom(dpy, "_XEMBED", False); | |
/* init appearance */ | |
wx = 0; | |
@@ -986,30 +1017,30 @@ setup(void) { | |
wh = 600; | |
isfixed = 0; | |
- if(geometry) { | |
+ if (geometry) { | |
tx = ty = tw = th = 0; | |
bitm = XParseGeometry(geometry, &tx, &ty, (unsigned *)&tw, | |
- (unsigned *)&th); | |
- if(bitm & XValue) | |
+ (unsigned *)&th); | |
+ if (bitm & XValue) | |
wx = tx; | |
- if(bitm & YValue) | |
+ if (bitm & YValue) | |
wy = ty; | |
- if(bitm & WidthValue) | |
+ if (bitm & WidthValue) | |
ww = tw; | |
- if(bitm & HeightValue) | |
+ if (bitm & HeightValue) | |
wh = th; | |
- if(bitm & XNegative && wx == 0) | |
+ if (bitm & XNegative && wx == 0) | |
wx = -1; | |
- if(bitm & YNegative && wy == 0) | |
+ if (bitm & YNegative && wy == 0) | |
wy = -1; | |
- if(bitm & (HeightValue|WidthValue)) | |
+ if (bitm & (HeightValue | WidthValue)) | |
isfixed = 1; | |
dw = DisplayWidth(dpy, screen); | |
dh = DisplayHeight(dpy, screen); | |
- if(wx < 0) | |
+ if (wx < 0) | |
wx = dw + wx - ww - 1; | |
- if(wy < 0) | |
+ if (wy < 0) | |
wy = dh + wy - wh - 1; | |
} | |
@@ -1020,17 +1051,18 @@ setup(void) { | |
dc.urg[ColBG] = getcolor(urgbgcolor); | |
dc.urg[ColFG] = getcolor(urgfgcolor); | |
dc.drawable = XCreatePixmap(dpy, root, ww, wh, | |
- DefaultDepth(dpy, screen)); | |
+ DefaultDepth(dpy, screen)); | |
dc.gc = XCreateGC(dpy, root, 0, 0); | |
- if(!dc.font.set) | |
+ if (!dc.font.set) | |
XSetFont(dpy, dc.gc, dc.font.xfont->fid); | |
win = XCreateSimpleWindow(dpy, root, wx, wy, ww, wh, 0, | |
- dc.norm[ColFG], dc.norm[ColBG]); | |
+ dc.norm[ColFG], dc.norm[ColBG]); | |
XMapRaised(dpy, win); | |
- XSelectInput(dpy, win, SubstructureNotifyMask|FocusChangeMask| | |
- ButtonPressMask|ExposureMask|KeyPressMask|PropertyChan… | |
- StructureNotifyMask|SubstructureRedirectMask); | |
+ XSelectInput(dpy, win, SubstructureNotifyMask | FocusChangeMask | | |
+ ButtonPressMask | ExposureMask | KeyPressMask | | |
+ PropertyChangeMask | StructureNotifyMask | | |
+ SubstructureRedirectMask); | |
xerrorxlib = XSetErrorHandler(xerror); | |
class_hint.res_name = wmname; | |
@@ -1038,7 +1070,7 @@ setup(void) { | |
XSetClassHint(dpy, win, &class_hint); | |
size_hint = XAllocSizeHints(); | |
- if(!isfixed) { | |
+ if (!isfixed) { | |
size_hint->flags = PSize; | |
size_hint->height = wh; | |
size_hint->width = ww; | |
@@ -1062,24 +1094,26 @@ setup(void) { | |
} | |
void | |
-sigchld(int unused) { | |
- if(signal(SIGCHLD, sigchld) == SIG_ERR) | |
+sigchld(int unused) | |
+{ | |
+ if (signal(SIGCHLD, sigchld) == SIG_ERR) | |
die("tabbed: cannot install SIGCHLD handler"); | |
- while(0 < waitpid(-1, NULL, WNOHANG)); | |
+ while (0 < waitpid(-1, NULL, WNOHANG)); | |
} | |
void | |
-spawn(const Arg *arg) { | |
- if(fork() == 0) { | |
+spawn(const Arg *arg) | |
+{ | |
+ if (fork() == 0) { | |
if(dpy) | |
close(ConnectionNumber(dpy)); | |
setsid(); | |
- if(arg && arg->v) { | |
+ if (arg && arg->v) { | |
execvp(((char **)arg->v)[0], (char **)arg->v); | |
fprintf(stderr, "tabbed: execvp %s", | |
- ((char **)arg->v)[0]); | |
+ ((char **)arg->v)[0]); | |
} else { | |
cmd[cmd_append_pos] = NULL; | |
execvp(cmd[0], cmd); | |
@@ -1091,12 +1125,12 @@ spawn(const Arg *arg) { | |
} | |
int | |
-textnw(const char *text, unsigned int len) { | |
+textnw(const char *text, unsigned int len) | |
+{ | |
XRectangle r; | |
- if(dc.font.set) { | |
+ if (dc.font.set) { | |
XmbTextExtents(dc.font.set, text, len, NULL, &r); | |
- | |
return r.width; | |
} | |
@@ -1104,27 +1138,29 @@ textnw(const char *text, unsigned int len) { | |
} | |
void | |
-toggle(const Arg *arg) { | |
+toggle(const Arg *arg) | |
+{ | |
*(Bool*) arg->v = !*(Bool*) arg->v; | |
} | |
void | |
-unmanage(int c) { | |
- if(c < 0 || c >= nclients) { | |
+unmanage(int c) | |
+{ | |
+ if (c < 0 || c >= nclients) { | |
drawbar(); | |
XSync(dpy, False); | |
return; | |
} | |
- if(!nclients) | |
+ if (!nclients) | |
return; | |
- if(c == 0) { | |
+ if (c == 0) { | |
/* First client. */ | |
nclients--; | |
free(clients[0]); | |
memmove(&clients[0], &clients[1], sizeof(Client *) * nclients); | |
- } else if(c == nclients - 1) { | |
+ } else if (c == nclients - 1) { | |
/* Last client. */ | |
nclients--; | |
free(clients[c]); | |
@@ -1133,31 +1169,29 @@ unmanage(int c) { | |
/* Somewhere inbetween. */ | |
free(clients[c]); | |
memmove(&clients[c], &clients[c+1], | |
- sizeof(Client *) * (nclients - (c + 1))); | |
+ sizeof(Client *) * (nclients - (c + 1))); | |
nclients--; | |
} | |
- if(nclients <= 0) { | |
+ if (nclients <= 0) { | |
lastsel = sel = -1; | |
- if(closelastclient) { | |
+ if (closelastclient) | |
running = False; | |
- } else if(fillagain && running) { | |
+ else if (fillagain && running) | |
spawn(NULL); | |
- } | |
} else { | |
- if(lastsel >= nclients) { | |
+ if (lastsel >= nclients) | |
lastsel = nclients - 1; | |
- } else if(lastsel > c) { | |
+ else if (lastsel > c) | |
lastsel--; | |
- } | |
- if(c == sel && lastsel >= 0) { | |
+ if (c == sel && lastsel >= 0) { | |
focus(lastsel); | |
} else { | |
- if(sel > c) | |
+ if (sel > c) | |
sel--; | |
- if(sel >= nclients) | |
+ if (sel >= nclients) | |
sel = nclients - 1; | |
focus(sel); | |
@@ -1169,32 +1203,41 @@ unmanage(int c) { | |
} | |
void | |
-updatenumlockmask(void) { | |
+unmapnotify(const XEvent *e) | |
+{ | |
+ const XUnmapEvent *ev = &e->xunmap; | |
+ int c; | |
+ | |
+ if ((c = getclient(ev->window)) > -1) | |
+ unmanage(c); | |
+} | |
+ | |
+void | |
+updatenumlockmask(void) | |
+{ | |
unsigned int i, j; | |
XModifierKeymap *modmap; | |
numlockmask = 0; | |
modmap = XGetModifierMapping(dpy); | |
- for(i = 0; i < 8; i++) { | |
- for(j = 0; j < modmap->max_keypermod; j++) { | |
- if(modmap->modifiermap[i * modmap->max_keypermod + j] | |
- == XKeysymToKeycode(dpy, | |
- XK_Num_Lock)) { | |
+ for (i = 0; i < 8; i++) { | |
+ for (j = 0; j < modmap->max_keypermod; j++) { | |
+ if (modmap->modifiermap[i * modmap->max_keypermod + j] | |
+ == XKeysymToKeycode(dpy, XK_Num_Lock)) | |
numlockmask = (1 << i); | |
- } | |
} | |
} | |
XFreeModifiermap(modmap); | |
} | |
void | |
-updatetitle(int c) { | |
- if(!gettextprop(clients[c]->win, wmatom[WMName], | |
- clients[c]->name, sizeof(clients[c]->name))) { | |
- gettextprop(clients[c]->win, XA_WM_NAME, | |
- clients[c]->name, sizeof(clients[c]->name)); | |
- } | |
- if(sel == c) | |
+updatetitle(int c) | |
+{ | |
+ if (!gettextprop(clients[c]->win, wmatom[WMName], clients[c]->name, | |
+ sizeof(clients[c]->name))) | |
+ gettextprop(clients[c]->win, XA_WM_NAME, clients[c]->name, | |
+ sizeof(clients[c]->name)); | |
+ if (sel == c) | |
xsettitle(win, clients[c]->name); | |
drawbar(); | |
} | |
@@ -1203,55 +1246,56 @@ updatetitle(int c) { | |
* ignored (especially on UnmapNotify's). Other types of errors call Xlibs | |
* default error handler, which may call exit. */ | |
int | |
-xerror(Display *dpy, XErrorEvent *ee) { | |
- if(ee->error_code == BadWindow | |
- || (ee->request_code == X_SetInputFocus | |
- && ee->error_code == BadMatch) | |
- || (ee->request_code == X_PolyText8 | |
- && ee->error_code == BadDrawable) | |
- || (ee->request_code == X_PolyFillRectangle | |
- && ee->error_code == BadDrawable) | |
- || (ee->request_code == X_PolySegment | |
- && ee->error_code == BadDrawable) | |
- || (ee->request_code == X_ConfigureWindow | |
- && ee->error_code == BadMatch) | |
- || (ee->request_code == X_GrabButton | |
- && ee->error_code == BadAccess) | |
- || (ee->request_code == X_GrabKey | |
- && ee->error_code == BadAccess) | |
- || (ee->request_code == X_CopyArea | |
- && ee->error_code == BadDrawable)) { | |
+xerror(Display *dpy, XErrorEvent *ee) | |
+{ | |
+ if (ee->error_code == BadWindow | |
+ || (ee->request_code == X_SetInputFocus && | |
+ ee->error_code == BadMatch) | |
+ || (ee->request_code == X_PolyText8 && | |
+ ee->error_code == BadDrawable) | |
+ || (ee->request_code == X_PolyFillRectangle && | |
+ ee->error_code == BadDrawable) | |
+ || (ee->request_code == X_PolySegment && | |
+ ee->error_code == BadDrawable) | |
+ || (ee->request_code == X_ConfigureWindow && | |
+ ee->error_code == BadMatch) | |
+ || (ee->request_code == X_GrabButton && | |
+ ee->error_code == BadAccess) | |
+ || (ee->request_code == X_GrabKey && | |
+ ee->error_code == BadAccess) | |
+ || (ee->request_code == X_CopyArea && | |
+ ee->error_code == BadDrawable)) | |
return 0; | |
- } | |
fprintf(stderr, "tabbed: fatal error: request code=%d, error code=%d\n… | |
- ee->request_code, ee->error_code); | |
+ ee->request_code, ee->error_code); | |
return xerrorxlib(dpy, ee); /* may call exit */ | |
} | |
void | |
-xsettitle(Window w, const char *str) { | |
+xsettitle(Window w, const char *str) | |
+{ | |
XTextProperty xtp; | |
- if(XmbTextListToTextProperty(dpy, (char **)&str, 1, XCompoundTextStyle, | |
- &xtp) == Success) { | |
+ if (XmbTextListToTextProperty(dpy, (char **)&str, 1, | |
+ XCompoundTextStyle, &xtp) == Success) { | |
XSetTextProperty(dpy, w, &xtp, wmatom[WMName]); | |
XSetTextProperty(dpy, w, &xtp, XA_WM_NAME); | |
XFree(xtp.value); | |
} | |
} | |
-char *argv0; | |
- | |
void | |
-usage(void) { | |
- die("usage: %s [-dfhsv] [-g geometry] [-n name] [-p [s+/-]pos] [-r nar… | |
- "[-o color] [-O color] [-t color] [-T color] [-u color] [-U co… | |
- "command...\n", argv0); | |
+usage(void) | |
+{ | |
+ die("usage: %s [-dfhsv] [-g geometry] [-n name] [-p [s+/-]pos] " | |
+ "[-r narg] [-o color] [-O color] [-t color] [-T color] " | |
+ "[-u color] [-U color] command...\n", argv0); | |
} | |
int | |
-main(int argc, char *argv[]) { | |
+main(int argc, char *argv[]) | |
+{ | |
Bool detach = False; | |
int replace = 0; | |
char *pstr; | |
@@ -1273,9 +1317,15 @@ main(int argc, char *argv[]) { | |
case 'n': | |
wmname = EARGF(usage()); | |
break; | |
+ case 'O': | |
+ normfgcolor = EARGF(usage()); | |
+ break; | |
+ case 'o': | |
+ normbgcolor = EARGF(usage()); | |
+ break; | |
case 'p': | |
pstr = EARGF(usage()); | |
- if(pstr[0] == 's') { | |
+ if (pstr[0] == 's') { | |
npisrelative = True; | |
newposition = atoi(&pstr[1]); | |
} else { | |
@@ -1288,55 +1338,49 @@ main(int argc, char *argv[]) { | |
case 's': | |
doinitspawn = False; | |
break; | |
- case 'o': | |
- normbgcolor = EARGF(usage()); | |
- break; | |
- case 'O': | |
- normfgcolor = EARGF(usage()); | |
+ case 'T': | |
+ selfgcolor = EARGF(usage()); | |
break; | |
case 't': | |
selbgcolor = EARGF(usage()); | |
break; | |
- case 'T': | |
- selfgcolor = EARGF(usage()); | |
+ case 'U': | |
+ urgfgcolor = EARGF(usage()); | |
break; | |
case 'u': | |
urgbgcolor = EARGF(usage()); | |
break; | |
- case 'U': | |
- urgfgcolor = EARGF(usage()); | |
- break; | |
case 'v': | |
die("tabbed-"VERSION", © 2009-2016" | |
" tabbed engineers, see LICENSE" | |
" for details.\n"); | |
break; | |
- default: | |
+ default: /* FALLTHROUGH */ | |
case 'h': | |
usage(); | |
} ARGEND; | |
- if(argc < 1) { | |
+ if (argc < 1) { | |
doinitspawn = False; | |
fillagain = False; | |
} | |
setcmd(argc, argv, replace); | |
- if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) | |
- fprintf(stderr, "tabbed: no locale support\n"); | |
- if(!(dpy = XOpenDisplay(NULL))) | |
- die("tabbed: cannot open display\n"); | |
+ if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) | |
+ fprintf(stderr, "%s: no locale support\n", argv0); | |
+ if (!(dpy = XOpenDisplay(NULL))) | |
+ die("%s: cannot open display\n", argv0); | |
setup(); | |
printf("0x%lx\n", win); | |
fflush(NULL); | |
- if(detach) { | |
- if(fork() == 0) { | |
+ if (detach) { | |
+ if (fork() == 0) { | |
fclose(stdout); | |
} else { | |
- if(dpy) | |
+ if (dpy) | |
close(ConnectionNumber(dpy)); | |
return EXIT_SUCCESS; | |
} | |
@@ -1348,4 +1392,3 @@ main(int argc, char *argv[]) { | |
return EXIT_SUCCESS; | |
} | |
- | |
diff --git a/xembed.c b/xembed.c | |
@@ -8,21 +8,21 @@ | |
#include <unistd.h> | |
int | |
-main(int argc, char **argv) | |
+main(int argc, char *argv[]) | |
{ | |
char *xembed; | |
int tty; | |
pid_t pgrp, tcpgrp; | |
- if(argc < 3) { | |
+ if (argc < 3) { | |
fprintf(stderr, "usage: %s flag cmd ...\n", argv[0]); | |
return 2; | |
} | |
- if(!(xembed = getenv("XEMBED"))) | |
+ if (!(xembed = getenv("XEMBED"))) | |
goto noembed; | |
- if((tty = open("/dev/tty", O_RDONLY)) < 0) | |
+ if ((tty = open("/dev/tty", O_RDONLY)) < 0) | |
goto noembed; | |
pgrp = getpgrp(); | |
@@ -30,7 +30,7 @@ main(int argc, char **argv) | |
close(tty); | |
- if(pgrp == tcpgrp) { /* in foreground of tty */ | |
+ if (pgrp == tcpgrp) { /* in foreground of tty */ | |
argv[0] = argv[2]; | |
argv[2] = xembed; | |
} else { | |
@@ -43,4 +43,3 @@ noembed: | |
perror(argv[0]); /* failed to execute */ | |
return 1; | |
} | |
- |