diff --git a/src/nnn.c b/src/nnn.c index f6812970..1d46b291 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -1810,6 +1810,12 @@ static int visible_str(const fltrexp_t *fltrexp, const char *fname) static int (*filterfn)(const fltrexp_t *fltr, const char *fname) = &visible_str; +static void clearfilter() +{ + if (g_ctx[cfg.curctx].c_fltr[1]) + g_ctx[cfg.curctx].c_fltr[1] = 0; +} + static int entrycmp(const void *va, const void *vb) { const struct entry *pa = (pEntry)va; @@ -1883,6 +1889,10 @@ static int nextsel(int presel) c = getch(); //DPRINTF_D(c); + /* Clear previous filter when manually starting */ + if (c == FILTER) + clearfilter(); + if (presel == MSGWAIT) { if (cfg.filtermode) c = FILTER; @@ -4371,7 +4381,7 @@ nochange: /* Save history */ xstrlcpy(lastname, xbasename(path), NAME_MAX + 1); - g_ctx[cfg.curctx].c_fltr[1] = '\0'; + clearfilter(); xstrlcpy(path, dir, PATH_MAX); @@ -4396,7 +4406,7 @@ nochange: /* Toggle filter mode on left click on last 2 lines */ if (event.y >= xlines - 2 && event.bstate == BUTTON1_PRESSED) { - g_ctx[cfg.curctx].c_fltr[1] = '\0'; + clearfilter(); cfg.filtermode ^= 1; if (cfg.filtermode) { presel = FILTER; @@ -4464,7 +4474,8 @@ nochange: xstrlcpy(lastdir, path, PATH_MAX); xstrlcpy(path, newpath, PATH_MAX); - lastname[0] = g_ctx[cfg.curctx].c_fltr[1] = '\0'; + lastname[0] = '\0'; + clearfilter(); setdirwatch(); goto begin; case S_IFREG: @@ -4500,7 +4511,7 @@ nochange: if (runfile[0]) runfile[0] = '\0'; - g_ctx[cfg.curctx].c_fltr[1] = '\0'; + clearfilter(); setdirwatch(); goto begin; @@ -4588,7 +4599,8 @@ nochange: xstrlcpy(lastdir, path, PATH_MAX); xstrlcpy(path, newpath, PATH_MAX); - lastname[0] = g_ctx[cfg.curctx].c_fltr[1] = '\0'; + lastname[0] = '\0'; + clearfilter(); DPRINTF_S(path); setdirwatch(); goto begin; @@ -4688,7 +4700,8 @@ nochange: if (strcmp(path, newpath) == 0) break; - lastname[0] = g_ctx[cfg.curctx].c_fltr[1] = '\0'; + lastname[0] = '\0'; + clearfilter(); /* Save last working directory */ xstrlcpy(lastdir, path, PATH_MAX); @@ -4740,6 +4753,7 @@ nochange: cfg.filtermode ^= 1; if (cfg.filtermode) { presel = FILTER; + clearfilter(); goto nochange; } @@ -5299,7 +5313,7 @@ nochange: lastname[0] = '\0'; } setdirwatch(); - g_ctx[cfg.curctx].c_fltr[1] = 0; + clearfilter(); goto begin; case SEL_LAUNCH: launch_app(path, newpath);