Compare commits

..

10 Commits
2.9 ... 3.0

10 changed files with 72 additions and 22 deletions

View File

@ -28,3 +28,4 @@ c7f84f23ec5aef29988dcdc4ec22a7352ee8f58e 2.5.1
5308dd22b6ee8e3218c81d9e7e4125f235bb5778 2.6
21951c0dfbae5af68ed77821a4d87253ee91803f 2.7
107719a9ce3bd0c79f9f1f626596eb338a276561 2.8
3a5910fac3ccb522a98aeeba7af7008530b25092 2.9

View File

@ -3,19 +3,19 @@
*/
#define TAGS \
const char *tags[] = { "home", "net", "www", "mon", "fnord", NULL };
const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL };
#define DEFMODE dotile /* dofloat */
#define FLOATSYMBOL "><>"
#define TILESYMBOL "[]="
#define TILESYMBOL "[%u]=" /* %u is replaced with nmaster */
#define FONT "-*-terminus-medium-r-*-*-14-*-*-*-*-*-*-*"
#define NORMBGCOLOR "#111111"
#define NORMFGCOLOR "#cccccc"
#define SELBGCOLOR "#336699"
#define SELFGCOLOR "#eeeeee"
#define STATUSBGCOLOR "#222222"
#define STATUSFGCOLOR "#dddddd"
#define NORMBGCOLOR "#222"
#define NORMFGCOLOR "#ccc"
#define SELBGCOLOR "#444"
#define SELFGCOLOR "#fff"
#define STATUSBGCOLOR "#333"
#define STATUSFGCOLOR "#9cf"
#define MASTER 600 /* per thousand */
#define MODKEY Mod1Mask
@ -26,7 +26,7 @@ const char *tags[] = { "home", "net", "www", "mon", "fnord", NULL };
static Key key[] = { \
/* modifier key function argument */ \
{ MODKEY|ShiftMask, XK_Return, spawn, \
{ .cmd = "exec uxterm -bg black -fg '#eeeeee' -cr '#eeeeee' +sb -fn '"FONT"'" } }, \
{ .cmd = "exec uxterm -bg '#222' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" } }, \
{ MODKEY, XK_p, spawn, \
{ .cmd = "exe=\"$(lsx `echo $PATH | sed 's/:/ /g'` | sort -u " \
" | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' " \
@ -44,11 +44,19 @@ static Key key[] = { \
{ MODKEY|ShiftMask, XK_3, tag, { .i = 2 } }, \
{ MODKEY|ShiftMask, XK_4, tag, { .i = 3 } }, \
{ MODKEY|ShiftMask, XK_5, tag, { .i = 4 } }, \
{ MODKEY|ShiftMask, XK_6, tag, { .i = 5 } }, \
{ MODKEY|ShiftMask, XK_7, tag, { .i = 6 } }, \
{ MODKEY|ShiftMask, XK_8, tag, { .i = 7 } }, \
{ MODKEY|ShiftMask, XK_9, tag, { .i = 8 } }, \
{ 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|ControlMask|ShiftMask, XK_6, toggletag, { .i = 5 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_7, toggletag, { .i = 6 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_8, toggletag, { .i = 7 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_9, toggletag, { .i = 8 } }, \
{ MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \
{ MODKEY, XK_space, togglemode, { 0 } }, \
{ MODKEY|ShiftMask, XK_space, togglefloat, { 0 } }, \
@ -58,18 +66,26 @@ static Key key[] = { \
{ MODKEY, XK_3, view, { .i = 2 } }, \
{ MODKEY, XK_4, view, { .i = 3 } }, \
{ MODKEY, XK_5, view, { .i = 4 } }, \
{ MODKEY, XK_6, view, { .i = 5 } }, \
{ MODKEY, XK_7, view, { .i = 6 } }, \
{ MODKEY, XK_8, view, { .i = 7 } }, \
{ MODKEY, XK_9, view, { .i = 8 } }, \
{ MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \
{ MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \
{ MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \
{ MODKEY|ControlMask, XK_4, toggleview, { .i = 3 } }, \
{ MODKEY|ControlMask, XK_5, toggleview, { .i = 4 } }, \
{ MODKEY|ControlMask, XK_6, toggleview, { .i = 5 } }, \
{ MODKEY|ControlMask, XK_7, toggleview, { .i = 6 } }, \
{ MODKEY|ControlMask, XK_8, toggleview, { .i = 7 } }, \
{ MODKEY|ControlMask, XK_9, toggleview, { .i = 8 } }, \
{ MODKEY|ShiftMask, XK_q, quit, { 0 } }, \
};
#define RULES \
static Rule rule[] = { \
/* class:instance:title regex tags regex isfloat */ \
{ "Firefox.*", "www", False }, \
{ "Firefox.*", "3", False }, \
{ "Gimp.*", NULL, True }, \
{ "MPlayer.*", NULL, True }, \
{ "Acroread.*", NULL, True }, \

View File

@ -5,9 +5,9 @@
#define TAGS \
const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL };
#define DEFMODE dotile /* dofloat */
#define DEFMODE dotile /* dofloat */
#define FLOATSYMBOL "><>"
#define TILESYMBOL "[]="
#define TILESYMBOL "[%u]=" /* %u is replaced with nmaster */
#define FONT "-*-fixed-medium-r-normal-*-13-*-*-*-*-*-*-*"
#define NORMBGCOLOR "#333366"

View File

@ -1,5 +1,5 @@
# dwm version
VERSION = 2.9
VERSION = 3.0
# Customize below to fit your system

2
draw.c
View File

@ -120,7 +120,7 @@ drawstatus(void) {
dc.x += dc.w;
}
dc.w = bmw;
drawtext(arrange == dofloat ? FLOATSYMBOL : TILESYMBOL, dc.status, False, False);
drawtext(mtext, dc.status, False, False);
x = dc.x + dc.w;
dc.w = textw(stext);
dc.x = bw - dc.w;

6
dwm.1
View File

@ -44,6 +44,12 @@ label toggles between tiling and floating mode.
.B Button3
click on a tag label adds/removes all windows with that tag to/from the view.
.TP
.B Button4
click on the mode label increases the number of windows in the master area (tiling mode only).
.TP
.B Button5
click on the mode label decreases the number of windows in the master area (tiling mode only).
.TP
.B Mod1-Button1
click on a tag label applies that tag to the focused window.
.TP

2
dwm.h
View File

@ -93,6 +93,7 @@ struct Client {
extern const char *tags[]; /* all tags */
extern char stext[1024]; /* status text */
extern char mtext[32]; /* mode text */
extern int bx, by, bw, bh, bmw; /* bar geometry, bar mode label width */
extern int screen, sx, sy, sw, sh; /* screen geometry */
extern int wax, way, wah, waw; /* windowarea geometry */
@ -167,5 +168,6 @@ extern void restack(void); /* restores z layers of all clients */
extern void togglefloat(Arg *arg); /* toggles focusesd client between floating/non-floating state */
extern void togglemode(Arg *arg); /* toggles global arrange function (dotile/dofloat) */
extern void toggleview(Arg *arg); /* toggles the tag with arg's index (in)visible */
extern void updatemodetext(void); /* updates mtext */
extern void view(Arg *arg); /* views the tag with arg's index */
extern void zoom(Arg *arg); /* zooms the focused client to master area, arg is ignored */

16
event.c
View File

@ -131,8 +131,20 @@ buttonpress(XEvent *e) {
return;
}
}
if((ev->x < x + bmw) && (ev->button == Button1))
togglemode(NULL);
if(ev->x < x + bmw)
switch(ev->button) {
case Button1:
togglemode(NULL);
break;
case Button4:
a.i = 1;
incnmaster(&a);
break;
case Button5:
a.i = -1;
incnmaster(&a);
break;
}
}
else if((c = getclient(ev->window))) {
focus(c);

5
main.c
View File

@ -17,7 +17,7 @@
/* extern */
char stext[1024];
char stext[1024], mtext[32];
Bool *seltag;
int bx, by, bw, bh, bmw, masterd, screen, sx, sy, sw, sh, wax, way, waw, wah;
unsigned int master, nmaster, ntags, numlockmask;
@ -101,6 +101,7 @@ setup(void) {
cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
/* init modifier map */
numlockmask = 0;
modmap = XGetModifierMapping(dpy);
for (i = 0; i < 8; i++) {
for (j = 0; j < modmap->max_keypermod; j++) {
@ -128,12 +129,12 @@ setup(void) {
dc.status[ColFG] = getcolor(STATUSFGCOLOR);
setfont(FONT);
/* geometry */
bmw = textw(TILESYMBOL) > textw(FLOATSYMBOL) ? textw(TILESYMBOL) : textw(FLOATSYMBOL);
sx = sy = 0;
sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen);
master = MASTER;
nmaster = NMASTER;
updatemodetext();
/* bar */
bx = sx;
by = sy;

20
view.c
View File

@ -2,6 +2,7 @@
* See LICENSE file for license details.
*/
#include "dwm.h"
#include <stdio.h>
/* static */
@ -75,10 +76,10 @@ dotile(void) {
for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
n++;
/* window geoms */
mw = (n > nmaster) ? (waw * master) / 1000 : waw;
mh = (n > nmaster) ? wah / nmaster : wah / (n > 0 ? n : 1);
tw = waw - mw;
mw = (n > nmaster) ? (waw * master) / 1000 : waw;
th = (n > nmaster) ? wah / (n - nmaster) : 0;
tw = waw - mw;
for(i = 0, c = clients; c; c = c->next)
if(isvisible(c)) {
@ -149,10 +150,14 @@ focusprev(Arg *arg) {
void
incnmaster(Arg *arg) {
if((nmaster + arg->i < 1) || (wah / (nmaster + arg->i) < bh))
if((arrange == dofloat) || (nmaster + arg->i < 1) || (wah / (nmaster + arg->i) < bh))
return;
nmaster += arg->i;
arrange();
updatemodetext();
if(sel)
arrange();
else
drawstatus();
}
Bool
@ -218,6 +223,7 @@ togglefloat(Arg *arg) {
void
togglemode(Arg *arg) {
arrange = (arrange == dofloat) ? dotile : dofloat;
updatemodetext();
if(sel)
arrange();
else
@ -235,6 +241,12 @@ toggleview(Arg *arg) {
arrange();
}
void
updatemodetext() {
snprintf(mtext, sizeof mtext, arrange == dofloat ? FLOATSYMBOL : TILESYMBOL, nmaster);
bmw = textw(mtext);
}
void
view(Arg *arg) {
unsigned int i;