]> Sergey Matveev's repositories - nnn.git/commitdiff
Keybind v for version sort
authorArun Prakash Jana <engineerarun@gmail.com>
Sat, 28 Dec 2019 05:45:38 +0000 (11:15 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sat, 28 Dec 2019 05:45:38 +0000 (11:15 +0530)
misc/auto-completion/fish/nnn.fish
misc/auto-completion/zsh/_nnn
nnn.1
src/nnn.c
src/nnn.h

index f597886e6063cf44131287c848965317ab7e8e5b..96348bd77ae6445319857fccb09d26bef479b03f 100644 (file)
@@ -28,7 +28,7 @@ complete -c nnn -s R    -d 'disable rollover at edges'
 complete -c nnn -s s -r -d 'load session by name' -x -a '@\t"last session" (ls $sessions_dir)'
 complete -c nnn -s S    -d 'start in disk usage analyzer mode'
 complete -c nnn -s t    -d 'disable dir auto-select'
-complete -c nnn -s v    -d 'show program version and exit'
-complete -c nnn -s V    -d 'use version compare to sort files'
+complete -c nnn -s v    -d 'use version compare to sort files'
+complete -c nnn -s V    -d 'show program version and exit'
 complete -c nnn -s x    -d 'notis, sel to system clipboard'
 complete -c nnn -s h    -d 'show program help'
index a8b5f23884f18b9823604b19d06eb3edf268f61b..7aa9ba40b878df823dc44a30aa40c18919077e9c 100644 (file)
@@ -26,8 +26,8 @@ args=(
     '(-s)-s[load session]:session name'
     '(-S)-S[start in disk usage analyzer mode]'
     '(-t)-t[disable dir auto-select]'
-    '(-v)-v[show program version and exit]'
-    '(-V)-V[use version compare to sort files]'
+    '(-v)-v[use version compare to sort files]'
+    '(-V)-V[show program version and exit]'
     '(-x)-x[notis, sel to system clipboard]'
     '(-h)-h[show program help]'
     '*:filename:_files'
diff --git a/nnn.1 b/nnn.1
index 33fbb6569f939cae44d05e44a31fd79384d40c0b..d4a58e19b0ad30a4705fd738377bf10b8b97f00d 100644 (file)
--- a/nnn.1
+++ b/nnn.1
@@ -96,10 +96,10 @@ supports the following options:
         disable directory auto-select in navigate-as-you-type mode
 .Pp
 .Fl v
-        show version and exit
+        use case-insensitive version compare to sort files
 .Pp
 .Fl V
-        use case-insensitive version compare to sort files
+        show version and exit
 .Pp
 .Fl x
         show notis on selection cp, mv, rm completion; copy path to system clipboard on select
index 5ab9393efcddb0339f4dc31d58301b72da6a3e24..fc244ae33444f468f8412fa54488fa1bd4d00bd9 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -3517,8 +3517,8 @@ static void show_help(const char *path)
                "1FILES\n"
                 "b^O  Open with...%-12cn  Create new/link\n"
                  "cD  File details%-12cd  Detail view toggle\n"
-                 "ca  Sel all%-13c^R F2  Rename/duplicate\n"
-          "5Space ^J  Sel toggle%-14cr  Batch rename\n"
+                 "cr  Batch rename%-8c^R F2  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"
                  "cV  Move sel here%-11cw  Copy/move sel as\n"
@@ -3526,9 +3526,9 @@ static void show_help(const char *path)
                  "cf  Archive%-14co ^F  Archive ops\n"
                  "ce  Edit in EDITOR%-10cp  Open in PAGER\n"
                "1ORDER TOGGLES\n"
-                 "cA  Apparent du%-13cS  du\n"
+                 "cS  Disk usage%-14cA  Apparent du\n"
                  "cz  Size%-20ct  Time\n"
-                 "cE  Extension%-1c\n"
+                 "cv  version%-17cE  Extension\n"
                "1MISC\n"
               "9! ^]  Shell%-17c; x  Plugin key\n"
                  "cC  Execute file%-9ci ^V  Pick plugin\n"
@@ -4237,7 +4237,7 @@ static void redraw(char *path)
        }
 
        if (ndents) {
-               char sort[] = "\0 ";
+               char sort[] = "\0 \0";
                pEntry pent = &dents[cur];
 
                if (cfg.mtimeorder)
@@ -4247,6 +4247,9 @@ static void redraw(char *path)
                else if (cfg.extnorder)
                        sort[0] = 'E';
 
+               if (cmpfn == &xstrverscasecmp)
+                       sort[0] ? (sort[1] = 'V', sort[2] = ' ') : (sort[0] = 'V');
+
                /* Get the file extension for regular files */
                if (S_ISREG(pent->mode)) {
                        i = (int)strlen(pent->name);
@@ -4782,7 +4785,8 @@ nochange:
                case SEL_ASIZE: // fallthrough
                case SEL_BSIZE: // fallthrough
                case SEL_EXTN: // fallthrough
-               case SEL_MTIME:
+               case SEL_MTIME: // fallthrough
+               case SEL_VERSION:
                        switch (sel) {
                        case SEL_MFLTR:
                                cfg.filtermode ^= 1;
@@ -4844,13 +4848,16 @@ nochange:
                                cfg.apparentsz = 0;
                                cfg.blkorder = 0;
                                break;
-                       default: /* SEL_MTIME */
+                       case SEL_MTIME:
                                cfg.mtimeorder ^= 1;
                                cfg.sizeorder = 0;
                                cfg.apparentsz = 0;
                                cfg.blkorder = 0;
                                cfg.extnorder = 0;
                                break;
+                       default: /* SEL_VERSION */
+                               cmpfn = (cmpfn == &xstrverscasecmp) ? &xstricmp : &xstrverscasecmp;
+                               break;
                        }
 
                        clearfilter();
@@ -5540,8 +5547,8 @@ static void usage(void)
                " -s name load session by name\n"
                " -S      du mode\n"
                " -t      no dir auto-select\n"
-               " -v      show version\n"
-               " -V      version sort\n"
+               " -v      version sort\n"
+               " -V      show version\n"
                " -x      notis, sel to system clipboard\n"
                " -h      show help\n\n"
                "v%s\n%s\n", __func__, VERSION, GENERAL_INFO);
@@ -5758,11 +5765,11 @@ int main(int argc, char *argv[])
                        check_key_collision();
                        return _SUCCESS;
                case 'v':
-                       fprintf(stdout, "%s\n", VERSION);
-                       return _SUCCESS;
-               case 'V':
                        cmpfn = &xstrverscasecmp;
                        break;
+               case 'V':
+                       fprintf(stdout, "%s\n", VERSION);
+                       return _SUCCESS;
                case 'x':
                        cfg.x11 = 1;
                        break;
index 4db7d95adac1ce0002ba83a7e0e30d1aa4948aaa..c8afb96b6bca2d1e8a18fbb8b18cfd1c160ad925 100644 (file)
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -72,6 +72,7 @@ enum action {
        SEL_BSIZE,  /* block size */
        SEL_EXTN,   /* order by extension */
        SEL_MTIME,
+       SEL_VERSION,
        SEL_REDRAW,
        SEL_SEL,
        SEL_SELMUL,
@@ -194,6 +195,8 @@ static struct key bindings[] = {
        { 'E',            SEL_EXTN },
        /* Toggle sort by time */
        { 't',            SEL_MTIME },
+       /* Toggle version sort */
+       { 'v',            SEL_VERSION },
        /* Redraw window */
        { CONTROL('L'),   SEL_REDRAW },
        { KEY_F(5),       SEL_REDRAW },