dwm - a tiling window manager

How to do things, solutions, recipes, tutorials
Post Reply
Message
Author
brymway
Posts: 407
Joined: Sun 09 Dec 2007, 01:08

dwm - a tiling window manager

#1 Post by brymway »

This is how I got the window manager "dwm" to work with Puppy 3.01. It is a tiling window
manager which means that you can have windows open right next to each other on your
desktop without having to align the windows right next to each other and they don't
overlap. There is probably a better definition or description somewhere else. It does take
some getting used to but I enjoy the control and space it allows me.

First the particulars:
I am using a noname laptop with a 40 gig hd, 1.5 gHz cpu, 1 gig ram, using bigbass' fatfree puppy
3.01 live cd that I have been adding and configuring to my tastes. I keep my save file on
a partition on my hd. I downloaded the tar package from this website:
http://www.suckless.org/dwm/

Then followed these directions exactly,
http://www.xsnake.net/howto/dwm/dwm-eng.php
cntrl-alt-bcksp out of X. Then I typed 'startx dwm' and the dwm desktop came up. Done!

(These are the directions that matter the most, I have cut and pasted them onto this thread
for clarity.)

Code: Select all

1) cd /path/to/dwm-4.0.tar.gz
2) tar zxvf dwm-4.0.tar.gz
After that I suggest you go directly with:
3) make clean install (as root)
If you are using a "stock" version of Puppy you will need to add the devx_xxx.sfs to your
boot manager so you have the compiling ability and commands. This is how I did it. First
I asked a question and get an answer which put me on the right track. Thanks puppyluvr!!

http://www.murga-linux.com/puppy/viewto ... 221#258221


Then I searched for the file in all the wrong ways until I finally found what I needed using
http://www.google.com/linux
The ways that didn't work where using the wellminded puppy search and the forum seach.
For some reason they didn't work.
In the midst of looking I found a thread where someone a while ago asked basically the same
question and Barry answered. The advice was: click on menu-go to help-then go to "how
to write programs for puppy". I finally found the devx_301.sfs file here:
http://distro.ibiblio.org/pub/linux/dis ... modules-3/

--------some customizations you may want. To change the way dwm acts, the tabs on top,
the colors, the keystrokes and other things, you go into the dwm-5.3.1 folder and change
the config.h file. Note that config.h and config.def.h are the same thing but when you compile
it will take orders from the config.h file. I'm still learning about the configuring so I am going
very slow and only changing very small things at a time. Here is my current config.h file.

Code: Select all

/* See LICENSE file for copyright and license details. */

/* appearance */
static const char font[]            = "-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#cccccc";
static const char normbgcolor[]     = "#cccccc";
static const char normfgcolor[]     = "#000000";
static const char selbordercolor[]  = "#0066ff";
static const char selbgcolor[]      = "#0066ff";
static const char selfgcolor[]      = "#ffffff";
static unsigned int borderpx        = 1;        /* border pixel of windows */
static unsigned int snap            = 32;       /* snap pixel */
static Bool showbar                 = True;     /* False means no bar */
static Bool topbar                  = True;     /* False means bottom bar */
static Bool readin                  = True;     /* False means do not read stdin */
static Bool usegrab                 = False;    /* True means grabbing the X server
                                                   during mouse-based resizals */

/* tagging */
static const char tags[][MAXTAGLEN] = { "www1", "term2", "text3", "rox4", "rox5", "media6", "app7", "app8", "app9" };
static unsigned int tagset[] = {1, 1}; /* after start, first tag is selected */

static Rule rules[] = {
	/* class      instance    title       tags mask     isfloating */
	{ "Gimp",     NULL,       NULL,       0,            True },
	{ "Firefox",  NULL,       NULL,       1 << 8,       True },
};

/* layout(s) */
static float mfact      = 0.55; /* factor of master area size [0.05..0.95] */
static Bool resizehints = True; /* False means respect size hints in tiled resizals */

static Layout layouts[] = {
	/* symbol     arrange function */
	{ "[]=",      tile },    /* first entry is default */
	{ "><>",      NULL },    /* no layout function means floating behavior */
	{ "[M]",      monocle },
};

/* key definitions */
#define MODKEY Mod1Mask
#define TAGKEYS(KEY,TAG) \
	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
	{ MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
	{ MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },

/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }

/* commands */
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[]  = { "mrxvt", NULL };

static Key keys[] = {
	/* modifier                     key        function        argument */
	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
	{ MODKEY,                       XK_b,      togglebar,      {0} },
	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
	{ MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
	{ MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
	{ MODKEY,                       XK_Return, zoom,           {0} },
	{ MODKEY,                       XK_Tab,    view,           {0} },
	{ MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
	{ MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
	{ MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
	{ MODKEY,                       XK_space,  setlayout,      {0} },
	{ MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
	{ MODKEY,                       XK_0,      view,           {.ui = ~0 } },
	{ MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
	TAGKEYS(                        XK_1,                      0)
	TAGKEYS(                        XK_2,                      1)
	TAGKEYS(                        XK_3,                      2)
	TAGKEYS(                        XK_4,                      3)
	TAGKEYS(                        XK_5,                      4)
	TAGKEYS(                        XK_6,                      5)
	TAGKEYS(                        XK_7,                      6)
	TAGKEYS(                        XK_8,                      7)
	TAGKEYS(                        XK_9,                      8)
	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} },
};

/* button definitions */
/* click can be a tag number (starting at 0),
 * ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
	/* click                event mask      button          function        argument */
	{ ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
	{ ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
	{ ClkWinTitle,          0,              Button2,        zoom,           {0} },
	{ ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
	{ ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
	{ ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
	{ ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
	{ ClkTagBar,            0,              Button1,        view,           {0} },
	{ ClkTagBar,            0,              Button3,        toggleview,     {0} },
	{ ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
};

I haven't changed any of my keystrokes yet. I go into the tab I want and alt-shift-enter
which opens up my mrxvt. (I like mrxvt because I like transparency although not true, and
I like the ability to have tabs. I also use urxvt) Then I type the command for the program
I want to use ie

Code: Select all

seamonkey, opera, leafpad, audacious, rox, asunder, etc.
and it opens up in that window next to the terminal. Note you will have to add an & after
the command or the cli will be dead until you terminate the application. Basic stuff I know.

Right now I'm working on a document that will have the names of all the commands for the
programs on my system and keystrokes for programs that I want to assign to them. I will
make an alias to open this document in so I can see how to navigate thru my system until
I memorize the commands. Even still, I'll keep it up there for when I have a brain freeze.

User avatar
Keef
Posts: 987
Joined: Thu 20 Dec 2007, 22:12
Location: Staffordshire

#2 Post by Keef »

I've dabbled with dwm a few times, on 3.01, and 2.14R mainly. Yes, it does take a bit of getting used to (I've also tried ratpoison which I quite like, and a few other minimal WMs). Not using it at the moment, but might have another go soon...

I set it up with dmenu (as they recommend), and also dzen http://gotmor.googlepages.com/dzen - I use it at the for a status bar, and to bring up a reminder of my shortcuts (this is with JWM on my MeanPup install).

For those interested in window managers:
http://www.gilesorr.com/wm/table.html is the place to go

Perhaps we should start an Anti-Bling thread? The screenshots would be stunning.....

brymway
Posts: 407
Joined: Sun 09 Dec 2007, 01:08

#3 Post by brymway »

I was going to use dmenu but it seemed a bit "blingish". I mean, for a minimalistic approach, how many programs does one really use on a day to day basis? If one works on it then yes I can see it. When I have something to do on my computer, I want it to be as efficient as possible. So typing the word in the cli seemed as efficient as possible, and dmenu kind of a waste of time for me. But that's not to say that I won't use it someday.

As for anti-bling, I'm surprised at the lack of interest for Puppy users. I mean talk about minimalistic! We're under 100 megs for petes sake! But therein lies the rub. Just what CAN be done with under 100 megs?

Anyway, I'm rambling. If you start the thread, I'll post. I wonder how drab things can get. Does minimal go hand in hand with anti-bling?
[url]http://wellminded.com/puppy/pupsearch.html[/url]

User avatar
Keef
Posts: 987
Joined: Thu 20 Dec 2007, 22:12
Location: Staffordshire

#4 Post by Keef »

Actually I'm inclined to agree about unecessary menu systems - dmenu was useful at first, until I got used to dwm, although I had used ratpoison before that and quite happily setup keyboard short-cuts for regularly used programmes. As for status bars... well I've spent loads of time fiddling with dzen, but I could just as easily open htop in a terminal. Do I really need to stare at the CPU usage all day?!
I've never got dzen to work properly as an application launcher, but ratmen is good for knocking up a nice little list of 4 or 5 apps I use regularly - doesn't work with MeanPup for some reason which is a pain, but ok with 3.01, 2.14 and others I think.
Shortcuts are the way to go though!

brymway
Posts: 407
Joined: Sun 09 Dec 2007, 01:08

#5 Post by brymway »

I don't use conky or any of the process viewers either. They are defined as bling and unnecessry for what I do. I very much like htop, it's always one of the first things I add when setting up a new system. Great for "when" I need to see what's happening and perfect to kill those pesky programs that lock up.

Using dwm has shown me just how convenient many separate desktops can be. My current preference aside from dwm is jwm, VERY configurable. After using dwm for a while and going back to using a jwm environment I found myself going between the two windows often and wishing I had more. I guess the big difference of a tiling wm is that it basically gives you nine windows to work on, and lays the applications out so you never have to minimize one or move one over. Yes, now that I think about it, that's a much better description than my previous one.
[url]http://wellminded.com/puppy/pupsearch.html[/url]

Post Reply