]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix #420: simplify bookmarking, retire lead key
authorArun Prakash Jana <engineerarun@gmail.com>
Sat, 28 Dec 2019 19:08:03 +0000 (00:38 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 29 Dec 2019 02:50:56 +0000 (08:20 +0530)
Makefile
src/nnn.c
src/nnn.h

index 6afeec22a1426da28b7582a8a68cfc15c79fcfa4..77005a3729d35532565b25d5711deaf5372a8257 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -107,4 +107,4 @@ clean:
 
 skip: ;
 
-.PHONY: all debug install uninstall strip dist sign clean
+.PHONY: all install uninstall strip dist sign clean
index fc244ae33444f468f8412fa54488fa1bd4d00bd9..cc47b0d81f337368e863e6b8ec46008295bd6980 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -1905,6 +1905,7 @@ static int nextsel(int presel)
        if (c == 0 || c == MSGWAIT) {
                c = getch();
                //DPRINTF_D(c);
+               //DPRINTF_S(keyname(c));
 
                /* Clear previous filter when manually starting */
                if (c == FILTER)
@@ -2022,7 +2023,7 @@ static int filterentries(char *path, char *lastname)
        wchar_t *wln = (wchar_t *)alloca(sizeof(wchar_t) * REGEX_MAX);
        char *ln = g_ctx[cfg.curctx].c_fltr;
        wint_t ch[2] = {0};
-       int r, total = ndents, oldcur = cur, len;
+       int r, total = ndents, len;
        char *pln = g_ctx[cfg.curctx].c_fltr + 1;
 
        if (ndents && ln[0] == FILTER && *pln) {
@@ -2036,7 +2037,6 @@ static int filterentries(char *path, char *lastname)
                ln[0] = wln[0] = FILTER;
                ln[1] = wln[1] = '\0';
                len = 1;
-               cur = 0;
        }
 
        cleartimeout();
@@ -2044,16 +2044,14 @@ static int filterentries(char *path, char *lastname)
        printprompt(ln);
 
        while ((r = get_wch(ch)) != ERR) {
+               //DPRINTF_D(*ch);
+               //DPRINTF_S(keyname(*ch));
+
                switch (*ch) {
 #ifdef KEY_RESIZE
                case KEY_RESIZE:
                        clearoldprompt();
-                       if (len == 1) {
-                               cur = oldcur;
-                               redraw(path);
-                               cur = 0;
-                       } else
-                               redraw(path);
+                       redraw(path);
                        printprompt(ln);
                        continue;
 #endif
@@ -2063,7 +2061,6 @@ static int filterentries(char *path, char *lastname)
                case CONTROL('L'): // fallthrough
                case 127: /* handle DEL */
                        if (len == 1 && *ch != CONTROL('L')) {
-                               cur = oldcur;
                                *ch = CONTROL('L');
                                goto end;
                        }
@@ -2074,8 +2071,7 @@ static int filterentries(char *path, char *lastname)
                        else
                                wln[--len] = '\0';
 
-                       if (len == 1)
-                               cur = oldcur;
+                       cur = 0;
 
                        wcstombs(ln, wln, REGEX_MAX);
                        ndents = total;
@@ -2086,31 +2082,22 @@ static int filterentries(char *path, char *lastname)
                        continue;
                case KEY_MOUSE: // fallthrough
                case 27: /* Exit filter mode on Escape */
-                       if (len == 1)
-                               cur = oldcur;
                        goto end;
                }
 
                if (r == OK) {
                        /* Handle all control chars in main loop */
-                       if (*ch < ASCII_MAX && keyname(*ch)[0] == '^' && *ch != '^') {
-                               DPRINTF_D(*ch);
-                               DPRINTF_S(keyname(*ch));
-
-                               if (len == 1)
-                                       cur = oldcur;
+                       if (*ch < ASCII_MAX && keyname(*ch)[0] == '^' && *ch != '^')
                                goto end;
-                       }
 
                        switch (*ch) {
                        case '=': // fallthrough /* Launch app */
                        case ']': // fallthorugh /*Prompt key */
                        case ';': // fallthrough /* Run plugin key */
                        case '?': /* Help and config key, '?' is an invalid regex */
-                               if (len == 1) {
-                                       cur = oldcur;
+                               if (len == 1)
                                        goto end;
-                               // fallthrough
+                               // fallthrough
                        default:
                                /* Reset cur in case it's a repeat search */
                                if (len == 1)
@@ -2151,11 +2138,8 @@ static int filterentries(char *path, char *lastname)
                                redraw(path);
                                printprompt(ln);
                        }
-               } else {
-                       if (len == 1)
-                               cur = oldcur;
+               } else
                        goto end;
-               }
        }
 end:
        if (*ch != '\t' && *ch != KEY_UP && *ch != KEY_DOWN) {
@@ -2832,7 +2816,7 @@ static void savecurctx(settings *curcfg, char *path, char *curname, int r /* nex
                g_ctx[r].c_cfg.ctxactive = 1;
                xstrlcpy(g_ctx[r].c_path, path, PATH_MAX);
                g_ctx[r].c_last[0] = '\0';
-               xstrlcpy(g_ctx[r].c_name, curname, NAME_MAX + 1);
+               g_ctx[r].c_name[0] = '\0';
                g_ctx[r].c_fltr[0] = g_ctx[r].c_fltr[1] = '\0';
                g_ctx[r].c_cfg = cfg;
                g_ctx[r].c_cfg.runplugin = 0;
@@ -3504,20 +3488,20 @@ static void show_help(const char *path)
                "1NAVIGATION\n"
               "9Up k  Up%-16cPgUp ^U  Scroll up\n"
               "9Dn j  Down%-14cPgDn ^D  Scroll down\n"
-              "9<- h  Parent%-12c~ ` @ -  HOME, /, start, last\n"
-          "5Ret -> l  Open%-20c'  First file\n"
+              "9Lt h  Parent%-12c~ ` @ -  HOME, /, start, last\n"
+          "5Ret Rt l  Open%-20c'  First file\n"
               "9g ^A  Top%-21c.  Toggle hidden\n"
-              "9G ^E  End%-21cb  Pin CWD\n"
-              "9, ^/  Lead key%-15c^B  Visit pinned\n"
-           "6N LeadN  Context N%-9c(Sh)Tab  Cycle context\n"
-                 "c/  Filter%-13cIns ^N  Nav-as-you-type toggle\n"
-               "aEsc  Exit prompt%-9c^L F5  Redraw/clear prompt\n"
+              "9G ^E  End%-21c+  Pin CWD\n"
+              "9b ^B  Bookmark key%-12c,  Visit pinned\n"
+                 "cN  Context N%-9c(Sh)Tab  Cycle context\n"
+                 "c/  Filter%-13cIns ^/  Filter mode toggle\n"
+               "aEsc  Exit prompt%-9cF5 ^L  Redraw/clear prompt\n"
                  "c?  Help, conf%-13c^G  QuitCD\n"
               "9Q ^Q  Quit%-20cq  Quit context\n"
                "1FILES\n"
                 "b^O  Open with...%-12cn  Create new/link\n"
                  "cD  File details%-12cd  Detail view toggle\n"
-                 "cr  Batch rename%-8c^R F2  Rename/duplicate\n"
+                 "cr  Batch rename%-8cF2 ^R  Rename/duplicate\n"
           "5Space ^J  Sel toggle%-14ca  Sel all\n"
               "9m ^K  Sel range, clear%-8cM  List sel\n"
                  "cP  Copy sel here%-11cK  Edit sel\n"
@@ -4676,48 +4660,11 @@ nochange:
                        DPRINTF_S(path);
                        setdirwatch();
                        goto begin;
-               case SEL_LEADER: // fallthrough
-               case SEL_CYCLE: // fallthrough
-               case SEL_CYCLER: // fallthrough
-               case SEL_CTX1: // fallthrough
-               case SEL_CTX2: // fallthrough
-               case SEL_CTX3: // fallthrough
-               case SEL_CTX4:
-                       if (sel == SEL_LEADER) {
-                               xstrlcpy(g_buf, messages[MSG_BOOKMARK_KEYS], CMD_LEN_MAX);
-                               printkeys(bookmark, g_buf + strlen(g_buf), BM_MAX);
-                               printprompt(g_buf);
-                               fd = get_input(NULL);
-
-                               if (fd >= '1' && fd <= '4')
-                                       sel = SEL_CTX1 + (fd - '1');
-                       }
-
-                       if (sel != SEL_LEADER) {
-                               r = handle_context_switch(sel, newpath);
-                               if (r < 0)
-                                       continue;
-                               savecurctx(&cfg, path, dents[cur].name, r);
-
-                               /* Reset the pointers */
-                               path = g_ctx[r].c_path;
-                               lastdir = g_ctx[r].c_last;
-                               lastname = g_ctx[r].c_name;
-
-                               setdirwatch();
-                               goto begin;
-                       }
-
-                       switch (fd) {
-                       case '~': // fallthrough
-                       case '`': // fallthrough
-                       case '-': // fallthrough
-                       case '@':
-                       case '.':
-                       case '\'':
-                               presel = fd;
-                               goto nochange;
-                       }
+               case SEL_BOOKMARK:
+                       xstrlcpy(g_buf, messages[MSG_BOOKMARK_KEYS], CMD_LEN_MAX);
+                       printkeys(bookmark, g_buf + strlen(g_buf), BM_MAX);
+                       printprompt(g_buf);
+                       fd = get_input(NULL);
 
                        if (!get_kv_val(bookmark, newpath, fd, BM_MAX, TRUE)) {
                                printwait(messages[MSG_INVALID_KEY], &presel);;
@@ -4742,6 +4689,24 @@ nochange:
                        xstrlcpy(path, newpath, PATH_MAX);
                        DPRINTF_S(path);
 
+                       setdirwatch();
+                       goto begin;
+               case SEL_CYCLE: // fallthrough
+               case SEL_CYCLER: // fallthrough
+               case SEL_CTX1: // fallthrough
+               case SEL_CTX2: // fallthrough
+               case SEL_CTX3: // fallthrough
+               case SEL_CTX4:
+                       r = handle_context_switch(sel, newpath);
+                       if (r < 0)
+                               continue;
+                       savecurctx(&cfg, path, dents[cur].name, r);
+
+                       /* Reset the pointers */
+                       path = g_ctx[r].c_path;
+                       lastdir = g_ctx[r].c_last;
+                       lastname = g_ctx[r].c_name;
+
                        setdirwatch();
                        goto begin;
                case SEL_PIN:
@@ -4905,6 +4870,8 @@ nochange:
                                break;
                        case SEL_HELP:
                                show_help(path);
+                               if (cfg.filtermode)
+                                       presel = FILTER;
                                continue;
                        case SEL_RUNEDIT:
                                spawn(editor, dents[cur].name, NULL, path, F_CLI);
index c8afb96b6bca2d1e8a18fbb8b18cfd1c160ad925..6463283064a6cafb3392c36070b5a691d8640733 100644 (file)
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -53,7 +53,7 @@ enum action {
        SEL_CDLAST,
        SEL_CDROOT,
        SEL_VISIT,
-       SEL_LEADER,
+       SEL_BOOKMARK,
        SEL_CYCLE,
        SEL_CYCLER,
        SEL_CTX1,
@@ -157,10 +157,10 @@ static struct key bindings[] = {
        /* Go to / */
        { '`',            SEL_CDROOT },
        /* Visit marked directory */
-       { CONTROL('B'),   SEL_VISIT },
+       { ',',            SEL_VISIT },
        /* Leader key */
-       { CONTROL('_'),   SEL_LEADER },
-       { ',',            SEL_LEADER },
+       { 'b',            SEL_BOOKMARK },
+       { CONTROL('B'),   SEL_BOOKMARK },
        /* Cycle contexts in forward direction */
        { '\t',           SEL_CYCLE },
        /* Cycle contexts in reverse direction */
@@ -171,12 +171,12 @@ static struct key bindings[] = {
        { '3',            SEL_CTX3 },
        { '4',            SEL_CTX4 },
        /* Mark a path to visit later */
-       { 'b',            SEL_PIN },
+       { '+',            SEL_PIN },
        /* Filter */
        { '/',            SEL_FLTR },
        /* Toggle filter mode */
        { KEY_IC,         SEL_MFLTR },
-       { CONTROL('N'),   SEL_MFLTR },
+       { CONTROL('_'),   SEL_MFLTR },
        /* Toggle hide .dot files */
        { '.',            SEL_TOGGLEDOT },
        /* Detailed listing */