diff --git a/README.md b/README.md index 5398c75b..fb1cd33d 100644 --- a/README.md +++ b/README.md @@ -265,10 +265,10 @@ Help & settings, file details, media info and archive listing are shown in the P Filters support regexes to instantly (search-as-you-type) list the matching entries in the current directory. -There are 3 ways to reset a filter: -- pressing ^L (at the new/rename prompt ^L followed by Enter discards all changes and exits prompt) -- a search with no matches -- an extra backspace at the filter prompt (like vi) +Ways to exit filter prompt: +- press ^L to clear filter followed by Bksp (to clear the filter symbol, like vi) + - at other prompts ^L followed by Enter discards all changes and exits prompt +- run a search with no matches and press Enter Common use cases: - to list all matches starting with the filter expression, start the expression with a `^` (caret) symbol diff --git a/nnn.1 b/nnn.1 index 7685c4c0..a3e30575 100644 --- a/nnn.1 +++ b/nnn.1 @@ -188,14 +188,13 @@ instructions. Filters support regexes to instantly (search-as-you-type) list the matching entries in the current directory. .Pp -There are 3 ways to reset a filter: +Ways to exit filter prompt: .Pp -(1) pressing \fI^L\fR (at the new/rename prompt \fI^L\fR followed by \fIEnter\fR -discards all changes and exits prompt), +(1) press \fI^L\fR to clear filter followed by \fIBksp\fR (to clear the filter symbol, like vi) .br -(2) a search with no matches or + - at other prompts \fI^L\fR followed by \fIEnter\fR discards all changes and exits prompt .br -(3) an extra backspace at the filter prompt (like vi). +(2) run a search with no matches and press \fIEnter\fR .Pp Common use cases: .Pp diff --git a/nnn.c b/nnn.c index 52176370..dfb7b712 100644 --- a/nnn.c +++ b/nnn.c @@ -1096,14 +1096,24 @@ static int filterentries(char *path) printprompt(ln); while ((r = get_wch(ch)) != ERR) { - if (*ch == 127 /* handle DEL */ || *ch == KEY_DC || *ch == KEY_BACKSPACE || *ch == '\b') { - if (len == 1) { + switch (*ch) { + case KEY_DC: // fallthrough + case KEY_BACKSPACE: // fallthrough + case '\b': // fallthrough + case CONTROL('L'): // fallthrough + case 127: /* handle DEL */ + if (len == 1 && *ch != CONTROL('L')) { cur = oldcur; *ch = CONTROL('L'); goto end; } - wln[--len] = '\0'; + if (*ch == CONTROL('L')) + while (len > 1) + wln[--len] = '\0'; + else + wln[--len] = '\0'; + if (len == 1) cur = oldcur; @@ -1114,9 +1124,7 @@ static int filterentries(char *path) printprompt(ln); continue; - } - - if (*ch == 27) { /* Exit filter mode on Escape */ + case 27: /* Exit filter mode on Escape */ cur = oldcur; *ch = CONTROL('L'); goto end;