@@ -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. | 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 <kbd>^L</kbd> (at the new/rename prompt <kbd>^L</kbd> followed by <kbd>Enter</kbd> 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 <kbd>^L</kbd> to clear filter followed by <kbd>Bksp</kbd> (to clear the filter symbol, like vi) | |||||
- at other prompts <kbd>^L</kbd> followed by <kbd>Enter</kbd> discards all changes and exits prompt | |||||
- run a search with no matches and press <kbd>Enter</kbd> | |||||
Common use cases: | Common use cases: | ||||
- to list all matches starting with the filter expression, start the expression with a `^` (caret) symbol | - to list all matches starting with the filter expression, start the expression with a `^` (caret) symbol | ||||
@@ -188,14 +188,13 @@ instructions. | |||||
Filters support regexes to instantly (search-as-you-type) list the matching | Filters support regexes to instantly (search-as-you-type) list the matching | ||||
entries in the current directory. | entries in the current directory. | ||||
.Pp | .Pp | ||||
There are 3 ways to reset a filter: | |||||
Ways to exit filter prompt: | |||||
.Pp | .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 | .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 | .br | ||||
(3) an extra backspace at the filter prompt (like vi). | |||||
(2) run a search with no matches and press \fIEnter\fR | |||||
.Pp | .Pp | ||||
Common use cases: | Common use cases: | ||||
.Pp | .Pp | ||||
@@ -1096,14 +1096,24 @@ static int filterentries(char *path) | |||||
printprompt(ln); | printprompt(ln); | ||||
while ((r = get_wch(ch)) != ERR) { | 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; | cur = oldcur; | ||||
*ch = CONTROL('L'); | *ch = CONTROL('L'); | ||||
goto end; | goto end; | ||||
} | } | ||||
wln[--len] = '\0'; | |||||
if (*ch == CONTROL('L')) | |||||
while (len > 1) | |||||
wln[--len] = '\0'; | |||||
else | |||||
wln[--len] = '\0'; | |||||
if (len == 1) | if (len == 1) | ||||
cur = oldcur; | cur = oldcur; | ||||
@@ -1114,9 +1124,7 @@ static int filterentries(char *path) | |||||
printprompt(ln); | printprompt(ln); | ||||
continue; | continue; | ||||
} | |||||
if (*ch == 27) { /* Exit filter mode on Escape */ | |||||
case 27: /* Exit filter mode on Escape */ | |||||
cur = oldcur; | cur = oldcur; | ||||
*ch = CONTROL('L'); | *ch = CONTROL('L'); | ||||
goto end; | goto end; | ||||