tadded grid mode on Mod1Mask g - dwm - [fork] customized build of dwm, the dyna… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 4641aa2925731ac180b08c80f57db176391ea4a9 | |
parent dfd84f9bf3b9d949412a73bc62a43109b340d395 | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Wed, 12 Jul 2006 16:00:51 +0200 | |
added grid mode on Mod1Mask g | |
Diffstat: | |
M Makefile | 2 +- | |
M client.c | 70 +++++++++++++++++++++++++++++… | |
D cmd.c | 52 -----------------------------… | |
M config.mk | 2 +- | |
M kb.c | 12 +++++++----- | |
M wm.c | 12 ++++++++++++ | |
M wm.h | 13 +++++++------ | |
7 files changed, 97 insertions(+), 66 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
t@@ -3,7 +3,7 @@ | |
include config.mk | |
-WMSRC = bar.c client.c cmd.c draw.c event.c kb.c mouse.c util.c wm.c | |
+WMSRC = bar.c client.c draw.c event.c kb.c mouse.c util.c wm.c | |
WMOBJ = ${WMSRC:.c=.o} | |
MENSRC = menu.c draw.c util.c | |
MENOBJ = ${MENSRC:.c=.o} | |
diff --git a/client.c b/client.c | |
t@@ -3,6 +3,7 @@ | |
* See LICENSE file for license details. | |
*/ | |
+#include <math.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <X11/Xatom.h> | |
t@@ -10,6 +11,73 @@ | |
#include "util.h" | |
#include "wm.h" | |
+void | |
+arrange(void *aux) | |
+{ | |
+ Client *c; | |
+ int n, cols, rows, gw, gh, i, j; | |
+ float rt, fd; | |
+ | |
+ if(!clients) | |
+ return; | |
+ for(n = 0, c = clients; c; c = c->next, n++); | |
+ rt = sqrt(n); | |
+ if(modff(rt, &fd) < 0.5) | |
+ rows = floor(rt); | |
+ else | |
+ rows = ceil(rt); | |
+ if(rows * rows < n) | |
+ cols = rows + 1; | |
+ else | |
+ cols = rows; | |
+ | |
+ gw = (sw - 1) / cols; | |
+ gh = (sh - bh - 1) / rows; | |
+ | |
+ for(i = j = 0, c = clients; c; c = c->next) { | |
+ c->x = i * gw; | |
+ c->y = j * gh + bh; | |
+ c->w = gw; | |
+ c->h = gh; | |
+ resize(c); | |
+ if(++i == cols) { | |
+ j++; | |
+ i = 0; | |
+ } | |
+ } | |
+} | |
+ | |
+void | |
+sel(void *aux) | |
+{ | |
+ const char *arg = aux; | |
+ Client *c = NULL; | |
+ | |
+ if(!arg || !stack) | |
+ return; | |
+ if(!strncmp(arg, "next", 5)) | |
+ c = stack->snext ? stack->snext : stack; | |
+ else if(!strncmp(arg, "prev", 5)) | |
+ for(c = stack; c && c->snext; c = c->snext); | |
+ if(!c) | |
+ c = stack; | |
+ raise(c); | |
+ focus(c); | |
+} | |
+ | |
+void | |
+kill(void *aux) | |
+{ | |
+ Client *c = stack; | |
+ | |
+ if(!c) | |
+ return; | |
+ if(c->proto & WM_PROTOCOL_DELWIN) | |
+ send_message(c->win, wm_atom[WMProtocols], wm_atom[WMDelete]); | |
+ else | |
+ XKillClient(dpy, c->win); | |
+} | |
+ | |
static void | |
resize_title(Client *c) | |
{ | |
t@@ -113,7 +181,7 @@ focus(Client *c) | |
draw_client(old); | |
} | |
XUnmapWindow(dpy, c->title); | |
- draw_client(old); | |
+ draw_client(c); | |
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | |
XFlush(dpy); | |
} | |
diff --git a/cmd.c b/cmd.c | |
t@@ -1,52 +0,0 @@ | |
-/* | |
- * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> | |
- * See LICENSE file for license details. | |
- */ | |
- | |
-#include "wm.h" | |
-#include <stdio.h> | |
-#include <string.h> | |
- | |
-void | |
-run(void *aux) | |
-{ | |
- spawn(dpy, aux); | |
-} | |
- | |
-void | |
-quit(void *aux) | |
-{ | |
- running = False; | |
-} | |
- | |
-void | |
-sel(void *aux) | |
-{ | |
- const char *arg = aux; | |
- Client *c = NULL; | |
- | |
- if(!arg || !stack) | |
- return; | |
- if(!strncmp(arg, "next", 5)) | |
- c = stack->snext ? stack->snext : stack; | |
- else if(!strncmp(arg, "prev", 5)) | |
- for(c = stack; c && c->snext; c = c->snext); | |
- if(!c) | |
- c = stack; | |
- raise(c); | |
- focus(c); | |
-} | |
- | |
-void | |
-kill(void *aux) | |
-{ | |
- Client *c = stack; | |
- | |
- if(!c) | |
- return; | |
- if(c->proto & WM_PROTOCOL_DELWIN) | |
- send_message(c->win, wm_atom[WMProtocols], wm_atom[WMDelete]); | |
- else | |
- XKillClient(dpy, c->win); | |
-} | |
- | |
diff --git a/config.mk b/config.mk | |
t@@ -11,7 +11,7 @@ X11LIB = /usr/X11R6/lib | |
VERSION = 0.0 | |
# includes and libs | |
-LIBS = -L${PREFIX}/lib -L/usr/lib -lc -L${X11LIB} -lX11 | |
+LIBS = -L${PREFIX}/lib -L/usr/lib -lc -lm -L${X11LIB} -lX11 | |
# Linux/BSD | |
CFLAGS = -g -Wall -I. -I${PREFIX}/include -I/usr/include -I${X11INC} \ | |
diff --git a/kb.c b/kb.c | |
t@@ -13,16 +13,18 @@ static const char *term[] = { | |
}; | |
static const char *proglist[] = { | |
- "sh", "-c", "exec `ls -lL /bin /sbin /usr/bin /usr/local/bin 2… | |
+ "sh", "-c", "exec `ls -lL /bin /sbin /usr/bin /usr/local/bin 2… | |
+ "| awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | g… | |
}; | |
static Key key[] = { | |
{ Mod1Mask, XK_Return, run, term }, | |
{ Mod1Mask, XK_p, run, proglist }, | |
- { Mod1Mask, XK_k, sel, "prev"}, | |
- { Mod1Mask, XK_j, sel, "next"}, | |
- { Mod1Mask | ShiftMask, XK_c, kill, NULL}, | |
- { Mod1Mask | ShiftMask, XK_q, quit, NULL}, | |
+ { Mod1Mask, XK_k, sel, "prev" }, | |
+ { Mod1Mask, XK_j, sel, "next" }, | |
+ { Mod1Mask, XK_g, arrange, NULL }, | |
+ { Mod1Mask | ShiftMask, XK_c, kill, NULL }, | |
+ { Mod1Mask | ShiftMask, XK_q, quit, NULL }, | |
}; | |
void | |
diff --git a/wm.c b/wm.c | |
t@@ -175,6 +175,18 @@ cleanup() | |
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); | |
} | |
+void | |
+run(void *aux) | |
+{ | |
+ spawn(dpy, aux); | |
+} | |
+ | |
+void | |
+quit(void *aux) | |
+{ | |
+ running = False; | |
+} | |
+ | |
int | |
main(int argc, char *argv[]) | |
{ | |
diff --git a/wm.h b/wm.h | |
t@@ -58,12 +58,6 @@ extern Client *clients, *stack; | |
/* bar.c */ | |
extern void draw_bar(); | |
-/* cmd.c */ | |
-extern void run(void *aux); | |
-extern void quit(void *aux); | |
-extern void kill(void *aux); | |
-extern void sel(void *aux); | |
- | |
/* client.c */ | |
extern void manage(Window w, XWindowAttributes *wa); | |
extern void unmanage(Client *c); | |
t@@ -76,10 +70,15 @@ extern void update_size(Client *c); | |
extern Client *gettitle(Window w); | |
extern void raise(Client *c); | |
extern void lower(Client *c); | |
+extern void kill(void *aux); | |
+extern void sel(void *aux); | |
/* event.c */ | |
extern void discard_events(long even_mask); | |
+/* grid.c */ | |
+extern void arrange(); | |
+ | |
/* key.c */ | |
extern void update_keys(); | |
extern void keypress(XEvent *e); | |
t@@ -92,3 +91,5 @@ extern void mmove(Client *c); | |
extern int error_handler(Display *dpy, XErrorEvent *error); | |
extern void send_message(Window w, Atom a, long value); | |
extern int win_proto(Window w); | |
+extern void run(void *aux); | |
+extern void quit(void *aux); |