Subdirectorios comunes: dwm-4.8/.hg y dwm-nolayouts/.hg diff -up dwm-4.8/config.def.h dwm-nolayouts/config.def.h --- dwm-4.8/config.def.h 2008-03-06 16:30:28.000000000 +0100 +++ dwm-nolayouts/config.def.h 2008-03-06 17:09:59.000000000 +0100 @@ -1,25 +1,25 @@ /* See LICENSE file for copyright and license details. */ /* appearance */ -#define BORDERPX 1 -#define FONT "-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*" +#define BORDERPX 3 +#define FONT "-*-terminus-bold-r-normal-*-14-*-*-*-*-*-*-*" #define NORMBORDERCOLOR "#cccccc" -#define NORMBGCOLOR "#cccccc" +#define NORMBGCOLOR "#e6e6e6" #define NORMFGCOLOR "#000000" #define SELBORDERCOLOR "#0066ff" -#define SELBGCOLOR "#0066ff" -#define SELFGCOLOR "#ffffff" +#define SELBGCOLOR "#e6e6e6" +#define SELFGCOLOR "#0066ff" /* bar position */ #define BX sx #define BY sy -#define BW MW +#define BW sw /* window area */ #define WX 0 #define WY bh #define WW sw -#define WH sh +#define WH (sh - bh) /* master area */ #define MX sx @@ -29,38 +29,31 @@ /* tile area, might be on a different screen */ #define TX sx + MW -#define TY sy +#define TY bh #define TW sw - MW -#define TH sh +#define TH (sh - bh) /* monocle area, might be restricted to a specific screen */ -#define MOX sx -#define MOY MY -#define MOW sw -#define MOH MH +#define MOX WX +#define MOY WY +#define MOW WW - 2 * BORDERPX +#define MOH WH - 2 * BORDERPX /* tagging */ -const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; +const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "w" }; Rule rules[] = { /* class:instance:title substr tags ref isfloating */ - { "Firefox", tags[8], False }, + { "Firefox", tags[4], False }, { "Gimp", NULL, True }, { "MPlayer", NULL, True }, { "Acroread", NULL, True }, }; /* layout(s) */ -#define RESIZEHINTS True /* False - respect size hints in tiled resizals */ +#define RESIZEHINTS False /* False - respect size hints in tiled resizals */ #define SNAP 32 /* snap pixel */ -Layout layouts[] = { - /* symbol function */ - { "[]=", tile }, /* first entry is default */ - { "><>", floating }, - { "[M]", monocle }, -}; - /* key definitions */ #define MODKEY Mod1Mask Key keys[] = { @@ -78,48 +71,30 @@ Key keys[] = { { MODKEY, XK_r, reapply, NULL }, { MODKEY, XK_Return, zoom, NULL }, { MODKEY, XK_Tab, viewprevtag, NULL }, - { MODKEY, XK_m, setlayout, "[M]" }, - { MODKEY, XK_f, setlayout, "><>" }, - { MODKEY, XK_t, setlayout, "[]=" }, - { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, + { MODKEY, XK_space, togglemax, NULL }, + { MODKEY|ShiftMask, XK_space, raiseclient, NULL }, { MODKEY|ShiftMask, XK_c, killclient, NULL }, { MODKEY, XK_0, view, NULL }, { MODKEY, XK_1, view, tags[0] }, { MODKEY, XK_2, view, tags[1] }, { MODKEY, XK_3, view, tags[2] }, { MODKEY, XK_4, view, tags[3] }, - { MODKEY, XK_5, view, tags[4] }, - { MODKEY, XK_6, view, tags[5] }, - { MODKEY, XK_7, view, tags[6] }, - { MODKEY, XK_8, view, tags[7] }, - { MODKEY, XK_9, view, tags[8] }, + { MODKEY, XK_w, view, tags[4] }, { MODKEY|ControlMask, XK_1, toggleview, tags[0] }, { MODKEY|ControlMask, XK_2, toggleview, tags[1] }, { MODKEY|ControlMask, XK_3, toggleview, tags[2] }, { MODKEY|ControlMask, XK_4, toggleview, tags[3] }, - { MODKEY|ControlMask, XK_5, toggleview, tags[4] }, - { MODKEY|ControlMask, XK_6, toggleview, tags[5] }, - { MODKEY|ControlMask, XK_7, toggleview, tags[6] }, - { MODKEY|ControlMask, XK_8, toggleview, tags[7] }, - { MODKEY|ControlMask, XK_9, toggleview, tags[8] }, + { MODKEY|ControlMask, XK_w, toggleview, tags[4] }, { MODKEY|ShiftMask, XK_0, tag, NULL }, { MODKEY|ShiftMask, XK_1, tag, tags[0] }, { MODKEY|ShiftMask, XK_2, tag, tags[1] }, { MODKEY|ShiftMask, XK_3, tag, tags[2] }, { MODKEY|ShiftMask, XK_4, tag, tags[3] }, - { MODKEY|ShiftMask, XK_5, tag, tags[4] }, - { MODKEY|ShiftMask, XK_6, tag, tags[5] }, - { MODKEY|ShiftMask, XK_7, tag, tags[6] }, - { MODKEY|ShiftMask, XK_8, tag, tags[7] }, - { MODKEY|ShiftMask, XK_9, tag, tags[8] }, + { MODKEY|ShiftMask, XK_w, tag, tags[4] }, { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, tags[0] }, { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, tags[1] }, { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, tags[2] }, { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, tags[3] }, - { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, tags[4] }, - { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, tags[5] }, - { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, tags[6] }, - { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, tags[7] }, - { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, tags[8] }, + { MODKEY|ControlMask|ShiftMask, XK_w, toggletag, tags[4] }, { MODKEY|ShiftMask, XK_q, quit, NULL }, }; diff -up dwm-4.8/dwm.c dwm-nolayouts/dwm.c --- dwm-4.8/dwm.c 2008-03-06 16:30:28.000000000 +0100 +++ dwm-nolayouts/dwm.c 2008-03-06 17:15:22.000000000 +0100 @@ -103,11 +103,6 @@ typedef struct { } Key; typedef struct { - const char *symbol; - void (*arrange)(void); -} Layout; - -typedef struct { const char *prop; const char *tag; Bool isfloating; @@ -135,7 +130,6 @@ void *emallocz(unsigned int size); void enternotify(XEvent *e); void eprint(const char *errstr, ...); void expose(XEvent *e); -void floating(void); /* default floating layout */ void focus(Client *c); void focusin(XEvent *e); void focusnext(const char *arg); @@ -157,11 +151,11 @@ void killclient(const char *arg); void manage(Window w, XWindowAttributes *wa); void mappingnotify(XEvent *e); void maprequest(XEvent *e); -void monocle(void); void movemouse(Client *c); Client *nexttiled(Client *c); void propertynotify(XEvent *e); void quit(const char *arg); +void raiseclient(const char *arg); void reapply(const char *arg); void resize(Client *c, int x, int y, int w, int h, Bool sizehints); void resizemouse(Client *c); @@ -169,14 +163,14 @@ void restack(void); void run(void); void scan(void); void setclientstate(Client *c, long state); -void setlayout(const char *arg); void setup(void); void spawn(const char *arg); void tag(const char *arg); unsigned int textnw(const char *text, unsigned int len); unsigned int textw(const char *text); void tile(void); -void togglefloating(const char *arg); +void togglefloating(void); +void togglemax(const char *arg); void toggletag(const char *arg); void toggleview(const char *arg); void unban(Client *c); @@ -213,7 +207,6 @@ void (*handler[LASTEvent]) (XEvent *) = [UnmapNotify] = unmapnotify }; Atom wmatom[WMLast], netatom[NetLast]; -Bool dozoom = True; Bool otherwm, readin; Bool running = True; Bool *prevtags; @@ -224,7 +217,6 @@ Client *stack = NULL; Cursor cursor[CurLast]; Display *dpy; DC dc = {0}; -Layout *lt = NULL; Window root, barwin; /* configuration, allows nested code to access above variables */ @@ -275,7 +267,7 @@ arrange(void) { ban(c); focus(NULL); - lt->arrange(); + tile(); restack(); } @@ -327,6 +319,21 @@ buttonpress(XEvent *e) { return; } } + if(ev->x < BW - textw(stext) && sel) { + if(ev->button == Button1) { + XWarpPointer(dpy, None, sel->win, 0, 0, 0, 0, 1, 1); + raiseclient(NULL); + movemouse(sel); + } + else if(ev->button == Button2) + zoom(NULL); + else if(ev->button == Button3) + resizemouse(sel); + else if(ev->button == Button4) + focusprev(NULL); + else if(ev->button == Button5) + focusnext(NULL); + } } else if((c = getclient(ev->window))) { focus(c); @@ -334,14 +341,11 @@ buttonpress(XEvent *e) { return; if(ev->button == Button1) { restack(); + raiseclient(NULL); movemouse(c); } - else if(ev->button == Button2) { - if((floating != lt->arrange) && c->isfloating) - togglefloating(NULL); - else - zoom(NULL); - } + else if(ev->button == Button2) + zoom(NULL); else if(ev->button == Button3 && !c->isfixed) { restack(); resizemouse(c); @@ -428,7 +432,7 @@ configurerequest(XEvent *e) { if((c = getclient(ev->window))) { if(ev->value_mask & CWBorderWidth) c->border = ev->border_width; - if(c->isfixed || c->isfloating || (floating == lt->arrange)) { + if(c->isfixed || c->isfloating) { if(ev->value_mask & CWX) c->x = sx + ev->x; if(ev->value_mask & CWY) @@ -510,9 +514,7 @@ drawbar(void) { } dc.x += dc.w; } - dc.w = blw; - drawtext(lt->symbol, dc.norm, False); - x = dc.x + dc.w; + x = dc.x; dc.w = textw(stext); dc.x = BW - dc.w; if(dc.x < x) { @@ -524,7 +526,6 @@ drawbar(void) { dc.x = x; if(c) { drawtext(c->name, dc.sel, False); - drawsquare(False, c->isfloating, False, dc.sel); } else drawtext(NULL, dc.norm, False); @@ -613,6 +614,7 @@ enternotify(XEvent *e) { focus(c); else focus(NULL); + restack(); } void @@ -634,38 +636,21 @@ expose(XEvent *e) { } void -floating(void) { /* default floating layout */ - Client *c; - - dozoom = False; - for(c = clients; c; c = c->next) - if(isvisible(c)) - resize(c, c->x, c->y, c->w, c->h, True); -} - -void focus(Client *c) { if(!c || (c && !isvisible(c))) for(c = stack; c && !isvisible(c); c = c->snext); if(sel && sel != c) { grabbuttons(sel, False); XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]); - if(lt->arrange == monocle) - resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, True); + if(sel->rh != 0) { + resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, RESIZEHINTS); + sel->rh = 0; + } } if(c) { detachstack(c); attachstack(c); grabbuttons(c, True); - if(lt->arrange == monocle) { - if(sel != c) { - c->rx = c->x; - c->ry = c->y; - c->rw = c->w; - c->rh = c->h; - } - resize(c, MOX, MOY, MOW, MOH, RESIZEHINTS); - } } sel = c; if(c) { @@ -990,7 +975,8 @@ manage(Window w, XWindowAttributes *wa) c->x = c->rx = wa->x + sx; c->y = c->ry = wa->y + sy; c->w = c->rw = wa->width; - c->h = c->rh = wa->height; + c->h = wa->height; + c->rh = 0; c->oldborder = wa->border_width; if(c->w == sw && c->h == sh) { @@ -1057,11 +1043,6 @@ maprequest(XEvent *e) { } void -monocle(void) { - dozoom = False; -} - -void movemouse(Client *c) { int x1, y1, ocx, ocy, di, nx, ny; unsigned int dui; @@ -1077,6 +1058,9 @@ movemouse(Client *c) { for(;;) { XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); switch (ev.type) { + case ButtonPress: + if(ev.xbutton.button == Button3) + togglemax(NULL); case ButtonRelease: XUngrabPointer(dpy, CurrentTime); return; @@ -1089,17 +1073,17 @@ movemouse(Client *c) { XSync(dpy, False); nx = ocx + (ev.xmotion.x - x1); ny = ocy + (ev.xmotion.y - y1); - if(abs(sx - nx) < SNAP) - nx = sx; - else if(abs((sx + sw) - (nx + c->w + 2 * c->border)) < SNAP) - nx = sx + sw - c->w - 2 * c->border; - if(abs(sy - ny) < SNAP) - ny = sy; - else if(abs((sy + sh) - (ny + c->h + 2 * c->border)) < SNAP) - ny = sy + sh - c->h - 2 * c->border; - if(!c->isfloating && (lt->arrange != floating) && (abs(nx - c->x) > SNAP || abs(ny - c->y) > SNAP)) - togglefloating(NULL); - if((lt->arrange == floating) || c->isfloating) + if(abs(WX - nx) < SNAP) + nx = WX; + else if(abs((WX + WW) - (nx + c->w + 2 * c->border)) < SNAP) + nx = WX + WW - c->w - 2 * c->border; + if(abs(WY - ny) < SNAP) + ny = WY; + else if(abs((WY + WH) - (ny + c->h + 2 * c->border)) < SNAP) + ny = WY + WH - c->h - 2 * c->border; + if(!c->isfloating && (abs(nx - c->x) > SNAP || abs(ny - c->y) > SNAP)) + togglefloating(); + if(c->isfloating) resize(c, nx, ny, c->w, c->h, False); break; } @@ -1150,6 +1134,13 @@ quit(const char *arg) { } void +raiseclient(const char *arg) { + if(sel) + XRaiseWindow(dpy, sel->win); +} + + +void reapply(const char *arg) { static Bool zerotags[LENGTH(tags)] = { 0 }; Client *c; @@ -1224,6 +1215,8 @@ resize(Client *c, int x, int y, int w, i configure(c); XSync(dpy, False); } + if(c->x != MOX || c->y != MOY || c->w != MOW || c->h != MOH) + c->rh = 0; } void @@ -1258,9 +1251,9 @@ resizemouse(Client *c) { nw = 1; if((nh = ev.xmotion.y - ocy - 2 * c->border + 1) <= 0) nh = 1; - if(!c->isfloating && (lt->arrange != floating) && (abs(nw - c->w) > SNAP || abs(nh - c->h) > SNAP)) - togglefloating(NULL); - if((lt->arrange == floating) || c->isfloating) + if(!c->isfloating && (abs(nw - c->w) > SNAP || abs(nh - c->h) > SNAP)) + togglefloating(); + if(c->isfloating) resize(c, c->x, c->y, nw, nh, True); break; } @@ -1276,21 +1269,19 @@ restack(void) { drawbar(); if(!sel) return; - if(sel->isfloating || (lt->arrange == floating)) + if(sel->isfloating) XRaiseWindow(dpy, sel->win); - if(lt->arrange != floating) { - wc.stack_mode = Below; - wc.sibling = barwin; - if(!sel->isfloating) { - XConfigureWindow(dpy, sel->win, CWSibling|CWStackMode, &wc); - wc.sibling = sel->win; - } - for(c = nexttiled(clients); c; c = nexttiled(c->next)) { - if(c == sel) - continue; - XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc); - wc.sibling = c->win; - } + wc.stack_mode = Below; + wc.sibling = barwin; + if(!sel->isfloating) { + XConfigureWindow(dpy, sel->win, CWSibling|CWStackMode, &wc); + wc.sibling = sel->win; + } + for(c = nexttiled(clients); c; c = nexttiled(c->next)) { + if(c == sel) + continue; + XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc); + wc.sibling = c->win; } XSync(dpy, False); while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); @@ -1392,24 +1383,6 @@ setclientstate(Client *c, long state) { } void -setlayout(const char *arg) { - unsigned int i; - - if(!arg) - return; - for(i = 0; i < LENGTH(layouts); i++) - if(!strcmp(arg, layouts[i].symbol)) - break; - if(i == LENGTH(layouts)) - return; - lt = &layouts[i]; - if(sel) - arrange(); - else - drawbar(); -} - -void setup(void) { unsigned int i; XSetWindowAttributes wa; @@ -1455,16 +1428,6 @@ setup(void) { prevtags = emallocz(TAGSZ); seltags[0] = prevtags[0] = True; - /* init layouts */ - lt = &layouts[0]; - - /* init bar */ - for(blw = i = 0; i < LENGTH(layouts); i++) { - i = textw(layouts[i].symbol); - if(i > blw) - blw = i; - } - wa.override_redirect = 1; wa.background_pixmap = ParentRelative; wa.event_mask = ButtonPressMask|ExposureMask; @@ -1549,7 +1512,6 @@ tile(void) { unsigned int i, n, nx, ny, nw, nh, mw, th; Client *c, *mc; - dozoom = True; nx = MX; ny = MY; nw = 0; @@ -1557,7 +1519,7 @@ tile(void) { n++; /* window geoms */ - mw = (n == 1) ? MOW : MW; + mw = (n == 1) ? MOW + 2 * BORDERPX : MW; th = (n > 1) ? TH / (n - 1) : 0; if(n > 1 && th < bh) th = TH; @@ -1589,16 +1551,29 @@ tile(void) { } void -togglefloating(const char *arg) { +togglefloating(void) { if(!sel) return; sel->isfloating = !sel->isfloating; if(sel->isfloating) resize(sel, sel->x, sel->y, sel->w, sel->h, True); + else + sel->rh = 0; arrange(); } void +togglemax(const char *arg) { + if(!sel || sel->rh != 0) + return; + sel->rx = sel->x; + sel->ry = sel->y; + sel->rw = sel->w; + sel->rh = sel->h; + resize(sel, MOX, MOY, MOW, MOH, RESIZEHINTS); +} + +void toggletag(const char *arg) { unsigned int i, j; @@ -1796,9 +1771,13 @@ void zoom(const char *arg) { Client *c = sel; - if(!sel || !dozoom || sel->isfloating) + if(!sel) + return; + if(sel->isfloating) { + togglefloating(); return; - if(c == nexttiled(clients)) + } + if(c == nexttiled(clients) && c->rh == 0) if(!(c = nexttiled(c->next))) return; detach(c);