From 95b420944cf89272ae4ecaffb1cfcbfdc951dda5 Mon Sep 17 00:00:00 2001
From: speedie
Date: Mon, 22 May 2023 22:47:37 +0200
Subject: [PATCH] add a bind file which scripts can use to gain full control
over keybinds
---
docs/docs.md | 23 +-
docs/run-docs.md | 3 +
docs/spmenu.conf | 3 +-
libs/argv.c | 41 +-
libs/conf/config.c | 1252 +++++++++++++++++++++++++-------------------
libs/theme/theme.c | 2 +-
options.h | 3 +-
scripts/spmenu_run | 8 +-
spmenu.1 | 30 +-
spmenu.c | 3 +-
spmenu.html | 32 +-
spmenu_run.1 | 6 +
12 files changed, 819 insertions(+), 587 deletions(-)
diff --git a/docs/docs.md b/docs/docs.md
index 9c99b12..61bfe8f 100644
--- a/docs/docs.md
+++ b/docs/docs.md
@@ -288,7 +288,6 @@ You may use long, descriptive arguments or the shorter arguments.
`-lf, --list-file list file`
: Specify a file to load entries from
-
`-ig, --image-gaps gaps`
: Set image gaps to gaps
@@ -338,19 +337,28 @@ You may use long, descriptive arguments or the shorter arguments.
: Set config file to load to file
`-lcfg, --load-config`
-: Load spmenu configuration (~/.spmenu.conf or ~/.config/spmenu/spmenu.conf)
+: Load spmenu configuration (~/.config/spmenu/spmenu.conf) on runtime
`-ncfg, --no-load-config`
-: Don't load spmenu configuration (~/.spmenu.conf or ~/.config/spmenu/spmenu.conf)
+: Don't load spmenu configuration (~/.config/spmenu/spmenu.conf) on runtime
+
+`-bf, --bind-file file`
+: Set bind file to load to file
+
+`-lbi, --load-binds`
+: Exclusively load binds from file (~/.config/spmenu/binds.conf) on runtime
+
+`-nlbi, --no-load-binds`
+: Don't exclusively load binds from file (~/.config/spmenu/binds.conf) on runtime
`-tm, --theme theme`
-: Load theme 'theme' on runtime.
+: Load theme 'theme' on runtime
`-ltm, --load-theme`
-: Load theme
+: Load theme (~/.config/spmenu/theme.conf) on runtime
`-nltm, --no-load-theme`
-: Don't load theme
+: Don't load theme (~/.config/spmenu/theme.conf) on runtime
`-v, --version`
: Print spmenu version to stdout
@@ -831,3 +839,6 @@ email me.
## See also
- spmenu_run(1)
+- [spmenu wiki](https://spmenu.speedie.site)
+- [spmenu git repository](https://git.speedie.site/spmenu)
+- [spmenu GitHub mirror](https://github.com/speediegq/spmenu)
diff --git a/docs/run-docs.md b/docs/run-docs.md
index 521d16a..12e5c35 100644
--- a/docs/run-docs.md
+++ b/docs/run-docs.md
@@ -155,3 +155,6 @@ email me.
## See also
- spmenu(1)
+- [spmenu wiki](https://spmenu.speedie.site)
+- [spmenu git repository](https://git.speedie.site/spmenu)
+- [spmenu GitHub mirror](https://github.com/speediegq/spmenu)
diff --git a/docs/spmenu.conf b/docs/spmenu.conf
index 5fe5509..771ffcd 100644
--- a/docs/spmenu.conf
+++ b/docs/spmenu.conf
@@ -201,7 +201,8 @@ spmenu = {
/* File options */
file = ( { xresources = 1; // Load .Xresources on startup (0/1)
global = 1; // Read global .Xresources colors, programs like Pywal use this. (*.color0, *.color1, etc.) (0/1)
- theme = 1; // Load theme (~/.theme.conf or ~/.config/spmenu/theme.conf) on runtime
+ theme = 1; // Load theme (~/.config/spmenu/theme.conf) on runtime
+ binds = 1; // Load binds (~/.config/spmenu/binds.conf) on runtime
} );
/* Input options */
diff --git a/libs/argv.c b/libs/argv.c
index bc23101..8de5987 100644
--- a/libs/argv.c
+++ b/libs/argv.c
@@ -15,20 +15,28 @@ void readargs(int argc, char *argv[]) {
loadtheme = 1;
} else if (!strcmp(argv[j], "-nltm") || (!strcmp(argv[j], "--no-load-theme"))) {
loadtheme = 0;
+ } else if (!strcmp(argv[j], "-lbi") || (!strcmp(argv[j], "--load-binds"))) {
+ loadbinds = 1;
+ } else if (!strcmp(argv[j], "-nlbi") || (!strcmp(argv[j], "--no-load-binds"))) {
+ loadbinds = 0;
#if USECONFIG
} else if (!strcmp(argv[j], "-cf") || (!strcmp(argv[j], "--config-file"))) { // specify a config file
if (argv[j+1]) {
- cconf = 1;
argconf = argv[++j];
} else {
- die("This argument requires a second argument.\n");
+ die("This argument requires a second argument.");
+ }
+ } else if (!strcmp(argv[j], "-bf") || (!strcmp(argv[j], "--bind-file"))) { // specify a bind file
+ if (argv[j+1]) {
+ argbinds = argv[++j];
+ } else {
+ die("This argument requires a second argument.");
}
} else if (!strcmp(argv[j], "-tm") || (!strcmp(argv[j], "--theme"))) { // specify a theme
if (argv[j+1]) {
- ctheme = 1;
argtheme = argv[++j];
} else {
- die("This argument requires a second argument.\n");
+ die("This argument requires a second argument.");
}
#endif
}
@@ -216,6 +224,10 @@ void readargs(int argc, char *argv[]) {
|| !strcmp(argv[i], "-nltm")
|| !strcmp(argv[i], "--load-theme")
|| !strcmp(argv[i], "--no-load-theme")
+ || !strcmp(argv[i], "-lbi")
+ || !strcmp(argv[i], "-nlbi")
+ || !strcmp(argv[i], "--load-binds")
+ || !strcmp(argv[i], "--no-load-binds")
|| !strcmp(argv[i], "-gbc")
|| !strcmp(argv[i], "-ngbc")
|| !strcmp(argv[i], "--global-colors")
@@ -227,6 +239,9 @@ void readargs(int argc, char *argv[]) {
|| !strcmp(argv[i], "-tm")
|| !strcmp(argv[i], "--theme")
|| (argtheme && !strcmp(argv[i], argtheme))
+ || !strcmp(argv[i], "-bf")
+ || !strcmp(argv[i], "--bind-file")
+ || (argbinds && !strcmp(argv[i], argbinds))
#endif
))
continue;
@@ -435,6 +450,10 @@ void readargs(int argc, char *argv[]) {
|| !strcmp(argv[i], "-nltm")
|| !strcmp(argv[i], "--load-theme")
|| !strcmp(argv[i], "--no-load-theme")
+ || !strcmp(argv[i], "-lbi")
+ || !strcmp(argv[i], "-nlbi")
+ || !strcmp(argv[i], "--load-binds")
+ || !strcmp(argv[i], "--no-load-binds")
|| !strcmp(argv[i], "-gbc")
|| !strcmp(argv[i], "-ngbc")
|| !strcmp(argv[i], "--global-colors")
@@ -446,6 +465,9 @@ void readargs(int argc, char *argv[]) {
|| !strcmp(argv[i], "-tm")
|| !strcmp(argv[i], "--theme")
|| (argtheme && !strcmp(argv[i], argtheme))
+ || !strcmp(argv[i], "-bf")
+ || !strcmp(argv[i], "--bind-file")
+ || (argbinds && !strcmp(argv[i], argbinds))
#endif
))
continue;
@@ -528,7 +550,7 @@ void usage(int status) {
"spmenu -t, --top Position spmenu at the top of the screen\n"
"spmenu -b, --bottom Position spmenu at the bottom of the screen\n"
"spmenu -c, --center Position spmenu at the center of the screen\n"
- "\n", status ? stderr : stdout);
+ , status ? stderr : stdout);
// more args
fputs("spmenu -hm, --hide-mode Hide mode indicator\n"
@@ -582,8 +604,11 @@ void usage(int status) {
fputs("spmenu -wm, --managed, --x11-client Spawn spmenu as a window manager controlled client/window. Useful for testing\n"
"spmenu -nwm, --unmanaged Don't spawn spmenu as a window manager controlled client/window. Useful for testing\n"
"spmenu -cf, --config-file Set config file to load to \n"
- "spmenu -lcfg, --load-config Load spmenu configuration (~/.spmenu.conf or ~/.config/spmenu/spmenu.conf)\n"
- "spmenu -ncfg, --no-load-config Don't load spmenu configuration (~/.spmenu.conf or ~/.config/spmenu/spmenu.conf)\n"
+ "spmenu -lcfg, --load-config Load spmenu configuration (~/.config/spmenu/spmenu.conf)\n"
+ "spmenu -ncfg, --no-load-config Don't load spmenu configuration (~/.config/spmenu/spmenu.conf)\n"
+ "spmenu -bf, --bind-file Exclusively load binds from \n"
+ "spmenu -lbi, --load-binds Load spmenu binds (~/.config/spmenu/binds.conf)\n"
+ "spmenu -nlbi, --no-load-binds Don't load spmenu binds (~/.config/spmenu/binds.conf)\n"
"spmenu -tm, --theme Load theme \n"
"spmenu -ltm, --load-theme Load theme\n"
"spmenu -nltm, --no-load-theme Don't load theme\n"
@@ -624,7 +649,7 @@ void usage(int status) {
"spmenu -cfc, --caret-foreground Set the caret foreground color\n"
"spmenu -cbc, --caret-background Set the caret background color\n"
"spmenu -bc, --border-background Set the border color\n"
- "\n", status ? stderr : stdout);
+ , status ? stderr : stdout);
// sgr sequences
fputs("spmenu -sgr0, --sgr0 Set the SGR 0 color\n"
diff --git a/libs/conf/config.c b/libs/conf/config.c
index dbf9cdf..67facf9 100644
--- a/libs/conf/config.c
+++ b/libs/conf/config.c
@@ -5,658 +5,810 @@
void conf_init(void) {
char *xdg_conf;
char *cfgfile = NULL;
+ char *bindfile = NULL;
char *home = NULL;
const char *dest;
// don't load configuration
- if (!loadconfig) return;
+ if (loadconfig) {
+ // get path for configuration file
+ if (!argconf) {
+ if (!(xdg_conf = getenv("XDG_CONFIG_HOME"))) {
+ // ~/.config/spmenu/spmenu.conf
+ home = getenv("HOME");
- // get path for configuration file
- if (!cconf || !argconf) {
- if (!(xdg_conf = getenv("XDG_CONFIG_HOME"))) {
- // ~/.config/spmenu/spmenu.conf
- home = getenv("HOME");
+ // malloc
+ if (!(cfgfile = malloc(snprintf(NULL, 0, "%s/%s", home, ".config/spmenu/spmenu.conf") + 1))) {
+ die("spmenu: failed to malloc cfgfile");
+ }
- // malloc
- if (!(cfgfile = malloc(snprintf(NULL, 0, "%s/%s", home, ".config/spmenu/spmenu.conf") + 1))) {
+ sprintf(cfgfile, "%s/%s", home, ".config/spmenu/spmenu.conf");
+ } else {
+ // malloc
+ if (!(cfgfile = malloc(snprintf(NULL, 0, "%s/%s", xdg_conf, "spmenu/spmenu.conf") + 1))) {
+ die("spmenu: failed to malloc cfgfile");
+ }
+
+ // XDG_CONFIG_HOME is set, so let's use that instead
+ sprintf(cfgfile, "%s/%s", xdg_conf, "spmenu/spmenu.conf");
+ }
+ } else { // custom config path
+ if (!(cfgfile = malloc(snprintf(NULL, 0, "%s", argconf) + 1))) {
die("spmenu: failed to malloc cfgfile");
}
- sprintf(cfgfile, "%s/%s", home, ".config/spmenu/spmenu.conf");
- } else {
- // malloc
- if (!(cfgfile = malloc(snprintf(NULL, 0, "%s/%s", xdg_conf, "spmenu/spmenu.conf") + 1))) {
- die("spmenu: failed to malloc cfgfile");
+ sprintf(cfgfile, "%s", argconf);
+ }
+
+ // don't bother trying to load if it doesn't exist.
+ if (access(cfgfile, F_OK) != 0) {
+ return;
+ }
+
+ // init config
+ config_t cfg;
+
+ config_init(&cfg);
+
+ // attempt to read config file to cfg
+ if (!config_read_file(&cfg, cfgfile)) {
+ // invalid configuration, but let's try to read it anyway
+ fprintf(stderr, "spmenu: Invalid configuration.\n");
+ }
+
+ // load options spmenu.window
+ config_setting_t *window_setting = config_lookup(&cfg, "spmenu.window");
+ if (window_setting != NULL) {
+ // look up window entries
+ for (unsigned int i = 0; i < config_setting_length(window_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(window_setting, i);
+
+ config_setting_lookup_int(conf, "position", &menuposition); // spmenu.window.menuposition
+ config_setting_lookup_int(conf, "paddingv", &menupaddingv); // spmenu.window.paddingv
+ config_setting_lookup_int(conf, "paddingh", &menupaddingh); // spmenu.window.paddingh
+ config_setting_lookup_int(conf, "padding-vertical", &menupaddingv); // spmenu.window.padding-vertical
+ config_setting_lookup_int(conf, "padding-horizontal", &menupaddingh); // spmenu.window.padding-horizontal
+ config_setting_lookup_int(conf, "margin-vertical", &menumarginv); // spmenu.window.margin-vertical
+ config_setting_lookup_int(conf, "margin-horizontal", &menumarginh); // spmenu.window.margin-horizontal
+ config_setting_lookup_int(conf, "x", &xpos); // spmenu.window.x
+ config_setting_lookup_int(conf, "y", &xpos); // spmenu.window.y
+ config_setting_lookup_int(conf, "width", &menuwidth); // spmenu.window.width
+ config_setting_lookup_int(conf, "border", &borderwidth); // spmenu.window.border
+ config_setting_lookup_int(conf, "managed", &managed); // spmenu.window.managed
+ config_setting_lookup_int(conf, "monitor", &mon); // spmenu.window.monitor
+ config_setting_lookup_int(conf, "alpha", &alpha); // spmenu.window.alpha
}
-
- // XDG_CONFIG_HOME is set, so let's use that instead
- sprintf(cfgfile, "%s/%s", xdg_conf, "spmenu/spmenu.conf");
- }
- } else { // custom config path
- if (!(cfgfile = malloc(snprintf(NULL, 0, "%s", argconf) + 1))) {
- die("spmenu: failed to malloc cfgfile");
}
- sprintf(cfgfile, "%s", argconf);
- }
+ // load options spmenu.properties
+ config_setting_t *prop_setting = config_lookup(&cfg, "spmenu.properties");
+ if (prop_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(prop_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(prop_setting, i);
- // don't bother trying to load if it doesn't exist.
- if (access(cfgfile, F_OK) != 0) {
- return;
- }
+ // look up
+ config_setting_lookup_string(conf, "class", &dest); // spmenu.properties.class
+ class = strdup(dest);
- // init config
- config_t cfg;
-
- config_init(&cfg);
-
- // attempt to read config file to cfg
- if (!config_read_file(&cfg, cfgfile)) {
- // invalid configuration, but let's try to read it anyway
- fprintf(stderr, "spmenu: Invalid configuration.\n");
- }
-
- // load options spmenu.window
- config_setting_t *window_setting = config_lookup(&cfg, "spmenu.window");
- if (window_setting != NULL) {
- // look up window entries
- for (unsigned int i = 0; i < config_setting_length(window_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(window_setting, i);
-
- config_setting_lookup_int(conf, "position", &menuposition); // spmenu.window.menuposition
- config_setting_lookup_int(conf, "paddingv", &menupaddingv); // spmenu.window.paddingv
- config_setting_lookup_int(conf, "paddingh", &menupaddingh); // spmenu.window.paddingh
- config_setting_lookup_int(conf, "padding-vertical", &menupaddingv); // spmenu.window.padding-vertical
- config_setting_lookup_int(conf, "padding-horizontal", &menupaddingh); // spmenu.window.padding-horizontal
- config_setting_lookup_int(conf, "margin-vertical", &menumarginv); // spmenu.window.margin-vertical
- config_setting_lookup_int(conf, "margin-horizontal", &menumarginh); // spmenu.window.margin-horizontal
- config_setting_lookup_int(conf, "x", &xpos); // spmenu.window.x
- config_setting_lookup_int(conf, "y", &xpos); // spmenu.window.y
- config_setting_lookup_int(conf, "width", &menuwidth); // spmenu.window.width
- config_setting_lookup_int(conf, "border", &borderwidth); // spmenu.window.border
- config_setting_lookup_int(conf, "managed", &managed); // spmenu.window.managed
- config_setting_lookup_int(conf, "monitor", &mon); // spmenu.window.monitor
- config_setting_lookup_int(conf, "alpha", &alpha); // spmenu.window.alpha
+ config_setting_lookup_int(conf, "dock", &dockproperty); // spmenu.properties.dock
+ }
}
- }
- // load options spmenu.properties
- config_setting_t *prop_setting = config_lookup(&cfg, "spmenu.properties");
- if (prop_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(prop_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(prop_setting, i);
+ // load options spmenu.powerline
+ config_setting_t *pwl_setting = config_lookup(&cfg, "spmenu.powerline");
+ if (pwl_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(pwl_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(pwl_setting, i);
- // look up
- config_setting_lookup_string(conf, "class", &dest); // spmenu.properties.class
- class = strdup(dest);
-
- config_setting_lookup_int(conf, "dock", &dockproperty); // spmenu.properties.dock
+ // look up
+ config_setting_lookup_int(conf, "promptstyle", &promptpwlstyle); // spmenu.powerline.promptstyle
+ config_setting_lookup_int(conf, "matchcountstyle", &matchcountpwlstyle); // spmenu.powerline.matchcountstyle
+ config_setting_lookup_int(conf, "modestyle", &modepwlstyle); // spmenu.powerline.modestyle
+ config_setting_lookup_int(conf, "capsstyle", &capspwlstyle); // spmenu.powerline.capsstyle
+ config_setting_lookup_int(conf, "prompt", &powerlineprompt); // spmenu.powerline.prompt
+ config_setting_lookup_int(conf, "matchcount", &powerlinecount); // spmenu.powerline.matchcount
+ config_setting_lookup_int(conf, "mode", &powerlinemode); // spmenu.powerline.mode
+ config_setting_lookup_int(conf, "caps", &powerlinecaps); // spmenu.powerline.caps
+ }
}
- }
- // load options spmenu.powerline
- config_setting_t *pwl_setting = config_lookup(&cfg, "spmenu.powerline");
- if (pwl_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(pwl_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(pwl_setting, i);
+ // load options spmenu.center
+ config_setting_t *center_setting = config_lookup(&cfg, "spmenu.center");
+ if (center_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(center_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(center_setting, i);
- // look up
- config_setting_lookup_int(conf, "promptstyle", &promptpwlstyle); // spmenu.powerline.promptstyle
- config_setting_lookup_int(conf, "matchcountstyle", &matchcountpwlstyle); // spmenu.powerline.matchcountstyle
- config_setting_lookup_int(conf, "modestyle", &modepwlstyle); // spmenu.powerline.modestyle
- config_setting_lookup_int(conf, "capsstyle", &capspwlstyle); // spmenu.powerline.capsstyle
- config_setting_lookup_int(conf, "prompt", &powerlineprompt); // spmenu.powerline.prompt
- config_setting_lookup_int(conf, "matchcount", &powerlinecount); // spmenu.powerline.matchcount
- config_setting_lookup_int(conf, "mode", &powerlinemode); // spmenu.powerline.mode
- config_setting_lookup_int(conf, "caps", &powerlinecaps); // spmenu.powerline.caps
+ config_setting_lookup_int(conf, "width", &minwidth); // spmenu.center.width
+ }
}
- }
- // load options spmenu.center
- config_setting_t *center_setting = config_lookup(&cfg, "spmenu.center");
- if (center_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(center_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(center_setting, i);
+ // load options spmenu.text
+ config_setting_t *text_setting = config_lookup(&cfg, "spmenu.text");
+ if (text_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(text_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(text_setting, i);
- config_setting_lookup_int(conf, "width", &minwidth); // spmenu.center.width
+ // look up
+ if (config_setting_lookup_string(conf, "font", &dest)) // spmenu.text.font
+ strcpy(font, strdup(dest));
+
+ config_setting_lookup_int(conf, "padding", &textpadding); // spmenu.text.padding
+ config_setting_lookup_int(conf, "normitempadding", &normitempadding); // spmenu.text.normitempadding
+ config_setting_lookup_int(conf, "selitempadding", &selitempadding); // spmenu.text.selitempadding
+ config_setting_lookup_int(conf, "priitempadding", &priitempadding); // spmenu.text.priitempadding
+
+ if (config_setting_lookup_string(conf, "leftarrow", &dest)) // spmenu.text.leftarrow
+ leftarrow = strdup(dest);
+
+ if (config_setting_lookup_string(conf, "rightarrow", &dest)) // spmenu.text.rightarrow
+ rightarrow = strdup(dest);
+
+ if (config_setting_lookup_string(conf, "password", &dest))
+ password = strdup(dest);
+
+ if (config_setting_lookup_string(conf, "prompt", &dest))
+ prompt = strdup(dest);
+
+ if (config_setting_lookup_string(conf, "capslockon", &dest))
+ capslockontext = strdup(dest);
+
+ if (config_setting_lookup_string(conf, "capslockoff", &dest))
+ capslockofftext = strdup(dest);
+
+ if (config_setting_lookup_string(conf, "input", &dest))
+ input = strdup(dest);
+ }
}
- }
- // load options spmenu.text
- config_setting_t *text_setting = config_lookup(&cfg, "spmenu.text");
- if (text_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(text_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(text_setting, i);
+ // load options spmenu.alpha
+ config_setting_t *alpha_setting = config_lookup(&cfg, "spmenu.alpha");
+ if (alpha_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(alpha_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(alpha_setting, i);
- // look up
- if (config_setting_lookup_string(conf, "font", &dest)) // spmenu.text.font
- strcpy(font, strdup(dest));
+ // look up
+ config_setting_lookup_int(conf, "itemnormfg", &alpha_itemnormfg); // spmenu.alpha.itemnormfg
+ config_setting_lookup_int(conf, "itemnormbg", &alpha_itemnormbg); // spmenu.alpha.itemnormbg
- config_setting_lookup_int(conf, "padding", &textpadding); // spmenu.text.padding
- config_setting_lookup_int(conf, "normitempadding", &normitempadding); // spmenu.text.normitempadding
- config_setting_lookup_int(conf, "selitempadding", &selitempadding); // spmenu.text.selitempadding
- config_setting_lookup_int(conf, "priitempadding", &priitempadding); // spmenu.text.priitempadding
+ if (!config_setting_lookup_int(conf, "itemnormfg2", &alpha_itemnormfg2)) // spmenu.alpha.itemnormfg2
+ config_setting_lookup_int(conf, "itemnormfg", &alpha_itemnormfg2);
- if (config_setting_lookup_string(conf, "leftarrow", &dest)) // spmenu.text.leftarrow
- leftarrow = strdup(dest);
+ if (!config_setting_lookup_int(conf, "itemnormbg2", &alpha_itemnormbg2)) // spmenu.alpha.itemnormbg2
+ config_setting_lookup_int(conf, "itemnormbg", &alpha_itemnormbg2);
- if (config_setting_lookup_string(conf, "rightarrow", &dest)) // spmenu.text.rightarrow
- rightarrow = strdup(dest);
+ config_setting_lookup_int(conf, "itemselfg", &alpha_itemselfg); // spmenu.alpha.itemselfg
+ config_setting_lookup_int(conf, "itemselbg", &alpha_itemselbg); // spmenu.alpha.itemselbg
- if (config_setting_lookup_string(conf, "password", &dest))
- password = strdup(dest);
+ if (!config_setting_lookup_int(conf, "itemmarkedfg", &alpha_itemmarkedfg))
+ config_setting_lookup_int(conf, "itemselfg", &alpha_itemmarkedfg);
- if (config_setting_lookup_string(conf, "prompt", &dest))
- prompt = strdup(dest);
+ if (!config_setting_lookup_int(conf, "itemmarkedbg", &alpha_itemmarkedbg))
+ config_setting_lookup_int(conf, "itemselbg", &alpha_itemmarkedbg);
- if (config_setting_lookup_string(conf, "capslockon", &dest))
- capslockontext = strdup(dest);
+ config_setting_lookup_int(conf, "itemnormprifg", &alpha_itemnormprifg); // spmenu.alpha.itemnormprifg
+ config_setting_lookup_int(conf, "itemnormpribg", &alpha_itemnormpribg); // spmenu.alpha.itemnormpribg
+ config_setting_lookup_int(conf, "itemselprifg", &alpha_itemselprifg); // spmenu.alpha.itemselprifg
+ config_setting_lookup_int(conf, "itemselpribg", &alpha_itemselpribg); // spmenu.alpha.itemselpribg
- if (config_setting_lookup_string(conf, "capslockoff", &dest))
- capslockofftext = strdup(dest);
+ config_setting_lookup_int(conf, "inputfg", &alpha_inputfg); // spmenu.alpha.inputfg
+ config_setting_lookup_int(conf, "inputbg", &alpha_inputbg); // spmenu.alpha.inputbg
- if (config_setting_lookup_string(conf, "input", &dest))
- input = strdup(dest);
+ config_setting_lookup_int(conf, "menu", &alpha_menu); // spmenu.alpha.menu
+
+ config_setting_lookup_int(conf, "promptfg", &alpha_promptfg); // spmenu.alpha.promptfg
+ config_setting_lookup_int(conf, "promptbg", &alpha_promptbg); // spmenu.alpha.promptbg
+
+ config_setting_lookup_int(conf, "larrowfg", &alpha_larrowfg); // spmenu.alpha.larrowfg
+ config_setting_lookup_int(conf, "larrowbg", &alpha_larrowbg); // spmenu.alpha.larrowbg
+ config_setting_lookup_int(conf, "rarrowfg", &alpha_rarrowfg); // spmenu.alpha.rarrowfg
+ config_setting_lookup_int(conf, "rarrowbg", &alpha_rarrowbg); // spmenu.alpha.rarrowbg
+
+ config_setting_lookup_int(conf, "hlnormfg", &alpha_hlnormfg); // spmenu.alpha.hlnormfg
+ config_setting_lookup_int(conf, "hlnormbg", &alpha_hlnormbg); // spmenu.alpha.hlnormbg
+ config_setting_lookup_int(conf, "hlselfg", &alpha_hlselfg); // spmenu.alpha.hlselfg
+ config_setting_lookup_int(conf, "hlselbg", &alpha_hlselbg); // spmenu.alpha.hlselbg
+
+ config_setting_lookup_int(conf, "numfg", &alpha_numfg); // spmenu.alpha.numfg
+ config_setting_lookup_int(conf, "numbg", &alpha_numbg); // spmenu.alpha.numbg
+
+ config_setting_lookup_int(conf, "border", &alpha_border); // spmenu.alpha.border
+
+ config_setting_lookup_int(conf, "caretfg", &alpha_caretfg); // spmenu.alpha.caretfg
+ config_setting_lookup_int(conf, "caretbg", &alpha_caretbg); // spmenu.alpha.caretbg
+
+ config_setting_lookup_int(conf, "modefg", &alpha_modefg); // spmenu.alpha.modefg
+ config_setting_lookup_int(conf, "modebg", &alpha_modebg); // spmenu.alpha.modebg
+
+ config_setting_lookup_int(conf, "capsfg", &alpha_capsfg); // spmenu.alpha.capsfg
+ config_setting_lookup_int(conf, "capsbg", &alpha_capsbg); // spmenu.alpha.capsbg
+ }
}
- }
- // load options spmenu.alpha
- config_setting_t *alpha_setting = config_lookup(&cfg, "spmenu.alpha");
- if (alpha_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(alpha_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(alpha_setting, i);
+ // load options spmenu.color
+ config_setting_t *color_setting = config_lookup(&cfg, "spmenu.color");
+ if (color_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(color_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(color_setting, i);
- // look up
- config_setting_lookup_int(conf, "itemnormfg", &alpha_itemnormfg); // spmenu.alpha.itemnormfg
- config_setting_lookup_int(conf, "itemnormbg", &alpha_itemnormbg); // spmenu.alpha.itemnormbg
+ // items
+ if (config_setting_lookup_string(conf, "itemnormfg", &dest))
+ strcpy(colors[SchemeItemNorm1][ColFg], strdup(dest));
- if (!config_setting_lookup_int(conf, "itemnormfg2", &alpha_itemnormfg2)) // spmenu.alpha.itemnormfg2
- config_setting_lookup_int(conf, "itemnormfg", &alpha_itemnormfg2);
+ if (config_setting_lookup_string(conf, "itemnormbg", &dest))
+ strcpy(colors[SchemeItemNorm1][ColBg], strdup(dest));
- if (!config_setting_lookup_int(conf, "itemnormbg2", &alpha_itemnormbg2)) // spmenu.alpha.itemnormbg2
- config_setting_lookup_int(conf, "itemnormbg", &alpha_itemnormbg2);
+ if (config_setting_lookup_string(conf, "itemnormfg2", &dest))
+ strcpy(colors[SchemeItemNorm2][ColFg], strdup(dest));
+ else if (config_setting_lookup_string(conf, "itemnormfg", &dest))
+ strcpy(colors[SchemeItemNorm2][ColBg], strdup(dest));
- config_setting_lookup_int(conf, "itemselfg", &alpha_itemselfg); // spmenu.alpha.itemselfg
- config_setting_lookup_int(conf, "itemselbg", &alpha_itemselbg); // spmenu.alpha.itemselbg
+ if (config_setting_lookup_string(conf, "itemnormbg2", &dest))
+ strcpy(colors[SchemeItemNorm2][ColBg], strdup(dest));
+ else if (config_setting_lookup_string(conf, "itemnormbg", &dest))
+ strcpy(colors[SchemeItemNorm2][ColBg], strdup(dest));
- if (!config_setting_lookup_int(conf, "itemmarkedfg", &alpha_itemmarkedfg))
- config_setting_lookup_int(conf, "itemselfg", &alpha_itemmarkedfg);
+ if (config_setting_lookup_string(conf, "itemselfg", &dest))
+ strcpy(colors[SchemeItemSel][ColFg], strdup(dest));
- if (!config_setting_lookup_int(conf, "itemmarkedbg", &alpha_itemmarkedbg))
- config_setting_lookup_int(conf, "itemselbg", &alpha_itemmarkedbg);
+ if (config_setting_lookup_string(conf, "itemselbg", &dest))
+ strcpy(colors[SchemeItemSel][ColBg], strdup(dest));
- config_setting_lookup_int(conf, "itemnormprifg", &alpha_itemnormprifg); // spmenu.alpha.itemnormprifg
- config_setting_lookup_int(conf, "itemnormpribg", &alpha_itemnormpribg); // spmenu.alpha.itemnormpribg
- config_setting_lookup_int(conf, "itemselprifg", &alpha_itemselprifg); // spmenu.alpha.itemselprifg
- config_setting_lookup_int(conf, "itemselpribg", &alpha_itemselpribg); // spmenu.alpha.itemselpribg
+ if (config_setting_lookup_string(conf, "itemmarkedfg", &dest))
+ strcpy(colors[SchemeItemMarked][ColFg], strdup(dest));
+ else if (config_setting_lookup_string(conf, "itemselfg", &dest))
+ strcpy(colors[SchemeItemMarked][ColFg], strdup(dest));
- config_setting_lookup_int(conf, "inputfg", &alpha_inputfg); // spmenu.alpha.inputfg
- config_setting_lookup_int(conf, "inputbg", &alpha_inputbg); // spmenu.alpha.inputbg
+ if (config_setting_lookup_string(conf, "itemmarkedbg", &dest))
+ strcpy(colors[SchemeItemMarked][ColBg], strdup(dest));
+ else if (config_setting_lookup_string(conf, "itemselbg", &dest))
+ strcpy(colors[SchemeItemMarked][ColBg], strdup(dest));
- config_setting_lookup_int(conf, "menu", &alpha_menu); // spmenu.alpha.menu
+ // items with priority
+ if (config_setting_lookup_string(conf, "itemnormprifg", &dest))
+ strcpy(colors[SchemeItemNormPri][ColFg], strdup(dest));
- config_setting_lookup_int(conf, "promptfg", &alpha_promptfg); // spmenu.alpha.promptfg
- config_setting_lookup_int(conf, "promptbg", &alpha_promptbg); // spmenu.alpha.promptbg
+ if (config_setting_lookup_string(conf, "itemnormpribg", &dest))
+ strcpy(colors[SchemeItemNormPri][ColBg], strdup(dest));
- config_setting_lookup_int(conf, "larrowfg", &alpha_larrowfg); // spmenu.alpha.larrowfg
- config_setting_lookup_int(conf, "larrowbg", &alpha_larrowbg); // spmenu.alpha.larrowbg
- config_setting_lookup_int(conf, "rarrowfg", &alpha_rarrowfg); // spmenu.alpha.rarrowfg
- config_setting_lookup_int(conf, "rarrowbg", &alpha_rarrowbg); // spmenu.alpha.rarrowbg
+ if (config_setting_lookup_string(conf, "itemselprifg", &dest))
+ strcpy(colors[SchemeItemSelPri][ColFg], strdup(dest));
- config_setting_lookup_int(conf, "hlnormfg", &alpha_hlnormfg); // spmenu.alpha.hlnormfg
- config_setting_lookup_int(conf, "hlnormbg", &alpha_hlnormbg); // spmenu.alpha.hlnormbg
- config_setting_lookup_int(conf, "hlselfg", &alpha_hlselfg); // spmenu.alpha.hlselfg
- config_setting_lookup_int(conf, "hlselbg", &alpha_hlselbg); // spmenu.alpha.hlselbg
+ if (config_setting_lookup_string(conf, "itemselpribg", &dest))
+ strcpy(colors[SchemeItemSelPri][ColBg], strdup(dest));
- config_setting_lookup_int(conf, "numfg", &alpha_numfg); // spmenu.alpha.numfg
- config_setting_lookup_int(conf, "numbg", &alpha_numbg); // spmenu.alpha.numbg
+ // input
+ if (config_setting_lookup_string(conf, "inputfg", &dest))
+ strcpy(colors[SchemeInput][ColFg], strdup(dest));
- config_setting_lookup_int(conf, "border", &alpha_border); // spmenu.alpha.border
+ if (config_setting_lookup_string(conf, "inputbg", &dest))
+ strcpy(colors[SchemeInput][ColBg], strdup(dest));
- config_setting_lookup_int(conf, "caretfg", &alpha_caretfg); // spmenu.alpha.caretfg
- config_setting_lookup_int(conf, "caretbg", &alpha_caretbg); // spmenu.alpha.caretbg
+ // menu
+ if (config_setting_lookup_string(conf, "menu", &dest))
+ strcpy(colors[SchemeMenu][ColBg], strdup(dest));
- config_setting_lookup_int(conf, "modefg", &alpha_modefg); // spmenu.alpha.modefg
- config_setting_lookup_int(conf, "modebg", &alpha_modebg); // spmenu.alpha.modebg
+ // prompt
+ if (config_setting_lookup_string(conf, "promptfg", &dest))
+ strcpy(colors[SchemePrompt][ColFg], strdup(dest));
- config_setting_lookup_int(conf, "capsfg", &alpha_capsfg); // spmenu.alpha.capsfg
- config_setting_lookup_int(conf, "capsbg", &alpha_capsbg); // spmenu.alpha.capsbg
+ if (config_setting_lookup_string(conf, "promptbg", &dest))
+ strcpy(colors[SchemePrompt][ColBg], strdup(dest));
+
+ // arrows
+ if (config_setting_lookup_string(conf, "larrowfg", &dest))
+ strcpy(colors[SchemeLArrow][ColFg], strdup(dest));
+
+ if (config_setting_lookup_string(conf, "larrowbg", &dest))
+ strcpy(colors[SchemeLArrow][ColBg], strdup(dest));
+
+ if (config_setting_lookup_string(conf, "rarrowfg", &dest))
+ strcpy(colors[SchemeRArrow][ColFg], strdup(dest));
+
+ if (config_setting_lookup_string(conf, "rarrowbg", &dest))
+ strcpy(colors[SchemeRArrow][ColBg], strdup(dest));
+
+ // highlight
+ if (config_setting_lookup_string(conf, "hlnormfg", &dest))
+ strcpy(colors[SchemeNormHighlight][ColFg], strdup(dest));
+
+ if (config_setting_lookup_string(conf, "hlnormbg", &dest))
+ strcpy(colors[SchemeNormHighlight][ColBg], strdup(dest));
+
+ if (config_setting_lookup_string(conf, "hlselfg", &dest))
+ strcpy(colors[SchemeSelHighlight][ColFg], strdup(dest));
+
+ if (config_setting_lookup_string(conf, "hlselbg", &dest))
+ strcpy(colors[SchemeSelHighlight][ColBg], strdup(dest));
+
+ // number
+ if (config_setting_lookup_string(conf, "numfg", &dest))
+ strcpy(colors[SchemeNumber][ColFg], strdup(dest));
+
+ if (config_setting_lookup_string(conf, "numbg", &dest))
+ strcpy(colors[SchemeNumber][ColBg], strdup(dest));
+
+ // mode
+ if (config_setting_lookup_string(conf, "modefg", &dest))
+ strcpy(colors[SchemeMode][ColFg], strdup(dest));
+
+ if (config_setting_lookup_string(conf, "modebg", &dest))
+ strcpy(colors[SchemeMode][ColBg], strdup(dest));
+
+ // caps
+ if (config_setting_lookup_string(conf, "capsfg", &dest))
+ strcpy(colors[SchemeCaps][ColFg], strdup(dest));
+
+ if (config_setting_lookup_string(conf, "capsbg", &dest))
+ strcpy(colors[SchemeCaps][ColBg], strdup(dest));
+
+ // border
+ if (config_setting_lookup_string(conf, "border", &dest))
+ strcpy(colors[SchemeBorder][ColBg], strdup(dest));
+
+ // caret
+ if (config_setting_lookup_string(conf, "caretfg", &dest))
+ strcpy(colors[SchemeCaret][ColFg], strdup(dest));
+
+ if (config_setting_lookup_string(conf, "caretbg", &dest))
+ strcpy(colors[SchemeCaret][ColBg], strdup(dest));
+
+ // sgr colors
+ if (config_setting_lookup_string(conf, "sgr0", &dest))
+ strcpy(textcolors[0], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr1", &dest))
+ strcpy(textcolors[1], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr2", &dest))
+ strcpy(textcolors[2], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr3", &dest))
+ strcpy(textcolors[3], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr4", &dest))
+ strcpy(textcolors[4], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr5", &dest))
+ strcpy(textcolors[5], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr6", &dest))
+ strcpy(textcolors[6], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr7", &dest))
+ strcpy(textcolors[7], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr8", &dest))
+ strcpy(textcolors[8], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr9", &dest))
+ strcpy(textcolors[9], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr10", &dest))
+ strcpy(textcolors[10], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr11", &dest))
+ strcpy(textcolors[11], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr12", &dest))
+ strcpy(textcolors[12], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr13", &dest))
+ strcpy(textcolors[13], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr14", &dest))
+ strcpy(textcolors[14], strdup(dest));
+ if (config_setting_lookup_string(conf, "sgr15", &dest))
+ strcpy(textcolors[15], strdup(dest));
+
+ // coloritems int
+ config_setting_lookup_int(conf, "coloritems", &coloritems);
+ config_setting_lookup_int(conf, "sgr", &sgr);
+ }
}
- }
- // load options spmenu.color
- config_setting_t *color_setting = config_lookup(&cfg, "spmenu.color");
- if (color_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(color_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(color_setting, i);
+ // load options spmenu.image
+ config_setting_t *img_setting = config_lookup(&cfg, "spmenu.image");
+ if (img_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(img_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(img_setting, i);
- // items
- if (config_setting_lookup_string(conf, "itemnormfg", &dest))
- strcpy(colors[SchemeItemNorm1][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "itemnormbg", &dest))
- strcpy(colors[SchemeItemNorm1][ColBg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "itemnormfg2", &dest))
- strcpy(colors[SchemeItemNorm2][ColFg], strdup(dest));
- else if (config_setting_lookup_string(conf, "itemnormfg", &dest))
- strcpy(colors[SchemeItemNorm2][ColBg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "itemnormbg2", &dest))
- strcpy(colors[SchemeItemNorm2][ColBg], strdup(dest));
- else if (config_setting_lookup_string(conf, "itemnormbg", &dest))
- strcpy(colors[SchemeItemNorm2][ColBg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "itemselfg", &dest))
- strcpy(colors[SchemeItemSel][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "itemselbg", &dest))
- strcpy(colors[SchemeItemSel][ColBg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "itemmarkedfg", &dest))
- strcpy(colors[SchemeItemMarked][ColFg], strdup(dest));
- else if (config_setting_lookup_string(conf, "itemselfg", &dest))
- strcpy(colors[SchemeItemMarked][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "itemmarkedbg", &dest))
- strcpy(colors[SchemeItemMarked][ColBg], strdup(dest));
- else if (config_setting_lookup_string(conf, "itemselbg", &dest))
- strcpy(colors[SchemeItemMarked][ColBg], strdup(dest));
-
- // items with priority
- if (config_setting_lookup_string(conf, "itemnormprifg", &dest))
- strcpy(colors[SchemeItemNormPri][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "itemnormpribg", &dest))
- strcpy(colors[SchemeItemNormPri][ColBg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "itemselprifg", &dest))
- strcpy(colors[SchemeItemSelPri][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "itemselpribg", &dest))
- strcpy(colors[SchemeItemSelPri][ColBg], strdup(dest));
-
- // input
- if (config_setting_lookup_string(conf, "inputfg", &dest))
- strcpy(colors[SchemeInput][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "inputbg", &dest))
- strcpy(colors[SchemeInput][ColBg], strdup(dest));
-
- // menu
- if (config_setting_lookup_string(conf, "menu", &dest))
- strcpy(colors[SchemeMenu][ColBg], strdup(dest));
-
- // prompt
- if (config_setting_lookup_string(conf, "promptfg", &dest))
- strcpy(colors[SchemePrompt][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "promptbg", &dest))
- strcpy(colors[SchemePrompt][ColBg], strdup(dest));
-
- // arrows
- if (config_setting_lookup_string(conf, "larrowfg", &dest))
- strcpy(colors[SchemeLArrow][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "larrowbg", &dest))
- strcpy(colors[SchemeLArrow][ColBg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "rarrowfg", &dest))
- strcpy(colors[SchemeRArrow][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "rarrowbg", &dest))
- strcpy(colors[SchemeRArrow][ColBg], strdup(dest));
-
- // highlight
- if (config_setting_lookup_string(conf, "hlnormfg", &dest))
- strcpy(colors[SchemeNormHighlight][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "hlnormbg", &dest))
- strcpy(colors[SchemeNormHighlight][ColBg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "hlselfg", &dest))
- strcpy(colors[SchemeSelHighlight][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "hlselbg", &dest))
- strcpy(colors[SchemeSelHighlight][ColBg], strdup(dest));
-
- // number
- if (config_setting_lookup_string(conf, "numfg", &dest))
- strcpy(colors[SchemeNumber][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "numbg", &dest))
- strcpy(colors[SchemeNumber][ColBg], strdup(dest));
-
- // mode
- if (config_setting_lookup_string(conf, "modefg", &dest))
- strcpy(colors[SchemeMode][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "modebg", &dest))
- strcpy(colors[SchemeMode][ColBg], strdup(dest));
-
- // caps
- if (config_setting_lookup_string(conf, "capsfg", &dest))
- strcpy(colors[SchemeCaps][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "capsbg", &dest))
- strcpy(colors[SchemeCaps][ColBg], strdup(dest));
-
- // border
- if (config_setting_lookup_string(conf, "border", &dest))
- strcpy(colors[SchemeBorder][ColBg], strdup(dest));
-
- // caret
- if (config_setting_lookup_string(conf, "caretfg", &dest))
- strcpy(colors[SchemeCaret][ColFg], strdup(dest));
-
- if (config_setting_lookup_string(conf, "caretbg", &dest))
- strcpy(colors[SchemeCaret][ColBg], strdup(dest));
-
- // sgr colors
- if (config_setting_lookup_string(conf, "sgr0", &dest))
- strcpy(textcolors[0], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr1", &dest))
- strcpy(textcolors[1], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr2", &dest))
- strcpy(textcolors[2], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr3", &dest))
- strcpy(textcolors[3], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr4", &dest))
- strcpy(textcolors[4], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr5", &dest))
- strcpy(textcolors[5], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr6", &dest))
- strcpy(textcolors[6], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr7", &dest))
- strcpy(textcolors[7], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr8", &dest))
- strcpy(textcolors[8], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr9", &dest))
- strcpy(textcolors[9], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr10", &dest))
- strcpy(textcolors[10], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr11", &dest))
- strcpy(textcolors[11], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr12", &dest))
- strcpy(textcolors[12], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr13", &dest))
- strcpy(textcolors[13], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr14", &dest))
- strcpy(textcolors[14], strdup(dest));
- if (config_setting_lookup_string(conf, "sgr15", &dest))
- strcpy(textcolors[15], strdup(dest));
-
- // coloritems int
- config_setting_lookup_int(conf, "coloritems", &coloritems);
- config_setting_lookup_int(conf, "sgr", &sgr);
+ // look up
+ config_setting_lookup_int(conf, "width", &imagewidth); // spmenu.image.width
+ config_setting_lookup_int(conf, "height", &imageheight); // spmenu.image.height
+ config_setting_lookup_int(conf, "gaps", &imageheight); // spmenu.image.gaps
+ config_setting_lookup_int(conf, "position", &imageposition); // spmenu.image.position
+ config_setting_lookup_int(conf, "cache", &generatecache); // spmenu.image.cache
+ config_setting_lookup_int(conf, "maxcache", &maxcache); // spmenu.image.maxcache
+ if (config_setting_lookup_string(conf, "cachedir", &dest)) // spmenu.image.cachedir
+ cachedir = strdup(dest);
+ }
}
- }
- // load options spmenu.image
- config_setting_t *img_setting = config_lookup(&cfg, "spmenu.image");
- if (img_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(img_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(img_setting, i);
+ // load options spmenu.file
+ config_setting_t *file_setting = config_lookup(&cfg, "spmenu.file");
+ if (file_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(file_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(file_setting, i);
- // look up
- config_setting_lookup_int(conf, "width", &imagewidth); // spmenu.image.width
- config_setting_lookup_int(conf, "height", &imageheight); // spmenu.image.height
- config_setting_lookup_int(conf, "gaps", &imageheight); // spmenu.image.gaps
- config_setting_lookup_int(conf, "position", &imageposition); // spmenu.image.position
- config_setting_lookup_int(conf, "cache", &generatecache); // spmenu.image.cache
- config_setting_lookup_int(conf, "maxcache", &maxcache); // spmenu.image.maxcache
- if (config_setting_lookup_string(conf, "cachedir", &dest)) // spmenu.image.cachedir
- cachedir = strdup(dest);
+ // look up
+ config_setting_lookup_int(conf, "theme", &loadtheme); // spmenu.file.theme
+ config_setting_lookup_int(conf, "binds", &loadbinds); // spmenu.file.binds
+ config_setting_lookup_int(conf, "global", &globalcolors); // spmenu.file.global
+ config_setting_lookup_int(conf, "xresources", &xresources); // spmenu.file.xresources
+ }
}
- }
- // load options spmenu.file
- config_setting_t *file_setting = config_lookup(&cfg, "spmenu.file");
- if (file_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(file_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(file_setting, i);
+ // load options spmenu.input
+ config_setting_t *input_setting = config_lookup(&cfg, "spmenu.input");
+ if (input_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(input_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(input_setting, i);
- // look up
- config_setting_lookup_int(conf, "theme", &loadtheme); // spmenu.file.theme
- config_setting_lookup_int(conf, "global", &globalcolors); // spmenu.file.global
- config_setting_lookup_int(conf, "xresources", &xresources); // spmenu.file.xresources
+ // look up
+ config_setting_lookup_int(conf, "fast", &fast); // spmenu.input.fast
+ config_setting_lookup_int(conf, "type", &type); // spmenu.input.type
+ config_setting_lookup_int(conf, "password", &passwd); // spmenu.input.password
+ }
}
- }
- // load options spmenu.input
- config_setting_t *input_setting = config_lookup(&cfg, "spmenu.input");
- if (input_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(input_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(input_setting, i);
+ // load options spmenu.output
+ config_setting_t *output_setting = config_lookup(&cfg, "spmenu.output");
+ if (output_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(output_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(output_setting, i);
- // look up
- config_setting_lookup_int(conf, "fast", &fast); // spmenu.input.fast
- config_setting_lookup_int(conf, "type", &type); // spmenu.input.type
- config_setting_lookup_int(conf, "password", &passwd); // spmenu.input.password
+ // look up
+ config_setting_lookup_int(conf, "printindex", &printindex); // spmenu.output.printindex
+ config_setting_lookup_int(conf, "incremental", &incremental); // spmenu.output.incremental
+ }
}
- }
- // load options spmenu.output
- config_setting_t *output_setting = config_lookup(&cfg, "spmenu.output");
- if (output_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(output_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(output_setting, i);
+ // load options spmenu.mode
+ config_setting_t *mode_setting = config_lookup(&cfg, "spmenu.mode");
+ if (mode_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(mode_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(mode_setting, i);
- // look up
- config_setting_lookup_int(conf, "printindex", &printindex); // spmenu.output.printindex
- config_setting_lookup_int(conf, "incremental", &incremental); // spmenu.output.incremental
+ // look up
+ config_setting_lookup_int(conf, "default", &mode); // spmenu.mode.default
+
+ config_setting_lookup_string(conf, "normal_text", &dest); // spmenu.mode.normal_text
+ normtext = strdup(dest);
+
+ config_setting_lookup_string(conf, "insert_text", &dest); // spmenu.mode.insert_text
+ instext = strdup(dest);
+ }
}
- }
- // load options spmenu.mode
- config_setting_t *mode_setting = config_lookup(&cfg, "spmenu.mode");
- if (mode_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(mode_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(mode_setting, i);
+ // load options spmenu.match
+ config_setting_t *match_setting = config_lookup(&cfg, "spmenu.match");
+ if (match_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(match_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(match_setting, i);
- // look up
- config_setting_lookup_int(conf, "default", &mode); // spmenu.mode.default
-
- config_setting_lookup_string(conf, "normal_text", &dest); // spmenu.mode.normal_text
- normtext = strdup(dest);
-
- config_setting_lookup_string(conf, "insert_text", &dest); // spmenu.mode.insert_text
- instext = strdup(dest);
+ // look up
+ config_setting_lookup_int(conf, "sort", &sortmatches); // spmenu.match.sort
+ config_setting_lookup_int(conf, "casesensitive", &casesensitive); // spmenu.match.casesensitive
+ config_setting_lookup_int(conf, "fuzzy", &fuzzy); // spmenu.match.fuzzy
+ config_setting_lookup_int(conf, "preselected", &preselected); // spmenu.match.preselected
+ config_setting_lookup_int(conf, "mark", &mark); // spmenu.match.mark
+ config_setting_lookup_int(conf, "accuratewidth", &accuratewidth); // spmenu.match.accuratewidth
+ config_setting_lookup_string(conf, "delimiters", &dest); // spmenu.match.delimiters
+ worddelimiters = strdup(dest);
+ if (config_setting_lookup_string(conf, "listfile", &dest)) // spmenu.match.listfile
+ if (dest && strcmp(strdup(dest), "NULL"))
+ listfile = strdup(dest);
+ }
}
- }
- // load options spmenu.match
- config_setting_t *match_setting = config_lookup(&cfg, "spmenu.match");
- if (match_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(match_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(match_setting, i);
+ // load options spmenu.line
+ config_setting_t *line_setting = config_lookup(&cfg, "spmenu.line");
+ if (line_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(line_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(line_setting, i);
- // look up
- config_setting_lookup_int(conf, "sort", &sortmatches); // spmenu.match.sort
- config_setting_lookup_int(conf, "casesensitive", &casesensitive); // spmenu.match.casesensitive
- config_setting_lookup_int(conf, "fuzzy", &fuzzy); // spmenu.match.fuzzy
- config_setting_lookup_int(conf, "preselected", &preselected); // spmenu.match.preselected
- config_setting_lookup_int(conf, "mark", &mark); // spmenu.match.mark
- config_setting_lookup_int(conf, "accuratewidth", &accuratewidth); // spmenu.match.accuratewidth
- config_setting_lookup_string(conf, "delimiters", &dest); // spmenu.match.delimiters
- worddelimiters = strdup(dest);
- if (config_setting_lookup_string(conf, "listfile", &dest)) // spmenu.match.listfile
- if (dest && strcmp(strdup(dest), "NULL"))
- listfile = strdup(dest);
+ // look up
+ config_setting_lookup_int(conf, "height", &lineheight); // spmenu.line.height
+ config_setting_lookup_int(conf, "lines", &lines); // spmenu.line.lines
+ config_setting_lookup_int(conf, "columns", &columns); // spmenu.line.columns
+ config_setting_lookup_int(conf, "indentitems", &indentitems); // spmenu.line.indentitems
+ }
}
- }
- // load options spmenu.line
- config_setting_t *line_setting = config_lookup(&cfg, "spmenu.line");
- if (line_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(line_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(line_setting, i);
+ // load options spmenu.history
+ config_setting_t *hist_setting = config_lookup(&cfg, "spmenu.history");
+ if (hist_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(hist_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(hist_setting, i);
- // look up
- config_setting_lookup_int(conf, "height", &lineheight); // spmenu.line.height
- config_setting_lookup_int(conf, "lines", &lines); // spmenu.line.lines
- config_setting_lookup_int(conf, "columns", &columns); // spmenu.line.columns
- config_setting_lookup_int(conf, "indentitems", &indentitems); // spmenu.line.indentitems
+ // look up
+ config_setting_lookup_int(conf, "max", &maxhist); // spmenu.history.max
+ config_setting_lookup_int(conf, "duplicate", &histdup); // spmenu.history.duplicate
+ }
}
- }
- // load options spmenu.history
- config_setting_t *hist_setting = config_lookup(&cfg, "spmenu.history");
- if (hist_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(hist_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(hist_setting, i);
+ // load options spmenu.hide
+ config_setting_t *hide_setting = config_lookup(&cfg, "spmenu.hide");
+ if (hide_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(hide_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(hide_setting, i);
- // look up
- config_setting_lookup_int(conf, "max", &maxhist); // spmenu.history.max
- config_setting_lookup_int(conf, "duplicate", &histdup); // spmenu.history.duplicate
+ // look up
+ config_setting_lookup_int(conf, "input", &hideinput); // spmenu.hide.input
+ config_setting_lookup_int(conf, "larrow", &hidelarrow); // spmenu.hide.larrow
+ config_setting_lookup_int(conf, "rarrow", &hiderarrow); // spmenu.hide.rarrow
+ config_setting_lookup_int(conf, "prompt", &hideprompt); // spmenu.hide.prompt
+ config_setting_lookup_int(conf, "items", &hideitem); // spmenu.hide.items
+ config_setting_lookup_int(conf, "powerline", &hidepowerline); // spmenu.hide.powerline
+ config_setting_lookup_int(conf, "caret", &hidecaret); // spmenu.hide.caret
+ config_setting_lookup_int(conf, "highlight", &hidehighlight); // spmenu.hide.highlight
+ config_setting_lookup_int(conf, "matchcount", &hidematchcount); // spmenu.hide.matchcount
+ config_setting_lookup_int(conf, "mode", &hidemode); // spmenu.hide.mode
+ config_setting_lookup_int(conf, "caps", &hidecaps); // spmenu.hide.caps
+ config_setting_lookup_int(conf, "hideimage", &hideimage); // spmenu.hide.image
+ }
}
- }
- // load options spmenu.hide
- config_setting_t *hide_setting = config_lookup(&cfg, "spmenu.hide");
- if (hide_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(hide_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(hide_setting, i);
+ // load options spmenu.pango
+ config_setting_t *pango_setting = config_lookup(&cfg, "spmenu.pango");
+ if (pango_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(pango_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(pango_setting, i);
- // look up
- config_setting_lookup_int(conf, "input", &hideinput); // spmenu.hide.input
- config_setting_lookup_int(conf, "larrow", &hidelarrow); // spmenu.hide.larrow
- config_setting_lookup_int(conf, "rarrow", &hiderarrow); // spmenu.hide.rarrow
- config_setting_lookup_int(conf, "prompt", &hideprompt); // spmenu.hide.prompt
- config_setting_lookup_int(conf, "items", &hideitem); // spmenu.hide.items
- config_setting_lookup_int(conf, "powerline", &hidepowerline); // spmenu.hide.powerline
- config_setting_lookup_int(conf, "caret", &hidecaret); // spmenu.hide.caret
- config_setting_lookup_int(conf, "highlight", &hidehighlight); // spmenu.hide.highlight
- config_setting_lookup_int(conf, "matchcount", &hidematchcount); // spmenu.hide.matchcount
- config_setting_lookup_int(conf, "mode", &hidemode); // spmenu.hide.mode
- config_setting_lookup_int(conf, "caps", &hidecaps); // spmenu.hide.caps
- config_setting_lookup_int(conf, "hideimage", &hideimage); // spmenu.hide.image
+ // look up
+ config_setting_lookup_int(conf, "item", &pango_item); // spmenu.pango.input
+ config_setting_lookup_int(conf, "highlight", &pango_highlight); // spmenu.pango.highlight
+ config_setting_lookup_int(conf, "prompt", &pango_prompt); // spmenu.pango.rarrow
+ config_setting_lookup_int(conf, "input", &pango_input); // spmenu.pango.input
+ config_setting_lookup_int(conf, "leftarrow", &pango_leftarrow); // spmenu.pango.leftarrow
+ config_setting_lookup_int(conf, "rightarrow", &pango_rightarrow); // spmenu.pango.rightarrow
+ config_setting_lookup_int(conf, "numbers", &pango_numbers); // spmenu.pango.numbers
+ config_setting_lookup_int(conf, "mode", &pango_mode); // spmenu.pango.mode
+ config_setting_lookup_int(conf, "caps", &pango_caps); // spmenu.pango.caps
+ config_setting_lookup_int(conf, "password", &pango_password); // spmenu.pango.mode
+ }
}
- }
- // load options spmenu.pango
- config_setting_t *pango_setting = config_lookup(&cfg, "spmenu.pango");
- if (pango_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(pango_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(pango_setting, i);
+ // load options spmenu.keys
+ config_setting_t *key_setting = config_lookup(&cfg, "spmenu.keys");
+ if (key_setting != NULL) {
+ int nmode = 0;
- // look up
- config_setting_lookup_int(conf, "item", &pango_item); // spmenu.pango.input
- config_setting_lookup_int(conf, "highlight", &pango_highlight); // spmenu.pango.highlight
- config_setting_lookup_int(conf, "prompt", &pango_prompt); // spmenu.pango.rarrow
- config_setting_lookup_int(conf, "input", &pango_input); // spmenu.pango.input
- config_setting_lookup_int(conf, "leftarrow", &pango_leftarrow); // spmenu.pango.leftarrow
- config_setting_lookup_int(conf, "rightarrow", &pango_rightarrow); // spmenu.pango.rightarrow
- config_setting_lookup_int(conf, "numbers", &pango_numbers); // spmenu.pango.numbers
- config_setting_lookup_int(conf, "mode", &pango_mode); // spmenu.pango.mode
- config_setting_lookup_int(conf, "caps", &pango_caps); // spmenu.pango.caps
- config_setting_lookup_int(conf, "password", &pango_password); // spmenu.pango.mode
- }
- }
+ for (unsigned int i = 0; i < config_setting_length(key_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(key_setting, i);
- // load options spmenu.keys
- config_setting_t *key_setting = config_lookup(&cfg, "spmenu.keys");
- if (key_setting != NULL) {
- int nmode = 0;
+ // look up
+ config_setting_lookup_string(conf, "modifier", &dest);
- for (unsigned int i = 0; i < config_setting_length(key_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(key_setting, i);
-
- // look up
- config_setting_lookup_string(conf, "modifier", &dest);
-
- for (int j = 0; j < LENGTH(ml); j++) {
- if (!strcmp(ml[j].mod, strdup(dest))) {
- ckeys[i].mod = ml[j].modifier;
+ for (int j = 0; j < LENGTH(ml); j++) {
+ if (!strcmp(ml[j].mod, strdup(dest))) {
+ ckeys[i].mod = ml[j].modifier;
+ }
}
- }
- if (config_setting_lookup_int(conf, "mode", &nmode)) {
- ckeys[i].mode = nmode;
- }
-
- config_setting_lookup_string(conf, "key", &dest);
-
- for (int j = 0; j < LENGTH(kl); j++) {
- if (!strcmp(kl[j].key, strdup(dest))) {
- ckeys[i].keysym = kl[j].keysym;
+ if (config_setting_lookup_int(conf, "mode", &nmode)) {
+ ckeys[i].mode = nmode;
}
- }
- config_setting_lookup_string(conf, "function", &dest);
+ config_setting_lookup_string(conf, "key", &dest);
- for (int j = 0; j < LENGTH(fl); j++) {
- if (!strcmp(fl[j].function, strdup(dest))) {
- ckeys[i].func = fl[j].func;
+ for (int j = 0; j < LENGTH(kl); j++) {
+ if (!strcmp(kl[j].key, strdup(dest))) {
+ ckeys[i].keysym = kl[j].keysym;
+ }
}
- }
- config_setting_lookup_string(conf, "argument", &dest);
+ config_setting_lookup_string(conf, "function", &dest);
- for (int j = 0; j < LENGTH(al); j++) {
- if (!strcmp(al[j].argument, strdup(dest))) {
- ckeys[i].arg = al[j].arg;
+ for (int j = 0; j < LENGTH(fl); j++) {
+ if (!strcmp(fl[j].function, strdup(dest))) {
+ ckeys[i].func = fl[j].func;
+ }
}
- }
- config_setting_lookup_int(conf, "ignoreglobalkeys", &ignoreglobalkeys);
+ config_setting_lookup_string(conf, "argument", &dest);
+
+ for (int j = 0; j < LENGTH(al); j++) {
+ if (!strcmp(al[j].argument, strdup(dest))) {
+ ckeys[i].arg = al[j].arg;
+ }
+ }
+
+ config_setting_lookup_int(conf, "ignoreglobalkeys", &ignoreglobalkeys);
+ }
}
+
+ // load options spmenu.mouse
+ config_setting_t *mouse_setting = config_lookup(&cfg, "spmenu.mouse");
+ if (mouse_setting != NULL) {
+ for (unsigned int i = 0; i < config_setting_length(mouse_setting); ++i) {
+ config_setting_t *conf = config_setting_get_elem(mouse_setting, i);
+
+ for (int j = 0; j < LENGTH(ctp); j++) {
+ if (!strcmp(ctp[j].tclick, strdup(dest))) {
+ cbuttons[i].click = ctp[j].click;
+ }
+ }
+
+ // look up
+ config_setting_lookup_string(conf, "modifier", &dest);
+
+ for (int j = 0; j < LENGTH(ml); j++) {
+ if (!strcmp(ml[j].mod, strdup(dest))) {
+ cbuttons[i].mask = ml[j].modifier;
+ }
+ }
+
+ config_setting_lookup_string(conf, "button", &dest);
+
+ for (int j = 0; j < LENGTH(btp); j++) {
+ if (!strcmp(btp[j].click, strdup(dest))) {
+ cbuttons[i].button = btp[j].button;
+ }
+ }
+
+ config_setting_lookup_string(conf, "function", &dest);
+
+ for (int j = 0; j < LENGTH(fl); j++) {
+ if (!strcmp(fl[j].function, strdup(dest))) {
+ cbuttons[i].func = fl[j].func;
+ }
+ }
+
+ config_setting_lookup_string(conf, "argument", &dest);
+
+ for (int j = 0; j < LENGTH(al); j++) {
+ if (!strcmp(al[j].argument, strdup(dest))) {
+ cbuttons[i].arg = al[j].arg;
+ }
+ }
+
+ config_setting_lookup_int(conf, "ignoreglobalmouse", &ignoreglobalmouse);
+ }
+ }
+
+ // we're done with this config
+ config_destroy(&cfg);
}
- // load options spmenu.mouse
- config_setting_t *mouse_setting = config_lookup(&cfg, "spmenu.mouse");
- if (mouse_setting != NULL) {
- for (unsigned int i = 0; i < config_setting_length(mouse_setting); ++i) {
- config_setting_t *conf = config_setting_get_elem(mouse_setting, i);
-
- // look up
- config_setting_lookup_string(conf, "click", &dest);
-
- for (int j = 0; j < LENGTH(ctp); j++) {
- if (!strcmp(ctp[j].tclick, strdup(dest))) {
- cbuttons[i].click = ctp[j].click;
- }
- }
-
- // look up
- config_setting_lookup_string(conf, "modifier", &dest);
-
- for (int j = 0; j < LENGTH(ml); j++) {
- if (!strcmp(ml[j].mod, strdup(dest))) {
- cbuttons[i].mask = ml[j].modifier;
- }
- }
-
- config_setting_lookup_string(conf, "button", &dest);
-
- for (int j = 0; j < LENGTH(btp); j++) {
- if (!strcmp(btp[j].click, strdup(dest))) {
- cbuttons[i].button = btp[j].button;
- }
- }
-
- config_setting_lookup_string(conf, "function", &dest);
-
- for (int j = 0; j < LENGTH(fl); j++) {
- if (!strcmp(fl[j].function, strdup(dest))) {
- cbuttons[i].func = fl[j].func;
- }
- }
-
- config_setting_lookup_string(conf, "argument", &dest);
-
- for (int j = 0; j < LENGTH(al); j++) {
- if (!strcmp(al[j].argument, strdup(dest))) {
- cbuttons[i].arg = al[j].arg;
- }
- }
-
- config_setting_lookup_int(conf, "ignoreglobalmouse", &ignoreglobalmouse);
- }
+ // load the theme now
+ if (loadtheme) {
+ theme_load();
+ }
+
+ if (loadbinds) {
+ if (!argbinds) {
+ if (!(xdg_conf = getenv("XDG_CONFIG_HOME"))) {
+ home = getenv("HOME");
+
+ if (!(bindfile = malloc(snprintf(NULL, 0, "%s/%s", home, ".config/spmenu/binds.conf") + 1))) {
+ die("spmenu: failed to malloc bindfile");
+ }
+
+ sprintf(bindfile, "%s/%s", home, ".config/spmenu/binds.conf");
+ } else {
+ if (!(bindfile = malloc(snprintf(NULL, 0, "%s/%s", xdg_conf, "spmenu/binds.conf") + 1))) {
+ die("spmenu: failed to malloc bindfile");
+ }
+
+ sprintf(bindfile, "%s/%s", xdg_conf, "spmenu/binds.conf");
+ }
+ } else { // custom keys path
+ if (!(bindfile = malloc(snprintf(NULL, 0, "%s", argbinds) + 1))) {
+ die("spmenu: failed to malloc bindfile");
+ }
+
+ sprintf(bindfile, "%s", argbinds);
+ }
+
+ // don't bother trying to load if it doesn't exist.
+ if (access(bindfile, F_OK) != 0) {
+ return;
+ }
+
+ // init config
+ config_t bind;
+
+ config_init(&bind);
+
+ // attempt to read config file to cfg
+ if (!config_read_file(&bind, bindfile)) {
+ // invalid configuration, but let's try to read it anyway
+ fprintf(stderr, "spmenu: Invalid keys file.\n");
+ }
+
+ // load options binds.keys
+ config_setting_t *key_bind = config_lookup(&bind, "bind.keys");
+ if (key_bind != NULL) {
+ int nmode = 0;
+
+ memset(ckeys, '\0', LENGTH(ckeys)-1);
+ for (unsigned int i = 0; i < config_setting_length(key_bind); ++i) {
+ config_setting_t *conf = config_setting_get_elem(key_bind, i);
+
+ // look up
+ config_setting_lookup_string(conf, "modifier", &dest);
+
+ for (int j = 0; j < LENGTH(ml); j++) {
+ if (!strcmp(ml[j].mod, strdup(dest))) {
+ ckeys[i].mod = ml[j].modifier;
+ }
+ }
+
+ if (config_setting_lookup_int(conf, "mode", &nmode)) {
+ ckeys[i].mode = nmode;
+ }
+
+ config_setting_lookup_string(conf, "key", &dest);
+
+ for (int j = 0; j < LENGTH(kl); j++) {
+ if (!strcmp(kl[j].key, strdup(dest))) {
+ ckeys[i].keysym = kl[j].keysym;
+ }
+ }
+
+ config_setting_lookup_string(conf, "function", &dest);
+
+ for (int j = 0; j < LENGTH(fl); j++) {
+ if (!strcmp(fl[j].function, strdup(dest))) {
+ ckeys[i].func = fl[j].func;
+ }
+ }
+
+ config_setting_lookup_string(conf, "argument", &dest);
+
+ for (int j = 0; j < LENGTH(al); j++) {
+ if (!strcmp(al[j].argument, strdup(dest))) {
+ ckeys[i].arg = al[j].arg;
+ }
+ }
+
+ config_setting_lookup_int(conf, "ignoreglobalkeys", &ignoreglobalkeys);
+ }
+ }
+
+ // load options binds.mouse
+ config_setting_t *mouse_bind = config_lookup(&bind, "bind.mouse");
+ if (mouse_bind != NULL) {
+ memset(cbuttons, '\0', LENGTH(cbuttons)-1);
+ for (unsigned int i = 0; i < config_setting_length(mouse_bind); ++i) {
+ config_setting_t *conf = config_setting_get_elem(mouse_bind, i);
+
+ // look up
+ config_setting_lookup_string(conf, "click", &dest);
+
+ for (int j = 0; j < LENGTH(ctp); j++) {
+ if (!strcmp(ctp[j].tclick, strdup(dest))) {
+ cbuttons[i].click = ctp[j].click;
+ }
+ }
+
+ // look up
+ config_setting_lookup_string(conf, "modifier", &dest);
+
+ for (int j = 0; j < LENGTH(ml); j++) {
+ if (!strcmp(ml[j].mod, strdup(dest))) {
+ cbuttons[i].mask = ml[j].modifier;
+ }
+ }
+
+ config_setting_lookup_string(conf, "button", &dest);
+
+ for (int j = 0; j < LENGTH(btp); j++) {
+ if (!strcmp(btp[j].click, strdup(dest))) {
+ cbuttons[i].button = btp[j].button;
+ }
+ }
+
+ config_setting_lookup_string(conf, "function", &dest);
+
+ for (int j = 0; j < LENGTH(fl); j++) {
+ if (!strcmp(fl[j].function, strdup(dest))) {
+ cbuttons[i].func = fl[j].func;
+ }
+ }
+
+ config_setting_lookup_string(conf, "argument", &dest);
+
+ for (int j = 0; j < LENGTH(al); j++) {
+ if (!strcmp(al[j].argument, strdup(dest))) {
+ cbuttons[i].arg = al[j].arg;
+ }
+ }
+
+ config_setting_lookup_int(conf, "ignoreglobalmouse", &ignoreglobalmouse);
+ }
+ }
+
+ // finally done
+ config_destroy(&bind);
}
- // we're done here
- config_destroy(&cfg);
- if (loadtheme) theme_load();
return;
}
diff --git a/libs/theme/theme.c b/libs/theme/theme.c
index 6c8742a..998778b 100644
--- a/libs/theme/theme.c
+++ b/libs/theme/theme.c
@@ -10,7 +10,7 @@ void theme_load(void) {
if (!loadconfig) return;
// get path for configuration file
- if (!ctheme || !argtheme) {
+ if (!argtheme) {
if (!(xdg_conf = getenv("XDG_CONFIG_HOME"))) {
// ~/.config/spmenu/theme.conf
home = getenv("HOME");
diff --git a/options.h b/options.h
index bc98e61..94dd8a7 100644
--- a/options.h
+++ b/options.h
@@ -9,8 +9,9 @@ static char *class = "spmenu"; /* Class for spmenu */
static int fast = 0; /* Grab keyboard first */
static int xresources = 1; /* Enable .Xresources support */
static int globalcolors = 1; /* Recognize global colors (such as colors generated by Pywal) */
-static int loadconfig = 1; /* Load configuration (~/.spmenu.conf or ~/.config/spmenu/spmenu.conf) on runtime */
+static int loadconfig = 1; /* Load configuration (~/.config/spmenu/spmenu.conf) on runtime */
static int loadtheme = 1; /* Load theme (~/.theme.conf or ~/.config/spmenu/theme.conf) on runtime */
+static int loadbinds = 1; /* Load keybind file (~/.config/spmenu/binds.conf) on runtime */
static int mon = -1; /* Monitor to run spmenu on */
/* Window options */
diff --git a/scripts/spmenu_run b/scripts/spmenu_run
index 2f919ec..10f5e77 100755
--- a/scripts/spmenu_run
+++ b/scripts/spmenu_run
@@ -36,8 +36,8 @@ DMENU_COMPAT="${DMENU_COMPAT:-false}"
AUTOREFRESH="${AUTOREFRESH:-false}"
MULTISELECT="${MULTISELECT:-true}"
-DESKTOP_DIR="${DESKTOP_DIR:-${DESTDIR}${PREFIX}/share/applications}"
-ICON_DIR="${ICON_DIR:-${DESTDIR}${PREFIX}/share/icons/hicolor ${DESTDIR}${PREFIX}/share/pixmaps}"
+DESKTOP_DIR="${DESKTOP_DIR:-${DESTDIR}${PREFIX}/share/applications ${HOME}/.local/share/applications}"
+ICON_DIR="${ICON_DIR:-${DESTDIR}${PREFIX}/share/icons/hicolor ${HOME}/.local/share/icons/hicolor ${DESTDIR}${PREFIX}/share/pixmaps}"
TEMPORARY_DIR="${TEMPORARY_DIR:-$CONFDIR/spmenu/run/cache}"
IMAGE="${IMAGE:-true}"
LOGFILE="${LOGFILE:-/tmp/spmenu_run.log}"
@@ -247,8 +247,8 @@ DEFAULT_FEATURE="run" # spmenu_run default feature (run/fm/desktop/help)
HELP_COLOR="#FFFF00"
# .desktop options
-DESKTOP_DIR="\${DESTDIR}\${PREFIX}/share/applications" # Directories for .desktop entries
-ICON_DIR="\${DESTDIR}\${PREFIX}/share/icons/hicolor \${DESTDIR}\${PREFIX}/share/pixmaps" # Directories for icons defined in the entries
+DESKTOP_DIR="\${DESTDIR}\${PREFIX}/share/applications \${HOME}/.local/share/applications" # Directories for .desktop entries
+ICON_DIR="\${DESTDIR}\${PREFIX}/share/icons/hicolor \${HOME}/.local/share/icons/hicolor \${DESTDIR}\${PREFIX}/share/pixmaps" # Directories for icons defined in the entries
TEMPORARY_DIR="\$CONFDIR/spmenu/run/cache" # Directory used to store cached entries
HIDDEN_ENTRY_KEYWORDS="\$HIDDEN_KEYWORDS" # Keywords that will be ignored, needs to be in grep -vE syntax.
ENTRY_KEYWORDS="\$KEYWORDS" # Keywords that will be matched, needs to be in grep -E syntax.
diff --git a/spmenu.1 b/spmenu.1
index e324307..6c36161 100644
--- a/spmenu.1
+++ b/spmenu.1
@@ -362,21 +362,31 @@ Useful for testing
Set config file to load to file
.TP
\f[V]-lcfg, --load-config\f[R]
-Load spmenu configuration (\[ti]/.spmenu.conf or
-\[ti]/.config/spmenu/spmenu.conf)
+Load spmenu configuration (\[ti]/.config/spmenu/spmenu.conf) on runtime
.TP
\f[V]-ncfg, --no-load-config\f[R]
-Don\[cq]t load spmenu configuration (\[ti]/.spmenu.conf or
-\[ti]/.config/spmenu/spmenu.conf)
+Don\[cq]t load spmenu configuration (\[ti]/.config/spmenu/spmenu.conf)
+on runtime
+.TP
+\f[V]-bf, --bind-file file\f[R]
+Set bind file to load to file
+.TP
+\f[V]-lbi, --load-binds\f[R]
+Exclusively load binds from file (\[ti]/.config/spmenu/binds.conf) on
+runtime
+.TP
+\f[V]-nlbi, --no-load-binds\f[R]
+Don\[cq]t exclusively load binds from file
+(\[ti]/.config/spmenu/binds.conf) on runtime
.TP
\f[V]-tm, --theme theme\f[R]
-Load theme `theme' on runtime.
+Load theme `theme' on runtime
.TP
\f[V]-ltm, --load-theme\f[R]
-Load theme
+Load theme (\[ti]/.config/spmenu/theme.conf) on runtime
.TP
\f[V]-nltm, --no-load-theme\f[R]
-Don\[cq]t load theme
+Don\[cq]t load theme (\[ti]/.config/spmenu/theme.conf) on runtime
.TP
\f[V]-v, --version\f[R]
Print spmenu version to stdout
@@ -1538,3 +1548,9 @@ me.
.SS See also
.IP \[bu] 2
spmenu_run(1)
+.IP \[bu] 2
+spmenu wiki (https://spmenu.speedie.site)
+.IP \[bu] 2
+spmenu git repository (https://git.speedie.site/spmenu)
+.IP \[bu] 2
+spmenu GitHub mirror (https://github.com/speediegq/spmenu)
diff --git a/spmenu.c b/spmenu.c
index d927dc2..42f5880 100644
--- a/spmenu.c
+++ b/spmenu.c
@@ -191,10 +191,9 @@ static int fullscreen = 0;
// config file
#if USECONFIG
-static int cconf = 0; // use custom config path?
-static int ctheme = 0; // use custom theme path?
static char *argconf = NULL; // arg config path
static char *argtheme = NULL; // arg theme path
+static char *argbinds = NULL; // arg binds path
#endif
// set an integer to 1 if we have rtl enabled, this saves a lot of lines and duplicate code
diff --git a/spmenu.html b/spmenu.html
index dc9d674..8636ffd 100644
--- a/spmenu.html
+++ b/spmenu.html
@@ -602,25 +602,38 @@ Set config file to load to file
-lcfg, --load-config
-Load spmenu configuration (~/.spmenu.conf or
-~/.config/spmenu/spmenu.conf)
+Load spmenu configuration (~/.config/spmenu/spmenu.conf) on runtime
-ncfg, --no-load-config
-Don’t load spmenu configuration (~/.spmenu.conf or
-~/.config/spmenu/spmenu.conf)
+Don’t load spmenu configuration (~/.config/spmenu/spmenu.conf) on
+runtime
+
+-bf, --bind-file file
+
+Set bind file to load to file
+
+-lbi, --load-binds
+
+Exclusively load binds from file (~/.config/spmenu/binds.conf) on
+runtime
+
+-nlbi, --no-load-binds
+
+Don’t exclusively load binds from file (~/.config/spmenu/binds.conf) on
+runtime
-tm, --theme theme
-Load theme ‘theme’ on runtime.
+Load theme ‘theme’ on runtime
-ltm, --load-theme
-Load theme
+Load theme (~/.config/spmenu/theme.conf) on runtime
-nltm, --no-load-theme
-Don’t load theme
+Don’t load theme (~/.config/spmenu/theme.conf) on runtime
-v, --version
@@ -1541,6 +1554,11 @@ alternatively email me.
See also