From d9bfcb067a1e38901f91810eb8eee9f000fb76c4 Mon Sep 17 00:00:00 2001 From: speedie Date: Tue, 14 Mar 2023 11:42:56 +0100 Subject: [PATCH] fix segmentation fault when specifying a font in xrdb --- docs/example.Xresources | 46 ++++++++++++++++++++++++++++++++--------- libs/argv.c | 8 +++---- libs/xresources.h | 1 - options.h | 2 +- spmenu.c | 4 +++- 5 files changed, 43 insertions(+), 18 deletions(-) diff --git a/docs/example.Xresources b/docs/example.Xresources index b499167..476d015 100644 --- a/docs/example.Xresources +++ b/docs/example.Xresources @@ -1,6 +1,12 @@ -! spmenu default configuration in .Xresources format +! spmenu 0.2.2 default configuration +! +! You may copy this configuration file to ~/.config/spmenu/spmenurc OR ~/.spmenurc, it will be loaded on runtime. +! It is .Xresources syntax. As such you may also append it to your existing .Xresources configuration, use programs like Pywal to have universal colorschemes. +!! Fonts spmenu.font: Noto Sans Mono 8 + +!! Colors spmenu.col_itemnormfg: #bbbbbb spmenu.col_itemnormbg: #222222 spmenu.col_itemselfg: #eeeeee @@ -44,35 +50,50 @@ spmenu.col_sgrcolor12: #0000ff spmenu.col_sgrcolor13: #ff00ff spmenu.col_sgrcolor14: #00ffff spmenu.col_sgrcolor15: #ffffff + +!! Misc color spmenu.alpha: 1 + +!! Width spmenu.accuratewidth: 1 spmenu.borderwidth: 0 + +!! Lines and columns spmenu.lineheight: 5 spmenu.lines: 0 spmenu.columns: 10 +spmenu.preselected: 0 +spmenu.indentitems: 1 + +!! History spmenu.maxhist: 64 spmenu.histnodup: 1 + +!! Input +spmenu.type: 1 spmenu.casesensitive: 0 + +!! Menu spmenu.menuposition: 1 spmenu.menupaddingv: 0 spmenu.menupaddingh: 0 -spmenu.preselected: 0 -spmenu.type: 1 + +!! General spmenu.class: spmenu +spmenu.fast: 0 spmenu.mon: -1 -spmenu.managed: 0 -spmenu.loadconfig: 0 -spmenu.leftarrow: < -spmenu.rightarrow: > -spmenu.password: . + +!! Image spmenu.imagewidth: 86 spmenu.imageheight: 86 spmenu.imagegaps: 0 spmenu.imageposition: 0 spmenu.generatecache: 1 + +!! Mode options spmenu.mode: 0 -spmenu.fast: 0 -spmenu.indentitems: 1 + +!! Hide options spmenu.hidematchcount: 0 spmenu.hidemode: 0 spmenu.hidelarrow: 0 @@ -81,8 +102,13 @@ spmenu.hideprompt: 0 spmenu.hidecursor: 0 spmenu.hidehighlight: 0 spmenu.hideimage: 0 + +!! Text spmenu.normtext: Normal spmenu.instext: Insert +spmenu.password: . + +!! Pango markup toggles spmenu.pango_item: 1 spmenu.pango_prompt: 1 spmenu.pango_input: 1 diff --git a/libs/argv.c b/libs/argv.c index a289755..84c27c7 100644 --- a/libs/argv.c +++ b/libs/argv.c @@ -3,8 +3,6 @@ readargs(int argc, char *argv[]) { int i = 0; - XrmInitialize(); - for (i = 1; i < argc; i++) { /* xrdb first as it overrides other options */ if (!strcmp(argv[i], "-xrdb")) /* xresources */ @@ -18,9 +16,9 @@ readargs(int argc, char *argv[]) } if (xresources) { - if (loadconfig) { - load_xresources(); + XrmInitialize(); + if (loadconfig) { int cxrdb = system("[ -e $HOME/.config/spmenu/spmenurc ] && xrdb -override $HOME/.config/spmenu/spmenurc"); int hxrdb = system("[ -e $HOME/.spmenurc ] && xrdb -override $HOME/.spmenurc"); } @@ -182,7 +180,7 @@ readargs(int argc, char *argv[]) else if (!strcmp(argv[i], "-p")) /* adds prompt to left of input field */ prompt = argv[++i]; else if (!strcmp(argv[i], "-fn")) /* font or font set */ - font[0] = argv[++i]; + fonts[0] = argv[++i]; else if (!strcmp(argv[i], "-nmt")) /* normal mode text */ strcpy(normtext, argv[++i]); else if (!strcmp(argv[i], "-imt")) { /* insert mode text */ diff --git a/libs/xresources.h b/libs/xresources.h index 734bf23..dcf21cb 100644 --- a/libs/xresources.h +++ b/libs/xresources.h @@ -134,7 +134,6 @@ ResourcePref resources[] = { { "generatecache", INTEGER, &generatecache }, { "mode", INTEGER, &mode }, { "fast", INTEGER, &fast }, - { "loadconfig", INTEGER, &loadconfig }, { "managed", INTEGER, &managed }, { "mon", INTEGER, &mon }, { "pango_item", INTEGER, &pango_item }, diff --git a/options.h b/options.h index a82383d..3ce7000 100644 --- a/options.h +++ b/options.h @@ -35,7 +35,7 @@ static char instext[] = "Insert"; /* Text to display for insert static int borderwidth = 2; /* Width of the border */ /* Font options */ -static char *font[] = { "Noto Sans Mono 8" }; /* Font to draw text and Pango markup with. */ +static char font[] = "Noto Sans Mono 8"; /* Font to draw text and Pango markup with. */ /* Symbol options */ static char *leftarrow = "<"; /* Left arrow, used to indicate you can move to the left */ diff --git a/spmenu.c b/spmenu.c index 9a5e911..1a18135 100644 --- a/spmenu.c +++ b/spmenu.c @@ -215,6 +215,8 @@ static int max_textw(void); #include "libs/xresources.h" #include "libs/colors.h" +static char *fonts[] = { font }; + static char * cistrstr(const char *s, const char *sub); static int (*fstrncmp)(const char *, const char *, size_t) = strncasecmp; static char *(*fstrstr)(const char *, const char *) = cistrstr; @@ -841,7 +843,7 @@ main(int argc, char *argv[]) xinitvisual(); drw = drw_create(dpy, screen, root, wa.width, wa.height, visual, depth, cmap); - if (!drw_font_create(drw, font, LENGTH(font))) + if (!drw_font_create(drw, fonts, LENGTH(fonts))) die("no fonts could be loaded."); lrpad = drw->font->h;