]> Sergey Matveev's repositories - nnn.git/commitdiff
Support XDG_CONFIG_HOME
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 9 Jun 2019 05:06:35 +0000 (10:36 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 9 Jun 2019 05:06:35 +0000 (10:36 +0530)
scripts/quitcd/quitcd.bash
scripts/quitcd/quitcd.csh
scripts/quitcd/quitcd.fish
scripts/quitcd/quitcd.zsh
src/nnn.c

index 85b028ac444053716a970ce562e2d9b38ea9422e..3f9f7fc189e3c4fdcd8a921cbb65ed6cd2c65763 100644 (file)
@@ -2,7 +2,7 @@ n()
 {
     nnn "$@"
 
-    NNN_TMPFILE=~/.config/nnn/.lastd
+    NNN_TMPFILE=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd
 
     if [ -f $NNN_TMPFILE ]; then
             . $NNN_TMPFILE
index 62e989797da7c25e7aa65b03fe081dd543bb0c65..9ea952d2e774f9c75b96a51120dabd947e178404 100644 (file)
@@ -1,2 +1,3 @@
+# NOTE: set NNN_TMPFILE correctly if you use 'XDG_CONFIG_HOME'
 set NNN_TMPFILE=~/.config/nnn/.lastd
 alias n 'nnn; source "$NNN_TMPFILE"; rm "$NNN_TMPFILE"'
index 347801440ffb34fcff3cbfca2044d1a79adf7de4..674338666f08be0b618aa1fdd93018119bdcb57f 100644 (file)
@@ -5,6 +5,7 @@
 function n --description 'support nnn quit and change directory'
     nnn $argv
 
+    # NOTE: set NNN_TMPFILE correctly if you use 'XDG_CONFIG_HOME'
     set NNN_TMPFILE ~/.config/nnn/.lastd
 
     if test -e $NNN_TMPFILE
index 79f5a03042fdce68ddb8f6ea5b9a756df7bc44a0..24860ac336bcdbe0cc0e968b135c96ed015e6aa2 100644 (file)
@@ -2,7 +2,7 @@ n()
 {
     nnn "$@"
 
-    NNN_TMPFILE=~/.config/nnn/.lastd
+    NNN_TMPFILE=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd
 
     if [ -f $NNN_TMPFILE ]; then
             . $NNN_TMPFILE
index 161b7dba9c701e3179aa0acf0c1043c936713bb6..869d5b73dfad7183f6d61b72c987e50ba62d57f0 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -4301,47 +4301,77 @@ static void usage(void)
 static bool setup_config(void)
 {
        size_t r, len;
+       char *xdgcfg = getenv("XDG_CONFIG_HOME");
+       bool xdg = FALSE;
 
        /* Set up configuration file paths */
-       len = strlen(home) + 1 + 20; /* add length of "/.config/nnn/plugins" */
+       if (xdgcfg && xdgcfg[0]) {
+               DPRINTF_S(xdgcfg);
+               if (xdgcfg[0] == '~') {
+                       r = xstrlcpy(g_buf, home, PATH_MAX);
+                       xstrlcpy(g_buf + r - 1, xdgcfg + 1, PATH_MAX);
+                       xdgcfg = g_buf;
+                       DPRINTF_S(xdgcfg);
+               }
+
+               if (!xdiraccess(xdgcfg)) {
+                       xerror();
+                       return FALSE;
+               }
+
+               len = strlen(xdgcfg) + 1 + 12; /* add length of "/nnn/plugins" */
+               xdg = TRUE;
+       }
+
+       if (!xdg)
+               len = strlen(home) + 1 + 20; /* add length of "/.config/nnn/plugins" */
+
        cfgdir = (char *)malloc(len);
        plugindir = (char *)malloc(len);
        if (!cfgdir || !plugindir) {
                xerror();
                return FALSE;
        }
-       r = xstrlcpy(cfgdir, home, len);
 
-       /* Create ~/.config */
-       xstrlcpy(cfgdir + r - 1, "/.config", len - r);
-       DPRINTF_S(cfgdir);
-       if (!create_dir(cfgdir)) {
-               xerror();
-               return FALSE;
+       if (xdg) {
+               xstrlcpy(cfgdir, xdgcfg, len);
+               r = len - 12;
+       } else {
+               r = xstrlcpy(cfgdir, home, len);
+
+               /* Create ~/.config */
+               xstrlcpy(cfgdir + r - 1, "/.config", len - r);
+               DPRINTF_S(cfgdir);
+               if (!create_dir(cfgdir)) {
+                       xerror();
+                       return FALSE;
+               }
+
+               r += 8; /* length of "/.config" */
        }
 
        /* Create ~/.config/nnn */
-       xstrlcpy(cfgdir + r - 1, "/.config/nnn", len - r);
+       xstrlcpy(cfgdir + r - 1, "/nnn", len - r);
        DPRINTF_S(cfgdir);
        if (!create_dir(cfgdir)) {
                xerror();
                return FALSE;
        }
 
-       xstrlcpy(cfgdir + r + 12 - 1, "/plugins", 9);
+       /* Create ~/.config/nnn/plugins */
+       xstrlcpy(cfgdir + r + 4 - 1, "/plugins", 9);
        DPRINTF_S(cfgdir);
 
        xstrlcpy(plugindir, cfgdir, len);
        DPRINTF_S(plugindir);
 
-       /* Create ~/.config/nnn/plugins */
        if (!create_dir(cfgdir)) {
                xerror();
                return FALSE;
        }
 
        /* Reset to config path */
-       cfgdir[r + 11] = '\0';
+       cfgdir[r + 3] = '\0';
        DPRINTF_S(cfgdir);
 
        /* Set selection file path */