sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

dwm-xrdb-6.1.diff (5594B)


      1 diff --git a/config.def.h b/config.def.h
      2 index 7054c06..436e16f 100644
      3 --- a/config.def.h
      4 +++ b/config.def.h
      5 @@ -5,12 +5,12 @@ static const char *fonts[] = {
      6  	"monospace:size=10"
      7  };
      8  static const char dmenufont[]       = "monospace:size=10";
      9 -static const char normbordercolor[] = "#444444";
     10 -static const char normbgcolor[]     = "#222222";
     11 -static const char normfgcolor[]     = "#bbbbbb";
     12 -static const char selbordercolor[]  = "#005577";
     13 -static const char selbgcolor[]      = "#005577";
     14 -static const char selfgcolor[]      = "#eeeeee";
     15 +static char normbordercolor[] = "#444444";
     16 +static char normbgcolor[]     = "#222222";
     17 +static char normfgcolor[]     = "#bbbbbb";
     18 +static char selbordercolor[]  = "#005577";
     19 +static char selbgcolor[]      = "#005577";
     20 +static char selfgcolor[]      = "#eeeeee";
     21  static const unsigned int borderpx  = 1;        /* border pixel of windows */
     22  static const unsigned int snap      = 32;       /* snap pixel */
     23  static const int showbar            = 1;        /* 0 means no bar */
     24 @@ -82,6 +82,7 @@ static Key keys[] = {
     25  	{ MODKEY,                       XK_period, focusmon,       {.i = +1 } },
     26  	{ MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
     27  	{ MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
     28 +	{ MODKEY,                       XK_F5,     xrdb,           {.v = NULL } },
     29  	TAGKEYS(                        XK_1,                      0)
     30  	TAGKEYS(                        XK_2,                      1)
     31  	TAGKEYS(                        XK_3,                      2)
     32 @@ -110,4 +111,3 @@ static Button buttons[] = {
     33  	{ ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
     34  	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
     35  };
     36 -
     37 diff --git a/dwm.c b/dwm.c
     38 index 0362114..bb1238c 100644
     39 --- a/dwm.c
     40 +++ b/dwm.c
     41 @@ -35,6 +35,7 @@
     42  #include <X11/Xatom.h>
     43  #include <X11/Xlib.h>
     44  #include <X11/Xproto.h>
     45 +#include <X11/Xresource.h>
     46  #include <X11/Xutil.h>
     47  #ifdef XINERAMA
     48  #include <X11/extensions/Xinerama.h>
     49 @@ -56,6 +57,21 @@
     50  #define HEIGHT(X)               ((X)->h + 2 * (X)->bw)
     51  #define TAGMASK                 ((1 << LENGTH(tags)) - 1)
     52  #define TEXTW(X)                (drw_text(drw, 0, 0, 0, 0, (X), 0) + drw->fonts[0]->h)
     53 +#define XRDB_LOAD_COLOR(R,V)    if (XrmGetResource(xrdb, R, NULL, &type, &value) == True) { \
     54 +                                  if (value.addr != NULL && strnlen(value.addr, 8) == 7 && value.addr[0] == '#') { \
     55 +                                    int i = 1; \
     56 +                                    for (; i <= 6; i++) { \
     57 +                                      if (value.addr[i] < 48) break; \
     58 +                                      if (value.addr[i] > 57 && value.addr[i] < 65) break; \
     59 +                                      if (value.addr[i] > 70 && value.addr[i] < 97) break; \
     60 +                                      if (value.addr[i] > 102) break; \
     61 +                                    } \
     62 +                                    if (i == 7) { \
     63 +                                      strncpy(V, value.addr, 7); \
     64 +                                      V[7] = '\0'; \
     65 +                                    } \
     66 +                                  } \
     67 +                                }
     68  
     69  /* enums */
     70  enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
     71 @@ -178,6 +194,7 @@ static void grabkeys(void);
     72  static void incnmaster(const Arg *arg);
     73  static void keypress(XEvent *e);
     74  static void killclient(const Arg *arg);
     75 +static void loadxrdb(void);
     76  static void manage(Window w, XWindowAttributes *wa);
     77  static void mappingnotify(XEvent *e);
     78  static void maprequest(XEvent *e);
     79 @@ -232,6 +249,7 @@ static Monitor *wintomon(Window w);
     80  static int xerror(Display *dpy, XErrorEvent *ee);
     81  static int xerrordummy(Display *dpy, XErrorEvent *ee);
     82  static int xerrorstart(Display *dpy, XErrorEvent *ee);
     83 +static void xrdb(const Arg *arg);
     84  static void zoom(const Arg *arg);
     85  
     86  /* variables */
     87 @@ -1029,6 +1047,37 @@ killclient(const Arg *arg)
     88  	}
     89  }
     90  
     91 +void
     92 +loadxrdb()
     93 +{
     94 +  Display *display;
     95 +  char *resm;
     96 +  XrmDatabase xrdb;
     97 +  char *type;
     98 +  XrmValue value;
     99 +
    100 +  display = XOpenDisplay(NULL);
    101 +
    102 +  if (display != NULL) {
    103 +    resm = XResourceManagerString(display);
    104 +
    105 +    if (resm != NULL) {
    106 +      xrdb = XrmGetStringDatabase(resm);
    107 +
    108 +      if (xrdb != NULL) {
    109 +        XRDB_LOAD_COLOR("dwm.normbordercolor", normbordercolor);
    110 +        XRDB_LOAD_COLOR("dwm.normbgcolor", normbgcolor);
    111 +        XRDB_LOAD_COLOR("dwm.normfgcolor", normfgcolor);
    112 +        XRDB_LOAD_COLOR("dwm.selbordercolor", selbordercolor);
    113 +        XRDB_LOAD_COLOR("dwm.selbgcolor", selbgcolor);
    114 +        XRDB_LOAD_COLOR("dwm.selfgcolor", selfgcolor);
    115 +      }
    116 +    }
    117 +  }
    118 +
    119 +  XCloseDisplay(display);
    120 +}
    121 +
    122  void
    123  manage(Window w, XWindowAttributes *wa)
    124  {
    125 @@ -2106,6 +2155,22 @@ xerrorstart(Display *dpy, XErrorEvent *ee)
    126  	return -1;
    127  }
    128  
    129 +void
    130 +xrdb(const Arg *arg)
    131 +{
    132 +  loadxrdb();
    133 +
    134 +  scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
    135 +  scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
    136 +  scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
    137 +  scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
    138 +  scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
    139 +  scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
    140 +
    141 +  focus(NULL);
    142 +  arrange(NULL);
    143 +}
    144 +
    145  void
    146  zoom(const Arg *arg)
    147  {
    148 @@ -2132,6 +2197,8 @@ main(int argc, char *argv[])
    149  	if (!(dpy = XOpenDisplay(NULL)))
    150  		die("dwm: cannot open display\n");
    151  	checkotherwm();
    152 +	XrmInitialize();
    153 +	loadxrdb();
    154  	setup();
    155  	scan();
    156  	run();