]> Sergey Matveev's repositories - nnn.git/commitdiff
Exit prompt on Escape press
authorArun Prakash Jana <engineerarun@gmail.com>
Sat, 27 Oct 2018 03:05:05 +0000 (08:35 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sat, 27 Oct 2018 03:05:05 +0000 (08:35 +0530)
README.md
nnn.1
nnn.c

index 724736397bfa7f543d942d14f001b95f856b579a..ea6b6b55ec69f735b13f4daaa8c0074397a775d0 100644 (file)
--- a/README.md
+++ b/README.md
@@ -249,6 +249,7 @@ optional args:
               y  Show copy buffer
              ^T  Toggle path quote
              ^L  Redraw, clear prompt
+            Esc  Exit prompt
               L  Lock terminal
               o  Open DE filemanager
              ^/  Open DE search app
diff --git a/nnn.1 b/nnn.1
index e2aa33578b800cd18caeb04a70279faa37be00e5..7685c4c0de8cb958b2291b73d4920d75ea937433 100644 (file)
--- a/nnn.1
+++ b/nnn.1
@@ -116,7 +116,9 @@ Show copy buffer
 .It Ic ^T
 Toggle path quote
 .It Ic ^L
-Force a redraw, clear rename or filter prompt
+Force a redraw, clear prompt
+.It Ic Esc
+Exit prompt
 .It Ic L
 Lock terminal (Linux only)
 .It Ic \&?
diff --git a/nnn.c b/nnn.c
index e2d8ae77e72acd2cbfb329b234e142fb0c42b9da..125998b2ee43d6a9f9e208c3807b9b36d9bbfaf1 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -1092,7 +1092,6 @@ static int filterentries(char *path)
        cur = 0;
 
        cleartimeout();
-       echo();
        curs_set(TRUE);
        printprompt(ln);
 
@@ -1117,6 +1116,12 @@ static int filterentries(char *path)
                        continue;
                }
 
+               if (*ch == 27) { /* Exit filter mode on Escape */
+                       cur = oldcur;
+                       *ch = CONTROL('L');
+                       goto end;
+               }
+
                if (r == OK) {
                        /* Handle all control chars in main loop */
                        if (keyname(*ch)[0] == '^') {
@@ -1186,7 +1191,6 @@ static int filterentries(char *path)
                }
        }
 end:
-       noecho();
        curs_set(FALSE);
        settimeout();
 
@@ -1197,7 +1201,6 @@ end:
 /* Show a prompt with input string and return the changes */
 static char *xreadline(char *fname, char *prompt)
 {
-       int old_curs = curs_set(1);
        size_t len, pos;
        int x, y, r;
        wint_t ch[2] = {0};
@@ -1217,6 +1220,7 @@ static char *xreadline(char *fname, char *prompt)
        }
 
        getyx(stdscr, y, x);
+       curs_set(TRUE);
        cleartimeout();
 
        while (1) {
@@ -1257,6 +1261,9 @@ static char *xreadline(char *fname, char *prompt)
                                        len -= pos;
                                        pos = 0;
                                        continue;
+                               case 27: /* Exit prompt on Escape */
+                                       len = 0;
+                                       goto END;
                                }
 
                                /* Filter out all other control chars */
@@ -1300,10 +1307,10 @@ static char *xreadline(char *fname, char *prompt)
 
 END:
        buf[len] = '\0';
-       if (old_curs != ERR)
-               curs_set(old_curs);
 
+       curs_set(FALSE);
        settimeout();
+
        DPRINTF_S(buf);
        wcstombs(g_buf, buf, NAME_MAX);
        clearprompt();
@@ -1974,6 +1981,7 @@ static int show_help(char *path)
             "ey  Show copy buffer\n"
            "d^T  Toggle path quote\n"
            "d^L  Redraw, clear prompt\n"
+          "cEsc  Exit prompt\n"
             "eL  Lock terminal\n"
             "eo  Open DE filemanager\n"
            "d^/  Open DE search app\n"