commit 3d8301c6294cf400fd85b754afa0419b171f2f29
Author: Vadim Zyamalov <[email protected]>
Date:   Thu Apr 15 10:34:02 2021 +0300

    I've added an alternative xresources patch.
    
    It's actually a xresources patch for dwm applied for dmenu. It allows using 
arbitrary xresources entries to configure dmenu.

diff --git 
a/tools.suckless.org/dmenu/patches/xresources-alt/dmenu-xresources-alt-5.0.diff 
b/tools.suckless.org/dmenu/patches/xresources-alt/dmenu-xresources-alt-5.0.diff
new file mode 100644
index 00000000..a1d59365
--- /dev/null
+++ 
b/tools.suckless.org/dmenu/patches/xresources-alt/dmenu-xresources-alt-5.0.diff
@@ -0,0 +1,179 @@
+diff -rupN orig/config.def.h patched/config.def.h
+--- orig/config.def.h  2020-09-02 22:37:08.000000000 +0300
++++ patched/config.def.h       2021-04-15 09:50:54.729040042 +0300
+@@ -2,16 +2,22 @@
+ /* Default settings; can be overriden by command line. */
+ 
+ static int topbar = 1;                      /* -b  option; if 0, dmenu 
appears at bottom     */
++
+ /* -fn option overrides fonts[0]; default X11 font or font set */
+-static const char *fonts[] = {
+-      "monospace:size=10"
+-};
+-static const char *prompt      = NULL;      /* -p  option; prompt to the left 
of input field */
++static char font[] = "monospace:size=10";
++static const char *fonts[] = { font };
++
++static char *prompt      = NULL;      /* -p  option; prompt to the left of 
input field */
++
++static char normfgcolor[] = "#bbbbbb";
++static char normbgcolor[] = "#222222";
++static char selfgcolor[]  = "#eeeeee";
++static char selbgcolor[]  = "#005577";
+ static const char *colors[SchemeLast][2] = {
+       /*     fg         bg       */
+-      [SchemeNorm] = { "#bbbbbb", "#222222" },
+-      [SchemeSel] = { "#eeeeee", "#005577" },
+-      [SchemeOut] = { "#000000", "#00ffff" },
++      [SchemeNorm] = { normfgcolor, normbgcolor },
++      [SchemeSel]  = { selfgcolor,  selbgcolor  },
++      [SchemeOut]  = { "#000000",   "#00ffff" },
+ };
+ /* -l option; if nonzero, dmenu uses vertical list with given number of lines 
*/
+ static unsigned int lines      = 0;
+@@ -21,3 +27,14 @@ static unsigned int lines      = 0;
+  * for example: " /?\"&[]"
+  */
+ static const char worddelimiters[] = " ";
++
++/*
++ * Xresources preferences to load at startup
++ */
++ResourcePref resources[] = {
++      { "normfgcolor", STRING, &normfgcolor },
++      { "normbgcolor", STRING, &normbgcolor },
++      { "selfgcolor",  STRING, &selfgcolor },
++      { "selbgcolor",  STRING, &selbgcolor },
++      { "prompt",      STRING, &prompt },
++};
+diff -rupN orig/dmenu.c patched/dmenu.c
+--- orig/dmenu.c       2020-09-02 22:37:08.000000000 +0300
++++ patched/dmenu.c    2021-04-15 12:43:38.000000000 +0300
+@@ -11,6 +11,7 @@
+ #include <X11/Xlib.h>
+ #include <X11/Xatom.h>
+ #include <X11/Xutil.h>
++#include <X11/Xresource.h>
+ #ifdef XINERAMA
+ #include <X11/extensions/Xinerama.h>
+ #endif
+@@ -53,6 +54,21 @@ static XIC xic;
+ static Drw *drw;
+ static Clr *scheme[SchemeLast];
+ 
++/* Xresources preferences */
++enum resource_type {
++      STRING = 0,
++      INTEGER = 1,
++      FLOAT = 2
++};
++typedef struct {
++      char *name;
++      enum resource_type type;
++      void *dst;
++} ResourcePref;
++
++static void load_xresources(void);
++static void resource_load(XrmDatabase db, char *name, enum resource_type 
rtype, void *dst);
++
+ #include "config.h"
+ 
+ static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
+@@ -395,7 +411,7 @@ keypress(XKeyEvent *ev)
+ 
+       switch(ksym) {
+       default:
+-insert:
++      insert:
+               if (!iscntrl(*buf))
+                       insert(buf, len);
+               break;
+@@ -547,6 +563,54 @@ readstdin(void)
+       lines = MIN(lines, i);
+ }
+ 
++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] = '++    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);
++}
++
+ static void
+ run(void)
+ {
+@@ -700,6 +764,9 @@ main(int argc, char *argv[])
+       XWindowAttributes wa;
+       int i, fast = 0;
+ 
++      XrmInitialize();
++      load_xresources();
++      
+       for (i = 1; i < argc; i++)
+               /* these options take no arguments */
+               if (!strcmp(argv[i], "-v")) {      /* prints version 
information */
+diff -rupN orig/drw.c patched/drw.c
+--- orig/drw.c 2020-09-02 22:37:08.000000000 +0300
++++ patched/drw.c      2021-04-15 11:00:18.000000000 +0300
+@@ -208,7 +208,7 @@ drw_clr_create(Drw *drw, Clr *dest, cons
+ /* Wrapper to create color schemes. The caller has to call free(3) on the
+  * returned color scheme when done using it. */
+ 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;
+       Clr *ret;
+diff -rupN orig/drw.h patched/drw.h
+--- orig/drw.h 2020-09-02 22:37:08.000000000 +0300
++++ patched/drw.h      2021-04-15 11:01:06.000000000 +0300
+@@ -39,7 +39,7 @@ void drw_font_getexts(Fnt *font, const c
+ 
+ /* 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);
diff --git a/tools.suckless.org/dmenu/patches/xresources-alt/index.md 
b/tools.suckless.org/dmenu/patches/xresources-alt/index.md
new file mode 100644
index 00000000..1ea3065b
--- /dev/null
+++ b/tools.suckless.org/dmenu/patches/xresources-alt/index.md
@@ -0,0 +1,20 @@
+xresources
+==========
+
+Description
+-----------
+This patch is actually a xresources patch for dwm, applied to dmenu.
+
+The patch add the ability to configure dmenu via Xresources by using arbitrary
+resources, not specific ones.
+
+All thanks should go to the authors of xresources patch for dwm, xresources 
and 
+xrdb patches for st.
+
+Download
+--------
+* [dmenu-xresources-alt-5.0.diff](dmenu-xresources-alt-5.0.diff)
+
+Authors
+-------
+* Vadim Zyamalov


Reply via email to