]> Sergey Matveev's repositories - nnn.git/commitdiff
Add SEL_SH and bring out spawning of the shell in the main loop
authorsin <sin@2f30.org>
Tue, 21 Oct 2014 13:54:32 +0000 (14:54 +0100)
committersin <sin@2f30.org>
Tue, 21 Oct 2014 13:54:32 +0000 (14:54 +0100)
noice.c

diff --git a/noice.c b/noice.c
index b01961feb9a385e9b3ef720f2dceba243ad919f9..aad67ba51303df1526f7c5c7e607619709ffe9f3 100644 (file)
--- a/noice.c
+++ b/noice.c
@@ -198,10 +198,14 @@ printerr(int ret, char *prefix)
  * On movement it updates *cur
  * Returns SEL_{QUIT,BACK,GOIN,FLTR} otherwise
  */
-#define SEL_QUIT 1
-#define SEL_BACK 2
-#define SEL_GOIN 3
-#define SEL_FLTR 4
+enum {
+       SEL_QUIT = 1,
+       SEL_BACK,
+       SEL_GOIN,
+       SEL_FLTR,
+       SEL_SH,
+};
+
 int
 nextsel(int *cur, int max)
 {
@@ -253,10 +257,7 @@ nextsel(int *cur, int max)
                        (*cur) -= MIN((LINES - 4) / 2, *cur);
                break;
        case '!':
-               exitcurses();
-               spawn("/bin/sh", NULL);
-               initcurses();
-               break;
+               return SEL_SH;
        }
 
        return 0;
@@ -472,11 +473,7 @@ redraw:
                }
 
 nochange:
-               if (chdir(path) == -1)
-                       printwarn();
                ret = nextsel(&cur, n);
-               if (chdir(ipath) == -1)
-                       printwarn();
                switch (ret) {
                case SEL_QUIT:
                        free(path);
@@ -598,6 +595,14 @@ nochange:
                        DPRINTF_S(filter);
                        cur = 0;
                        goto out;
+               case SEL_SH:
+                       if (chdir(path) == -1)
+                               printwarn();
+                       exitcurses();
+                       spawn("/bin/sh", NULL);
+                       initcurses();
+                       if (chdir(ipath) == -1)
+                               printwarn();
                }
        }