Compare commits
37 Commits
Author | SHA1 | Date | |
---|---|---|---|
0680c76a6f | |||
c3e5f5cc9a | |||
1c620d27d8 | |||
fde45ebed8 | |||
4bd0d33f57 | |||
00255728aa | |||
4b0328f209 | |||
30561a0161 | |||
a4c4998c8b | |||
8e053b6476 | |||
b79b5facb1 | |||
c53f0fca91 | |||
c225e1afc2 | |||
92e55c7c53 | |||
c86f131681 | |||
e943234d09 | |||
9fc24e371b | |||
cac467d52c | |||
04f17d2669 | |||
dff15a02f7 | |||
42277b1110 | |||
095f9e143e | |||
9fbb2ebb90 | |||
dbcf87ce76 | |||
4250c26e9b | |||
e48de30516 | |||
1f0060caa3 | |||
c732cc90ab | |||
4e2c5b5f25 | |||
d9386a0c07 | |||
66e16c92d3 | |||
6a8e176df1 | |||
632c7f3410 | |||
045f1840e0 | |||
45d16d090b | |||
525c5ff4d8 | |||
5952157c3b |
1
.hgtags
1
.hgtags
@ -4,3 +4,4 @@ d31b5ad96b0ba7b5b0a30928fcf000428339a577 0.1
|
|||||||
eb3165734f00fe7f7da8aeebaed00e60a57caac9 0.4
|
eb3165734f00fe7f7da8aeebaed00e60a57caac9 0.4
|
||||||
22213b9a2114167ee8ba019a012e27da0422a61a 0.5
|
22213b9a2114167ee8ba019a012e27da0422a61a 0.5
|
||||||
c11f86db4550cac5d0a648a3fe4d6d3b9a4fcf7e 0.6
|
c11f86db4550cac5d0a648a3fe4d6d3b9a4fcf7e 0.6
|
||||||
|
3fb41412e2492f66476d92ce8f007a8b48fb1d2a 0.7
|
||||||
|
4
Makefile
4
Makefile
@ -19,7 +19,7 @@ options:
|
|||||||
@echo CC $<
|
@echo CC $<
|
||||||
@${CC} -c ${CFLAGS} $<
|
@${CC} -c ${CFLAGS} $<
|
||||||
|
|
||||||
${OBJ}: dwm.h config.h
|
${OBJ}: dwm.h config.h config.mk
|
||||||
|
|
||||||
config.h:
|
config.h:
|
||||||
@echo creating $@ from config.default.h
|
@echo creating $@ from config.default.h
|
||||||
@ -50,7 +50,7 @@ install: all
|
|||||||
@chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
|
@chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
|
||||||
@echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
|
@echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
|
||||||
@mkdir -p ${DESTDIR}${MANPREFIX}/man1
|
@mkdir -p ${DESTDIR}${MANPREFIX}/man1
|
||||||
@cp -f dwm.1 ${DESTDIR}${MANPREFIX}/man1
|
@sed 's/VERSION/${VERSION}/g' < dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
|
||||||
@chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1
|
@chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
|
9
client.c
9
client.c
@ -49,6 +49,8 @@ ban(Client *c)
|
|||||||
void
|
void
|
||||||
focus(Client *c)
|
focus(Client *c)
|
||||||
{
|
{
|
||||||
|
if (!issel)
|
||||||
|
return;
|
||||||
Client *old = sel;
|
Client *old = sel;
|
||||||
XEvent ev;
|
XEvent ev;
|
||||||
|
|
||||||
@ -196,13 +198,6 @@ killclient(Arg *arg)
|
|||||||
XKillClient(dpy, sel->win);
|
XKillClient(dpy, sel->win);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
lower(Client *c)
|
|
||||||
{
|
|
||||||
XLowerWindow(dpy, c->title);
|
|
||||||
XLowerWindow(dpy, c->win);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
manage(Window w, XWindowAttributes *wa)
|
manage(Window w, XWindowAttributes *wa)
|
||||||
{
|
{
|
||||||
|
44
config.arg.h
44
config.arg.h
@ -4,14 +4,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define TAGS \
|
#define TAGS \
|
||||||
const char *tags[] = { "fnord", "dev", "net", "work", "misc", NULL };
|
const char *tags[] = { "work", "net", "fnord", NULL };
|
||||||
|
|
||||||
#define DEFMODE dotile /* dofloat */
|
#define DEFMODE dotile /* dofloat */
|
||||||
#define DEFTAG 1 /* index */
|
#define DEFTAG 0 /* index */
|
||||||
#define FONT "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
|
#define FONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*"
|
||||||
#define BGCOLOR "#0a2c2d"
|
#define BGCOLOR "#eeeeee"
|
||||||
#define FGCOLOR "#ddeeee"
|
#define FGCOLOR "#666699"
|
||||||
#define BORDERCOLOR "#176164"
|
#define BORDERCOLOR "#9999CC"
|
||||||
#define MODKEY Mod1Mask
|
#define MODKEY Mod1Mask
|
||||||
#define NUMLOCKMASK Mod2Mask
|
#define NUMLOCKMASK Mod2Mask
|
||||||
#define MASTERW 60 /* percent */
|
#define MASTERW 60 /* percent */
|
||||||
@ -19,36 +19,30 @@ const char *tags[] = { "fnord", "dev", "net", "work", "misc", NULL };
|
|||||||
#define KEYS \
|
#define KEYS \
|
||||||
static Key key[] = { \
|
static Key key[] = { \
|
||||||
/* modifier key function arguments */ \
|
/* modifier key function arguments */ \
|
||||||
{ MODKEY, XK_0, view, { .i = 0 } }, \
|
{ MODKEY, XK_1, view, { .i = 0 } }, \
|
||||||
{ MODKEY, XK_1, view, { .i = 1 } }, \
|
{ MODKEY, XK_2, view, { .i = 1 } }, \
|
||||||
{ MODKEY, XK_2, view, { .i = 2 } }, \
|
{ MODKEY, XK_3, view, { .i = 2 } }, \
|
||||||
{ MODKEY, XK_3, view, { .i = 3 } }, \
|
|
||||||
{ MODKEY, XK_4, view, { .i = 4 } }, \
|
|
||||||
{ MODKEY, XK_h, viewprev, { 0 } }, \
|
{ MODKEY, XK_h, viewprev, { 0 } }, \
|
||||||
{ MODKEY, XK_j, focusnext, { 0 } }, \
|
{ MODKEY, XK_j, focusnext, { 0 } }, \
|
||||||
{ MODKEY, XK_k, focusprev, { 0 } }, \
|
{ MODKEY, XK_k, focusprev, { 0 } }, \
|
||||||
{ MODKEY, XK_l, viewnext, { 0 } }, \
|
{ MODKEY, XK_l, viewnext, { 0 } }, \
|
||||||
{ MODKEY, XK_m, togglemax, { 0 } }, \
|
{ MODKEY, XK_m, togglemax, { 0 } }, \
|
||||||
{ MODKEY, XK_p, spawn, \
|
{ MODKEY, XK_p, spawn, \
|
||||||
{ .cmd = "exec `ls -lL /usr/bin /usr/local/bin 2>/dev/null |" \
|
{ .cmd = "exec `ls -lL /usr/bin /usr/local/bin 2>/dev/null | " \
|
||||||
" awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`" } }, \
|
"awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`" } }, \
|
||||||
{ MODKEY, XK_space, togglemode, { 0 } }, \
|
{ MODKEY, XK_space, togglemode, { 0 } }, \
|
||||||
{ MODKEY, XK_Return, zoom, { 0 } }, \
|
{ MODKEY, XK_Return, zoom, { 0 } }, \
|
||||||
{ MODKEY|ControlMask, XK_0, appendtag, { .i = 0 } }, \
|
{ MODKEY|ControlMask, XK_1, appendtag, { .i = 0 } }, \
|
||||||
{ MODKEY|ControlMask, XK_1, appendtag, { .i = 1 } }, \
|
{ MODKEY|ControlMask, XK_2, appendtag, { .i = 1 } }, \
|
||||||
{ MODKEY|ControlMask, XK_2, appendtag, { .i = 2 } }, \
|
{ MODKEY|ControlMask, XK_3, appendtag, { .i = 2 } }, \
|
||||||
{ MODKEY|ControlMask, XK_3, appendtag, { .i = 3 } }, \
|
{ MODKEY|ShiftMask, XK_1, replacetag, { .i = 0 } }, \
|
||||||
{ MODKEY|ControlMask, XK_4, appendtag, { .i = 4 } }, \
|
{ MODKEY|ShiftMask, XK_2, replacetag, { .i = 1 } }, \
|
||||||
{ MODKEY|ShiftMask, XK_0, replacetag, { .i = 0 } }, \
|
{ MODKEY|ShiftMask, XK_3, replacetag, { .i = 2 } }, \
|
||||||
{ MODKEY|ShiftMask, XK_1, replacetag, { .i = 1 } }, \
|
|
||||||
{ MODKEY|ShiftMask, XK_2, replacetag, { .i = 2 } }, \
|
|
||||||
{ MODKEY|ShiftMask, XK_3, replacetag, { .i = 3 } }, \
|
|
||||||
{ MODKEY|ShiftMask, XK_4, replacetag, { .i = 5 } }, \
|
|
||||||
{ MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \
|
{ MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \
|
||||||
{ MODKEY|ShiftMask, XK_q, quit, { 0 } }, \
|
{ MODKEY|ShiftMask, XK_q, quit, { 0 } }, \
|
||||||
{ MODKEY|ShiftMask, XK_Return, spawn, \
|
{ MODKEY|ShiftMask, XK_Return, spawn, \
|
||||||
{ .cmd = "exec urxvt -tr +sb -bg black -fg white -cr white " \
|
{ .cmd = "exec uxterm -bg '#dddddd' -fg '#000000' -cr '#000000' +sb " \
|
||||||
"-fn '-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*'" } }, \
|
"-fn '-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*'" } }, \
|
||||||
};
|
};
|
||||||
|
|
||||||
#define RULES \
|
#define RULES \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# dwm version
|
# dwm version
|
||||||
VERSION = 0.7
|
VERSION = 0.8
|
||||||
|
|
||||||
# Customize below to fit your system
|
# Customize below to fit your system
|
||||||
|
|
||||||
|
24
draw.c
24
draw.c
@ -42,7 +42,7 @@ textnw(const char *text, unsigned int len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
drawtext(const char *text, Bool invert, Bool border)
|
drawtext(const char *text, Bool invert)
|
||||||
{
|
{
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
static char buf[256];
|
static char buf[256];
|
||||||
@ -52,14 +52,12 @@ drawtext(const char *text, Bool invert, Bool border)
|
|||||||
|
|
||||||
XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
|
XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
|
||||||
XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
|
XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
|
||||||
|
drawborder();
|
||||||
w = 0;
|
|
||||||
if(border)
|
|
||||||
drawborder();
|
|
||||||
|
|
||||||
if(!text)
|
if(!text)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
w = 0;
|
||||||
len = strlen(text);
|
len = strlen(text);
|
||||||
if(len >= sizeof(buf))
|
if(len >= sizeof(buf))
|
||||||
len = sizeof(buf) - 1;
|
len = sizeof(buf) - 1;
|
||||||
@ -111,24 +109,24 @@ drawstatus()
|
|||||||
|
|
||||||
dc.x = dc.y = 0;
|
dc.x = dc.y = 0;
|
||||||
dc.w = bw;
|
dc.w = bw;
|
||||||
drawtext(NULL, !istile, False);
|
drawtext(NULL, !istile);
|
||||||
|
|
||||||
dc.w = 0;
|
dc.w = 0;
|
||||||
for(i = 0; i < ntags; i++) {
|
for(i = 0; i < ntags; i++) {
|
||||||
dc.x += dc.w;
|
dc.x += dc.w;
|
||||||
dc.w = textw(tags[i]);
|
dc.w = textw(tags[i]);
|
||||||
if(istile)
|
if(istile)
|
||||||
drawtext(tags[i], (i == tsel), True);
|
drawtext(tags[i], (i == tsel));
|
||||||
else
|
else
|
||||||
drawtext(tags[i], (i != tsel), True);
|
drawtext(tags[i], (i != tsel));
|
||||||
}
|
}
|
||||||
x = dc.x + dc.w;
|
x = dc.x + dc.w;
|
||||||
dc.w = textw(stext);
|
dc.w = textw(stext);
|
||||||
dc.x = bx + bw - dc.w;
|
dc.x = bx + bw - dc.w;
|
||||||
drawtext(stext, !istile, False);
|
drawtext(stext, !istile);
|
||||||
if(sel && ((dc.w = dc.x - x) >= bh)) {
|
if(sel && ((dc.w = dc.x - x) >= bh)) {
|
||||||
dc.x = x;
|
dc.x = x;
|
||||||
drawtext(sel->name, istile, True);
|
drawtext(sel->name, istile);
|
||||||
}
|
}
|
||||||
XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0);
|
XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0);
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
@ -140,7 +138,7 @@ drawtitle(Client *c)
|
|||||||
int i;
|
int i;
|
||||||
Bool istile = arrange == dotile;
|
Bool istile = arrange == dotile;
|
||||||
|
|
||||||
if(c == sel) {
|
if(c == sel && issel) {
|
||||||
drawstatus();
|
drawstatus();
|
||||||
XUnmapWindow(dpy, c->title);
|
XUnmapWindow(dpy, c->title);
|
||||||
XSetWindowBorder(dpy, c->win, dc.fg);
|
XSetWindowBorder(dpy, c->win, dc.fg);
|
||||||
@ -157,12 +155,12 @@ drawtitle(Client *c)
|
|||||||
if(c->tags[i]) {
|
if(c->tags[i]) {
|
||||||
dc.x += dc.w;
|
dc.x += dc.w;
|
||||||
dc.w = textw(tags[i]);
|
dc.w = textw(tags[i]);
|
||||||
drawtext(tags[i], !istile, True);
|
drawtext(tags[i], !istile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dc.x += dc.w;
|
dc.x += dc.w;
|
||||||
dc.w = textw(c->name);
|
dc.w = textw(c->name);
|
||||||
drawtext(c->name, !istile, True);
|
drawtext(c->name, !istile);
|
||||||
XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0);
|
XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0);
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
}
|
}
|
||||||
|
41
dwm.1
41
dwm.1
@ -1,4 +1,4 @@
|
|||||||
.TH DWM 1 dwm-0.7
|
.TH DWM 1 dwm-VERSION
|
||||||
.SH NAME
|
.SH NAME
|
||||||
dwm \- dynamic window manager
|
dwm \- dynamic window manager
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -33,35 +33,35 @@ prints version information to standard output, then exits.
|
|||||||
.SH USAGE
|
.SH USAGE
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-Return
|
.B Mod1-Return
|
||||||
Zoom
|
Zoom current
|
||||||
.B window
|
.B window
|
||||||
to the
|
to the
|
||||||
.B master
|
.B master
|
||||||
column
|
column.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-h
|
.B Mod1-h
|
||||||
Focus previous
|
Focus previous
|
||||||
.B tag
|
.B tag.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-j
|
.B Mod1-j
|
||||||
Focus next
|
Focus next
|
||||||
.B window
|
.B window.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-k
|
.B Mod1-k
|
||||||
Focus previous
|
Focus previous
|
||||||
.B window
|
.B window.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-l
|
.B Mod1-l
|
||||||
Focus next
|
Focus next
|
||||||
.B tag
|
.B tag.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-m
|
.B Mod1-m
|
||||||
Maximize current
|
Maximize current
|
||||||
.B window
|
.B window.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-[0..n]
|
.B Mod1-[0..n]
|
||||||
Focus
|
Focus
|
||||||
.B nth tag
|
.B nth tag.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-space
|
.B Mod1-space
|
||||||
Toggle between
|
Toggle between
|
||||||
@ -69,41 +69,44 @@ Toggle between
|
|||||||
and
|
and
|
||||||
.B floating
|
.B floating
|
||||||
mode (affects
|
mode (affects
|
||||||
.BR "all windows" )
|
.BR "all windows" ).
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-Shift-[0..n]
|
.B Mod1-Shift-[0..n]
|
||||||
Apply
|
Apply
|
||||||
.B nth tag
|
.B nth tag
|
||||||
to current
|
to current
|
||||||
.B window
|
.B window.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-Shift-q
|
.B Mod1-Shift-q
|
||||||
Quit
|
Quit
|
||||||
.B dwm
|
.B dwm.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-Shift-Return
|
.B Mod1-Shift-Return
|
||||||
Start
|
Start
|
||||||
.B terminal
|
.B terminal.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-Control-[0..n]
|
.B Mod1-Control-[0..n]
|
||||||
Append
|
Append
|
||||||
.B nth tag
|
.B nth tag
|
||||||
to current
|
to current
|
||||||
.B window
|
.B window.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-Button1
|
.B Mod1-Button1
|
||||||
Moves current
|
Move current
|
||||||
.B window
|
.B window
|
||||||
while dragging
|
while dragging.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-Button2
|
.B Mod1-Button2
|
||||||
Lowers current
|
Zoom current
|
||||||
.B window
|
.B window
|
||||||
|
to the
|
||||||
|
.B master
|
||||||
|
column.
|
||||||
.TP
|
.TP
|
||||||
.B Mod1-Button3
|
.B Mod1-Button3
|
||||||
Resizes current
|
Resize current
|
||||||
.B window
|
.B window
|
||||||
while dragging
|
while dragging.
|
||||||
.SH CUSTOMIZATION
|
.SH CUSTOMIZATION
|
||||||
.B dwm
|
.B dwm
|
||||||
is customized by creating a custom config.h and (re)compiling the source
|
is customized by creating a custom config.h and (re)compiling the source
|
||||||
|
1
dwm.h
1
dwm.h
@ -91,7 +91,6 @@ extern Client *getctitle(Window w);
|
|||||||
extern void gravitate(Client *c, Bool invert);
|
extern void gravitate(Client *c, Bool invert);
|
||||||
extern void higher(Client *c);
|
extern void higher(Client *c);
|
||||||
extern void killclient(Arg *arg);
|
extern void killclient(Arg *arg);
|
||||||
extern void lower(Client *c);
|
|
||||||
extern void manage(Window w, XWindowAttributes *wa);
|
extern void manage(Window w, XWindowAttributes *wa);
|
||||||
extern void resize(Client *c, Bool sizehints, Corner sticky);
|
extern void resize(Client *c, Bool sizehints, Corner sticky);
|
||||||
extern void setsize(Client *c);
|
extern void setsize(Client *c);
|
||||||
|
9
dwm.html
9
dwm.html
@ -21,7 +21,7 @@
|
|||||||
<p>
|
<p>
|
||||||
dwm is a dynamic window manager for X11.
|
dwm is a dynamic window manager for X11.
|
||||||
</p>
|
</p>
|
||||||
<h4>Philosophy</h4>
|
<h4>Background</h4>
|
||||||
<p>
|
<p>
|
||||||
As founder and main developer of wmii I came to the conclusion that
|
As founder and main developer of wmii I came to the conclusion that
|
||||||
wmii is too clunky for my needs. I don't need so many funky features
|
wmii is too clunky for my needs. I don't need so many funky features
|
||||||
@ -95,15 +95,16 @@
|
|||||||
<h4>Links</h4>
|
<h4>Links</h4>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="http://10kloc.org/cgi-bin/man/man2html?query=dwm">Man page</a></li>
|
<li><a href="http://10kloc.org/cgi-bin/man/man2html?query=dwm">Man page</a></li>
|
||||||
<li><a href="http://10kloc.org/shots/dwm-20060801.png">Screenshot</a> (20060801)</li>
|
<li><a href="http://10kloc.org/shots/dwm-20060810a.png">Screenshot of tiled mode</a> (20060810)</li>
|
||||||
|
<li><a href="http://10kloc.org/shots/dwm-20060810b.png">Screenshotof floating mode</a> (20060810)</li>
|
||||||
<li><a href="http://10kloc.org/download/poster.ps">A4 poster (PostScript)</a></li>
|
<li><a href="http://10kloc.org/download/poster.ps">A4 poster (PostScript)</a></li>
|
||||||
<li>Mailing List: <a href="http://10kloc.org/cgi-bin/mailman/listinfo/dwm">dwm at wmii dot de</a> <a href="http://10kloc.org/pipermail/dwm/">(Archives)</a></li>
|
<li>Mailing List: <a href="http://10kloc.org/cgi-bin/mailman/listinfo/dwm">dwm at wmii dot de</a> <a href="http://10kloc.org/pipermail/dwm/">(Archives)</a></li>
|
||||||
<li>IRC channel: <code>#dwm</code> at <code>irc.oftc.net</code></li>
|
<li>IRC channel: <code>#dwm</code> at <code>irc.oftc.net</code></li>
|
||||||
</ul>
|
</ul>
|
||||||
<h3>Download</h3>
|
<h3>Download</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="http://10kloc.org/download/dwm-0.7.tar.gz">dwm 0.7</a> (14kb) (20060807)</li>
|
<li><a href="http://10kloc.org/download/dwm-0.8.tar.gz">dwm 0.8</a> (14kb) (20060810)</li>
|
||||||
<li><a href="http://10kloc.org/download/dmenu-0.2.tar.gz">dmenu 0.2</a> (7kb) (20060807)</li>
|
<li><a href="http://10kloc.org/download/dmenu-0.3.tar.gz">dmenu 0.3</a> (7kb) (20060810)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h3>Development</h3>
|
<h3>Development</h3>
|
||||||
<p>
|
<p>
|
||||||
|
37
event.c
37
event.c
@ -114,32 +114,30 @@ buttonpress(XEvent *e)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Button4:
|
case Button4:
|
||||||
viewnext(&a);
|
viewprev(&a);
|
||||||
break;
|
break;
|
||||||
case Button5:
|
case Button5:
|
||||||
viewprev(&a);
|
viewnext(&a);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if((c = getclient(ev->window))) {
|
else if((c = getclient(ev->window))) {
|
||||||
|
higher(c);
|
||||||
focus(c);
|
focus(c);
|
||||||
switch(ev->button) {
|
switch(ev->button) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case Button1:
|
case Button1:
|
||||||
if(!c->ismax && (arrange == dofloat || c->isfloat)) {
|
if(!c->ismax && (arrange == dofloat || c->isfloat))
|
||||||
higher(c);
|
|
||||||
movemouse(c);
|
movemouse(c);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case Button2:
|
case Button2:
|
||||||
lower(c);
|
if(!c->ismax && arrange != dofloat && !c->isfloat)
|
||||||
|
zoom(NULL);
|
||||||
break;
|
break;
|
||||||
case Button3:
|
case Button3:
|
||||||
if(!c->ismax && (arrange == dofloat || c->isfloat)) {
|
if(!c->ismax && (arrange == dofloat || c->isfloat))
|
||||||
higher(c);
|
|
||||||
resizemouse(c);
|
resizemouse(c);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -223,13 +221,16 @@ enternotify(XEvent *e)
|
|||||||
Client *c;
|
Client *c;
|
||||||
XCrossingEvent *ev = &e->xcrossing;
|
XCrossingEvent *ev = &e->xcrossing;
|
||||||
|
|
||||||
if(ev->detail == NotifyInferior)
|
if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if((c = getclient(ev->window)) || (c = getctitle(ev->window)))
|
if((c = getclient(ev->window)) || (c = getctitle(ev->window)))
|
||||||
focus(c);
|
focus(c);
|
||||||
else if(ev->window == root)
|
else if(ev->window == root) {
|
||||||
issel = True;
|
issel = True;
|
||||||
|
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
|
||||||
|
drawall();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -269,8 +270,10 @@ leavenotify(XEvent *e)
|
|||||||
{
|
{
|
||||||
XCrossingEvent *ev = &e->xcrossing;
|
XCrossingEvent *ev = &e->xcrossing;
|
||||||
|
|
||||||
if((ev->window == root) && !ev->same_screen)
|
if((ev->window == root) && !ev->same_screen) {
|
||||||
issel = True;
|
issel = False;
|
||||||
|
drawall();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -359,20 +362,12 @@ grabkeys()
|
|||||||
|
|
||||||
for(i = 0; i < len; i++) {
|
for(i = 0; i < len; i++) {
|
||||||
code = XKeysymToKeycode(dpy, key[i].keysym);
|
code = XKeysymToKeycode(dpy, key[i].keysym);
|
||||||
/* normal */
|
|
||||||
XUngrabKey(dpy, code, key[i].mod, root);
|
|
||||||
XGrabKey(dpy, code, key[i].mod, root, True,
|
XGrabKey(dpy, code, key[i].mod, root, True,
|
||||||
GrabModeAsync, GrabModeAsync);
|
GrabModeAsync, GrabModeAsync);
|
||||||
/* capslock */
|
|
||||||
XUngrabKey(dpy, code, key[i].mod | LockMask, root);
|
|
||||||
XGrabKey(dpy, code, key[i].mod | LockMask, root, True,
|
XGrabKey(dpy, code, key[i].mod | LockMask, root, True,
|
||||||
GrabModeAsync, GrabModeAsync);
|
GrabModeAsync, GrabModeAsync);
|
||||||
/* numlock */
|
|
||||||
XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root);
|
|
||||||
XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True,
|
XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True,
|
||||||
GrabModeAsync, GrabModeAsync);
|
GrabModeAsync, GrabModeAsync);
|
||||||
/* capslock & numlock */
|
|
||||||
XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root);
|
|
||||||
XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True,
|
XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True,
|
||||||
GrabModeAsync, GrabModeAsync);
|
GrabModeAsync, GrabModeAsync);
|
||||||
}
|
}
|
||||||
|
6
main.c
6
main.c
@ -240,6 +240,8 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
|
dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
|
||||||
dc.gc = XCreateGC(dpy, root, 0, 0);
|
dc.gc = XCreateGC(dpy, root, 0, 0);
|
||||||
|
|
||||||
|
strcpy(stext, "dwm-"VERSION);
|
||||||
drawstatus();
|
drawstatus();
|
||||||
|
|
||||||
issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
|
issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
|
||||||
@ -248,10 +250,10 @@ main(int argc, char *argv[])
|
|||||||
wa.cursor = cursor[CurNormal];
|
wa.cursor = cursor[CurNormal];
|
||||||
XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
|
XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
|
||||||
|
|
||||||
strcpy(stext, "dwm-"VERSION);
|
|
||||||
scan();
|
scan();
|
||||||
|
|
||||||
/* main event loop, reads status text from stdin as well */
|
/* main event loop, also reads status text from stdin */
|
||||||
|
XSync(dpy, False);
|
||||||
while(running) {
|
while(running) {
|
||||||
FD_ZERO(&rd);
|
FD_ZERO(&rd);
|
||||||
if(readin)
|
if(readin)
|
||||||
|
5
tag.c
5
tag.c
@ -106,7 +106,10 @@ dotile(Arg *arg)
|
|||||||
c->x = sx + mw;
|
c->x = sx + mw;
|
||||||
c->y = sy + (i - 1) * h + bh;
|
c->y = sy + (i - 1) * h + bh;
|
||||||
c->w = w - 2;
|
c->w = w - 2;
|
||||||
c->h = h - 2;
|
if(i + 1 == n)
|
||||||
|
c->h = sh - c->y - 2;
|
||||||
|
else
|
||||||
|
c->h = h - 2;
|
||||||
}
|
}
|
||||||
else { /* fallback if h < bh */
|
else { /* fallback if h < bh */
|
||||||
c->x = sx + mw;
|
c->x = sx + mw;
|
||||||
|
2
util.c
2
util.c
@ -56,7 +56,7 @@ spawn(Arg *arg)
|
|||||||
close(ConnectionNumber(dpy));
|
close(ConnectionNumber(dpy));
|
||||||
setsid();
|
setsid();
|
||||||
execl(shell, shell, "-c", arg->cmd, NULL);
|
execl(shell, shell, "-c", arg->cmd, NULL);
|
||||||
fprintf(stderr, "dwm: execl '%s'", arg->cmd);
|
fprintf(stderr, "dwm: execl '%s -c %s'", shell, arg->cmd);
|
||||||
perror(" failed");
|
perror(" failed");
|
||||||
}
|
}
|
||||||
exit(0);
|
exit(0);
|
||||||
|
Reference in New Issue
Block a user