implemented viewextend and added M-S-C-n shortcuts for extending the current view... updated man page (works great!) nice feature

keyboard
Anselm R.Garbe 19 years ago
parent d7413ffd2d
commit 292ccc4c43
  1. 45
      config.arg.h
  2. 57
      config.default.h
  3. 4
      draw.c
  4. 21
      dwm.1
  5. 3
      dwm.h
  6. 7
      event.c
  7. 6
      main.c
  8. 25
      tag.c

@ -18,31 +18,34 @@ const char *tags[] = { "work", "net", "fnord", NULL };
#define KEYS \ #define KEYS \
static Key key[] = { \ static Key key[] = { \
/* modifier key function arguments */ \ /* modifier key function arguments */ \
{ MODKEY, XK_1, view, { .i = 0 } }, \ { MODKEY, XK_1, view, { .i = 0 } }, \
{ MODKEY, XK_2, view, { .i = 1 } }, \ { MODKEY, XK_2, view, { .i = 1 } }, \
{ MODKEY, XK_3, view, { .i = 2 } }, \ { MODKEY, XK_3, view, { .i = 2 } }, \
{ 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_1, appendtag, { .i = 0 } }, \ { MODKEY|ControlMask, XK_1, appendtag, { .i = 0 } }, \
{ MODKEY|ControlMask, XK_2, appendtag, { .i = 1 } }, \ { MODKEY|ControlMask, XK_2, appendtag, { .i = 1 } }, \
{ MODKEY|ControlMask, XK_3, appendtag, { .i = 2 } }, \ { MODKEY|ControlMask, XK_3, appendtag, { .i = 2 } }, \
{ MODKEY|ShiftMask, XK_1, replacetag, { .i = 0 } }, \ { MODKEY|ShiftMask, XK_1, replacetag, { .i = 0 } }, \
{ MODKEY|ShiftMask, XK_2, replacetag, { .i = 1 } }, \ { MODKEY|ShiftMask, XK_2, replacetag, { .i = 1 } }, \
{ MODKEY|ShiftMask, XK_3, replacetag, { .i = 2 } }, \ { MODKEY|ShiftMask, XK_3, replacetag, { .i = 2 } }, \
{ 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 +sb -tr -bg black -fg '#eeeeee' -cr '#eeeeee' +sb " \ { .cmd = "exec urxvt +sb -tr -bg black -fg '#eeeeee' -cr '#eeeeee' +sb " \
"-fn '-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*'" } }, \ "-fn '-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*'" } }, \
{ MODKEY|ControlMask|ShiftMask, XK_1, viewextend, { .i = 0 } }, \
{ MODKEY|ShiftMask, XK_2, viewextend, { .i = 1 } }, \
{ MODKEY|ShiftMask, XK_3, viewextend, { .i = 2 } }, \
}; };
#define RULES \ #define RULES \

@ -18,32 +18,37 @@ const char *tags[] = { "0", "1", "2", "3", "4", 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_0, view, { .i = 0 } }, \
{ MODKEY, XK_1, view, { .i = 1 } }, \ { MODKEY, XK_1, view, { .i = 1 } }, \
{ MODKEY, XK_2, view, { .i = 2 } }, \ { MODKEY, XK_2, view, { .i = 2 } }, \
{ MODKEY, XK_3, view, { .i = 3 } }, \ { MODKEY, XK_3, view, { .i = 3 } }, \
{ MODKEY, XK_4, view, { .i = 4 } }, \ { 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_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_0, appendtag, { .i = 0 } }, \
{ MODKEY|ControlMask, XK_1, appendtag, { .i = 1 } }, \ { MODKEY|ControlMask, XK_1, appendtag, { .i = 1 } }, \
{ MODKEY|ControlMask, XK_2, appendtag, { .i = 2 } }, \ { MODKEY|ControlMask, XK_2, appendtag, { .i = 2 } }, \
{ MODKEY|ControlMask, XK_3, appendtag, { .i = 3 } }, \ { MODKEY|ControlMask, XK_3, appendtag, { .i = 3 } }, \
{ MODKEY|ControlMask, XK_4, appendtag, { .i = 4 } }, \ { MODKEY|ControlMask, XK_4, appendtag, { .i = 4 } }, \
{ MODKEY|ShiftMask, XK_0, replacetag, { .i = 0 } }, \ { MODKEY|ShiftMask, XK_0, replacetag, { .i = 0 } }, \
{ MODKEY|ShiftMask, XK_1, replacetag, { .i = 1 } }, \ { MODKEY|ShiftMask, XK_1, replacetag, { .i = 1 } }, \
{ MODKEY|ShiftMask, XK_2, replacetag, { .i = 2 } }, \ { MODKEY|ShiftMask, XK_2, replacetag, { .i = 2 } }, \
{ MODKEY|ShiftMask, XK_3, replacetag, { .i = 3 } }, \ { MODKEY|ShiftMask, XK_3, replacetag, { .i = 3 } }, \
{ MODKEY|ShiftMask, XK_4, replacetag, { .i = 4 } }, \ { MODKEY|ShiftMask, XK_4, replacetag, { .i = 4 } }, \
{ 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, { .cmd = "exec xterm" } }, \ { MODKEY|ShiftMask, XK_Return, spawn, { .cmd = "exec xterm" } }, \
{ MODKEY|ControlMask|ShiftMask, XK_0, viewextend, { .i = 0 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_1, viewextend, { .i = 1 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_2, viewextend, { .i = 2 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_3, viewextend, { .i = 3 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_4, viewextend, { .i = 4 } }, \
}; };
#define RULES \ #define RULES \

@ -109,9 +109,9 @@ drawstatus()
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], tsel[i]); drawtext(tags[i], seltag[i]);
else else
drawtext(tags[i], !tsel[i]); drawtext(tags[i], !seltag[i]);
} }
x = dc.x + dc.w; x = dc.x + dc.w;
dc.w = textw(stext); dc.w = textw(stext);

21
dwm.1

@ -36,14 +36,21 @@ prints version information to standard output, then exits.
.B Standard input .B Standard input
is read and displayed in the status text area. is read and displayed in the status text area.
.TP .TP
.B Button[1-3] .B Button[1,3]
click on a tag label focuses that tag. click on a tag label focuses that
.B tag.
.TP
.B Button2
click on a tag label (un)extends the current
.B tag.
.TP .TP
.B Button[1,4] .B Button[1,4]
click on the bar focuses the previous tag. click on the bar focuses the previous
.B tag.
.TP .TP
.B Button[2,5] .B Button[2,5]
click on the bar focuses the next tag. click on the bar focuses the next
.B tag.
.SS Keyboard commands .SS Keyboard commands
.TP .TP
.B Mod1-Return .B Mod1-Return
@ -108,6 +115,12 @@ Append
.B nth tag .B nth tag
to current to current
.B window. .B window.
.TP
.B Mod1-Control-Shift-[0..n]
(Un)extends
.B nth tag
with current
.B tag.
.SS Mouse commands .SS Mouse commands
.TP .TP
.B Mod1-Button1 .B Mod1-Button1

@ -74,7 +74,7 @@ extern unsigned int ntags;
extern void (*handler[LASTEvent])(XEvent *); extern void (*handler[LASTEvent])(XEvent *);
extern void (*arrange)(Arg *); extern void (*arrange)(Arg *);
extern Atom wmatom[WMLast], netatom[NetLast]; extern Atom wmatom[WMLast], netatom[NetLast];
extern Bool running, issel, *tsel; extern Bool running, issel, *seltag;
extern Client *clients, *sel; extern Client *clients, *sel;
extern Cursor cursor[CurLast]; extern Cursor cursor[CurLast];
extern DC dc; extern DC dc;
@ -128,6 +128,7 @@ extern void replacetag(Arg *arg);
extern void settags(Client *c); extern void settags(Client *c);
extern void togglemode(Arg *arg); extern void togglemode(Arg *arg);
extern void view(Arg *arg); extern void view(Arg *arg);
extern void viewextend(Arg *arg);
extern void viewnext(Arg *arg); extern void viewnext(Arg *arg);
extern void viewprev(Arg *arg); extern void viewprev(Arg *arg);

@ -108,11 +108,8 @@ buttonpress(XEvent *e)
for(a.i = 0; a.i < ntags; a.i++) { for(a.i = 0; a.i < ntags; a.i++) {
x += textw(tags[a.i]); x += textw(tags[a.i]);
if(ev->x < x) { if(ev->x < x) {
if(ev->button == Button3) { if(ev->button == Button3)
tsel[a.i] = True; viewextend(&a);
arrange(NULL);
drawall();
}
else else
view(&a); view(&a);
return; return;

@ -83,7 +83,7 @@ xerrorstart(Display *dsply, XErrorEvent *ee)
/* extern */ /* extern */
char stext[1024]; char stext[1024];
Bool *tsel; Bool *seltag;
int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
unsigned int ntags; unsigned int ntags;
Atom wmatom[WMLast], netatom[NetLast]; Atom wmatom[WMLast], netatom[NetLast];
@ -213,8 +213,8 @@ main(int argc, char *argv[])
initrregs(); initrregs();
for(ntags = 0; tags[ntags]; ntags++); for(ntags = 0; tags[ntags]; ntags++);
tsel = emallocz(sizeof(Bool) * ntags); seltag = emallocz(sizeof(Bool) * ntags);
tsel[DEFTAG] = True; seltag[DEFTAG] = True;
/* style */ /* style */
dc.bg = getcolor(BGCOLOR); dc.bg = getcolor(BGCOLOR);

25
tag.c

@ -181,7 +181,7 @@ isvisible(Client *c)
unsigned int i; unsigned int i;
for(i = 0; i < ntags; i++) for(i = 0; i < ntags; i++)
if(c->tags[i] && tsel[i]) if(c->tags[i] && seltag[i])
return True; return True;
return False; return False;
} }
@ -229,7 +229,7 @@ settags(Client *c)
} }
if(!matched) if(!matched)
for(i = 0; i < ntags; i++) for(i = 0; i < ntags; i++)
c->tags[i] = tsel[i]; c->tags[i] = seltag[i];
} }
void void
@ -245,8 +245,21 @@ view(Arg *arg)
unsigned int i; unsigned int i;
for(i = 0; i < ntags; i++) for(i = 0; i < ntags; i++)
tsel[i] = False; seltag[i] = False;
tsel[arg->i] = True; seltag[arg->i] = True;
arrange(NULL);
drawall();
}
void
viewextend(Arg *arg)
{
unsigned int i;
seltag[arg->i] = !seltag[arg->i];
for(i = 0; !seltag[i] && i < ntags; i++);
if(i == ntags)
seltag[arg->i] = True; /* cannot toggle last view */
arrange(NULL); arrange(NULL);
drawall(); drawall();
} }
@ -256,7 +269,7 @@ viewnext(Arg *arg)
{ {
unsigned int i; unsigned int i;
for(i = 0; !tsel[i]; i++); for(i = 0; !seltag[i]; i++);
arg->i = (i < ntags-1) ? i+1 : 0; arg->i = (i < ntags-1) ? i+1 : 0;
view(arg); view(arg);
} }
@ -266,7 +279,7 @@ viewprev(Arg *arg)
{ {
unsigned int i; unsigned int i;
for(i = 0; !tsel[i]; i++); for(i = 0; !seltag[i]; i++);
arg->i = (i > 0) ? i-1 : ntags-1; arg->i = (i > 0) ? i-1 : ntags-1;
view(arg); view(arg);
} }

Loading…
Cancel
Save