Browse Source

Confirm program quit whan multiple contexts are active

master
Arun Prakash Jana 6 years ago
parent
commit
07e643b10f
No known key found for this signature in database GPG Key ID: A75979F35C080412
1 changed files with 37 additions and 29 deletions
  1. +37
    -29
      src/nnn.c

+ 37
- 29
src/nnn.c View File

@@ -434,10 +434,20 @@ static void printerr(int linenum)
} }


/* Print prompt on the last line */ /* Print prompt on the last line */
static void printprompt(char *str)
static void printprompt(const char *str)
{ {
clearprompt(); clearprompt();
printw(str);
if (str)
printw(str);
}

static int get_input(const char *prompt)
{
printprompt(prompt);
cleartimeout();
int r = getch();
settimeout();
return r;
} }


/* Increase the limit on open file descriptors, if possible */ /* Increase the limit on open file descriptors, if possible */
@@ -3123,10 +3133,7 @@ nochange:
} }


if (sel == SEL_OPEN) { if (sel == SEL_OPEN) {
printprompt("press 'c' for cli mode");
cleartimeout();
r = getch();
settimeout();
r = get_input("press 'c' for cli mode");
if (r == 'c') if (r == 'c')
r = F_NORMAL; r = F_NORMAL;
else else
@@ -3195,10 +3202,7 @@ nochange:
} }


/* Check if it's a dir or file */ /* Check if it's a dir or file */
printprompt("press 'f'(ile) or 'd'(ir)");
cleartimeout();
r = getch();
settimeout();
r = get_input("press 'f'(ile) or 'd'(ir)");
if (r == 'f') { if (r == 'f') {
r = openat(fd, tmp, O_CREAT, 0666); r = openat(fd, tmp, O_CREAT, 0666);
close(r); close(r);
@@ -3246,11 +3250,7 @@ nochange:
/* Check if another file with same name exists */ /* Check if another file with same name exists */
if (faccessat(fd, tmp, F_OK, AT_SYMLINK_NOFOLLOW) != -1) { if (faccessat(fd, tmp, F_OK, AT_SYMLINK_NOFOLLOW) != -1) {
/* File with the same name exists */ /* File with the same name exists */
printprompt("press 'y' to overwrite");
cleartimeout();
r = getch();
settimeout();
if (r != 'y') {
if (get_input("press 'y' to overwrite") != 'y') {
close(fd); close(fd);
break; break;
} }
@@ -3361,24 +3361,32 @@ nochange:
dentfree(dents); dentfree(dents);
return; return;
} }
case SEL_CDQUIT:
{
tmp = getenv("NNN_TMPFILE");
if (!tmp) {
printmsg("set NNN_TMPFILE");
goto nochange;
}
case SEL_CDQUIT: // fallthrough
case SEL_QUIT:
for (r = 0; r < MAX_CTX; ++r)
if (r != cfg.curctx && g_ctx[r].c_cfg.ctxactive) {
r = get_input("press 'y' to quit all contexts");
break;
}

if (!(r == MAX_CTX || r == 'y'))
break;


FILE *fp = fopen(tmp, "w");
if (sel == SEL_CDQUIT) {
tmp = getenv("NNN_TMPFILE");
if (!tmp) {
printmsg("set NNN_TMPFILE");
goto nochange;
}

FILE *fp = fopen(tmp, "w");


if (fp) {
fprintf(fp, "cd \"%s\"", path);
fclose(fp);
if (fp) {
fprintf(fp, "cd \"%s\"", path);
fclose(fp);
}
} }


/* Fall through to exit */
} // fallthrough
case SEL_QUIT:
dentfree(dents); dentfree(dents);
return; return;
} /* switch (sel) */ } /* switch (sel) */


Loading…
Cancel
Save