Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
0925dd588c | |||
6f20315dff | |||
2e68f22118 | |||
8aa860d270 | |||
15abade272 | |||
7ab8c87281 | |||
4ff8f71643 | |||
d22abeee86 | |||
a33150eb4b | |||
fd00b3a186 | |||
e8389a4cc0 | |||
6078d756bc |
1
.hgtags
1
.hgtags
@ -11,3 +11,4 @@ bbc98e77ae89a7c9232a5be0835f60ea00d8036e 1.0
|
||||
44a55e6e46bf6c231780b09d919977d6f01083de 1.1
|
||||
e3179ce2b90451d2807cd53b589d768412b8666b 1.2
|
||||
f5f5cbf016a94b48a8fe9c47f0736e96d166d5d4 1.3
|
||||
3cff9403766bf83a9fc2a0aef230115d68de2a8e 1.4
|
||||
|
28
client.c
28
client.c
@ -10,6 +10,14 @@
|
||||
|
||||
/* static functions */
|
||||
|
||||
static void
|
||||
detachstack(Client *c)
|
||||
{
|
||||
Client **tc;
|
||||
for(tc=&stack; *tc && *tc != c; tc=&(*tc)->snext);
|
||||
*tc = c->snext;
|
||||
}
|
||||
|
||||
static void
|
||||
grabbuttons(Client *c, Bool focus)
|
||||
{
|
||||
@ -99,6 +107,9 @@ focus(Client *c)
|
||||
}
|
||||
}
|
||||
if(c) {
|
||||
detachstack(c);
|
||||
c->snext = stack;
|
||||
stack = c;
|
||||
grabbuttons(c, True);
|
||||
drawtitle(c);
|
||||
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
|
||||
@ -198,7 +209,6 @@ killclient(Arg *arg)
|
||||
void
|
||||
manage(Window w, XWindowAttributes *wa)
|
||||
{
|
||||
unsigned int i;
|
||||
Client *c;
|
||||
Window trans;
|
||||
XSetWindowAttributes twa;
|
||||
@ -247,7 +257,8 @@ manage(Window w, XWindowAttributes *wa)
|
||||
if(clients)
|
||||
clients->prev = c;
|
||||
c->next = clients;
|
||||
clients = c;
|
||||
c->snext = stack;
|
||||
stack = clients = c;
|
||||
|
||||
settitle(c);
|
||||
ban(c);
|
||||
@ -403,19 +414,16 @@ togglemax(Arg *arg)
|
||||
void
|
||||
unmanage(Client *c)
|
||||
{
|
||||
Client *tc, *fc;
|
||||
Window trans;
|
||||
Client *nc;
|
||||
|
||||
XGrabServer(dpy);
|
||||
XSetErrorHandler(xerrordummy);
|
||||
|
||||
detach(c);
|
||||
detachstack(c);
|
||||
if(sel == c) {
|
||||
XGetTransientForHint(dpy, c->win, &trans);
|
||||
if(trans && (tc = getclient(trans)) && isvisible(tc))
|
||||
fc = tc;
|
||||
else
|
||||
fc = getnext(clients);
|
||||
focus(fc);
|
||||
for(nc = stack; nc && !isvisible(nc); nc = nc->snext);
|
||||
focus(nc);
|
||||
}
|
||||
|
||||
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
|
||||
|
@ -1,5 +1,5 @@
|
||||
# dwm version
|
||||
VERSION = 1.4
|
||||
VERSION = 1.5
|
||||
|
||||
# Customize below to fit your system
|
||||
|
||||
|
136
dwm.1
136
dwm.1
@ -5,10 +5,9 @@ dwm \- dynamic window manager
|
||||
.B dwm
|
||||
.RB [ \-v ]
|
||||
.SH DESCRIPTION
|
||||
.B dwm
|
||||
is a dynamic window manager for X. It manages windows in tiling and floating
|
||||
modes. Either mode can be applied dynamically, optimizing the environment for
|
||||
the application in use and the task performed.
|
||||
dwm is a dynamic window manager for X. It manages windows in tiling and
|
||||
floating modes. Either mode can be applied dynamically, optimizing the
|
||||
environment for the application in use and the task performed.
|
||||
.P
|
||||
In tiling mode windows are managed in a master and stacking column. The master
|
||||
column contains the window which currently needs most attention, whereas the
|
||||
@ -17,16 +16,14 @@ resized and moved freely. Dialog windows are always managed floating,
|
||||
regardless of the mode selected.
|
||||
.P
|
||||
Windows are grouped by tags. Each window can be tagged with one or multiple
|
||||
tags. Selecting a certain tag for viewing will display all windows with that
|
||||
tag.
|
||||
tags. Selecting certain tags displays all windows with that tag.
|
||||
.P
|
||||
.B 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 tags of
|
||||
the focused window are highlighted with a small point.
|
||||
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
|
||||
selected tags are highlighted with a different color, the tags of the focused
|
||||
window are highlighted with a small point.
|
||||
.P
|
||||
.B 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.
|
||||
Unfocused windows contain a small bar in front of them displaying their title.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
@ -39,30 +36,17 @@ prints version information to standard output, then exits.
|
||||
is read and displayed in the status text area.
|
||||
.TP
|
||||
.B Button1
|
||||
click on a tag label views all windows with that
|
||||
.BR tag ,
|
||||
click on the mode label toggles between
|
||||
.B tiled
|
||||
and
|
||||
.B floating
|
||||
mode.
|
||||
click on a tag label to display all windows with that tag, click on the mode
|
||||
label toggles between tiled and floating mode.
|
||||
.TP
|
||||
.B Button3
|
||||
click on a tag label adds/removes all windows with that
|
||||
.B tag
|
||||
to/from the view.
|
||||
click on a tag label adds/removes all windows with that tag to/from the view.
|
||||
.TP
|
||||
.B Mod1-Button1
|
||||
click on a tag label applies that
|
||||
.B tag
|
||||
to the focused
|
||||
.BR window .
|
||||
click on a tag label applies that tag to the focused window.
|
||||
.TP
|
||||
.B Mod1-Button3
|
||||
click on a tag label adds/removes that
|
||||
.B tag
|
||||
to/from the focused
|
||||
.BR window .
|
||||
click on a tag label adds/removes that tag to/from the focused window.
|
||||
.SS Keyboard commands
|
||||
.TP
|
||||
.B Mod1-Shift-Return
|
||||
@ -70,114 +54,72 @@ Start
|
||||
.BR xterm (1).
|
||||
.TP
|
||||
.B Mod1-Tab
|
||||
Focus next
|
||||
.BR window .
|
||||
Focus next window.
|
||||
.TP
|
||||
.B Mod1-Shift-Tab
|
||||
Focus previous
|
||||
.BR window .
|
||||
Focus previous window.
|
||||
.TP
|
||||
.B Mod1-Return
|
||||
Zoom current
|
||||
.B window
|
||||
to the
|
||||
.B master
|
||||
column
|
||||
.RB ( tiling
|
||||
mode only).
|
||||
Zoom current window to the master column (tiling mode only).
|
||||
.TP
|
||||
.B Mod1-m
|
||||
Maximize current
|
||||
.BR window .
|
||||
Maximize current window.
|
||||
.TP
|
||||
.B Mod1-g
|
||||
Grow current
|
||||
.BR column
|
||||
.RB ( tiling
|
||||
mode only).
|
||||
Grow current column (tiling mode only).
|
||||
.TP
|
||||
.B Mod1-s
|
||||
Shrink current
|
||||
.BR column
|
||||
.RB ( tiling
|
||||
mode only).
|
||||
Shrink current column (tiling mode only).
|
||||
.TP
|
||||
.B Mod1-Shift-[1..n]
|
||||
Apply
|
||||
.B nth tag
|
||||
to current
|
||||
.BR window .
|
||||
.RB nth
|
||||
tag to current window.
|
||||
.TP
|
||||
.B Mod1-Control-Shift-[1..n]
|
||||
Add/remove
|
||||
.B nth tag
|
||||
to/from current
|
||||
.BR window .
|
||||
.B nth
|
||||
tag to/from current window.
|
||||
.TP
|
||||
.B Mod1-Shift-c
|
||||
Close focused
|
||||
.B window.
|
||||
Close focused window.
|
||||
.TP
|
||||
.B Mod1-space
|
||||
Toggle between
|
||||
.B tiled
|
||||
and
|
||||
.B floating
|
||||
mode (affects
|
||||
.BR "all windows" ).
|
||||
Toggle between tiled and floating mode (affects all windows).
|
||||
.TP
|
||||
.B Mod1-[1..n]
|
||||
View all windows with
|
||||
.BR "tag n" .
|
||||
.BR nth
|
||||
tag.
|
||||
.TP
|
||||
.B Mod1-0
|
||||
View all windows with any
|
||||
.BR "tag" .
|
||||
View all windows with any tag.
|
||||
.TP
|
||||
.B Mod1-Control-[1..n]
|
||||
Add/remove all windows with
|
||||
.B tag n
|
||||
to/from the view.
|
||||
.BR nth
|
||||
tag to/from the view.
|
||||
.TP
|
||||
.B Mod1-Shift-q
|
||||
Quit
|
||||
.B dwm.
|
||||
Quit dwm.
|
||||
.SS Mouse commands
|
||||
.TP
|
||||
.B Mod1-Button1
|
||||
Move current
|
||||
.B window
|
||||
while dragging
|
||||
.RB ( floating
|
||||
mode only).
|
||||
Move current window while dragging (floating mode only).
|
||||
.TP
|
||||
.B Mod1-Button2
|
||||
Zoom current
|
||||
.B window
|
||||
to the
|
||||
.B master
|
||||
column
|
||||
.RB ( tiling
|
||||
mode only).
|
||||
Zoom current window to the master column (tiling mode only).
|
||||
.TP
|
||||
.B Mod1-Button3
|
||||
Resize current
|
||||
.B window
|
||||
while dragging
|
||||
.RB ( floating
|
||||
mode only).
|
||||
Resize current window while dragging (floating mode only).
|
||||
.SH CUSTOMIZATION
|
||||
.B dwm
|
||||
is customized by creating a custom config.h and (re)compiling the source
|
||||
dwm is customized by creating a custom config.h and (re)compiling the source
|
||||
code. This keeps it fast, secure and simple.
|
||||
.SH CAVEATS
|
||||
The status bar may display
|
||||
.B broken pipe
|
||||
when
|
||||
.B dwm
|
||||
has been started by
|
||||
.BR "broken pipe"
|
||||
when dwm has been started by
|
||||
.BR xdm (1),
|
||||
because it closes standard output before executing
|
||||
.BR dwm .
|
||||
because it closes standard output before executing dwm.
|
||||
.SH SEE ALSO
|
||||
.BR dmenu (1)
|
||||
|
3
dwm.h
3
dwm.h
@ -61,6 +61,7 @@ struct Client {
|
||||
Bool *tags;
|
||||
Client *next;
|
||||
Client *prev;
|
||||
Client *snext;
|
||||
Window win;
|
||||
Window twin;
|
||||
};
|
||||
@ -73,7 +74,7 @@ extern void (*handler[LASTEvent])(XEvent *);
|
||||
extern void (*arrange)(Arg *);
|
||||
extern Atom wmatom[WMLast], netatom[NetLast];
|
||||
extern Bool running, issel, maximized, *seltag;
|
||||
extern Client *clients, *sel;
|
||||
extern Client *clients, *sel, *stack;
|
||||
extern Cursor cursor[CurLast];
|
||||
extern DC dc;
|
||||
extern Display *dpy;
|
||||
|
1
main.c
1
main.c
@ -27,6 +27,7 @@ Bool issel = True;
|
||||
Bool maximized = False;
|
||||
Client *clients = NULL;
|
||||
Client *sel = NULL;
|
||||
Client *stack = NULL;
|
||||
Cursor cursor[CurLast];
|
||||
Display *dpy;
|
||||
DC dc = {0};
|
||||
|
20
view.c
20
view.c
@ -12,13 +12,14 @@ minclient()
|
||||
{
|
||||
Client *c, *min;
|
||||
|
||||
if((clients && clients->isfloat) || arrange == dofloat)
|
||||
return clients; /* don't touch floating order */
|
||||
for(min = c = clients; c; c = c->next)
|
||||
if(c->weight < min->weight)
|
||||
min = c;
|
||||
return min;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
reorder()
|
||||
{
|
||||
@ -75,8 +76,10 @@ dofloat(Arg *arg)
|
||||
else
|
||||
ban(c);
|
||||
}
|
||||
if(!sel || !isvisible(sel))
|
||||
focus(getnext(clients));
|
||||
if(!sel || !isvisible(sel)) {
|
||||
for(c = stack; c && !isvisible(c); c = c->snext);
|
||||
focus(c);
|
||||
}
|
||||
restack();
|
||||
}
|
||||
|
||||
@ -137,8 +140,10 @@ dotile(Arg *arg)
|
||||
else
|
||||
ban(c);
|
||||
}
|
||||
if(!sel || !isvisible(sel))
|
||||
focus(getnext(clients));
|
||||
if(!sel || !isvisible(sel)) {
|
||||
for(c = stack; c && !isvisible(c); c = c->snext);
|
||||
focus(c);
|
||||
}
|
||||
restack();
|
||||
}
|
||||
|
||||
@ -226,7 +231,7 @@ restack()
|
||||
XRaiseWindow(dpy, sel->win);
|
||||
XRaiseWindow(dpy, sel->twin);
|
||||
}
|
||||
if(arrange != dofloat)
|
||||
if(arrange != dofloat)
|
||||
for(c = nexttiled(clients); c; c = nexttiled(c->next)) {
|
||||
XLowerWindow(dpy, c->twin);
|
||||
XLowerWindow(dpy, c->win);
|
||||
@ -298,8 +303,9 @@ zoom(Arg *arg)
|
||||
if(!(c = nexttiled(c->next)))
|
||||
return;
|
||||
detach(c);
|
||||
if(clients)
|
||||
clients->prev = c;
|
||||
c->next = clients;
|
||||
clients->prev = c;
|
||||
clients = c;
|
||||
focus(c);
|
||||
arrange(NULL);
|
||||
|
Reference in New Issue
Block a user