mirror of
https://github.com/emersion/kanshi
synced 2024-11-29 16:53:44 +01:00
Accept user-specified config path
Adds a -c,--config command line option that allows the user to specify an arbitrary config path.
This commit is contained in:
parent
acfad026c5
commit
7095bedd25
10
kanshi.1.scd
10
kanshi.1.scd
@ -6,7 +6,15 @@ kanshi - dynamic output configuration
|
|||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
*kanshi*
|
*kanshi* [options...]
|
||||||
|
|
||||||
|
# OPTIONS
|
||||||
|
|
||||||
|
*-h, --help*
|
||||||
|
Show help message and quit.
|
||||||
|
|
||||||
|
*-c, --config* <config>
|
||||||
|
Specifies a config file.
|
||||||
|
|
||||||
# SYNOPSIS
|
# SYNOPSIS
|
||||||
|
|
||||||
|
39
main.c
39
main.c
@ -1,6 +1,7 @@
|
|||||||
#define _POSIX_C_SOURCE 200809L
|
#define _POSIX_C_SOURCE 200809L
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <getopt.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -453,7 +454,11 @@ static const struct wl_registry_listener registry_listener = {
|
|||||||
.global_remove = registry_handle_global_remove,
|
.global_remove = registry_handle_global_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct kanshi_config *read_config(void) {
|
static struct kanshi_config *read_config(const char *config) {
|
||||||
|
if (config != NULL) {
|
||||||
|
return parse_config(config);
|
||||||
|
}
|
||||||
|
|
||||||
const char config_filename[] = "kanshi/config";
|
const char config_filename[] = "kanshi/config";
|
||||||
char config_path[PATH_MAX];
|
char config_path[PATH_MAX];
|
||||||
const char *xdg_config_home = getenv("XDG_CONFIG_HOME");
|
const char *xdg_config_home = getenv("XDG_CONFIG_HOME");
|
||||||
@ -472,12 +477,42 @@ static struct kanshi_config *read_config(void) {
|
|||||||
return parse_config(config_path);
|
return parse_config(config_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char usage[] = "Usage: %s [options...]\n"
|
||||||
|
" -h, --help Show help message and quit\n"
|
||||||
|
" -c, --config <path> Path to config file.\n";
|
||||||
|
|
||||||
|
static const struct option long_options[] = {
|
||||||
|
{"help", no_argument, 0, 'h'},
|
||||||
|
{"config", required_argument, 0, 'c'},
|
||||||
|
{0},
|
||||||
|
};
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
struct kanshi_config *config = read_config();
|
char *config_arg = NULL;
|
||||||
|
|
||||||
|
int opt;
|
||||||
|
while ((opt = getopt_long(argc, argv, "hc:", long_options, NULL)) != -1) {
|
||||||
|
switch (opt) {
|
||||||
|
case 'c':
|
||||||
|
free(config_arg);
|
||||||
|
config_arg = strdup(optarg);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
fprintf(stderr, usage, argv[0]);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, usage, argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct kanshi_config *config = read_config(config_arg);
|
||||||
if (config == NULL) {
|
if (config == NULL) {
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(config_arg);
|
||||||
|
|
||||||
struct wl_display *display = wl_display_connect(NULL);
|
struct wl_display *display = wl_display_connect(NULL);
|
||||||
if (display == NULL) {
|
if (display == NULL) {
|
||||||
fprintf(stderr, "failed to connect to display\n");
|
fprintf(stderr, "failed to connect to display\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user