]> Sergey Matveev's repositories - nnn.git/commitdiff
Use filter pointer
authorArun Prakash Jana <engineerarun@gmail.com>
Fri, 9 Nov 2018 09:58:54 +0000 (15:28 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Fri, 9 Nov 2018 09:58:54 +0000 (15:28 +0530)
nnn.c

diff --git a/nnn.c b/nnn.c
index 33cbb0026569c5741e955635a9046cf8bde67f20..bb9b708646ca8222154d9e23bf38e4e3a087bdab 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -2469,11 +2469,11 @@ static void redraw(char *path)
        }
 }
 
-static void browse(char *ipath, char *hfilter)
+static void browse(char *ipath)
 {
-       static char *path, *lastdir, *lastname;
        static char newpath[PATH_MAX] __attribute__ ((aligned));
        static char mark[PATH_MAX] __attribute__ ((aligned));
+       char *path, *lastdir, *lastname, *hfilter;
        char *dir, *tmp, *run = NULL, *env = NULL;
        struct stat sb;
        int r, fd, presel, ncp = 0, copystartid = 0, copyendid = 0;
@@ -2484,12 +2484,12 @@ static void browse(char *ipath, char *hfilter)
        xstrlcpy(g_ctx[0].c_path, ipath, PATH_MAX); /* current directory */
        path = g_ctx[0].c_path;
        xstrlcpy(g_ctx[0].c_init, ipath, PATH_MAX); /* start directory */
+       g_ctx[0].c_last[0] = g_ctx[0].c_name[0] = newpath[0] = mark[0] = '\0';
        lastdir = g_ctx[0].c_last; /* last visited directory */
        lastname = g_ctx[0].c_name; /* last visited filename */
        g_ctx[0].c_cfg = cfg; /* current configuration */
-
-       xstrlcpy(path, ipath, PATH_MAX);
-       lastname[0] = newpath[0] = lastdir[0] = mark[0] = '\0';
+       initfilter(cfg.showhidden, g_ctx[0].c_fltr); /* Show hidden filter */
+       hfilter = g_ctx[0].c_fltr;
 
        if (cfg.filtermode)
                presel = FILTER;
@@ -2771,22 +2771,17 @@ nochange:
                                        /* Save current context */
                                        xstrlcpy(g_ctx[cfg.curctx].c_name, dents[cur].name, NAME_MAX + 1);
                                        g_ctx[cfg.curctx].c_cfg = cfg;
-                                       xstrlcpy(g_ctx[cfg.curctx].c_fltr, hfilter, DOT_FILTER_LEN);
 
-                                       if (!g_ctx[r].c_cfg.ctxactive) {
+                                       if (g_ctx[r].c_cfg.ctxactive) /* Switch to saved context */
+                                               cfg = g_ctx[r].c_cfg;
+                                       else { /* Setup a new context from current context */
                                                g_ctx[r].c_cfg.ctxactive = 1;
-
-                                               /* Setup a new context from current context */
                                                xstrlcpy(g_ctx[r].c_path, path, PATH_MAX);
                                                xstrlcpy(g_ctx[r].c_init, path, PATH_MAX);
                                                g_ctx[r].c_last[0] = '\0';
                                                xstrlcpy(g_ctx[r].c_name, dents[cur].name, NAME_MAX + 1);
                                                g_ctx[r].c_cfg = cfg;
                                                xstrlcpy(g_ctx[r].c_fltr, hfilter, DOT_FILTER_LEN);
-                                       } else {
-                                               /* Switch to saved context */
-                                               cfg = g_ctx[r].c_cfg;
-                                               xstrlcpy(hfilter, g_ctx[r].c_fltr, DOT_FILTER_LEN);
                                        }
 
                                        /* Reset the pointers */
@@ -2794,6 +2789,7 @@ nochange:
                                        ipath = g_ctx[r].c_init;
                                        lastdir = g_ctx[r].c_last;
                                        lastname = g_ctx[r].c_name;
+                                       hfilter = g_ctx[r].c_fltr;
 
                                        cfg.curctx = r;
                                        if (cfg.filtermode)
@@ -3315,7 +3311,7 @@ nochange:
                                        lastdir = g_ctx[r].c_last;
                                        lastname = g_ctx[r].c_name;
                                        cfg = g_ctx[r].c_cfg;
-                                       xstrlcpy(hfilter, g_ctx[r].c_fltr, NAME_MAX + 1);
+                                       hfilter = g_ctx[r].c_fltr;
 
                                        cfg.curctx = r;
                                        if (cfg.filtermode)
@@ -3384,7 +3380,7 @@ static void usage(void)
 int main(int argc, char *argv[])
 {
        static char cwd[PATH_MAX] __attribute__ ((aligned));
-       char *ipath = NULL, hfilter[DOT_FILTER_LEN] = {'\0'}; /* Hidden file filter */
+       char *ipath = NULL;
        int opt;
 
        /* Confirm we are in a terminal */
@@ -3458,7 +3454,6 @@ int main(int argc, char *argv[])
 
        if (getuid() == 0 || getenv("NNN_SHOW_HIDDEN"))
                cfg.showhidden = 1;
-       initfilter(cfg.showhidden, hfilter);
 
 #ifdef LINUX_INOTIFY
        /* Initialize inotify */
@@ -3533,7 +3528,7 @@ int main(int argc, char *argv[])
        enabledbg();
 #endif
        initcurses();
-       browse(ipath, hfilter);
+       browse(ipath);
        exitcurses();
 
        if (g_cppath[0])