]> git.sur5r.net Git - i3/i3/commitdiff
More sensible lookup order loading the config.
authorFernando Tarlá Cardoso Lemos <fernandotcl@gmail.com>
Sat, 23 Oct 2010 20:20:08 +0000 (18:20 -0200)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 23 Oct 2010 22:09:33 +0000 (00:09 +0200)
man/i3.man
src/config.c

index 109248e57d6958494920c6f0b8a8b5d38c3f821c..00bad74b87d4d76299bd24b89310aafbc2cf37e3 100644 (file)
@@ -156,10 +156,10 @@ Exits i3.
 
 When starting, i3 looks for configuration files in the following order:
 
-1. ~/.config/i3/config (or $XDG_CONFIG_HOME/i3/config if set)
-2. /etc/xdg/i3/config (or $XDG_CONFIG_DIRS/i3/config if set)
-3. ~/.i3/config
-4. /etc/i3/config
+1. ~/.i3/config
+2. ~/.config/i3/config (or $XDG_CONFIG_HOME/i3/config if set)
+3. /etc/i3/config
+4. /etc/xdg/i3/config (or $XDG_CONFIG_DIRS/i3/config if set)
 
 You can specify a custom path using the -c option.
 
index 7e5f83b18d69328d0c8bae22abf9d2b302f845ec..b1456e04cbb66501c90a1d4e06b7df01d1993083 100644 (file)
@@ -232,14 +232,20 @@ void switch_mode(xcb_connection_t *conn, const char *new_mode) {
 }
 
 /*
- * Get the path of the first configuration file found. Checks the XDG folders
- * first ($XDG_CONFIG_HOME, $XDG_CONFIG_DIRS), then the traditional paths.
+ * Get the path of the first configuration file found. Checks the home directory
+ * first, then the system directory first, always taking into account the XDG
+ * Base Directory Specification ($XDG_CONFIG_HOME, $XDG_CONFIG_DIRS)
  *
  */
 static char *get_config_path() {
-        /* 1: check for $XDG_CONFIG_HOME/i3/config */
         char *xdg_config_home, *xdg_config_dirs, *config_path;
 
+        /* 1: check the traditional path under the home directory */
+        config_path = resolve_tilde("~/.i3/config");
+        if (path_exists(config_path))
+                return config_path;
+
+        /* 2: check for $XDG_CONFIG_HOME/i3/config */
         if ((xdg_config_home = getenv("XDG_CONFIG_HOME")) == NULL)
                 xdg_config_home = "~/.config";
 
@@ -252,7 +258,12 @@ static char *get_config_path() {
                 return config_path;
         free(config_path);
 
-        /* 2: check for $XDG_CONFIG_DIRS/i3/config */
+        /* 3: check the traditional path under /etc */
+        config_path = SYSCONFDIR "/i3/config";
+        if (path_exists(config_path))
+                return sstrdup(config_path);
+
+        /* 4: check for $XDG_CONFIG_DIRS/i3/config */
         if ((xdg_config_dirs = getenv("XDG_CONFIG_DIRS")) == NULL)
                 xdg_config_dirs = "/etc/xdg";
 
@@ -272,18 +283,9 @@ static char *get_config_path() {
         }
         free(buf);
 
-        /* 3: check traditional paths */
-        config_path = resolve_tilde("~/.i3/config");
-        if (path_exists(config_path))
-                return config_path;
-
-        config_path = sstrdup(SYSCONFDIR "/i3/config");
-        if (!path_exists(config_path))
-                die("Neither $XDG_CONFIG_HOME/i3/config, nor "
-                    "$XDG_CONFIG_DIRS/i3/config, nor ~/.i3/config nor "
-                    SYSCONFDIR "/i3/config exist.");
-
-        return config_path;
+        die("Unable to find the configuration file (looked at "
+                "~/.i3/config, $XDG_CONFIG_HOME/i3/config, "
+                SYSCONFDIR "i3/config and $XDG_CONFIG_DIRS/i3/config)");
 }
 
 /*