diff --git a/src/nnn.c b/src/nnn.c index c4f0fcca..942d9506 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -692,6 +692,7 @@ static haiku_nm_h haiku_hnd; #endif /* __GNUC__ */ /* Forward declarations */ +static size_t xstrlcpy(char *dest, const char *src, size_t n); static void redraw(char *path); static int spawn(char *file, char *arg1, char *arg2, const char *dir, uchar flag); static int (*nftw_fn)(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf); @@ -797,8 +798,11 @@ static void printmsg(const char *msg) static void printwait(const char *msg, int *presel) { printmsg(msg); - if (presel) + if (presel) { *presel = MSGWAIT; + if (ndents) + xstrlcpy(g_ctx[cfg.curctx].c_name, dents[cur].name, NAME_MAX + 1); + } } /* Kill curses and display error before exiting */ @@ -2307,8 +2311,8 @@ static int nextsel(int presel) //DPRINTF_D(c); //DPRINTF_S(keyname(c)); - if (c == ERR) - c = 0; + if (c == ERR && presel == MSGWAIT) + c = (cfg.filtermode || filterset()) ? FILTER : CONTROL('L'); else if (c == FILTER || c == CONTROL('L')) /* Clear previous filter when manually starting */ clearfilter(); @@ -5238,11 +5242,8 @@ nochange: } sel = nextsel(presel); - if (presel) { - if (presel == MSGWAIT) - statusbar(path); + if (presel) presel = 0; - } switch (sel) { #ifndef NOMOUSE @@ -5657,17 +5658,18 @@ nochange: } } - /* Save current */ - if (ndents) - copycurname(); - if (cfg.filtermode || filterset()) presel = FILTER; - if (r == 'd' || r == 'a') - goto begin; + if (ndents) { + copycurname(); - qsort(dents, ndents, sizeof(*dents), entrycmpfn); + if (r == 'd' || r == 'a') + goto begin; + + qsort(dents, ndents, sizeof(*dents), entrycmpfn); + move_cursor(ndents ? dentfind(lastname, ndents) : 0, 0); + } continue; case SEL_STATS: // fallthrough case SEL_CHMODX: