]> Sergey Matveev's repositories - nnn.git/commitdiff
Modular context switch
authorArun Prakash Jana <engineerarun@gmail.com>
Wed, 13 Mar 2019 15:24:23 +0000 (20:54 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Wed, 13 Mar 2019 15:24:23 +0000 (20:54 +0530)
src/nnn.c

index fa39f74260eecf09dd988a9816be86fe86b9a21d..449de4f8ce9b79296734c9d3d640592de387def4 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -1872,6 +1872,33 @@ static int xlink(char *suffix, char *path, char *buf, int type)
        return count;
 }
 
+static void savecurctx(settings *curcfg, char *path, char *curname, int r /* next context num */)
+{
+       settings cfg = *curcfg;
+
+#ifdef DIR_LIMITED_COPY
+       g_crc = 0;
+#endif
+       /* Save current context */
+       xstrlcpy(g_ctx[cfg.curctx].c_name, curname, NAME_MAX + 1);
+       g_ctx[cfg.curctx].c_cfg = cfg;
+
+       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;
+               xstrlcpy(g_ctx[r].c_path, path, PATH_MAX);
+               g_ctx[r].c_last[0] = '\0';
+               xstrlcpy(g_ctx[r].c_name, curname, NAME_MAX + 1);
+               g_ctx[r].c_cfg = cfg;
+               g_ctx[r].c_cfg.runscript = 0;
+       }
+
+       cfg.curctx = r;
+
+       *curcfg = cfg;
+}
+
 static bool parsebmstr(void)
 {
        int i = 0;
@@ -3172,30 +3199,14 @@ nochange:
                                        if (fd != '\r')
                                                continue;
                                }
-#ifdef DIR_LIMITED_COPY
-                               g_crc = 0;
-#endif
-                               /* Save current context */
-                               xstrlcpy(g_ctx[cfg.curctx].c_name, dents[cur].name, NAME_MAX + 1);
-                               g_ctx[cfg.curctx].c_cfg = cfg;
-
-                               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;
-                                       xstrlcpy(g_ctx[r].c_path, 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;
-                                       g_ctx[r].c_cfg.runscript = 0;
-                               }
+
+                               savecurctx(&cfg, path, dents[cur].name, r);
 
                                /* Reset the pointers */
                                path = g_ctx[r].c_path;
                                lastdir = g_ctx[r].c_last;
                                lastname = g_ctx[r].c_name;
 
-                               cfg.curctx = r;
                                setdirwatch();
                                goto begin;
                        }