]> git.armaanb.net Git - dwm.git/commitdiff
added grid mode on Mod1Mask g
authorAnselm R. Garbe <garbeam@wmii.de>
Wed, 12 Jul 2006 14:00:51 +0000 (16:00 +0200)
committerAnselm R. Garbe <garbeam@wmii.de>
Wed, 12 Jul 2006 14:00:51 +0000 (16:00 +0200)
Makefile
client.c
cmd.c [deleted file]
config.mk
kb.c
wm.c
wm.h

index 223f6f73a828dde548688f2f339d4833dfed85b5..ccb9af764e96026245330fc6931e3a26c5ea92ee 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -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}
index 84fbce506ab2cc6809ec73309b8bcf3c146a815e..b961d8676a67972fc6a5e2ebdfc2d202eb82320e 100644 (file)
--- a/client.c
+++ b/client.c
@@ -3,6 +3,7 @@
  * See LICENSE file for license details.
  */
 
+#include <math.h>
 #include <stdlib.h>
 #include <string.h>
 #include <X11/Xatom.h>
 #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)
 {
@@ -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
deleted file mode 100644 (file)
index baa3ae9..0000000
--- a/cmd.c
+++ /dev/null
@@ -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);
-}
-
index 4fa9e86d57a643874141030bedfd1f450d21d0b5..0e5d372c0db5ee3924323ec6cb1f6a30fdef4b8b 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -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
index 7eb788a363962ed8761a1388b63309084f9b93a1..76dc29ef0e6157d00b7ca83f710ca5e23a4b5cbf 100644 (file)
--- a/kb.c
+++ b/kb.c
@@ -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>/dev/null | awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | gridmenu`", 0
+               "sh", "-c", "exec `ls -lL /bin /sbin /usr/bin /usr/local/bin 2>/dev/null "
+               "| awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | gridmenu`", 0
 };
 
 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
index f0069d249a8f639fa156e96aef76fa6dcff20ae5..02b9a68a9de652bc2c8236b540cbfb0e4789fa24 100644 (file)
--- a/wm.c
+++ b/wm.c
@@ -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
index b5b07b5901a2cdaf625a707cc5609e22c7ca3975..1e6f2149b01178f02b498ff10086c53447182558 100644 (file)
--- a/wm.h
+++ b/wm.h
@@ -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);
@@ -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);
@@ -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);