new stuff - dwm - dynamic window manager HTML git clone https://git.parazyd.org/dwm DIR Log DIR Files DIR Refs DIR README DIR LICENSE --- DIR commit d7b074fcce4877ed404f6a92671689fcdee9133b DIR parent c9170189bf0d0234f8d97fd7b717f859b7242674 HTML Author: Anselm R Garbe <garbeam@gmail.com> Date: Thu, 6 Mar 2008 19:20:14 +0000 new stuff Diffstat: A config.anselm.h | 127 +++++++++++++++++++++++++++++++ M config.def.h | 10 ++++++---- M dwm.1 | 7 +++++-- M dwm.c | 49 ++++++++++++++++++++++++------- 4 files changed, 177 insertions(+), 16 deletions(-) --- DIR diff --git a/config.anselm.h b/config.anselm.h @@ -0,0 +1,127 @@ +/* See LICENSE file for copyright and license details. */ + +/* appearance */ +#define BORDERPX 1 +#define FONT "-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*" +#define NORMBORDERCOLOR "#cccccc" +#define NORMBGCOLOR "#cccccc" +#define NORMFGCOLOR "#000000" +#define SELBORDERCOLOR "#0066ff" +#define SELBGCOLOR "#0066ff" +#define SELFGCOLOR "#ffffff" + +/* bar position */ +#define BX 0 +#define BY 0 +#define BW 1280 + +/* window area, including floating windows */ +#define WX 0 +#define WY bh +#define WW sw +#define WH sh - bh + +/* master area */ +#define MX WX +#define MY bh +#define MW 1280 +#define MH 800 - bh + +/* tile area, might be on a different screen */ +#define TX 1280 +#define TY 0 +#define TW 1680 +#define TH 1050 + +/* monocle area, might be restricted to a specific screen */ +#define MOX MX +#define MOY MY +#define MOW MW +#define MOH MH + +/* tagging */ +const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; + +Rule rules[] = { + /* class:instance:title substr tags ref isfloating */ + { "Firefox", tags[8], False }, + { "Gimp", NULL, True }, + { "MPlayer", NULL, True }, + { "Acroread", NULL, True }, +}; + +/* layout(s) */ +#define RESIZEHINTS True /* False - respect size hints in tiled resizals */ +#define SNAP 32 /* snap pixel */ + +Layout layouts[] = { + /* symbol function isfloating */ + { "[]|", tileh, False }, /* first entry is default */ + { "[]=", tilev, False }, + { "><>", floating, True }, + { "[M]", monocle, True }, +}; + +/* key definitions */ +#define MODKEY Mod1Mask +Key keys[] = { + /* modifier key function argument */ +#if ANSELM_OFFICE + { MODKEY, XK_p, spawn, + "exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"' -x 0 -y 0 -w 1280" }, +#else + { MODKEY, XK_p, spawn, + "exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" }, +#endif + { MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" }, + { MODKEY, XK_j, focusnext, NULL }, + { MODKEY, XK_k, focusprev, NULL }, + { MODKEY, XK_r, reapply, NULL }, + { MODKEY, XK_Return, zoom, NULL }, + { MODKEY, XK_Tab, viewprevtag, NULL }, + { MODKEY, XK_m, setlayout, "[M]" }, + { MODKEY, XK_f, setlayout, "><>" }, + { MODKEY, XK_v, setlayout, "[]=" }, + { MODKEY, XK_h, setlayout, "[]|" }, + { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, + { MODKEY|ShiftMask, XK_c, killclient, NULL }, + { MODKEY, XK_0, view, NULL }, + { MODKEY, XK_1, view, tags[0] }, + { MODKEY, XK_2, view, tags[1] }, + { MODKEY, XK_3, view, tags[2] }, + { MODKEY, XK_4, view, tags[3] }, + { MODKEY, XK_5, view, tags[4] }, + { MODKEY, XK_6, view, tags[5] }, + { MODKEY, XK_7, view, tags[6] }, + { MODKEY, XK_8, view, tags[7] }, + { MODKEY, XK_9, view, tags[8] }, + { MODKEY|ControlMask, XK_1, toggleview, tags[0] }, + { MODKEY|ControlMask, XK_2, toggleview, tags[1] }, + { MODKEY|ControlMask, XK_3, toggleview, tags[2] }, + { MODKEY|ControlMask, XK_4, toggleview, tags[3] }, + { MODKEY|ControlMask, XK_5, toggleview, tags[4] }, + { MODKEY|ControlMask, XK_6, toggleview, tags[5] }, + { MODKEY|ControlMask, XK_7, toggleview, tags[6] }, + { MODKEY|ControlMask, XK_8, toggleview, tags[7] }, + { MODKEY|ControlMask, XK_9, toggleview, tags[8] }, + { MODKEY|ShiftMask, XK_0, tag, NULL }, + { MODKEY|ShiftMask, XK_1, tag, tags[0] }, + { MODKEY|ShiftMask, XK_2, tag, tags[1] }, + { MODKEY|ShiftMask, XK_3, tag, tags[2] }, + { MODKEY|ShiftMask, XK_4, tag, tags[3] }, + { MODKEY|ShiftMask, XK_5, tag, tags[4] }, + { MODKEY|ShiftMask, XK_6, tag, tags[5] }, + { MODKEY|ShiftMask, XK_7, tag, tags[6] }, + { MODKEY|ShiftMask, XK_8, tag, tags[7] }, + { MODKEY|ShiftMask, XK_9, tag, tags[8] }, + { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, tags[0] }, + { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, tags[1] }, + { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, tags[2] }, + { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, tags[3] }, + { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, tags[4] }, + { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, tags[5] }, + { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, tags[6] }, + { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, tags[7] }, + { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, tags[8] }, + { MODKEY|ShiftMask, XK_q, quit, NULL }, +}; DIR diff --git a/config.def.h b/config.def.h @@ -56,9 +56,10 @@ Rule rules[] = { Layout layouts[] = { /* symbol function isfloating */ - { "[]=", tile, False }, /* first entry is default */ - { "><>", floating True }, - { "[M]", monocle True }, + { "[]|", tileh, False }, /* first entry is default */ + { "[]=", tilev, False }, + { "><>", floating, True }, + { "[M]", monocle, True }, }; /* key definitions */ @@ -80,7 +81,8 @@ Key keys[] = { { MODKEY, XK_Tab, viewprevtag, NULL }, { MODKEY, XK_m, setlayout, "[M]" }, { MODKEY, XK_f, setlayout, "><>" }, - { MODKEY, XK_t, setlayout, "[]=" }, + { MODKEY, XK_v, setlayout, "[]=" }, + { MODKEY, XK_h, setlayout, "[]|" }, { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, { MODKEY|ShiftMask, XK_c, killclient, NULL }, { MODKEY, XK_0, view, NULL }, DIR diff --git a/dwm.1 b/dwm.1 @@ -69,8 +69,11 @@ Apply floating layout. .B Mod1\-m Apply monocle layout. .TP -.B Mod1\-t -Apply tiled layout. +.B Mod1\-v +Apply vertical tiled layout. +.TP +.B Mod1\-h +Apply horizontal tiled layout. .TP .B Mod1\-j Focus next window. DIR diff --git a/dwm.c b/dwm.c @@ -1,6 +1,3 @@ -/** - * - allow for vstack - */ /* See LICENSE file for copyright and license details. * * dynamic window manager is designed like any other X client as well. It is @@ -36,7 +33,6 @@ #include <sys/select.h> #include <sys/types.h> #include <sys/wait.h> -#include <regex.h> #include <X11/cursorfont.h> #include <X11/keysym.h> #include <X11/Xatom.h> @@ -170,8 +166,10 @@ void spawn(const char *arg); void tag(const char *arg); unsigned int textnw(const char *text, unsigned int len); unsigned int textw(const char *text); -void tile(void); +void tileh(void); +void tilehstack(unsigned int n); unsigned int tilemaster(void); +void tilev(void); void tilevstack(unsigned int n); void togglefloating(const char *arg); void toggletag(const char *arg); @@ -1547,6 +1545,37 @@ tileresize(Client *c, int x, int y, int w, int h) { resize(c, x, y, w, h, False); } +void +tileh(void) { + tilehstack(tilemaster()); +} + +void +tilehstack(unsigned int n) { + int i, x, w; + Client *c; + + if(n == 0) + return; + + x = TX; + w = (TW) / n; + if(w < bh) + w = TW; + + for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++) + if(i > 0) { + if(i > 1 && i == n) /* remainder */ + tileresize(c, x, TY, ((TX) + (TW)) - x - 2 * c->border, + TH - 2 * c->border); + else + tileresize(c, x, TY, w - 2 * c->border, + TH - 2 * c->border); + if(w != TW) + x = c->x + c->w + 2 * c->border; + } +} + unsigned int tilemaster(void) { unsigned int n; @@ -1564,6 +1593,11 @@ tilemaster(void) { } void +tilev(void) { + tilevstack(tilemaster()); +} + +void tilevstack(unsigned int n) { int i, y, h; Client *c; @@ -1590,11 +1624,6 @@ tilevstack(unsigned int n) { } void -tile(void) { - tilevstack(tilemaster()); -} - -void togglefloating(const char *arg) { if(!sel) return;