diff options
author | Sam Chudnick <sam@chudnick.com> | 2023-02-25 22:21:00 -0500 |
---|---|---|
committer | Sam Chudnick <sam@chudnick.com> | 2023-02-25 22:21:00 -0500 |
commit | 31b687a813c5164dcb2cb63805485ccef8974a68 (patch) | |
tree | 7024bf1199d6780288fa0b592ada5fab129de25b | |
parent | fff3a11874a0ea6c7e89ab5807a4e2673706c2c2 (diff) |
Apply xresources patch
-rwxr-xr-x | dmenu | bin | 44616 -> 0 bytes | |||
-rw-r--r-- | dmenu.c | 75 | ||||
-rwxr-xr-x | stest | bin | 17680 -> 0 bytes |
3 files changed, 67 insertions, 8 deletions
Binary files differ | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <X11/extensions/Xinerama.h> | 17 | #include <X11/extensions/Xinerama.h> |
18 | #endif | 18 | #endif |
19 | #include <X11/Xft/Xft.h> | 19 | #include <X11/Xft/Xft.h> |
20 | #include <X11/Xresource.h> | ||
20 | 21 | ||
21 | #include "drw.h" | 22 | #include "drw.h" |
22 | #include "util.h" | 23 | #include "util.h" |
@@ -62,6 +63,9 @@ static int useargb = 0; | |||
62 | static Visual *visual; | 63 | static Visual *visual; |
63 | static int depth; | 64 | static int depth; |
64 | static Colormap cmap; | 65 | static Colormap cmap; |
66 | /* Temporary arrays to allow overriding xresources values */ | ||
67 | static char *colortemp[4]; | ||
68 | static char *tempfonts; | ||
65 | 69 | ||
66 | #include "config.h" | 70 | #include "config.h" |
67 | 71 | ||
@@ -782,8 +786,13 @@ setup(void) | |||
782 | int a, di, n, area = 0; | 786 | int a, di, n, area = 0; |
783 | #endif | 787 | #endif |
784 | /* init appearance */ | 788 | /* init appearance */ |
785 | for (j = 0; j < SchemeLast; j++) | 789 | for (j = 0; j < SchemeLast; j++) { |
786 | scheme[j] = drw_scm_create(drw, colors[j], alphas[i], 2); | 790 | scheme[j] = drw_scm_create(drw, (const char**)colors[j], alphas[i], 2); |
791 | } | ||
792 | for (j = 0; j < SchemeOut; ++j) { | ||
793 | for (i = 0; i < 2; ++i) | ||
794 | free(colors[j][i]); | ||
795 | } | ||
787 | 796 | ||
788 | clip = XInternAtom(dpy, "CLIPBOARD", False); | 797 | clip = XInternAtom(dpy, "CLIPBOARD", False); |
789 | utf8 = XInternAtom(dpy, "UTF8_STRING", False); | 798 | utf8 = XInternAtom(dpy, "UTF8_STRING", False); |
@@ -877,6 +886,41 @@ usage(void) | |||
877 | " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]"); | 886 | " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]"); |
878 | } | 887 | } |
879 | 888 | ||
889 | void | ||
890 | readxresources(void) { | ||
891 | XrmInitialize(); | ||
892 | |||
893 | char* xrm; | ||
894 | if ((xrm = XResourceManagerString(drw->dpy))) { | ||
895 | char *type; | ||
896 | XrmDatabase xdb = XrmGetStringDatabase(xrm); | ||
897 | XrmValue xval; | ||
898 | |||
899 | if (XrmGetResource(xdb, "dmenu.font", "*", &type, &xval)) | ||
900 | fonts[0] = strdup(xval.addr); | ||
901 | else | ||
902 | fonts[0] = strdup(fonts[0]); | ||
903 | if (XrmGetResource(xdb, "dmenu.background", "*", &type, &xval)) | ||
904 | colors[SchemeNorm][ColBg] = strdup(xval.addr); | ||
905 | else | ||
906 | colors[SchemeNorm][ColBg] = strdup(colors[SchemeNorm][ColBg]); | ||
907 | if (XrmGetResource(xdb, "dmenu.foreground", "*", &type, &xval)) | ||
908 | colors[SchemeNorm][ColFg] = strdup(xval.addr); | ||
909 | else | ||
910 | colors[SchemeNorm][ColFg] = strdup(colors[SchemeNorm][ColFg]); | ||
911 | if (XrmGetResource(xdb, "dmenu.selbackground", "*", &type, &xval)) | ||
912 | colors[SchemeSel][ColBg] = strdup(xval.addr); | ||
913 | else | ||
914 | colors[SchemeSel][ColBg] = strdup(colors[SchemeSel][ColBg]); | ||
915 | if (XrmGetResource(xdb, "dmenu.selforeground", "*", &type, &xval)) | ||
916 | colors[SchemeSel][ColFg] = strdup(xval.addr); | ||
917 | else | ||
918 | colors[SchemeSel][ColFg] = strdup(colors[SchemeSel][ColFg]); | ||
919 | |||
920 | XrmDestroyDatabase(xdb); | ||
921 | } | ||
922 | } | ||
923 | |||
880 | int | 924 | int |
881 | main(int argc, char *argv[]) | 925 | main(int argc, char *argv[]) |
882 | { | 926 | { |
@@ -911,15 +955,15 @@ main(int argc, char *argv[]) | |||
911 | else if (!strcmp(argv[i], "-p")) /* adds prompt to left of input field */ | 955 | else if (!strcmp(argv[i], "-p")) /* adds prompt to left of input field */ |
912 | prompt = argv[++i]; | 956 | prompt = argv[++i]; |
913 | else if (!strcmp(argv[i], "-fn")) /* font or font set */ | 957 | else if (!strcmp(argv[i], "-fn")) /* font or font set */ |
914 | fonts[0] = argv[++i]; | 958 | tempfonts = argv[++i]; |
915 | else if (!strcmp(argv[i], "-nb")) /* normal background color */ | 959 | else if (!strcmp(argv[i], "-nb")) /* normal background color */ |
916 | colors[SchemeNorm][ColBg] = argv[++i]; | 960 | colortemp[0] = argv[++i]; |
917 | else if (!strcmp(argv[i], "-nf")) /* normal foreground color */ | 961 | else if (!strcmp(argv[i], "-nf")) /* normal foreground color */ |
918 | colors[SchemeNorm][ColFg] = argv[++i]; | 962 | colortemp[1] = argv[++i]; |
919 | else if (!strcmp(argv[i], "-sb")) /* selected background color */ | 963 | else if (!strcmp(argv[i], "-sb")) /* selected background color */ |
920 | colors[SchemeSel][ColBg] = argv[++i]; | 964 | colortemp[2] = argv[++i]; |
921 | else if (!strcmp(argv[i], "-sf")) /* selected foreground color */ | 965 | else if (!strcmp(argv[i], "-sf")) /* selected foreground color */ |
922 | colors[SchemeSel][ColFg] = argv[++i]; | 966 | colortemp[3] = argv[++i]; |
923 | else if (!strcmp(argv[i], "-w")) /* embedding window id */ | 967 | else if (!strcmp(argv[i], "-w")) /* embedding window id */ |
924 | embed = argv[++i]; | 968 | embed = argv[++i]; |
925 | else | 969 | else |
@@ -938,8 +982,23 @@ main(int argc, char *argv[]) | |||
938 | parentwin); | 982 | parentwin); |
939 | xinitvisual(); | 983 | xinitvisual(); |
940 | drw = drw_create(dpy, screen, root, wa.width, wa.height, visual, depth, cmap); | 984 | drw = drw_create(dpy, screen, root, wa.width, wa.height, visual, depth, cmap); |
941 | if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) | 985 | readxresources(); |
986 | /* Now we check whether to override xresources with commandline parameters */ | ||
987 | if ( tempfonts ) | ||
988 | fonts[0] = strdup(tempfonts); | ||
989 | if ( colortemp[0]) | ||
990 | colors[SchemeNorm][ColBg] = strdup(colortemp[0]); | ||
991 | if ( colortemp[1]) | ||
992 | colors[SchemeNorm][ColFg] = strdup(colortemp[1]); | ||
993 | if ( colortemp[2]) | ||
994 | colors[SchemeSel][ColBg] = strdup(colortemp[2]); | ||
995 | if ( colortemp[3]) | ||
996 | colors[SchemeSel][ColFg] = strdup(colortemp[3]); | ||
997 | |||
998 | if (!drw_fontset_create(drw, (const char**)fonts, LENGTH(fonts))) | ||
942 | die("no fonts could be loaded."); | 999 | die("no fonts could be loaded."); |
1000 | |||
1001 | free(fonts[0]); | ||
943 | lrpad = drw->fonts->h; | 1002 | lrpad = drw->fonts->h; |
944 | 1003 | ||
945 | #ifdef __OpenBSD__ | 1004 | #ifdef __OpenBSD__ |
Binary files differ | |||