}
/* Print prompt on the last line */
-static void printprompt(char *str)
+static void printprompt(const char *str)
{
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 */
}
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')
r = F_NORMAL;
else
}
/* 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') {
r = openat(fd, tmp, O_CREAT, 0666);
close(r);
/* Check if another file with same name exists */
if (faccessat(fd, tmp, F_OK, AT_SYMLINK_NOFOLLOW) != -1) {
/* 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);
break;
}
dentfree(dents);
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);
return;
} /* switch (sel) */