From 352cae4380713949d3800ebcda7aff3bb5ab9efc Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Thu, 22 Feb 2007 07:59:13 +0100 Subject: several changes, made togglemax extern and separated it from zoom() - moved zoom() and togglemax() into layout.c, changed void (*func)(Arg *) into void (*func)(Arg), changed default keybindings of focusnext/focusprev and incmasterw to h/j/k/l accordingly, made keys in config*h appear alphabetically (special keys first), renamed resizemaster into incmasterw, renamed MASTER into MASTERWIDTH --- client.c | 44 ++------------------------- config.arg.h | 67 +++++++++++++++++++++-------------------- config.default.h | 61 +++++++++++++++++++------------------ dwm.1 | 15 +++++---- dwm.h | 30 +++++++++--------- event.c | 20 ++++++------ layout.c | 92 +++++++++++++++++++++++++++++++++++++++----------------- main.c | 2 +- tag.c | 28 ++++++++--------- util.c | 8 ++--- 10 files changed, 184 insertions(+), 183 deletions(-) diff --git a/client.c b/client.c index c962c39..3d9cd40 100644 --- a/client.c +++ b/client.c @@ -83,24 +83,6 @@ setclientstate(Client *c, long state) { PropModeReplace, (unsigned char *)data, 2); } -static void -togglemax(Client *c) { - XEvent ev; - - if(c->isfixed) - return; - if((c->ismax = !c->ismax)) { - c->rx = c->x; - c->ry = c->y; - c->rw = c->w; - c->rh = c->h; - resize(c, wax, way, waw - 2 * BORDERPX, wah - 2 * BORDERPX, True); - } - else - resize(c, c->rx, c->ry, c->rw, c->rh, True); - while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); -} - static int xerrordummy(Display *dsply, XErrorEvent *ee) { return 0; @@ -171,7 +153,7 @@ focus(Client *c) { } void -killclient(Arg *arg) { +killclient(Arg arg) { if(!sel) return; if(isprotodel(sel)) @@ -303,7 +285,7 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) { } void -toggleversatile(Arg *arg) { +toggleversatile(Arg arg) { if(!sel || lt->arrange == versatile) return; sel->isversatile = !sel->isversatile; @@ -402,25 +384,3 @@ unmanage(Client *c) { XUngrabServer(dpy); lt->arrange(); } - -void -zoom(Arg *arg) { - unsigned int n; - Client *c; - - if(!sel) - return; - if(sel->isversatile || (lt->arrange == versatile)) { - togglemax(sel); - return; - } - for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) - n++; - if((c = sel) == nexttiled(clients)) - if(!(c = nexttiled(c->next))) - return; - detach(c); - attach(c); - focus(c); - lt->arrange(); -} diff --git a/config.arg.h b/config.arg.h index a887430..afbc4d1 100644 --- a/config.arg.h +++ b/config.arg.h @@ -14,7 +14,6 @@ #define TOPBAR True /* False */ /* behavior */ -#define SNAP 40 /* pixel */ #define TAGS \ const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL }; #define RULES \ @@ -33,27 +32,41 @@ static Layout layout[] = { \ { "[]=", tile }, /* first entry is default */ \ { "><>", versatile }, \ }; -#define MASTER 600 /* per thousand */ +#define MASTERWIDTH 600 /* master width per thousand */ #define NMASTER 1 /* clients in master area */ +#define SNAP 40 /* versatile snap pixel */ /* key definitions */ #define MODKEY Mod1Mask #define KEYS \ static Key key[] = { \ /* modifier key function argument */ \ - { MODKEY|ShiftMask, XK_Return, spawn, \ - { .cmd = "exec urxvtcd -tr -bg '#292929' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" } }, \ + { MODKEY, XK_Return, zoom, { 0 } }, \ + { MODKEY, XK_space, setlayout, { .i = -1 } }, \ + { MODKEY, XK_0, view, { .i = -1 } }, \ + { MODKEY, XK_1, view, { .i = 0 } }, \ + { MODKEY, XK_2, view, { .i = 1 } }, \ + { MODKEY, XK_3, view, { .i = 2 } }, \ + { MODKEY, XK_4, view, { .i = 3 } }, \ + { MODKEY, XK_5, view, { .i = 4 } }, \ + { MODKEY, XK_6, view, { .i = 5 } }, \ + { MODKEY, XK_7, view, { .i = 6 } }, \ + { MODKEY, XK_8, view, { .i = 7 } }, \ + { MODKEY, XK_9, view, { .i = 8 } }, \ + { MODKEY, XK_d, incnmaster, { .i = -1 } }, \ + { MODKEY, XK_h, incmasterw, { .i = -15 } }, \ + { MODKEY, XK_i, incnmaster, { .i = 1 } }, \ + { MODKEY, XK_j, focusnext, { 0 } }, \ + { MODKEY, XK_k, focusprev, { 0 } }, \ + { MODKEY, XK_l, incmasterw, { .i = 15 } }, \ + { MODKEY, XK_m, togglemax, { 0 } }, \ { MODKEY, XK_p, spawn, \ { .cmd = "exe=\"$(lsx `echo $PATH | sed 's/:/ /g'` | sort -u " \ " | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' " \ "-sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"')\" && exec $exe" } }, \ - { MODKEY, XK_j, focusnext, { 0 } }, \ - { MODKEY, XK_k, focusprev, { 0 } }, \ - { MODKEY, XK_Return, zoom, { 0 } }, \ - { MODKEY, XK_g, resizemaster, { .i = 15 } }, \ - { MODKEY, XK_s, resizemaster, { .i = -15 } }, \ - { MODKEY, XK_i, incnmaster, { .i = 1 } }, \ - { MODKEY, XK_d, incnmaster, { .i = -1 } }, \ + { MODKEY|ShiftMask, XK_Return, spawn, \ + { .cmd = "exec urxvtcd -tr -bg '#292929' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" } }, \ + { MODKEY|ShiftMask, XK_space, toggleversatile,{ 0 } }, \ { MODKEY|ShiftMask, XK_0, tag, { .i = -1 } }, \ { MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \ { MODKEY|ShiftMask, XK_2, tag, { .i = 1 } }, \ @@ -64,28 +77,8 @@ static Key key[] = { \ { MODKEY|ShiftMask, XK_7, tag, { .i = 6 } }, \ { MODKEY|ShiftMask, XK_8, tag, { .i = 7 } }, \ { MODKEY|ShiftMask, XK_9, tag, { .i = 8 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, { .i = 0 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, { .i = 1 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, { .i = 2 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, { .i = 3 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, { .i = 4 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, { .i = 5 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, { .i = 6 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, { .i = 7 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, { .i = 8 } }, \ { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ - { MODKEY, XK_space, setlayout, { .i = -1 } }, \ - { MODKEY|ShiftMask, XK_space, toggleversatile,{ 0 } }, \ - { MODKEY, XK_0, view, { .i = -1 } }, \ - { MODKEY, XK_1, view, { .i = 0 } }, \ - { MODKEY, XK_2, view, { .i = 1 } }, \ - { MODKEY, XK_3, view, { .i = 2 } }, \ - { MODKEY, XK_4, view, { .i = 3 } }, \ - { MODKEY, XK_5, view, { .i = 4 } }, \ - { MODKEY, XK_6, view, { .i = 5 } }, \ - { MODKEY, XK_7, view, { .i = 6 } }, \ - { MODKEY, XK_8, view, { .i = 7 } }, \ - { MODKEY, XK_9, view, { .i = 8 } }, \ + { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ { MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \ { MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \ { MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \ @@ -95,5 +88,13 @@ static Key key[] = { \ { MODKEY|ControlMask, XK_7, toggleview, { .i = 6 } }, \ { MODKEY|ControlMask, XK_8, toggleview, { .i = 7 } }, \ { MODKEY|ControlMask, XK_9, toggleview, { .i = 8 } }, \ - { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, { .i = 0 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, { .i = 1 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, { .i = 2 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, { .i = 3 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, { .i = 4 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, { .i = 5 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, { .i = 6 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, { .i = 7 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, { .i = 8 } }, \ }; diff --git a/config.default.h b/config.default.h index eb6933b..ebe91e9 100644 --- a/config.default.h +++ b/config.default.h @@ -14,7 +14,6 @@ #define TOPBAR True /* False */ /* behavior */ -#define SNAP 20 /* pixel */ #define TAGS \ const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL }; /* Query class:instance:title for regex matching info with following command: @@ -34,22 +33,36 @@ static Layout layout[] = { \ { "[]=", tile }, /* first entry is default */ \ { "><>", versatile }, \ }; -#define MASTER 600 /* per thousand */ +#define MASTERWIDTH 600 /* master width per thousand */ #define NMASTER 1 /* clients in master area */ +#define SNAP 20 /* versatile snap pixel */ /* key definitions */ #define MODKEY Mod1Mask #define KEYS \ static Key key[] = { \ /* modifier key function argument */ \ - { MODKEY|ShiftMask, XK_Return, spawn, { .cmd = "exec xterm" } }, \ - { MODKEY, XK_Tab, focusnext, { 0 } }, \ - { MODKEY|ShiftMask, XK_Tab, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ - { MODKEY, XK_g, resizemaster, { .i = 15 } }, \ - { MODKEY, XK_s, resizemaster, { .i = -15 } }, \ - { MODKEY, XK_i, incnmaster, { .i = 1 } }, \ + { MODKEY, XK_space, setlayout, { .i = -1 } }, \ + { MODKEY, XK_0, view, { .i = -1 } }, \ + { MODKEY, XK_1, view, { .i = 0 } }, \ + { MODKEY, XK_2, view, { .i = 1 } }, \ + { MODKEY, XK_3, view, { .i = 2 } }, \ + { MODKEY, XK_4, view, { .i = 3 } }, \ + { MODKEY, XK_5, view, { .i = 4 } }, \ + { MODKEY, XK_6, view, { .i = 5 } }, \ + { MODKEY, XK_7, view, { .i = 6 } }, \ + { MODKEY, XK_8, view, { .i = 7 } }, \ + { MODKEY, XK_9, view, { .i = 8 } }, \ { MODKEY, XK_d, incnmaster, { .i = -1 } }, \ + { MODKEY, XK_h, incmasterw, { .i = -15 } }, \ + { MODKEY, XK_i, incnmaster, { .i = 1 } }, \ + { MODKEY, XK_j, focusnext, { 0 } }, \ + { MODKEY, XK_k, focusprev, { 0 } }, \ + { MODKEY, XK_l, incmasterw, { .i = 15 } }, \ + { MODKEY, XK_m, togglemax, { 0 } }, \ + { MODKEY|ShiftMask, XK_Return, spawn, { .cmd = "exec xterm" } }, \ + { MODKEY|ShiftMask, XK_space, toggleversatile,{ 0 } }, \ { MODKEY|ShiftMask, XK_0, tag, { .i = -1 } }, \ { MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \ { MODKEY|ShiftMask, XK_2, tag, { .i = 1 } }, \ @@ -60,28 +73,8 @@ static Key key[] = { \ { MODKEY|ShiftMask, XK_7, tag, { .i = 6 } }, \ { MODKEY|ShiftMask, XK_8, tag, { .i = 7 } }, \ { MODKEY|ShiftMask, XK_9, tag, { .i = 8 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, { .i = 0 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, { .i = 1 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, { .i = 2 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, { .i = 3 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, { .i = 4 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, { .i = 5 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, { .i = 6 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, { .i = 7 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, { .i = 8 } }, \ { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ - { MODKEY, XK_space, setlayout, { .i = -1 } }, \ - { MODKEY|ShiftMask, XK_space, toggleversatile,{ 0 } }, \ - { MODKEY, XK_0, view, { .i = -1 } }, \ - { MODKEY, XK_1, view, { .i = 0 } }, \ - { MODKEY, XK_2, view, { .i = 1 } }, \ - { MODKEY, XK_3, view, { .i = 2 } }, \ - { MODKEY, XK_4, view, { .i = 3 } }, \ - { MODKEY, XK_5, view, { .i = 4 } }, \ - { MODKEY, XK_6, view, { .i = 5 } }, \ - { MODKEY, XK_7, view, { .i = 6 } }, \ - { MODKEY, XK_8, view, { .i = 7 } }, \ - { MODKEY, XK_9, view, { .i = 8 } }, \ + { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ { MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \ { MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \ { MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \ @@ -91,5 +84,13 @@ static Key key[] = { \ { MODKEY|ControlMask, XK_7, toggleview, { .i = 6 } }, \ { MODKEY|ControlMask, XK_8, toggleview, { .i = 7 } }, \ { MODKEY|ControlMask, XK_9, toggleview, { .i = 8 } }, \ - { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, { .i = 0 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, { .i = 1 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, { .i = 2 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, { .i = 3 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, { .i = 4 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, { .i = 5 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, { .i = 6 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, { .i = 7 } }, \ + { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, { .i = 8 } }, \ }; diff --git a/dwm.1 b/dwm.1 index cac0858..8d22a3d 100644 --- a/dwm.1 +++ b/dwm.1 @@ -60,19 +60,19 @@ click on a tag label adds/removes that tag to/from the focused window. Start .BR xterm (1). .TP -.B Mod1-Tab +.B Mod1-j Focus next window. .TP -.B Mod1-Shift-Tab +.B Mod1-k Focus previous window. .TP .B Mod1-Return -Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (versatile layout). +Zooms/cycles current window to/from master area (tiling layout only). .TP -.B Mod1-g +.B Mod1-l Grow master area (tiling layout only). .TP -.B Mod1-s +.B Mod1-h Shrink master area (tiling layout only). .TP .B Mod1-i @@ -81,6 +81,9 @@ Increase the number of windows in the master area (tiling layout only). .B Mod1-d Decrease the number of windows in the master area (tiling layout only). .TP +.B Mod1-m +Toggles maximization of current window (versatile layout only). +.TP .B Mod1-Shift-[1..n] Apply .RB nth @@ -124,7 +127,7 @@ Quit dwm. Move current window while dragging (versatile layout only). .TP .B Mod1-Button2 -Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (versatile layout). +Zooms/cycles current window to/from master area (tiling layout only). .TP .B Mod1-Button3 Resize current window while dragging (versatile layout only). diff --git a/dwm.h b/dwm.h index f74c17b..6fe9e15 100644 --- a/dwm.h +++ b/dwm.h @@ -90,7 +90,6 @@ extern char stext[256]; /* status text */ extern int screen, sx, sy, sw, sh; /* screen geometry */ extern int wax, way, wah, waw; /* windowarea geometry */ extern unsigned int bh, blw; /* bar height, bar layout label width */ -extern unsigned int master, nmaster; /* master percent, number of master clients */ extern unsigned int ntags, numlockmask; /* number of tags, dynamic lock mask */ extern void (*handler[LASTEvent])(XEvent *); /* event handler */ extern Atom wmatom[WMLast], netatom[NetLast]; @@ -105,15 +104,14 @@ extern Window root, barwin; /* client.c */ extern void configure(Client *c); /* send synthetic configure event */ extern void focus(Client *c); /* focus c, c may be NULL */ -extern void killclient(Arg *arg); /* kill c nicely */ +extern void killclient(Arg arg); /* kill c nicely */ extern void manage(Window w, XWindowAttributes *wa); /* manage new client */ extern void resize(Client *c, int x, int y, int w, int h, Bool sizehints); /* resize with given coordinates c*/ -extern void toggleversatile(Arg *arg); /* toggles focused client between versatile/and non-versatile state */ +extern void toggleversatile(Arg arg); /* toggles focused client between versatile/and non-versatile state */ extern void updatesizehints(Client *c); /* update the size hint variables of c */ extern void updatetitle(Client *c); /* update the name of c */ extern void unmanage(Client *c); /* destroy c */ -extern void zoom(Arg *arg); /* zooms the focused client to master area, arg is ignored */ /* draw.c */ extern void drawstatus(void); /* draw the bar */ @@ -125,18 +123,19 @@ extern unsigned int textw(const char *text); /* return the width of text in px*/ extern void grabkeys(void); /* grab all keys defined in config.h */ /* layout.c */ -extern void focusnext(Arg *arg); /* focuses next visible client, arg is ignored */ -extern void focusprev(Arg *arg); /* focuses previous visible client, arg is ignored */ -extern void incnmaster(Arg *arg); /* increments nmaster with arg's index value */ +extern void focusnext(Arg arg); /* focuses next visible client, arg is ignored */ +extern void focusprev(Arg arg); /* focuses previous visible client, arg is ignored */ +extern void incmasterw(Arg arg); /* increments the master width with arg's index value */ +extern void incnmaster(Arg arg); /* increments nmaster with arg's index value */ extern void initlayouts(void); /* initialize layout array */ extern Client *nexttiled(Client *c); /* returns tiled successor of c */ -extern void resizemaster(Arg *arg); /* resizes the master percent with arg's index value */ extern void restack(void); /* restores z layers of all clients */ -extern void setlayout(Arg *arg); /* sets layout, -1 toggles */ +extern void setlayout(Arg arg); /* sets layout, -1 toggles */ +extern void togglemax(Arg arg); /* toggles maximization of versatile client */ extern void versatile(void); /* arranges all windows versatile */ /* main.c */ -extern void quit(Arg *arg); /* quit dwm nicely */ +extern void quit(Arg arg); /* quit dwm nicely */ extern void sendevent(Window w, Atom a, long value); /* send synthetic event to w */ extern int xerror(Display *dsply, XErrorEvent *ee); /* dwm's X error handler */ @@ -144,13 +143,14 @@ extern int xerror(Display *dsply, XErrorEvent *ee); /* dwm's X error handler */ extern void compileregs(void); /* initialize regexps of rules defined in config.h */ extern Bool isvisible(Client *c); /* returns True if client is visible */ extern void settags(Client *c, Client *trans); /* sets tags of c */ -extern void tag(Arg *arg); /* tags c with arg's index */ -extern void toggletag(Arg *arg); /* toggles c tags with arg's index */ -extern void toggleview(Arg *arg); /* toggles the tag with arg's index (in)visible */ -extern void view(Arg *arg); /* views the tag with arg's index */ +extern void tag(Arg arg); /* tags c with arg's index */ +extern void toggletag(Arg arg); /* toggles c tags with arg's index */ +extern void toggleview(Arg arg); /* toggles the tag with arg's index (in)visible */ +extern void view(Arg arg); /* views the tag with arg's index */ +extern void zoom(Arg arg); /* zooms the focused client to master area, arg is ignored */ /* util.c */ extern void *emallocz(unsigned int size); /* allocates zero-initialized memory, exits on error */ extern void eprint(const char *errstr, ...); /* prints errstr and exits with 1 */ -extern void spawn(Arg *arg); /* forks a new subprocess with arg's cmd */ +extern void spawn(Arg arg); /* forks a new subprocess with arg's cmd */ diff --git a/event.c b/event.c index 3086284..540aeb6 100644 --- a/event.c +++ b/event.c @@ -11,7 +11,7 @@ typedef struct { unsigned long mod; KeySym keysym; - void (*func)(Arg *arg); + void (*func)(Arg arg); Arg arg; } Key; @@ -124,15 +124,15 @@ buttonpress(XEvent *e) { if(ev->x < x) { if(ev->button == Button1) { if(ev->state & MODKEY) - tag(&a); + tag(a); else - view(&a); + view(a); } else if(ev->button == Button3) { if(ev->state & MODKEY) - toggletag(&a); + toggletag(a); else - toggleview(&a); + toggleview(a); } return; } @@ -141,15 +141,15 @@ buttonpress(XEvent *e) { switch(ev->button) { case Button1: a.i = -1; - setlayout(&a); + setlayout(a); break; case Button4: a.i = 1; - incnmaster(&a); + incnmaster(a); break; case Button5: a.i = -1; - incnmaster(&a); + incnmaster(a); break; } } @@ -162,7 +162,7 @@ buttonpress(XEvent *e) { movemouse(c); } else if(ev->button == Button2) - zoom(NULL); + zoom(a); else if(ev->button == Button3 && (lt->arrange == versatile || c->isversatile) && !c->isfixed) { @@ -261,7 +261,7 @@ keypress(XEvent *e) { && CLEANMASK(key[i].mod) == CLEANMASK(ev->state)) { if(key[i].func) - key[i].func(&key[i].arg); + key[i].func(key[i].arg); } } diff --git a/layout.c b/layout.c index e5f635c..6a65599 100644 --- a/layout.c +++ b/layout.c @@ -3,14 +3,14 @@ */ #include "dwm.h" -unsigned int master = MASTER; -unsigned int nmaster = NMASTER; unsigned int blw = 0; Layout *lt = NULL; /* static */ static unsigned int nlayouts = 0; +static unsigned int masterw = MASTERWIDTH; +static unsigned int nmaster = NMASTER; static void tile(void) { @@ -21,7 +21,7 @@ tile(void) { n++; /* window geoms */ mh = (n > nmaster) ? wah / nmaster : wah / (n > 0 ? n : 1); - mw = (n > nmaster) ? (waw * master) / 1000 : waw; + mw = (n > nmaster) ? (waw * masterw) / 1000 : waw; th = (n > nmaster) ? wah / (n - nmaster) : 0; tw = waw - mw; @@ -69,7 +69,7 @@ LAYOUTS /* extern */ void -focusnext(Arg *arg) { +focusnext(Arg arg) { Client *c; if(!sel) @@ -84,7 +84,7 @@ focusnext(Arg *arg) { } void -focusprev(Arg *arg) { +focusprev(Arg arg) { Client *c; if(!sel) @@ -101,11 +101,26 @@ focusprev(Arg *arg) { } void -incnmaster(Arg *arg) { - if((lt->arrange != tile) || (nmaster + arg->i < 1) - || (wah / (nmaster + arg->i) <= 2 * BORDERPX)) +incmasterw(Arg arg) { + if(lt->arrange != tile) + return; + if(arg.i == 0) + masterw = MASTERWIDTH; + else { + if(waw * (masterw + arg.i) / 1000 >= waw - 2 * BORDERPX + || waw * (masterw + arg.i) / 1000 <= 2 * BORDERPX) + return; + masterw += arg.i; + } + lt->arrange(); +} + +void +incnmaster(Arg arg) { + if((lt->arrange != tile) || (nmaster + arg.i < 1) + || (wah / (nmaster + arg.i) <= 2 * BORDERPX)) return; - nmaster += arg->i; + nmaster += arg.i; if(sel) lt->arrange(); else @@ -131,21 +146,6 @@ nexttiled(Client *c) { return c; } -void -resizemaster(Arg *arg) { - if(lt->arrange != tile) - return; - if(arg->i == 0) - master = MASTER; - else { - if(waw * (master + arg->i) / 1000 >= waw - 2 * BORDERPX - || waw * (master + arg->i) / 1000 <= 2 * BORDERPX) - return; - master += arg->i; - } - lt->arrange(); -} - void restack(void) { Client *c; @@ -170,10 +170,10 @@ restack(void) { } void -setlayout(Arg *arg) { +setlayout(Arg arg) { unsigned int i; - if(arg->i == -1) { + if(arg.i == -1) { for(i = 0; i < nlayouts && lt != &layout[i]; i++); if(i == nlayouts - 1) lt = &layout[0]; @@ -181,9 +181,9 @@ setlayout(Arg *arg) { lt = &layout[++i]; } else { - if(arg->i < 0 || arg->i >= nlayouts) + if(arg.i < 0 || arg.i >= nlayouts) return; - lt = &layout[arg->i]; + lt = &layout[arg.i]; } if(sel) lt->arrange(); @@ -191,6 +191,24 @@ setlayout(Arg *arg) { drawstatus(); } +void +togglemax(Arg arg) { + XEvent ev; + + if(!sel || !sel->isversatile || sel->isfixed || lt->arrange != versatile) + return; + if((sel->ismax = !sel->ismax)) { + sel->rx = sel->x; + sel->ry = sel->y; + sel->rw = sel->w; + sel->rh = sel->h; + resize(sel, wax, way, waw - 2 * BORDERPX, wah - 2 * BORDERPX, True); + } + else + resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, True); + while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); +} + void versatile(void) { Client *c; @@ -213,3 +231,21 @@ versatile(void) { } restack(); } + +void +zoom(Arg arg) { + unsigned int n; + Client *c; + + if(!sel || lt->arrange != tile || sel->isversatile) + return; + for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) + n++; + if((c = sel) == nexttiled(clients)) + if(!(c = nexttiled(c->next))) + return; + detach(c); + attach(c); + focus(c); + lt->arrange(); +} diff --git a/main.c b/main.c index c92f415..d06a1b3 100644 --- a/main.c +++ b/main.c @@ -236,7 +236,7 @@ sendevent(Window w, Atom a, long value) { } void -quit(Arg *arg) { +quit(Arg arg) { readin = running = False; } diff --git a/tag.c b/tag.c index c069dcc..d946309 100644 --- a/tag.c +++ b/tag.c @@ -102,49 +102,49 @@ settags(Client *c, Client *trans) { } void -tag(Arg *arg) { +tag(Arg arg) { unsigned int i; if(!sel) return; for(i = 0; i < ntags; i++) - sel->tags[i] = (arg->i == -1) ? True : False; - if(arg->i >= 0 && arg->i < ntags) - sel->tags[arg->i] = True; + sel->tags[i] = (arg.i == -1) ? True : False; + if(arg.i >= 0 && arg.i < ntags) + sel->tags[arg.i] = True; lt->arrange(); } void -toggletag(Arg *arg) { +toggletag(Arg arg) { unsigned int i; if(!sel) return; - sel->tags[arg->i] = !sel->tags[arg->i]; + sel->tags[arg.i] = !sel->tags[arg.i]; for(i = 0; i < ntags && !sel->tags[i]; i++); if(i == ntags) - sel->tags[arg->i] = True; + sel->tags[arg.i] = True; lt->arrange(); } void -toggleview(Arg *arg) { +toggleview(Arg arg) { unsigned int i; - seltag[arg->i] = !seltag[arg->i]; + seltag[arg.i] = !seltag[arg.i]; for(i = 0; i < ntags && !seltag[i]; i++); if(i == ntags) - seltag[arg->i] = True; /* cannot toggle last view */ + seltag[arg.i] = True; /* cannot toggle last view */ lt->arrange(); } void -view(Arg *arg) { +view(Arg arg) { unsigned int i; for(i = 0; i < ntags; i++) - seltag[i] = (arg->i == -1) ? True : False; - if(arg->i >= 0 && arg->i < ntags) - seltag[arg->i] = True; + seltag[i] = (arg.i == -1) ? True : False; + if(arg.i >= 0 && arg.i < ntags) + seltag[arg.i] = True; lt->arrange(); } diff --git a/util.c b/util.c index 8b36a3f..b786480 100644 --- a/util.c +++ b/util.c @@ -30,12 +30,12 @@ eprint(const char *errstr, ...) { } void -spawn(Arg *arg) { +spawn(Arg arg) { static char *shell = NULL; if(!shell && !(shell = getenv("SHELL"))) shell = "/bin/sh"; - if(!arg->cmd) + if(!arg.cmd) return; /* The double-fork construct avoids zombie processes and keeps the code * clean from stupid signal handlers. */ @@ -44,8 +44,8 @@ spawn(Arg *arg) { if(dpy) close(ConnectionNumber(dpy)); setsid(); - execl(shell, shell, "-c", arg->cmd, (char *)NULL); - fprintf(stderr, "dwm: execl '%s -c %s'", shell, arg->cmd); + execl(shell, shell, "-c", arg.cmd, (char *)NULL); + fprintf(stderr, "dwm: execl '%s -c %s'", shell, arg.cmd); perror(" failed"); } exit(0); -- cgit 1.4.1-2-gfad0 'n682' href='#n682'>682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942