]> Sergey Matveev's repositories - nnn.git/commitdiff
Unify cd HOME and BEGIN
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 2 Jul 2017 18:58:09 +0000 (00:28 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 2 Jul 2017 18:58:09 +0000 (00:28 +0530)
nnn.c

diff --git a/nnn.c b/nnn.c
index 7bd90a1f721d0aad691b45f920c2c2ee7c00cc79..257dc6c89af4f8aa48ddbface3721ededf19af1c 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -1861,7 +1861,7 @@ browse(char *ipath, char *ifilter)
        char path[PATH_MAX], oldpath[PATH_MAX], newpath[PATH_MAX];
        char lastdir[PATH_MAX];
        char fltr[LINE_MAX];
-       char *dir, *tmp, *run, *env;
+       char *dir, *tmp, *run, *env, *tgt=NULL;
        struct stat sb;
        int r, fd, presel;
        enum action sel = SEL_RUNARG + 1;
@@ -2200,54 +2200,43 @@ nochange:
                        goto begin;
                }
                case SEL_CDHOME:
-                       tmp = getenv("HOME");
-                       if (tmp == NULL) {
+                       tgt = getenv("HOME");
+                       if (tgt == NULL) {
                                clearprompt();
                                goto nochange;
-                       }
+                       } // fallthrough
+               case SEL_CDBEGIN:
+                       if (!tgt)
+                               tgt = ipath;
 
-                       if (access(tmp, R_OK) == -1) {
+                       if (access(tgt, R_OK) == -1) {
                                printwarn();
+                               tgt = NULL;
                                goto nochange;
                        }
 
-                       if (xstrcmp(path, tmp) == 0)
+                       if (xstrcmp(path, tgt) == 0) {
+                               tgt = NULL;
                                break;
-
-                       /* Save last working directory */
-                       xstrlcpy(lastdir, path, PATH_MAX);
-
-                       xstrlcpy(path, tmp, PATH_MAX);
-                       oldpath[0] = '\0';
-                       /* Reset filter */
-                       xstrlcpy(fltr, ifilter, LINE_MAX);
-                       DPRINTF_S(path);
-                       if (cfg.filtermode)
-                               presel = FILTER;
-                       goto begin;
-               case SEL_CDBEGIN:
-                       if (access(ipath, R_OK) == -1) {
-                               printwarn();
-                               goto nochange;
                        }
 
-                       if (xstrcmp(path, ipath) == 0)
-                               break;
-
                        /* Save last working directory */
                        xstrlcpy(lastdir, path, PATH_MAX);
 
-                       xstrlcpy(path, ipath, PATH_MAX);
+                       xstrlcpy(path, tgt, PATH_MAX);
                        oldpath[0] = '\0';
                        /* Reset filter */
                        xstrlcpy(fltr, ifilter, LINE_MAX);
                        DPRINTF_S(path);
                        if (cfg.filtermode)
                                presel = FILTER;
+                       tgt = NULL;
                        goto begin;
                case SEL_CDLAST:
-                       if (lastdir[0] == '\0')
-                               break;
+                       if (lastdir[0] == '\0') {
+                               printmsg("Hit end of history...");
+                               goto nochange;
+                       }
 
                        if (access(lastdir, R_OK) == -1) {
                                printwarn();
@@ -2363,7 +2352,7 @@ nochange:
 
                        break;
                }
-               case SEL_MEDIA:
+               case SEL_MEDIA: // fallthrough
                case SEL_FMEDIA:
                        if (ndents > 0) {
                                mkpath(path, dents[cur].name, oldpath,