Introduction
Introduction Statistics Contact Development Disclaimer Help
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);
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.