about summary refs log tree commit diff stats
path: root/README
blob: e6b06b0e40b26c13d98bae589f6628e4f760b9ec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
dwm - dynamic window manager
----------------------------

dwm is an extremly fast, small, and dynamic X11 window manager.


Requirements
------------
In order to build dwm you need the Xlib header files.


Installation
------------
Edit config.mk to match your local setup. dwm is installed into
the /usr/local namespace by default.

Afterwards enter the following command to build and install dwm (if
necessary as root):

    make clean install


Running dwm
-----------
Add the following line to your .xinitrc to start dwm using startx:

    exec dwm

In order to connect dwm to a specific display, make sure that
the DISPLAY environment variable is set correctly, e.g.:

    DISPLAY=foo.bar:1 exec dwm

This will start dwm on display :1 of the host foo.bar.


Configuration
-------------
The configuration of dwm is done by customizing the wm.h source file. To
customize the key bindings edit dev.c.
;stdio.h> #include <stdlib.h> #include <sys/wait.h> #include <unistd.h> /* static */ static void bad_malloc(unsigned int size) { fprintf(stderr, "fatal: could not malloc() %d bytes\n", (int) size); exit(EXIT_FAILURE); } /* extern */ void * emallocz(unsigned int size) { void *res = calloc(1, size); if(!res) bad_malloc(size); return res; } void eprint(const char *errstr, ...) { va_list ap; va_start(ap, errstr); vfprintf(stderr, errstr, ap); va_end(ap); exit(EXIT_FAILURE); } void spawn(Arg *arg) { char **argv = (char **)arg->argv; if(!argv || !argv[0]) return; if(fork() == 0) { if(fork() == 0) { if(dpy) close(ConnectionNumber(dpy)); setsid(); execvp(argv[0], argv); fprintf(stderr, "dwm: execvp %s", argv[0]); perror(" failed"); } exit(EXIT_FAILURE); } wait(0); }