diff -ur ./dwm-0.9/client.c ./dwm-0.9p/client.c --- ./dwm-0.9/client.c 2006-08-15 12:09:18.000000000 +0400 +++ ./dwm-0.9p/client.c 2006-08-19 17:27:01.000000000 +0400 @@ -65,7 +65,7 @@ void focusnext(Arg *arg) { - Client *c; + Client *c; if(!sel) return; @@ -73,7 +73,7 @@ if(!(c = getnext(sel->next))) c = getnext(clients); if(c) { - focus(c); + focus(c); restack(); } } @@ -87,11 +87,11 @@ return; if(!(c = getprev(sel->prev))) { - for(c = clients; c && c->next; c = c->next); + for(c = clients; c && c->next; c = c->next); c = getprev(c); } if(c) { - focus(c); + focus(c); restack(); } } @@ -224,7 +224,7 @@ c->next = clients; clients = c; - XGrabButton(dpy, Button1, MODKEY, c->win, False, BUTTONMASK, + XGrabButton(dpy, Button1, AnyModifier, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); diff -ur ./dwm-0.9/config.default.h ./dwm-0.9p/config.default.h --- ./dwm-0.9/config.default.h 2006-08-15 12:09:18.000000000 +0400 +++ ./dwm-0.9p/config.default.h 2006-08-21 21:35:27.000000000 +0400 @@ -2,55 +2,69 @@ * (C)opyright MMVI Anselm R. Garbe * See LICENSE file for license details. */ - +#include "/usr/X11R6/include/X11/XF86keysym.h" #define TAGS \ -const char *tags[] = { "0", "1", "2", "3", "4", NULL }; +const char *tags[] = { "main", "net", "work", "misc", "dev", NULL }; #define DEFMODE dotile /* dofloat */ -#define DEFTAG 1 /* index */ -#define FONT "fixed" -#define BGCOLOR "#666699" -#define FGCOLOR "#eeeeee" -#define BORDERCOLOR "#9999CC" +#define DEFTAG 0 /* index */ +#define FONT "-*-snap-*-*-*-*-11-*-*-*-*-*-koi8-r" +#define BGCOLOR "#000000" +#define FGCOLOR "#FFB800" +#define BGBORDERCOLOR "orange4" +#define BORDERCOLOR "#FFB800" #define MODKEY Mod1Mask #define MASTERW 60 /* percent */ +#define MASTERH 50 /* percent */ #define KEYS \ static Key key[] = { \ /* modifier key function arguments */ \ - { MODKEY|ShiftMask, XK_Return, spawn, { .cmd = "exec xterm" } }, \ - { MODKEY, XK_Tab, focusnext, { 0 } }, \ - { MODKEY|ShiftMask, XK_Tab, focusprev, { 0 } }, \ + { MODKEY, XK_t, spawn, { .cmd = "osdexec aterm" } }, \ + { MODKEY, XK_e, spawn, { .cmd = "exec osdgenlop" } }, \ + { MODKEY, XK_y, spawn, { .cmd = "exec mpc play `mpc playlist | colrm 60 500 | dmenu | colrm 1 1 | cut -d ')' -f 1,3`" } }, \ + { 0, XF86XK_AudioNext, spawn, { .cmd = "exec `mpc next`" } }, \ + { 0, XF86XK_AudioPrev, spawn, { .cmd = "exec `mpc prev`" } }, \ + { 0, XF86XK_AudioPlay, spawn, { .cmd = "exec `mpc toggle`" } }, \ + { MODKEY, XK_p, spawn, \ + { .cmd = "osdexec `ls -lL /usr/bin /usr/local/bin ~/Programs 2> /dev/null | " \ + "awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`" } }, \ + { MODKEY, XK_j, focusnext, { 0 } }, \ + { MODKEY, XK_k, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ { MODKEY, XK_m, togglemax, { 0 } }, \ - { MODKEY|ShiftMask, XK_0, tag, { .i = 0 } }, \ - { MODKEY|ShiftMask, XK_1, tag, { .i = 1 } }, \ - { MODKEY|ShiftMask, XK_2, tag, { .i = 2 } }, \ - { MODKEY|ShiftMask, XK_3, tag, { .i = 3 } }, \ - { MODKEY|ShiftMask, XK_4, tag, { .i = 4 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_0, toggletag, { .i = 0 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, { .i = 1 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, { .i = 2 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, { .i = 3 } }, \ - { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, { .i = 4 } }, \ + { MODKEY, XK_o, togglelayout, { 0 } }, \ + { MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \ + { MODKEY|ShiftMask, XK_2, tag, { .i = 1 } }, \ + { MODKEY|ShiftMask, XK_3, tag, { .i = 2 } }, \ + { MODKEY|ShiftMask, XK_4, tag, { .i = 3 } }, \ + { MODKEY|ShiftMask, XK_5, tag, { .i = 4 } }, \ + { 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|ShiftMask, XK_c, killclient, { 0 } }, \ { MODKEY, XK_space, togglemode, { 0 } }, \ - { MODKEY, XK_0, view, { .i = 0 } }, \ - { MODKEY, XK_1, view, { .i = 1 } }, \ - { MODKEY, XK_2, view, { .i = 2 } }, \ - { MODKEY, XK_3, view, { .i = 3 } }, \ - { MODKEY, XK_4, view, { .i = 4 } }, \ - { MODKEY|ControlMask, XK_0, toggleview, { .i = 0 } }, \ - { MODKEY|ControlMask, XK_1, toggleview, { .i = 1 } }, \ - { MODKEY|ControlMask, XK_2, toggleview, { .i = 2 } }, \ - { MODKEY|ControlMask, XK_3, toggleview, { .i = 3 } }, \ - { MODKEY|ControlMask, XK_4, toggleview, { .i = 4 } }, \ + { MODKEY, XK_F1, view, { .i = 0 } }, \ + { MODKEY, XK_F2, view, { .i = 1 } }, \ + { MODKEY, XK_F3, view, { .i = 2 } }, \ + { MODKEY, XK_F4, view, { .i = 3 } }, \ + { MODKEY, XK_F5, view, { .i = 4 } }, \ + { MODKEY|ShiftMask, XK_F1, toggleview, { .i = 0 } }, \ + { MODKEY|ShiftMask, XK_F2, toggleview, { .i = 1 } }, \ + { MODKEY|ShiftMask, XK_F3, toggleview, { .i = 2 } }, \ + { MODKEY|ShiftMask, XK_F4, toggleview, { .i = 3 } }, \ + { MODKEY|ShiftMask, XK_F5, toggleview, { .i = 4 } }, \ { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ }; #define RULES \ static Rule rule[] = { \ /* class:instance regex tags regex isfloat */ \ - { "Firefox.*", "2", False }, \ + { "Firefox.*", "1", False }, \ + { "Firefox-bin.*", "1", False }, \ + { "Flock-bin.*", "1", False }, \ + { "Sylpheed.*", "3", False }, \ { "Gimp.*", NULL, True}, \ }; Только в ./dwm-0.9p/: config.h Только в ./dwm-0.9p/: config.h~ diff -ur ./dwm-0.9/config.mk ./dwm-0.9p/config.mk --- ./dwm-0.9/config.mk 2006-08-15 12:09:18.000000000 +0400 +++ ./dwm-0.9p/config.mk 2006-08-17 19:48:48.000000000 +0400 @@ -4,7 +4,7 @@ # Customize below to fit your system # paths -PREFIX = /usr/local +PREFIX = ~/Programs MANPREFIX = ${PREFIX}/share/man X11INC = /usr/X11R6/include Только в ./dwm-0.9p/: config.o.h diff -ur ./dwm-0.9/draw.c ./dwm-0.9p/draw.c --- ./dwm-0.9/draw.c 2006-08-15 12:09:18.000000000 +0400 +++ ./dwm-0.9p/draw.c 2006-08-18 22:22:41.000000000 +0400 @@ -22,7 +22,7 @@ } static void -drawtext(const char *text, Bool invert) +drawtext(const char *text, Bool invert, int color) { int x, y, w, h; static char buf[256]; @@ -34,19 +34,13 @@ XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); - XSetForeground(dpy, dc.gc, dc.border); + XSetForeground(dpy, dc.gc, color); points[0].x = dc.x; points[0].y = dc.y; - points[1].x = dc.w - 1; + points[1].x = dc.w; points[1].y = 0; - points[2].x = 0; - points[2].y = dc.h - 1; - points[3].x = -(dc.w - 1); - points[3].y = 0; - points[4].x = 0; - points[4].y = -(dc.h - 1); - XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); - + XDrawLines(dpy, dc.drawable, dc.gc, points, 2, CoordModePrevious); + XDrawLine(dpy, dc.drawable, dc.gc, dc.x, dc.h -1 , dc.x+dc.w, dc.h -1 ); if(!text) return; @@ -110,24 +104,24 @@ dc.x = dc.y = 0; dc.w = bw; - drawtext(NULL, !istile); + drawtext(NULL, !istile, dc.fg); dc.w = 0; for(i = 0; i < ntags; i++) { dc.x += dc.w; dc.w = textw(tags[i]); if(istile) - drawtext(tags[i], seltag[i]); + drawtext(tags[i], seltag[i], dc.fg); else - drawtext(tags[i], !seltag[i]); + drawtext(tags[i], !seltag[i], dc.fg); } x = dc.x + dc.w; dc.w = textw(stext); dc.x = bx + bw - dc.w; - drawtext(stext, !istile); + drawtext(stext, !istile, dc.border); if(sel && ((dc.w = dc.x - x) >= bh)) { dc.x = x; - drawtext(sel->name, istile); + drawtext(sel->name, istile, dc.fg); } XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); XSync(dpy, False); @@ -142,11 +136,11 @@ if(c == sel && issel) { drawstatus(); XUnmapWindow(dpy, c->title); - XSetWindowBorder(dpy, c->win, dc.fg); + XSetWindowBorder(dpy, c->win, dc.border); return; } - XSetWindowBorder(dpy, c->win, dc.bg); + XSetWindowBorder(dpy, c->win, dc.bgborder); XMapWindow(dpy, c->title); dc.x = dc.y = 0; @@ -156,12 +150,17 @@ if(c->tags[i]) { dc.x += dc.w; dc.w = textw(tags[i]); - drawtext(tags[i], !istile); + drawtext(tags[i], !istile, dc.bgborder); + XSetForeground(dpy, dc.gc, dc.bgborder); + XDrawLine(dpy, dc.drawable, dc.gc, dc.x, dc.y, dc.x, dc.y+dc.h); + XDrawLine(dpy, dc.drawable, dc.gc, dc.x+dc.w-1, dc.y, dc.x+dc.w-1, dc.y+dc.h); } } dc.x += dc.w; dc.w = c->tw - dc.x; - drawtext(c->name, !istile); + drawtext(c->name, !istile, dc.bgborder); + XSetForeground(dpy, dc.gc, dc.bgborder); + XDrawLine(dpy, dc.drawable, dc.gc, dc.x+dc.w-1, dc.y, dc.x+dc.w-1, dc.y+dc.h); XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0); XSync(dpy, False); } diff -ur ./dwm-0.9/dwm.h ./dwm-0.9p/dwm.h --- ./dwm-0.9/dwm.h 2006-08-15 12:09:18.000000000 +0400 +++ ./dwm-0.9p/dwm.h 2006-08-17 19:48:28.000000000 +0400 @@ -44,6 +44,7 @@ unsigned long bg; unsigned long fg; unsigned long border; + unsigned long bgborder; Drawable drawable; Fnt font; GC gc; @@ -69,12 +70,12 @@ extern const char *tags[]; extern char stext[1024]; -extern int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; +extern int screen, sx, sy, sw, sh, bx, by, bw, bh, mw, mh; extern unsigned int ntags, numlockmask; extern void (*handler[LASTEvent])(XEvent *); extern void (*arrange)(Arg *); extern Atom wmatom[WMLast], netatom[NetLast]; -extern Bool running, issel, *seltag; +extern Bool running, issel, wide, *seltag; extern Client *clients, *sel; extern Cursor cursor[CurLast]; extern DC dc; @@ -127,6 +128,7 @@ extern void settags(Client *c); extern void tag(Arg *arg); extern void togglemode(Arg *arg); +extern void togglelayout(Arg *arg); extern void toggletag(Arg *arg); extern void toggleview(Arg *arg); extern void view(Arg *arg); diff -ur ./dwm-0.9/event.c ./dwm-0.9p/event.c --- ./dwm-0.9/event.c 2006-08-15 12:09:18.000000000 +0400 +++ ./dwm-0.9p/event.c 2006-08-21 21:38:49.000000000 +0400 @@ -23,7 +23,7 @@ static void movemouse(Client *c) { - int x1, y1, ocx, ocy, di; + int x1, y1, ocx, ocy, di; unsigned int dui; Window dummy; XEvent ev; @@ -31,11 +31,11 @@ ocx = c->x; ocy = c->y; if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, - None, cursor[CurMove], CurrentTime) != GrabSuccess) + None, cursor[CurMove], CurrentTime) != GrabSuccess) return; XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); for(;;) { - XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev); + XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev); switch (ev.type) { default: break; case Expose: @@ -47,6 +47,10 @@ c->y = ocy + (ev.xmotion.y - y1); resize(c, False, TopLeft); break; + case ButtonPress: + focus(c); + XUngrabPointer(dpy, CurrentTime); + return; case ButtonRelease: XUngrabPointer(dpy, CurrentTime); return; @@ -99,7 +103,7 @@ static void buttonpress(XEvent *e) { - int x; + int x; Arg a; Client *c; XButtonPressedEvent *ev = &e->xbutton; @@ -118,15 +122,18 @@ } } else if((c = getclient(ev->window))) { - focus(c); - switch(ev->button) { + switch(ev->button) { default: break; case Button1: + if (c == sel && issel) + XUngrabButton(dpy, Button1, AnyModifier, c->win); + else + focus(c); if(!c->ismax && (arrange == dofloat || c->isfloat)) { restack(c); movemouse(c); - } + } break; case Button2: zoom(NULL); @@ -218,12 +225,14 @@ { Client *c; XCrossingEvent *ev = &e->xcrossing; - if(ev->mode != NotifyNormal || ev->detail == NotifyInferior) return; - - if((c = getclient(ev->window)) || (c = getctitle(ev->window))) - focus(c); + if((c = getclient(ev->window)) || (c = getctitle(ev->window))) + { + buttonpress(e); + XGrabButton(dpy, Button1, AnyModifier, c->win, False, BUTTONMASK, + GrabModeAsync, GrabModeSync, None, None); + } else if(ev->window == root) { issel = True; XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); @@ -269,9 +278,8 @@ leavenotify(XEvent *e) { XCrossingEvent *ev = &e->xcrossing; - if((ev->window == root) && !ev->same_screen) { - issel = False; + issel = False; drawall(); } } @@ -303,6 +311,7 @@ if(!getclient(ev->window)) manage(ev->window, &wa); + } static void Только в ./dwm-0.9p/: event.c~ diff -ur ./dwm-0.9/main.c ./dwm-0.9p/main.c --- ./dwm-0.9/main.c 2006-08-15 12:09:18.000000000 +0400 +++ ./dwm-0.9p/main.c 2006-08-17 19:48:28.000000000 +0400 @@ -95,11 +95,12 @@ char stext[1024]; Bool *seltag; -int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; +int screen, sx, sy, sw, sh, bx, by, bw, bh, mw, mh; unsigned int ntags, numlockmask; Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; Bool issel = True; +Bool wide = False; Client *clients = NULL; Client *sel = NULL; Cursor cursor[CurLast]; @@ -247,6 +248,7 @@ dc.bg = getcolor(BGCOLOR); dc.fg = getcolor(FGCOLOR); dc.border = getcolor(BORDERCOLOR); + dc.bgborder = getcolor(BGBORDERCOLOR); setfont(FONT); sx = sy = 0; @@ -257,6 +259,7 @@ bx = by = 0; bw = sw; dc.h = bh = dc.font.height + 4; + mh = ((sh - bh) * MASTERW) / 100; wa.override_redirect = 1; wa.background_pixmap = ParentRelative; wa.event_mask = ButtonPressMask | ExposureMask; diff -ur ./dwm-0.9/tag.c ./dwm-0.9p/tag.c --- ./dwm-0.9/tag.c 2006-08-15 12:09:18.000000000 +0400 +++ ./dwm-0.9p/tag.c 2006-08-21 13:41:38.000000000 +0400 @@ -69,7 +69,7 @@ n++; if(n > 1) - h = (sh - bh) / (n - 1); + h = (sh - (wide ? mh : 0) - bh) / (n - 1); else h = sh - bh; @@ -89,23 +89,23 @@ else if(i == 0) { c->x = sx; c->y = sy + bh; - c->w = mw - 2; - c->h = sh - 2 - bh; + c->w = (wide ? sw : mw) - 2; + c->h = (wide ? mh : sh - bh) - 2; } else if(h > bh) { - c->x = sx + mw; - c->y = sy + (i - 1) * h + bh; - c->w = w - 2; + c->x = sx + (wide ? 0 : mw); + c->y = sy + (wide ? mh : 0) + (i - 1) * h + bh; + c->w = sw - (wide ? 0 : mw) - 2; if(i + 1 == n) c->h = sh - c->y - 2; else c->h = h - 2; } else { /* fallback if h < bh */ - c->x = sx + mw; - c->y = sy + bh; - c->w = w - 2; - c->h = sh - 2 - bh; + c->x = sx + (wide ? 0 : mw); + c->y = sy + (wide ? mh : 0) + bh; + c->w = sw - (wide ? 0 : mw) - 2; + c->h = sh - (wide ? mh : 0) - 2 - bh; } resize(c, False, TopLeft); i++; @@ -285,6 +285,13 @@ } void +togglelayout(Arg *arg) +{ + wide = !wide; + arrange(NULL); +} + +void toggletag(Arg *arg) { unsigned int i; Только в ./dwm-0.9p/: tag.c~