Browse Source

Add SEL_SH and bring out spawning of the shell in the main loop

master
sin 10 years ago
parent
commit
65b8aa2ab0
1 changed files with 17 additions and 12 deletions
  1. +17
    -12
      noice.c

+ 17
- 12
noice.c View File

@@ -198,10 +198,14 @@ printerr(int ret, char *prefix)
* On movement it updates *cur * On movement it updates *cur
* Returns SEL_{QUIT,BACK,GOIN,FLTR} otherwise * 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 int
nextsel(int *cur, int max) nextsel(int *cur, int max)
{ {
@@ -253,10 +257,7 @@ nextsel(int *cur, int max)
(*cur) -= MIN((LINES - 4) / 2, *cur); (*cur) -= MIN((LINES - 4) / 2, *cur);
break; break;
case '!': case '!':
exitcurses();
spawn("/bin/sh", NULL);
initcurses();
break;
return SEL_SH;
} }


return 0; return 0;
@@ -472,11 +473,7 @@ redraw:
} }


nochange: nochange:
if (chdir(path) == -1)
printwarn();
ret = nextsel(&cur, n); ret = nextsel(&cur, n);
if (chdir(ipath) == -1)
printwarn();
switch (ret) { switch (ret) {
case SEL_QUIT: case SEL_QUIT:
free(path); free(path);
@@ -598,6 +595,14 @@ nochange:
DPRINTF_S(filter); DPRINTF_S(filter);
cur = 0; cur = 0;
goto out; goto out;
case SEL_SH:
if (chdir(path) == -1)
printwarn();
exitcurses();
spawn("/bin/sh", NULL);
initcurses();
if (chdir(ipath) == -1)
printwarn();
} }
} }




Loading…
Cancel
Save