summaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
authorwerdl <werdl@users.noreply.github.com>2025-05-17 12:49:03 +0100
committerwerdl <werdl@users.noreply.github.com>2025-05-17 12:49:03 +0100
commit9412ea484f6893ee31262ac5d3e9ae7e49cdba27 (patch)
treec43b764ab3186eb8eaa34256c45e0bb51e4486fa /src/parser.c
parente3c0a4658e16025de7b649693814d9a0ee5a4028 (diff)
use xdg config dirs
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c37
1 files changed, 30 insertions, 7 deletions
diff --git a/src/parser.c b/src/parser.c
index d1bd533..de63e8d 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -3,7 +3,9 @@
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
+#include <unistd.h>
#include <string.h>
+#include <errno.h>
#include <X11/keysym.h>
#include "parser.h"
@@ -137,12 +139,33 @@ int parser(Config *cfg)
fputs("sxwmrc: HOME not set\n", stderr);
return -1;
}
- snprintf(path, sizeof path, "%s/.config/sxwmrc", home);
- FILE *f = fopen(path, "r");
- if (!f) {
- fprintf(stderr, "sxwmrc: cannot open %s\n", path);
- return -1;
- }
+
+ // check $XDG_CONFIG_HOME/sxwmrc, then $XDG_CONFIG_HOME/sxwm/sxwmrc, then $HOME/.config/sxwmrc
+ const char *xdg_config_home = getenv("XDG_CONFIG_HOME");
+
+ if (xdg_config_home) {
+ snprintf(path, sizeof path, "%s/sxwmrc", xdg_config_home);
+ if (access(path, R_OK) == 0) {
+ goto found;
+ }
+
+ snprintf(path, sizeof path, "%s/sxwm/sxwmrc", xdg_config_home);
+ if (access(path, R_OK) == 0) {
+ goto found;
+ }
+ }
+
+ snprintf(path, sizeof path, "%s/.config/sxwmrc", home);
+ if (access(path, R_OK) == 0) {
+ goto found;
+ }
+
+found:
+ FILE *f = fopen(path, "r");
+ if (!f) {
+ fprintf(stderr, "sxwmrc: cannot open %s\n", path);
+ return -1;
+ }
char line[512];
int lineno = 0;
@@ -363,4 +386,4 @@ const char **build_argv(const char *cmd)
argv[i] = NULL;
free(dup);
return argv;
-} \ No newline at end of file
+}