Compare commits
23 Commits
Author | SHA1 | Date | |
---|---|---|---|
c7da124149 | |||
21bd90d7d3 | |||
c8f96b5b4c | |||
ded60365d4 | |||
629647dfee | |||
4ca3d861f0 | |||
069e7a6e24 | |||
ac6e34ea06 | |||
a308b7507a | |||
630e7ff26f | |||
3764ab471b | |||
a3319c6f8e | |||
66c699a701 | |||
aaf1e44da9 | |||
1ef2307ec4 | |||
d42c3ba2dc | |||
4b06155873 | |||
857d825eeb | |||
6b345353e3 | |||
ab3b3a8f61 | |||
71b82fb1f6 | |||
9bd9ea423e | |||
99964398e7 |
2
.hgtags
2
.hgtags
@ -24,3 +24,5 @@ a2c465098a3b972bbed00feda9804b6aae1e9531 2.1
|
|||||||
719b37b37b0df829d7cf017ac70e353088fe5849 2.3
|
719b37b37b0df829d7cf017ac70e353088fe5849 2.3
|
||||||
32b246925086910d63147483160281a91a47479f 2.4
|
32b246925086910d63147483160281a91a47479f 2.4
|
||||||
dcbbfabc8ecc5f33a6cc950584de87da1a368045 2.5
|
dcbbfabc8ecc5f33a6cc950584de87da1a368045 2.5
|
||||||
|
c7f84f23ec5aef29988dcdc4ec22a7352ee8f58e 2.5.1
|
||||||
|
5308dd22b6ee8e3218c81d9e7e4125f235bb5778 2.6
|
||||||
|
56
client.c
56
client.c
@ -131,58 +131,6 @@ getctitle(Window w) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gravitate(Client *c, Bool invert) {
|
|
||||||
int dx = 0, dy = 0;
|
|
||||||
|
|
||||||
switch(c->grav) {
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
case StaticGravity:
|
|
||||||
case NorthWestGravity:
|
|
||||||
case NorthGravity:
|
|
||||||
case NorthEastGravity:
|
|
||||||
dy = c->border;
|
|
||||||
break;
|
|
||||||
case EastGravity:
|
|
||||||
case CenterGravity:
|
|
||||||
case WestGravity:
|
|
||||||
dy = -(c->h / 2) + c->border;
|
|
||||||
break;
|
|
||||||
case SouthEastGravity:
|
|
||||||
case SouthGravity:
|
|
||||||
case SouthWestGravity:
|
|
||||||
dy = -(c->h);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (c->grav) {
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
case StaticGravity:
|
|
||||||
case NorthWestGravity:
|
|
||||||
case WestGravity:
|
|
||||||
case SouthWestGravity:
|
|
||||||
dx = c->border;
|
|
||||||
break;
|
|
||||||
case NorthGravity:
|
|
||||||
case CenterGravity:
|
|
||||||
case SouthGravity:
|
|
||||||
dx = -(c->w / 2) + c->border;
|
|
||||||
break;
|
|
||||||
case NorthEastGravity:
|
|
||||||
case EastGravity:
|
|
||||||
case SouthEastGravity:
|
|
||||||
dx = -(c->w + c->border);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(invert) {
|
|
||||||
dx = -dx;
|
|
||||||
dy = -dy;
|
|
||||||
}
|
|
||||||
c->x += dx;
|
|
||||||
c->y += dy;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
killclient(Arg *arg) {
|
killclient(Arg *arg) {
|
||||||
if(!sel)
|
if(!sel)
|
||||||
@ -341,10 +289,6 @@ updatesize(Client *c) {
|
|||||||
c->minw = c->minh = 0;
|
c->minw = c->minh = 0;
|
||||||
c->isfixed = (c->maxw && c->minw && c->maxh && c->minh &&
|
c->isfixed = (c->maxw && c->minw && c->maxh && c->minh &&
|
||||||
c->maxw == c->minw && c->maxh == c->minh);
|
c->maxw == c->minw && c->maxh == c->minh);
|
||||||
if(c->flags & PWinGravity)
|
|
||||||
c->grav = size.win_gravity;
|
|
||||||
else
|
|
||||||
c->grav = NorthWestGravity;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -9,7 +9,7 @@ const char *tags[] = { "dev", "work", "net", "fnord", NULL };
|
|||||||
#define FLOATSYMBOL "><>"
|
#define FLOATSYMBOL "><>"
|
||||||
#define TILESYMBOL "[]="
|
#define TILESYMBOL "[]="
|
||||||
|
|
||||||
#define FONT "-*-terminus-medium-*-*-*-14-*-*-*-*-*-iso10646-*"
|
#define FONT "-*-terminus-medium-r-*-*-14-*-*-*-*-*-*-*"
|
||||||
#define NORMBGCOLOR "#333333"
|
#define NORMBGCOLOR "#333333"
|
||||||
#define NORMFGCOLOR "#cccccc"
|
#define NORMFGCOLOR "#cccccc"
|
||||||
#define SELBGCOLOR "#336699"
|
#define SELBGCOLOR "#336699"
|
||||||
@ -25,7 +25,7 @@ const char *tags[] = { "dev", "work", "net", "fnord", NULL };
|
|||||||
static Key key[] = { \
|
static Key key[] = { \
|
||||||
/* modifier key function argument */ \
|
/* modifier key function argument */ \
|
||||||
{ MODKEY|ShiftMask, XK_Return, spawn, \
|
{ MODKEY|ShiftMask, XK_Return, spawn, \
|
||||||
{ .cmd = "exec urxvtc -tr -bg black -fg '#eeeeee' -cr '#eeeeee' +sb -fn '"FONT"'" } }, \
|
{ .cmd = "exec uxterm -bg black -fg '#eeeeee' -cr '#eeeeee' +sb -fn '"FONT"'" } }, \
|
||||||
{ MODKEY, XK_p, spawn, \
|
{ MODKEY, XK_p, spawn, \
|
||||||
{ .cmd = "exe=\"$(lsx `echo $PATH | sed 's/:/ /g'` | sort -u " \
|
{ .cmd = "exe=\"$(lsx `echo $PATH | sed 's/:/ /g'` | sort -u " \
|
||||||
" | dmenu -font '"FONT"' -normbg '"NORMBGCOLOR"' -normfg '"NORMFGCOLOR"' " \
|
" | dmenu -font '"FONT"' -normbg '"NORMBGCOLOR"' -normfg '"NORMFGCOLOR"' " \
|
||||||
|
@ -9,7 +9,7 @@ const char *tags[] = { "1", "2", "3", "4", "5", NULL };
|
|||||||
#define FLOATSYMBOL "><>"
|
#define FLOATSYMBOL "><>"
|
||||||
#define TILESYMBOL "[]="
|
#define TILESYMBOL "[]="
|
||||||
|
|
||||||
#define FONT "fixed"
|
#define FONT "-*-fixed-medium-r-normal-*-13-*-*-*-*-*-*-*"
|
||||||
#define NORMBGCOLOR "#333366"
|
#define NORMBGCOLOR "#333366"
|
||||||
#define NORMFGCOLOR "#cccccc"
|
#define NORMFGCOLOR "#cccccc"
|
||||||
#define SELBGCOLOR "#666699"
|
#define SELBGCOLOR "#666699"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# dwm version
|
# dwm version
|
||||||
VERSION = 2.5.1
|
VERSION = 2.7
|
||||||
|
|
||||||
# Customize below to fit your system
|
# Customize below to fit your system
|
||||||
|
|
||||||
|
15
draw.c
15
draw.c
@ -4,7 +4,6 @@
|
|||||||
#include "dwm.h"
|
#include "dwm.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <X11/Xlocale.h>
|
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
|
|
||||||
@ -167,11 +166,10 @@ getcolor(const char *colstr) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
setfont(const char *fontstr) {
|
setfont(const char *fontstr) {
|
||||||
char **missing, *def;
|
char *def, **missing;
|
||||||
int i, n;
|
int i, n;
|
||||||
|
|
||||||
missing = NULL;
|
missing = NULL;
|
||||||
setlocale(LC_ALL, "");
|
|
||||||
if(dc.font.set)
|
if(dc.font.set)
|
||||||
XFreeFontSet(dpy, dc.font.set);
|
XFreeFontSet(dpy, dc.font.set);
|
||||||
dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
|
dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
|
||||||
@ -179,10 +177,6 @@ setfont(const char *fontstr) {
|
|||||||
while(n--)
|
while(n--)
|
||||||
fprintf(stderr, "missing fontset: %s\n", missing[n]);
|
fprintf(stderr, "missing fontset: %s\n", missing[n]);
|
||||||
XFreeStringList(missing);
|
XFreeStringList(missing);
|
||||||
if(dc.font.set) {
|
|
||||||
XFreeFontSet(dpy, dc.font.set);
|
|
||||||
dc.font.set = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(dc.font.set) {
|
if(dc.font.set) {
|
||||||
XFontSetExtents *font_extents;
|
XFontSetExtents *font_extents;
|
||||||
@ -203,11 +197,8 @@ setfont(const char *fontstr) {
|
|||||||
if(dc.font.xfont)
|
if(dc.font.xfont)
|
||||||
XFreeFont(dpy, dc.font.xfont);
|
XFreeFont(dpy, dc.font.xfont);
|
||||||
dc.font.xfont = NULL;
|
dc.font.xfont = NULL;
|
||||||
dc.font.xfont = XLoadQueryFont(dpy, fontstr);
|
if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr)))
|
||||||
if (!dc.font.xfont)
|
eprint("error, cannot load font: '%s'\n", fontstr);
|
||||||
dc.font.xfont = XLoadQueryFont(dpy, "fixed");
|
|
||||||
if (!dc.font.xfont)
|
|
||||||
eprint("error, cannot init 'fixed' font\n");
|
|
||||||
dc.font.ascent = dc.font.xfont->ascent;
|
dc.font.ascent = dc.font.xfont->ascent;
|
||||||
dc.font.descent = dc.font.xfont->descent;
|
dc.font.descent = dc.font.xfont->descent;
|
||||||
}
|
}
|
||||||
|
16
dwm.1
16
dwm.1
@ -22,7 +22,7 @@ dwm contains a small status bar which displays all available tags, the mode,
|
|||||||
the title of the focused window, and the text read from standard input. The
|
the title of the focused window, and the text read from standard input. The
|
||||||
selected tags are indicated with a different color. The tags of the focused
|
selected tags are indicated with a different color. The tags of the focused
|
||||||
window are indicated with a filled square in the top left corner. The tags
|
window are indicated with a filled square in the top left corner. The tags
|
||||||
which are applied to one or more clients are indicated with an empty square in
|
which are applied to one or more windows are indicated with an empty square in
|
||||||
the top left corner.
|
the top left corner.
|
||||||
.P
|
.P
|
||||||
dwm draws a 1-pixel border around windows to indicate the focus state.
|
dwm draws a 1-pixel border around windows to indicate the focus state.
|
||||||
@ -122,9 +122,17 @@ dwm is customized by creating a custom config.h and (re)compiling the source
|
|||||||
code. This keeps it fast, secure and simple.
|
code. This keeps it fast, secure and simple.
|
||||||
.SH CAVEATS
|
.SH CAVEATS
|
||||||
The status bar may display
|
The status bar may display
|
||||||
.BR "broken pipe"
|
.BR "EOF"
|
||||||
when dwm has been started by
|
when dwm has been started by an X session manager like
|
||||||
.BR xdm (1),
|
.BR xdm (1),
|
||||||
because it closes standard output before executing dwm.
|
because those close standard output before executing dwm.
|
||||||
|
.P
|
||||||
|
Java applications which use the XToolkit/XAWT backend may draw grey windows
|
||||||
|
only. The XToolkit/XAWT backend breaks ICCCM-compliance in recent JDK 1.5 and early
|
||||||
|
JDK 1.6 versions, because it assumes a reparenting window manager. As a workaround
|
||||||
|
you can use JDK 1.4 (which doesn't contain the XToolkit/XAWT backend) or you
|
||||||
|
can set the following environment variable (to use the older Motif
|
||||||
|
backend instead):
|
||||||
|
.BR AWT_TOOLKIT=MToolkit .
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR dmenu (1)
|
.BR dmenu (1)
|
||||||
|
2
dwm.h
2
dwm.h
@ -80,7 +80,6 @@ struct Client {
|
|||||||
int rx, ry, rw, rh; /* revert geometry */
|
int rx, ry, rw, rh; /* revert geometry */
|
||||||
int tx, ty, tw, th; /* title window geometry */
|
int tx, ty, tw, th; /* title window geometry */
|
||||||
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
||||||
int grav;
|
|
||||||
long flags;
|
long flags;
|
||||||
unsigned int border;
|
unsigned int border;
|
||||||
Bool isfloat, isfixed, ismax;
|
Bool isfloat, isfixed, ismax;
|
||||||
@ -114,7 +113,6 @@ extern void configure(Client *c); /* send synthetic configure event */
|
|||||||
extern void focus(Client *c); /* focus c, c may be NULL */
|
extern void focus(Client *c); /* focus c, c may be NULL */
|
||||||
extern Client *getclient(Window w); /* return client of w */
|
extern Client *getclient(Window w); /* return client of w */
|
||||||
extern Client *getctitle(Window w); /* return client of title window */
|
extern Client *getctitle(Window w); /* return client of title window */
|
||||||
extern void gravitate(Client *c, Bool invert); /* gravitate c */
|
|
||||||
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 manage(Window w, XWindowAttributes *wa); /* manage new client */
|
||||||
extern void resize(Client *c, Bool sizehints, Corner sticky); /* resize c*/
|
extern void resize(Client *c, Bool sizehints, Corner sticky); /* resize c*/
|
||||||
|
2
event.c
2
event.c
@ -161,7 +161,6 @@ configurerequest(XEvent *e) {
|
|||||||
|
|
||||||
if((c = getclient(ev->window))) {
|
if((c = getclient(ev->window))) {
|
||||||
c->ismax = False;
|
c->ismax = False;
|
||||||
gravitate(c, True);
|
|
||||||
if(ev->value_mask & CWX)
|
if(ev->value_mask & CWX)
|
||||||
c->x = ev->x;
|
c->x = ev->x;
|
||||||
if(ev->value_mask & CWY)
|
if(ev->value_mask & CWY)
|
||||||
@ -172,7 +171,6 @@ configurerequest(XEvent *e) {
|
|||||||
c->h = ev->height;
|
c->h = ev->height;
|
||||||
if(ev->value_mask & CWBorderWidth)
|
if(ev->value_mask & CWBorderWidth)
|
||||||
c->border = ev->border_width;
|
c->border = ev->border_width;
|
||||||
gravitate(c, False);
|
|
||||||
wc.x = c->x;
|
wc.x = c->x;
|
||||||
wc.y = c->y;
|
wc.y = c->y;
|
||||||
wc.width = c->w;
|
wc.width = c->w;
|
||||||
|
7
main.c
7
main.c
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "dwm.h"
|
#include "dwm.h"
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <locale.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -51,6 +52,9 @@ cleanup(void) {
|
|||||||
XFreePixmap(dpy, dc.drawable);
|
XFreePixmap(dpy, dc.drawable);
|
||||||
XFreeGC(dpy, dc.gc);
|
XFreeGC(dpy, dc.gc);
|
||||||
XDestroyWindow(dpy, barwin);
|
XDestroyWindow(dpy, barwin);
|
||||||
|
XFreeCursor(dpy, cursor[CurNormal]);
|
||||||
|
XFreeCursor(dpy, cursor[CurResize]);
|
||||||
|
XFreeCursor(dpy, cursor[CurMove]);
|
||||||
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
|
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
free(seltag);
|
free(seltag);
|
||||||
@ -104,7 +108,7 @@ setup(void) {
|
|||||||
numlockmask = (1 << i);
|
numlockmask = (1 << i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
XFree(modmap);
|
XFreeModifiermap(modmap);
|
||||||
/* select for events */
|
/* select for events */
|
||||||
wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask
|
wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask
|
||||||
| EnterWindowMask | LeaveWindowMask;
|
| EnterWindowMask | LeaveWindowMask;
|
||||||
@ -237,6 +241,7 @@ main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
else if(argc != 1)
|
else if(argc != 1)
|
||||||
eprint("usage: dwm [-v]\n");
|
eprint("usage: dwm [-v]\n");
|
||||||
|
setlocale(LC_CTYPE, "");
|
||||||
dpy = XOpenDisplay(0);
|
dpy = XOpenDisplay(0);
|
||||||
if(!dpy)
|
if(!dpy)
|
||||||
eprint("dwm: cannot open display\n");
|
eprint("dwm: cannot open display\n");
|
||||||
|
Reference in New Issue
Block a user