allow specifying a specific configuration file to load
This commit is contained in:
parent
5eb54af7a6
commit
68b58325d4
|
@ -278,11 +278,15 @@ You may use long, descriptive arguments or the shorter arguments.
|
|||
`-nwm, --unmanaged`
|
||||
: Don't spawn spmenu as a window manager controlled client/window. Useful for testing
|
||||
|
||||
`-cf, --config-file file`
|
||||
: Set config file to load to file
|
||||
|
||||
`-lcfg, --load-config`
|
||||
: Load spmenu configuration (~/.spmenu or ~/.config/spmenu/spmenurc)
|
||||
: Load spmenu configuration (~/.config/spmenu/spmenu.conf, ~/.spmenurc or ~/.config/spmenu/spmenurc)
|
||||
|
||||
`-ncfg, --no-load-config`
|
||||
: Don't load spmenu configuration (~/.spmenu or ~/.config/spmenu/spmenurc)
|
||||
: Don't load spmenu configuration (~/.config/spmenu/spmenu.conf, ~/.spmenurc
|
||||
or ~/.config/spmenu/spmenurc)
|
||||
|
||||
`-v, --version`
|
||||
: Print spmenu version to stdout
|
||||
|
|
28
libs/argv.c
28
libs/argv.c
|
@ -4,7 +4,7 @@ readargs(int argc, char *argv[])
|
|||
int i = 0;
|
||||
int j = 0;
|
||||
|
||||
int cxrdb = 0;
|
||||
int profilecmd = 0;
|
||||
|
||||
// check if we should load the xrdb/config, because it needs to be loaded before arguments are checked
|
||||
// priority: internal -> config -> xresources -> arguments
|
||||
|
@ -21,6 +21,13 @@ readargs(int argc, char *argv[])
|
|||
globalcolors = 1;
|
||||
} else if (!strcmp(argv[j], "-ngbc") || (!strcmp(argv[j], "--no-global-colors"))) {
|
||||
globalcolors = 0;
|
||||
} 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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,10 +41,10 @@ readargs(int argc, char *argv[])
|
|||
|
||||
// also load config/profile if .Xresources
|
||||
if (loadconfig) {
|
||||
cxrdb = system("command -v spmenu_profile > /dev/null && spmenu_profile --spmenu-load-default-profile > /dev/null");
|
||||
profilecmd = system("command -v spmenu_profile > /dev/null && spmenu_profile --spmenu-load-default-profile > /dev/null");
|
||||
}
|
||||
|
||||
if (!cxrdb||cxrdb) // load .Xresources, cxrdb is only here to avoid an annoying gcc warning
|
||||
if (!profilecmd||profilecmd) // load .Xresources, profilecmd is only here to avoid an annoying gcc warning
|
||||
load_xresources();
|
||||
}
|
||||
|
||||
|
@ -170,6 +177,9 @@ readargs(int argc, char *argv[])
|
|||
|| !strcmp(argv[i], "-ngbc")
|
||||
|| !strcmp(argv[i], "--global-colors")
|
||||
|| !strcmp(argv[i], "--no-global-colors")
|
||||
|| !strcmp(argv[i], "-cf")
|
||||
|| !strcmp(argv[i], "--config-file")
|
||||
|| !strcmp(argv[i], argconf)
|
||||
))
|
||||
continue;
|
||||
else
|
||||
|
@ -350,6 +360,13 @@ readargs(int argc, char *argv[])
|
|||
|| !strcmp(argv[i], "-ncfg")
|
||||
|| !strcmp(argv[i], "--load-config")
|
||||
|| !strcmp(argv[i], "--no-load-config")
|
||||
|| !strcmp(argv[i], "-gbc")
|
||||
|| !strcmp(argv[i], "-ngbc")
|
||||
|| !strcmp(argv[i], "--global-colors")
|
||||
|| !strcmp(argv[i], "--no-global-colors")
|
||||
|| !strcmp(argv[i], "-cf")
|
||||
|| !strcmp(argv[i], "--config-file")
|
||||
|| !strcmp(argv[i], argconf)
|
||||
))
|
||||
continue;
|
||||
else
|
||||
|
@ -460,8 +477,9 @@ usage(void)
|
|||
"spmenu -itc, --image-topcenter Position the image in the top center\n"
|
||||
"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 -lcfg, --load-config Load spmenu configuration (~/.spmenu or ~/.config/spmenu/spmenurc)\n"
|
||||
"spmenu -ncfg, --no-load-config Don't load spmenu configuration (~/.spmenu or ~/.config/spmenu/spmenurc)\n"
|
||||
"spmenu -cf, --config-file <file> Set config file to load to <file>\n"
|
||||
"spmenu -lcfg, --load-config Load spmenu configuration (~/.config/spmenu/spmenu.conf, ~/.spmenu or ~/.config/spmenu/spmenurc)\n"
|
||||
"spmenu -ncfg, --no-load-config Don't load spmenu configuration (~/.config/spmenu/spmenu.conf, ~/.spmenu or ~/.config/spmenu/spmenurc)\n"
|
||||
"spmenu -v, --version Print spmenu version to stdout\n"
|
||||
"\n", stdout);
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ conf_init(void)
|
|||
if (!loadconfig) return;
|
||||
|
||||
// get path for configuration file
|
||||
if (!cconf || !argconf) {
|
||||
if (!(xdg_conf = getenv("XDG_CONFIG_HOME"))) {
|
||||
// ~/.config/spmenu/spmenu.conf
|
||||
home = getenv("HOME");
|
||||
|
@ -31,6 +32,13 @@ conf_init(void)
|
|||
// 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);
|
||||
}
|
||||
|
||||
// don't bother trying to load if it doesn't exist.
|
||||
if (access(cfgfile, F_OK) != 0) {
|
||||
|
|
11
spmenu.1
11
spmenu.1
|
@ -298,13 +298,16 @@ Useful for testing
|
|||
Don\[cq]t spawn spmenu as a window manager controlled client/window.
|
||||
Useful for testing
|
||||
.TP
|
||||
\f[V]-cf, --config-file file\f[R]
|
||||
Set config file to load to file
|
||||
.TP
|
||||
\f[V]-lcfg, --load-config\f[R]
|
||||
Load spmenu configuration (\[ti]/.spmenu or
|
||||
\[ti]/.config/spmenu/spmenurc)
|
||||
Load spmenu configuration (\[ti]/.config/spmenu/spmenu.conf,
|
||||
\[ti]/.spmenurc or \[ti]/.config/spmenu/spmenurc)
|
||||
.TP
|
||||
\f[V]-ncfg, --no-load-config\f[R]
|
||||
Don\[cq]t load spmenu configuration (\[ti]/.spmenu or
|
||||
\[ti]/.config/spmenu/spmenurc)
|
||||
Don\[cq]t load spmenu configuration (\[ti]/.config/spmenu/spmenu.conf,
|
||||
\[ti]/.spmenurc or \[ti]/.config/spmenu/spmenurc)
|
||||
.TP
|
||||
\f[V]-v, --version\f[R]
|
||||
Print spmenu version to stdout
|
||||
|
|
5
spmenu.c
5
spmenu.c
|
@ -161,6 +161,11 @@ static int imageh = 0;
|
|||
static int imageg = 0;
|
||||
#endif
|
||||
|
||||
#if USECONFIG
|
||||
static int cconf = 0; // custom config path
|
||||
static char *argconf = NULL;
|
||||
#endif
|
||||
|
||||
// set an integer to 1 if we have rtl enabled, this saves a lot of lines and duplicate code
|
||||
#if USERTL
|
||||
static int isrtl = 1;
|
||||
|
|
Loading…
Reference in a new issue