aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2018-10-28 01:52:07 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2018-10-28 01:52:07 +0530
commitc820e0c9f9be00411d8a8a0170e3738a48988ead (patch)
tree95d1695f112507b027770d7e7061bc7538ae4975
parent80e5cdfe8d634fc661855e0654d917503b1c1759 (diff)
downloadnnn-c820e0c9f9be00411d8a8a0170e3738a48988ead.tar.gz
Use ^L to clear filter prompt
-rw-r--r--README.md8
-rw-r--r--nnn.19
-rw-r--r--nnn.c20
3 files changed, 22 insertions, 15 deletions
diff --git a/README.md b/README.md
index 5398c75..fb1cd33 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 <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:
- 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 7685c4c..a3e3057 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 5217637..dfb7b71 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;