dmenu-xresources-alt-5.0.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dmenu-xresources-alt-5.0.diff (5277B)
       ---
            1 diff -rupN orig/config.def.h patched/config.def.h
            2 --- orig/config.def.h        2021-04-16 06:30:47.713924755 +0300
            3 +++ patched/config.def.h        2021-04-16 06:34:14.956933252 +0300
            4 @@ -2,16 +2,25 @@
            5  /* Default settings; can be overriden by command line. */
            6  
            7  static int topbar = 1;                      /* -b  option; if 0, dmenu appears at bottom     */
            8 +
            9  /* -fn option overrides fonts[0]; default X11 font or font set */
           10 +static char font[] = "monospace:size=10";
           11  static const char *fonts[] = {
           12 -        "monospace:size=10"
           13 +        font,
           14 +        "monospace:size=10",
           15  };
           16 -static const char *prompt      = NULL;      /* -p  option; prompt to the left of input field */
           17 -static const char *colors[SchemeLast][2] = {
           18 +
           19 +static char *prompt      = NULL;      /* -p  option; prompt to the left of input field */
           20 +
           21 +static char normfgcolor[] = "#bbbbbb";
           22 +static char normbgcolor[] = "#222222";
           23 +static char selfgcolor[]  = "#eeeeee";
           24 +static char selbgcolor[]  = "#005577";
           25 +static char *colors[SchemeLast][2] = {
           26          /*     fg         bg       */
           27 -        [SchemeNorm] = { "#bbbbbb", "#222222" },
           28 -        [SchemeSel] = { "#eeeeee", "#005577" },
           29 -        [SchemeOut] = { "#000000", "#00ffff" },
           30 +        [SchemeNorm] = { normfgcolor, normbgcolor },
           31 +        [SchemeSel]  = { selfgcolor,  selbgcolor  },
           32 +        [SchemeOut]  = { "#000000",   "#00ffff" },
           33  };
           34  /* -l option; if nonzero, dmenu uses vertical list with given number of lines */
           35  static unsigned int lines      = 0;
           36 @@ -21,3 +30,15 @@ static unsigned int lines      = 0;
           37   * for example: " /?\"&[]"
           38   */
           39  static const char worddelimiters[] = " ";
           40 +
           41 +/*
           42 + * Xresources preferences to load at startup
           43 + */
           44 +ResourcePref resources[] = {
           45 +        { "font",        STRING, &font },
           46 +        { "normfgcolor", STRING, &normfgcolor },
           47 +        { "normbgcolor", STRING, &normbgcolor },
           48 +        { "selfgcolor",  STRING, &selfgcolor },
           49 +        { "selbgcolor",  STRING, &selbgcolor },
           50 +        { "prompt",      STRING, &prompt },
           51 +};
           52 diff -rupN orig/dmenu.c patched/dmenu.c
           53 --- orig/dmenu.c        2021-04-16 06:30:47.715924755 +0300
           54 +++ patched/dmenu.c        2021-04-16 06:30:59.668925245 +0300
           55 @@ -11,6 +11,7 @@
           56  #include <X11/Xlib.h>
           57  #include <X11/Xatom.h>
           58  #include <X11/Xutil.h>
           59 +#include <X11/Xresource.h>
           60  #ifdef XINERAMA
           61  #include <X11/extensions/Xinerama.h>
           62  #endif
           63 @@ -53,6 +54,21 @@ static XIC xic;
           64  static Drw *drw;
           65  static Clr *scheme[SchemeLast];
           66  
           67 +/* Xresources preferences */
           68 +enum resource_type {
           69 +        STRING = 0,
           70 +        INTEGER = 1,
           71 +        FLOAT = 2
           72 +};
           73 +typedef struct {
           74 +        char *name;
           75 +        enum resource_type type;
           76 +        void *dst;
           77 +} ResourcePref;
           78 +
           79 +static void load_xresources(void);
           80 +static void resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst);
           81 +
           82  #include "config.h"
           83  
           84  static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
           85 @@ -395,7 +411,7 @@ keypress(XKeyEvent *ev)
           86  
           87          switch(ksym) {
           88          default:
           89 -insert:
           90 +        insert:
           91                  if (!iscntrl(*buf))
           92                          insert(buf, len);
           93                  break;
           94 @@ -547,6 +563,54 @@ readstdin(void)
           95          lines = MIN(lines, i);
           96  }
           97  
           98 +void
           99 +resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
          100 +{
          101 +        char *sdst = NULL;
          102 +        int *idst = NULL;
          103 +        float *fdst = NULL;
          104 +        sdst = dst;
          105 +        idst = dst;
          106 +        fdst = dst;
          107 +        char fullname[256];
          108 +        char *type;
          109 +        XrmValue ret;
          110 +        snprintf(fullname, sizeof(fullname), "%s.%s", "dmenu", name);
          111 +        fullname[sizeof(fullname) - 1] = '\0';
          112 +        XrmGetResource(db, fullname, "*", &type, &ret);
          113 +        if (!(ret.addr == NULL || strncmp("String", type, 64)))
          114 +        {
          115 +                switch (rtype) {
          116 +                case STRING:
          117 +                        strcpy(sdst, ret.addr);
          118 +                        break;
          119 +                case INTEGER:
          120 +                        *idst = strtoul(ret.addr, NULL, 10);
          121 +                        break;
          122 +                case FLOAT:
          123 +                        *fdst = strtof(ret.addr, NULL);
          124 +                        break;
          125 +                }
          126 +        }
          127 +}
          128 +
          129 +void
          130 +load_xresources(void)
          131 +{
          132 +        Display *display;
          133 +        char *resm;
          134 +        XrmDatabase db;
          135 +        ResourcePref *p;
          136 +        display = XOpenDisplay(NULL);
          137 +        resm = XResourceManagerString(display);
          138 +        if (!resm)
          139 +                return;
          140 +        db = XrmGetStringDatabase(resm);
          141 +        for (p = resources; p < resources + LENGTH(resources); p++)
          142 +                resource_load(db, p->name, p->type, p->dst);
          143 +        XCloseDisplay(display);
          144 +}
          145 +
          146  static void
          147  run(void)
          148  {
          149 @@ -700,6 +764,9 @@ main(int argc, char *argv[])
          150          XWindowAttributes wa;
          151          int i, fast = 0;
          152  
          153 +        XrmInitialize();
          154 +        load_xresources();
          155 +        
          156          for (i = 1; i < argc; i++)
          157                  /* these options take no arguments */
          158                  if (!strcmp(argv[i], "-v")) {      /* prints version information */
          159 diff -rupN orig/drw.c patched/drw.c
          160 --- orig/drw.c        2021-04-16 06:30:47.718924755 +0300
          161 +++ patched/drw.c        2021-04-16 06:30:59.670925245 +0300
          162 @@ -208,7 +208,7 @@ drw_clr_create(Drw *drw, Clr *dest, cons
          163  /* Wrapper to create color schemes. The caller has to call free(3) on the
          164   * returned color scheme when done using it. */
          165  Clr *
          166 -drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
          167 +drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount)
          168  {
          169          size_t i;
          170          Clr *ret;
          171 diff -rupN orig/drw.h patched/drw.h
          172 --- orig/drw.h        2021-04-16 06:30:47.718924755 +0300
          173 +++ patched/drw.h        2021-04-16 06:30:59.671925245 +0300
          174 @@ -39,7 +39,7 @@ void drw_font_getexts(Fnt *font, const c
          175  
          176  /* Colorscheme abstraction */
          177  void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
          178 -Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
          179 +Clr *drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount);
          180  
          181  /* Cursor abstraction */
          182  Cur *drw_cur_create(Drw *drw, int shape);