add xressources patch

This commit is contained in:
lucy 2026-03-18 10:52:56 +01:00
parent 5fc22a70f0
commit c09a9d3461
14 changed files with 353 additions and 75 deletions

View File

@ -42,9 +42,9 @@ static const Rule rules[] = {
}; };
/* layout(s) */ /* layout(s) */
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ static float mfact = 0.55; /* factor of master area size [0.05..0.95] */
static const int nmaster = 1; /* number of clients in master area */ static int nmaster = 1; /* number of clients in master area */
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ static int resizehints = 1; /* 1 means respect size hints in tiled resizals */
static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */ static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
static const int refreshrate = 120; /* refresh rate (per second) for client move/resize */ static const int refreshrate = 120; /* refresh rate (per second) for client move/resize */

View File

@ -140,6 +140,7 @@ static const Key keys[] = {
TAGKEYS( XK_8, 7) TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8) TAGKEYS( XK_9, 8)
{ MODKEY|ShiftMask, XK_q, quit, {0} }, { MODKEY|ShiftMask, XK_q, quit, {0} },
{ MODKEY|ControlMask|ShiftMask, XK_q, quit, {1} },
}; };
/* button definitions */ /* button definitions */

73
config.def.h.rej Normal file
View File

@ -0,0 +1,73 @@
--- config.def.h
+++ config.def.h
@@ -1,21 +1,23 @@
/* See LICENSE file for copyright and license details. */
/* appearance */
-static const unsigned int borderpx = 1; /* border pixel of windows */
-static const unsigned int snap = 32; /* snap pixel */
-static const int showbar = 1; /* 0 means no bar */
-static const int topbar = 1; /* 0 means bottom bar */
-static const char *fonts[] = { "monospace:size=10" };
-static const char dmenufont[] = "monospace:size=10";
-static const char col_gray1[] = "#222222";
-static const char col_gray2[] = "#444444";
-static const char col_gray3[] = "#bbbbbb";
-static const char col_gray4[] = "#eeeeee";
-static const char col_cyan[] = "#005577";
-static const char *colors[][3] = {
- /* fg bg border */
- [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
- [SchemeSel] = { col_gray4, col_cyan, col_cyan },
+static unsigned int borderpx = 1; /* border pixel of windows */
+static unsigned int snap = 32; /* snap pixel */
+static int showbar = 1; /* 0 means no bar */
+static int topbar = 1; /* 0 means bottom bar */
+static char font[] = "monospace:size=10";
+static char dmenufont[] = "monospace:size=10";
+static const char *fonts[] = { font };
+static char normbgcolor[] = "#222222";
+static char normbordercolor[] = "#444444";
+static char normfgcolor[] = "#bbbbbb";
+static char selfgcolor[] = "#eeeeee";
+static char selbordercolor[] = "#005577";
+static char selbgcolor[] = "#005577";
+static char *colors[][3] = {
+ /* fg bg border */
+ [SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor },
+ [SchemeSel] = { selfgcolor, selbgcolor, selbordercolor },
};
/* tagging */
@@ -57,9 +59,30 @@ static const Layout layouts[] = {
/* commands */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
-static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
+static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbordercolor, "-sf", selfgcolor, NULL };
static const char *termcmd[] = { "st", NULL };
+/*
+ * Xresources preferences to load at startup
+ */
+ResourcePref resources[] = {
+ { "font", STRING, &font },
+ { "dmenufont", STRING, &dmenufont },
+ { "normbgcolor", STRING, &normbgcolor },
+ { "normbordercolor", STRING, &normbordercolor },
+ { "normfgcolor", STRING, &normfgcolor },
+ { "selbgcolor", STRING, &selbgcolor },
+ { "selbordercolor", STRING, &selbordercolor },
+ { "selfgcolor", STRING, &selfgcolor },
+ { "borderpx", INTEGER, &borderpx },
+ { "snap", INTEGER, &snap },
+ { "showbar", INTEGER, &showbar },
+ { "topbar", INTEGER, &topbar },
+ { "nmaster", INTEGER, &nmaster },
+ { "resizehints", INTEGER, &resizehints },
+ { "mfact", FLOAT, &mfact },
+};
+
static Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },

View File

@ -2,8 +2,6 @@
#include <X11/XF86keysym.h> #include <X11/XF86keysym.h>
/* appearance */ /* appearance */
static const unsigned int borderpx = 3; /* border pixel of windows */
static const unsigned int snap = 32; /* snap pixel */
static const unsigned int systraypinning = 0; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */ static const unsigned int systraypinning = 0; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */
static const unsigned int systrayonleft = 0; /* 0: systray in the right corner, >0: systray on left of status text */ static const unsigned int systrayonleft = 0; /* 0: systray in the right corner, >0: systray on left of status text */
static const unsigned int systrayspacing = 2; /* systray spacing */ static const unsigned int systrayspacing = 2; /* systray spacing */
@ -14,19 +12,23 @@ static const unsigned int gappiv = 10; /* vert inner gap between windows
static const unsigned int gappoh = 10; /* horiz outer gap between windows and screen edge */ static const unsigned int gappoh = 10; /* horiz outer gap between windows and screen edge */
static const unsigned int gappov = 10; /* vert outer gap between windows and screen edge */ static const unsigned int gappov = 10; /* vert outer gap between windows and screen edge */
static int smartgaps = 0; /* 1 means no outer gap when there is only one window */ static int smartgaps = 0; /* 1 means no outer gap when there is only one window */
static const int showbar = 1; /* 0 means no bar */ static unsigned int borderpx = 1; /* border pixel of windows */
static const int topbar = 1; /* 0 means bottom bar */ static unsigned int snap = 32; /* snap pixel */
static const char *fonts[] = {"Maple Mono:size=10"}; static int showbar = 1; /* 0 means no bar */
static const char dmenufont[] = "Maple Mono:size=10"; static int topbar = 1; /* 0 means bottom bar */
static const char col_gray1[] = "#1e1e2e"; static char font[] = "monospace:size=10";
static const char col_gray2[] = "#f9e2af"; static char dmenufont[] = "monospace:size=10";
static const char col_gray3[] = "#cdd6f4"; static const char *fonts[] = {font};
static const char col_gray4[] = "#eeeeee"; static char normbgcolor[] = "#222222";
static const char col_cyan[] = "#a6e3a1"; static char normbordercolor[] = "#444444";
static const char *colors[][3] = { static char normfgcolor[] = "#bbbbbb";
static char selfgcolor[] = "#eeeeee";
static char selbordercolor[] = "#005577";
static char selbgcolor[] = "#005577";
static char *colors[][3] = {
/* fg bg border */ /* fg bg border */
[SchemeNorm] = {col_gray3, col_gray1, col_gray1}, [SchemeNorm] = {normfgcolor, normbgcolor, normbordercolor},
[SchemeSel] = {col_gray1, col_cyan, col_cyan}, [SchemeSel] = {selfgcolor, selbgcolor, selbordercolor},
}; };
/* tagging */ /* tagging */
@ -72,7 +74,7 @@ static const Layout layouts[] = {
/* commands */ /* commands */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = {"dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray1, NULL}; static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbordercolor, "-sf", selfgcolor, NULL };
static const char *termcmd[] = {"st", NULL}; static const char *termcmd[] = {"st", NULL};
static const Key keys[] = { static const Key keys[] = {
@ -114,6 +116,26 @@ static const Key keys[] = {
{0, XF86XK_MonBrightnessUp, spawn, SHCMD("brightnessctl s 10%-")}, {0, XF86XK_MonBrightnessUp, spawn, SHCMD("brightnessctl s 10%-")},
}; };
/*
* Xresources preferences to load at startup
*/
ResourcePref resources[] = {
{"font", STRING, &font},
{"dmenufont", STRING, &dmenufont},
{"normbgcolor", STRING, &normbgcolor},
{"normbordercolor", STRING, &normbordercolor},
{"normfgcolor", STRING, &normfgcolor},
{"selbgcolor", STRING, &selbgcolor},
{"selbordercolor", STRING, &selbordercolor},
{"selfgcolor", STRING, &selfgcolor},
{"borderpx", INTEGER, &borderpx},
{"snap", INTEGER, &snap},
{"showbar", INTEGER, &showbar},
{"topbar", INTEGER, &topbar},
{"nmaster", INTEGER, &nmaster},
{"resizehints", INTEGER, &resizehints},
{"mfact", FLOAT, &mfact},
};
/* button definitions */ /* button definitions */
/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ /* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */

2
drw.c
View File

@ -182,7 +182,7 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
/* Create color schemes. */ /* Create color schemes. */
Clr * Clr *
drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount)
{ {
size_t i; size_t i;
Clr *ret; Clr *ret;

View File

@ -176,6 +176,8 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
DefaultColormap(drw->dpy, drw->screen), DefaultColormap(drw->dpy, drw->screen),
clrname, dest)) clrname, dest))
die("error, cannot allocate color '%s'", clrname); die("error, cannot allocate color '%s'", clrname);
dest->pixel |= 0xff << 24;
} }
/* Create color schemes. */ /* Create color schemes. */

2
drw.h
View File

@ -41,7 +41,7 @@ void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned in
/* Colorscheme abstraction */ /* Colorscheme abstraction */
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname); void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
void drw_clr_free(Drw *drw, Clr *c); void drw_clr_free(Drw *drw, Clr *c);
Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount); Clr *drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount);
void drw_scm_free(Drw *drw, Clr *scm, size_t clrcount); void drw_scm_free(Drw *drw, Clr *scm, size_t clrcount);
/* Cursor abstraction */ /* Cursor abstraction */

60
drw.h.orig Normal file
View File

@ -0,0 +1,60 @@
/* See LICENSE file for copyright and license details. */
typedef struct {
Cursor cursor;
} Cur;
typedef struct Fnt {
Display *dpy;
unsigned int h;
XftFont *xfont;
FcPattern *pattern;
struct Fnt *next;
} Fnt;
enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */
typedef XftColor Clr;
typedef struct {
unsigned int w, h;
Display *dpy;
int screen;
Window root;
Drawable drawable;
GC gc;
Clr *scheme;
Fnt *fonts;
} Drw;
/* Drawable abstraction */
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h);
void drw_resize(Drw *drw, unsigned int w, unsigned int h);
void drw_free(Drw *drw);
/* Fnt abstraction */
Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount);
void drw_fontset_free(Fnt* set);
unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n);
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
/* Colorscheme abstraction */
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
void drw_clr_free(Drw *drw, Clr *c);
Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
void drw_scm_free(Drw *drw, Clr *scm, size_t clrcount);
/* Cursor abstraction */
Cur *drw_cur_create(Drw *drw, int shape);
void drw_cur_free(Drw *drw, Cur *cursor);
/* Drawing context manipulation */
void drw_setfontset(Drw *drw, Fnt *set);
void drw_setscheme(Drw *drw, Clr *scm);
/* Drawing functions */
void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert);
int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert);
/* Map functions */
void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);

11
drw.h.rej Normal file
View File

@ -0,0 +1,11 @@
--- drw.h
+++ drw.h
@@ -39,7 +39,7 @@ void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned in
/* Colorscheme abstraction */
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
-Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
+Clr *drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount);
/* Cursor abstraction */
Cur *drw_cur_create(Drw *drw, int shape);

BIN
dwm

Binary file not shown.

72
dwm.c
View File

@ -23,6 +23,7 @@
#include <X11/Xatom.h> #include <X11/Xatom.h>
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/Xproto.h> #include <X11/Xproto.h>
#include <X11/Xresource.h>
#include <X11/Xutil.h> #include <X11/Xutil.h>
#include <X11/cursorfont.h> #include <X11/cursorfont.h>
#include <X11/keysym.h> #include <X11/keysym.h>
@ -220,6 +221,21 @@ struct Systray
Client *icons; Client *icons;
}; };
/* Xresources preferences */
enum resource_type
{
STRING = 0,
INTEGER = 1,
FLOAT = 2
};
typedef struct
{
char *name;
enum resource_type type;
void *dst;
} ResourcePref;
/* function declarations */ /* function declarations */
static void applyrules(Client *c); static void applyrules(Client *c);
static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact); static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
@ -326,6 +342,8 @@ static int xerror(Display *dpy, XErrorEvent *ee);
static int xerrordummy(Display *dpy, XErrorEvent *ee); static int xerrordummy(Display *dpy, XErrorEvent *ee);
static int xerrorstart(Display *dpy, XErrorEvent *ee); static int xerrorstart(Display *dpy, XErrorEvent *ee);
static void zoom(const Arg *arg); static void zoom(const Arg *arg);
static void load_xresources(void);
static void resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst);
/* variables */ /* variables */
static Systray *systray = NULL; static Systray *systray = NULL;
@ -2729,6 +2747,58 @@ void zoom(const Arg *arg)
return; return;
pop(c); pop(c);
} }
void resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
{
char *sdst = NULL;
int *idst = NULL;
float *fdst = NULL;
sdst = dst;
idst = dst;
fdst = dst;
char fullname[256];
char *type;
XrmValue ret;
snprintf(fullname, sizeof(fullname), "%s.%s", "dwm", name);
fullname[sizeof(fullname) - 1] = '\0';
XrmGetResource(db, fullname, "*", &type, &ret);
if (!(ret.addr == NULL || strncmp("String", type, 64)))
{
switch (rtype)
{
case STRING:
strcpy(sdst, ret.addr);
break;
case INTEGER:
*idst = strtoul(ret.addr, NULL, 10);
break;
case FLOAT:
*fdst = strtof(ret.addr, NULL);
break;
}
}
}
void load_xresources(void)
{
Display *display;
char *resm;
XrmDatabase db;
ResourcePref *p;
display = XOpenDisplay(NULL);
resm = XResourceManagerString(display);
if (!resm)
return;
db = XrmGetStringDatabase(resm);
for (p = resources; p < resources + LENGTH(resources); p++)
resource_load(db, p->name, p->type, p->dst);
XCloseDisplay(display);
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
@ -2741,6 +2811,8 @@ int main(int argc, char *argv[])
if (!(dpy = XOpenDisplay(NULL))) if (!(dpy = XOpenDisplay(NULL)))
die("dwm: cannot open display"); die("dwm: cannot open display");
checkotherwm(); checkotherwm();
XrmInitialize();
load_xresources();
setup(); setup();
#ifdef __OpenBSD__ #ifdef __OpenBSD__
if (pledge("stdio rpath proc exec", NULL) == -1) if (pledge("stdio rpath proc exec", NULL) == -1)

View File

@ -291,6 +291,7 @@ static void setlayout(const Arg *arg);
static void setcfact(const Arg *arg); static void setcfact(const Arg *arg);
static void setmfact(const Arg *arg); static void setmfact(const Arg *arg);
static void setup(void); static void setup(void);
static void sigterm(int unused);
static void seturgent(Client *c, int urg); static void seturgent(Client *c, int urg);
static void showhide(Client *c); static void showhide(Client *c);
static void spawn(const Arg *arg); static void spawn(const Arg *arg);
@ -344,6 +345,7 @@ static void (*handler[LASTEvent])(XEvent *) = {[ButtonPress] = buttonpress, [Cli
[FocusIn] = focusin, [KeyPress] = keypress, [MappingNotify] = mappingnotify, [MapRequest] = maprequest, [MotionNotify] = motionnotify, [PropertyNotify] = propertynotify, [ResizeRequest] = resizerequest, [FocusIn] = focusin, [KeyPress] = keypress, [MappingNotify] = mappingnotify, [MapRequest] = maprequest, [MotionNotify] = motionnotify, [PropertyNotify] = propertynotify, [ResizeRequest] = resizerequest,
[UnmapNotify] = unmapnotify}; [UnmapNotify] = unmapnotify};
static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast]; static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast];
static int restart = 0;
static int running = 1; static int running = 1;
static Cur *cursor[CurLast]; static Cur *cursor[CurLast];
static Clr **scheme; static Clr **scheme;
@ -1525,7 +1527,12 @@ void propertynotify(XEvent *e)
} }
} }
void quit(const Arg *arg) { running = 0; } void quit(const Arg *arg)
{
if (arg->i)
restart = 1;
running = 0;
}
Monitor *recttomon(int x, int y, int w, int h) Monitor *recttomon(int x, int y, int w, int h)
{ {
@ -1948,6 +1955,18 @@ void setmfact(const Arg *arg)
arrange(selmon); arrange(selmon);
} }
void sighup(int unused)
{
Arg a = {.i = 1};
quit(&a);
}
void sigterm(int unused)
{
Arg a = {.i = 0};
quit(&a);
}
void setup(void) void setup(void)
{ {
int i; int i;
@ -1964,6 +1983,8 @@ void setup(void)
/* clean up any zombies (inherited from .xinitrc etc) immediately */ /* clean up any zombies (inherited from .xinitrc etc) immediately */
while (waitpid(-1, NULL, WNOHANG) > 0) while (waitpid(-1, NULL, WNOHANG) > 0)
; ;
signal(SIGHUP, sighup);
signal(SIGTERM, sigterm);
/* init screen */ /* init screen */
screen = DefaultScreen(dpy); screen = DefaultScreen(dpy);
@ -2728,6 +2749,8 @@ int main(int argc, char *argv[])
scan(); scan();
runautostart(); runautostart();
run(); run();
if (restart)
execvp(argv[0], argv);
cleanup(); cleanup();
XCloseDisplay(dpy); XCloseDisplay(dpy);
return EXIT_SUCCESS; return EXIT_SUCCESS;

120
dwm.c.rej
View File

@ -1,66 +1,80 @@
--- dwm.c --- dwm.c
+++ dwm.c +++ dwm.c
@@ -205,6 +205,8 @@ static void setup(void); @@ -36,6 +36,7 @@
static void seturgent(Client *c, int urg); #include <X11/Xlib.h>
static void showhide(Client *c); #include <X11/Xproto.h>
static void sigchld(int unused); #include <X11/Xutil.h>
+static void sighup(int unused); +#include <X11/Xresource.h>
+static void sigterm(int unused); #ifdef XINERAMA
static void spawn(const Arg *arg); #include <X11/extensions/Xinerama.h>
static void tag(const Arg *arg); #endif /* XINERAMA */
static void tagmon(const Arg *arg); @@ -2142,6 +2158,60 @@ zoom(const Arg *arg)
@@ -260,6 +262,7 @@ static void (*handler[LASTEvent]) (XEvent *) = { pop(c);
[UnmapNotify] = unmapnotify
};
static Atom wmatom[WMLast], netatom[NetLast];
+static int restart = 0;
static int running = 1;
static Cur *cursor[CurLast];
static Clr **scheme;
@@ -1248,6 +1251,7 @@ propertynotify(XEvent *e)
void
quit(const Arg *arg)
{
+ if(arg->i) restart = 1;
running = 0;
} }
@@ -1536,6 +1540,9 @@ setup(void) +void
/* clean up any zombies immediately */ +resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
sigchld(0);
+ signal(SIGHUP, sighup);
+ signal(SIGTERM, sigterm);
+
/* init screen */
screen = DefaultScreen(dpy);
sw = DisplayWidth(dpy, screen);
@@ -1637,6 +1644,20 @@ sigchld(int unused)
}
void
+sighup(int unused)
+{ +{
+ Arg a = {.i = 1}; + char *sdst = NULL;
+ quit(&a); + int *idst = NULL;
+ float *fdst = NULL;
+
+ sdst = dst;
+ idst = dst;
+ fdst = dst;
+
+ char fullname[256];
+ char *type;
+ XrmValue ret;
+
+ snprintf(fullname, sizeof(fullname), "%s.%s", "dwm", name);
+ fullname[sizeof(fullname) - 1] = '\0';
+
+ XrmGetResource(db, fullname, "*", &type, &ret);
+ if (!(ret.addr == NULL || strncmp("String", type, 64)))
+ {
+ switch (rtype) {
+ case STRING:
+ strcpy(sdst, ret.addr);
+ break;
+ case INTEGER:
+ *idst = strtoul(ret.addr, NULL, 10);
+ break;
+ case FLOAT:
+ *fdst = strtof(ret.addr, NULL);
+ break;
+ }
+ }
+} +}
+ +
+void +void
+sigterm(int unused) +load_xresources(void)
+{ +{
+ Arg a = {.i = 0}; + Display *display;
+ quit(&a); + char *resm;
+ XrmDatabase db;
+ ResourcePref *p;
+
+ display = XOpenDisplay(NULL);
+ resm = XResourceManagerString(display);
+ if (!resm)
+ return;
+
+ db = XrmGetStringDatabase(resm);
+ for (p = resources; p < resources + LENGTH(resources); p++)
+ resource_load(db, p->name, p->type, p->dst);
+ XCloseDisplay(display);
+} +}
+ +
+void int
spawn(const Arg *arg) main(int argc, char *argv[])
{ {
if (arg->v == dmenucmd) @@ -2154,6 +2224,8 @@ main(int argc, char *argv[])
@@ -2139,6 +2160,7 @@ main(int argc, char *argv[]) if (!(dpy = XOpenDisplay(NULL)))
die("dwm: cannot open display");
checkotherwm();
+ XrmInitialize();
+ load_xresources();
setup(); setup();
scan(); #ifdef __OpenBSD__
run(); if (pledge("stdio rpath proc exec", NULL) == -1)
+ if(restart) execvp(argv[0], argv);
cleanup();
XCloseDisplay(dpy);
return EXIT_SUCCESS;

BIN
dwm.o

Binary file not shown.