Signed-off-by: Mihail Konev <[email protected]>
---
Whichever directories get added, they should not differ from libxkbcommon
not to "break per-user installs" between setxkbmap and users of the latter :)
setxkbmap.c | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/setxkbmap.c b/setxkbmap.c
index cf0f02d6e704..42b8c3f04137 100644
--- a/setxkbmap.c
+++ b/setxkbmap.c
@@ -381,6 +381,40 @@ setOptString(int *arg, int argc, char **argv, setting_t
*setting, enum source sr
/***====================================================================***/
/**
+ * Retrieve name of ~/.config/xkb directory.
+ */
+char *
+get_xdg_dir()
+{
+ static char path[PATH_MAX];
+
+ const char *home = getenv("HOME");
+ const char *xdg = getenv("XDG_CONFIG_HOME");
+ int rc;
+
+ if (xdg != NULL)
+ snprintf(path, sizeof path, "%s/xkb", xdg);
+ else
+ snprintf(path, sizeof path, "%s/.config/xkb", home);
+ return path;
+}
+/**
+ * Retrieve name of ~/.xkb directory.
+ */
+char *
+get_dot_dir()
+{
+ static char path[PATH_MAX];
+
+ const char *home = getenv("HOME");
+ snprintf(path, sizeof path, "%s/.config/xkb", home);
+ return path;
+}
+
+
+/***====================================================================***/
+
+/**
* Parse commandline arguments.
* Return True on success or False if an unrecognized option has been
* specified.
@@ -394,6 +428,8 @@ parseArgs(int argc, char **argv)
ok = True;
addToList(&inclPath, ".");
+ addToList(&inclPath, get_xdg_dir());
+ addToList(&inclPath, get_dot_dir());
addToList(&inclPath, DFLT_XKB_CONFIG_ROOT);
for (i = 1; (i < argc) && ok; i++)
{
--
2.9.2
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel