=== added file 'place.c' --- place.c 1970-01-01 00:00:00 +0000 +++ place.c 2007-05-10 15:40:32 +0000 @@ -0,0 +1,56 @@ +/* Author: Riccardo Murri + * See LICENSE file for license details. */ +#include "dwm.h" +#include + + +typedef enum {Top=0, Middle=1, Bottom=2} vertical_placement_t; +typedef enum {Left=0, Center=1, Right=2} horizontal_placement_t; + +static void +_place(const vertical_placement_t vpos, const horizontal_placement_t hpos) +{ + unsigned int nx, ny; + XEvent ev; + + if(NULL == sel || !sel->isfloating) + return; + + nx = wax + hpos*(waw - sel->w)/2; + ny = way + vpos*(wah - sel->h)/2; + + XMoveWindow(dpy, sel->win, nx, ny); + XSync(dpy, False); + while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); +} + + +/** True if strings are case-insensitive equal. */ +#define streq(a,b) (0 == strcasecmp(a,b)) + +void +place(const char* arg) +{ + if(NULL == arg) + /* by default, center window in window area */ + _place(Middle, Center); + else if(streq(arg, "n")) + _place(Top, Center); + else if(streq(arg, "ne")) + _place(Top, Right); + else if(streq(arg, "e")) + _place(Middle, Right); + else if(streq(arg, "se")) + _place(Bottom, Right); + else if(streq(arg, "s")) + _place(Bottom, Center); + else if(streq(arg, "sw")) + _place(Bottom, Left); + else if(streq(arg, "w")) + _place(Middle, Left); + else if(streq(arg, "nw")) + _place(Top, Left); + else + /* by default, center window in window area */ + _place(Middle, Center); +} === modified file 'Makefile' (properties changed) --- Makefile 2007-05-08 20:42:49 +0000 +++ Makefile 2007-05-08 20:43:42 +0000 @@ -3,7 +3,7 @@ include config.mk -SRC = client.c draw.c event.c layout.c main.c tag.c util.c +SRC = client.c draw.c event.c layout.c main.c place.c tag.c util.c OBJ = ${SRC:.c=.o} all: options dwm === modified file 'config.default.h' (properties changed) --- config.default.h 2007-05-08 20:42:49 +0000 +++ config.default.h 2007-05-08 20:46:26 +0000 @@ -55,6 +55,15 @@ { MODKEY, XK_Return, zoom, NULL }, \ { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, \ { MODKEY|ShiftMask, XK_c, killclient, NULL }, \ + { MODKEY|ControlMask, XK_KP_1, place, "sw" }, \ + { MODKEY|ControlMask, XK_KP_2, place, "s" }, \ + { MODKEY|ControlMask, XK_KP_3, place, "se" }, \ + { MODKEY|ControlMask, XK_KP_4, place, "w" }, \ + { MODKEY|ControlMask, XK_KP_5, place, NULL }, \ + { MODKEY|ControlMask, XK_KP_6, place, "e" }, \ + { MODKEY|ControlMask, XK_KP_7, place, "nw" }, \ + { MODKEY|ControlMask, XK_KP_8, place, "n" }, \ + { MODKEY|ControlMask, XK_KP_9, place, "ne" }, \ { MODKEY, XK_0, view, NULL }, \ { MODKEY, XK_1, view, "0" }, \ { MODKEY, XK_2, view, "1" }, \ === modified file 'dwm.h' (properties changed) --- dwm.h 2007-05-08 20:42:49 +0000 +++ dwm.h 2007-05-08 20:44:42 +0000 @@ -133,6 +133,9 @@ void quit(const char *arg); /* quit dwm nicely */ int xerror(Display *dsply, XErrorEvent *ee); /* dwm's X error handler */ +/* place.c */ +void place(const char* arg); /* place sel window at cardinal point of screen */ + /* tag.c */ void compileregs(void); /* initialize regexps of rules defined in config.h */ Bool isvisible(Client *c); /* returns True if client is visible */