diff --git a/src/nnn.c b/src/nnn.c index 5020e19f..5cebd773 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -1217,6 +1217,25 @@ static void archive_selection(const char *archive, const char *curpath) spawn("sh", "-c", g_buf, curpath, F_NORMAL | F_SIGINT); } +static bool write_lastdir(const char *curpath) +{ + char *tmp = getenv(env_cfg[NNN_TMPFILE]); + + if (!tmp) { + printmsg("set NNN_TMPFILE"); + return FALSE; + } + + FILE *fp = fopen(tmp, "w"); + + if (fp) { + fprintf(fp, "cd \"%s\"", curpath); + fclose(fp); + } + + return TRUE; +} + /* * Returns: * FALSE - a message is shown @@ -3917,23 +3936,8 @@ nochange: /* Picker mode: reset buffer or clear file */ if (copybufpos) cfg.pickraw ? copybufpos = 0 : writecp(NULL, 0); - - dentfree(dents); - return; - } - - tmp = getenv(env_cfg[NNN_TMPFILE]); - if (!tmp) { - printmsg("set NNN_TMPFILE"); + } else if (!write_lastdir(path)) goto nochange; - } - - FILE *fp = fopen(tmp, "w"); - - if (fp) { - fprintf(fp, "cd \"%s\"", path); - fclose(fp); - } } // fallthrough case SEL_QUITCTX: if (sel == SEL_QUITCTX) {