]> Sergey Matveev's repositories - nnn.git/commitdiff
Resurrect default sort
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 14 Jul 2019 17:30:14 +0000 (23:00 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 14 Jul 2019 17:30:14 +0000 (23:00 +0530)
README.md
misc/auto-completion/bash/nnn-completion.bash
misc/auto-completion/fish/nnn.fish
misc/auto-completion/zsh/_nnn
nnn.1
src/nnn.c

index 89288f2b13a7e227d9f7b23d05430e171075769d..d49af7369c63798480297468b9d13d8a1b0edf63 100644 (file)
--- a/README.md
+++ b/README.md
@@ -79,6 +79,7 @@ Demo videos: i. [`nnn` on Termux (Android)](https://www.youtube.com/watch?v=Abaa
   - Bookmarks; pin and visit a directory
   - Familiar, easy shortcuts (arrows, <kbd>~</kbd>, <kbd>-</kbd>, <kbd>@</kbd>)
 - Sorting
+  - Ordered pure numeric names by default (visit _/proc_)
   - Case-insensitive version (_aka_ natural) sort
   - Sort by file name, modification time, size
 - Search
@@ -198,8 +199,8 @@ Option completion scripts for Bash, Fish and Zsh can be found in respective subd
 #### Cmdline options
 
 ```
-usage: nnn [-b key] [-d] [-e] [-i] [-l] [-p file]
-           [-s] [-S] [-v] [-w] [-h] [PATH]
+usage: nnn [-b key] [-d] [-e] [-i] [-l] [-n]
+           [-p file] [-s] [-S] [-v] [-w] [-h] [PATH]
 
 The missing terminal file manager for X.
 
@@ -212,6 +213,7 @@ optional args:
  -e      use exiftool for media info
  -i      nav-as-you-type mode
  -l      light mode
+ -n      version sort
  -p file selection file (stdout if '-')
  -s      string filters [default: regex]
  -S      du mode
index a0dcd30b787b098ecc3501dce80f819b393a629d..c30887a2a31cf7db53f5b8d325c390d89c65542f 100644 (file)
@@ -17,6 +17,7 @@ _nnn () {
         -h
         -i
         -l
+        -n
         -p
         -s
         -S
index c0a6b1f02d4710c2fe57182f153fab010e2b5563..02f80246dedf0f1922e1b8aadde8e63023acd733 100644 (file)
@@ -11,6 +11,7 @@ complete -c nnn -s e    -d 'use exiftool instead of mediainfo'
 complete -c nnn -s h    -d 'show this help and exit'
 complete -c nnn -s i    -d 'start in navigate-as-you-type mode'
 complete -c nnn -s l    -d 'start in light mode (fewer details)'
+complete -c nnn -s n    -d 'use version compare to sort files'
 complete -c nnn -s p -r -d 'copy selection to file'
 complete -c nnn -s s    -d 'use substring match for filters'
 complete -c nnn -s S    -d 'start in disk usage analyzer mode'
index 17d1c1a3c654f84be653764582fc549338f0cd4a..20a313fc209c8e221ea17d0d1ec8cc9e0680d358 100644 (file)
@@ -15,6 +15,7 @@ args=(
     '(-h)-h[show this help and exit]'
     '(-i)-i[start in navigate-as-you-type mode]'
     '(-l)-l[start in light mode (fewer details)]'
+    '(-n)-n[use version compare to sort files]'
     '(-p)-p[copy selection to file]:file name'
     '(-s)-s[use substring match for filters]'
     '(-S)-S[start in disk usage analyzer mode]'
diff --git a/nnn.1 b/nnn.1
index 85f4124d2e58e342731802056f967f8b21e7f4d7..aa400d6d85cc238bd1bdbd2fdad0fc729a267b10 100644 (file)
--- a/nnn.1
+++ b/nnn.1
@@ -11,6 +11,7 @@
 .Op Ar -e
 .Op Ar -i
 .Op Ar -l
+.Op Ar -n
 .Op Ar -p file
 .Op Ar -s
 .Op Ar -S
@@ -51,6 +52,9 @@ supports the following options:
 .Fl l
         start in light mode (fewer details)
 .Pp
+.Fl n
+        use case-insensitive version compare to sort files
+.Pp
 .Fl "p file"
         copy (or \fIpick\fR) selection to file, or stdout if file='-'
 .Pp
index ce4dae22166b7e71e036c0d01ec4e84b7231d30d..acfefd264b2aca8a491c99dcbaa2e1207b2d5430 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -1274,7 +1274,6 @@ static bool write_lastdir(const char *curpath)
        return ret;
 }
 
-#if 0
 static int digit_compare(const char *a, const char *b)
 {
        while (*a && *b && *a == *b)
@@ -1362,7 +1361,6 @@ static int xstricmp(const char * const s1, const char * const s2)
 
        return strcoll(s1, s2);
 }
-#endif
 
 /*
  * Version comparison
@@ -1445,6 +1443,8 @@ static int xstrverscasecmp(const char * const s1, const char * const s2)
        }
 }
 
+static int (*cmpfn)(const char * const s1, const char * const s2) = &xstricmp;
+
 /* Return the integer value of a char representing HEX */
 static char xchartohex(char c)
 {
@@ -1509,7 +1509,7 @@ static int entrycmp(const void *va, const void *vb)
                        return -1;
        }
 
-       return xstrverscasecmp(pa->name, pb->name);
+       return cmpfn(pa->name, pb->name);
 }
 
 /*
@@ -4401,8 +4401,8 @@ nochange:
 static void usage(void)
 {
        fprintf(stdout,
-               "%s: nnn [-b key] [-d] [-e] [-i] [-l] [-p file]\n"
-               "           [-s] [-S] [-v] [-w] [-h] [PATH]\n\n"
+               "%s: nnn [-b key] [-d] [-e] [-i] [-l] [-n]\n"
+               "           [-p file] [-s] [-S] [-v] [-w] [-h] [PATH]\n\n"
                "The missing terminal file manager for X.\n\n"
                "positional args:\n"
                "  PATH   start dir [default: current dir]\n\n"
@@ -4412,6 +4412,7 @@ static void usage(void)
                " -e      use exiftool for media info\n"
                " -i      nav-as-you-type mode\n"
                " -l      light mode\n"
+               " -n      version sort\n"
                " -p file selection file (stdout if '-')\n"
                " -s      string filters [default: regex]\n"
                " -S      du mode\n"
@@ -4545,7 +4546,7 @@ int main(int argc, char *argv[])
        char *arg = NULL;
        int opt;
 
-       while ((opt = getopt(argc, argv, "Slib:dep:svwh")) != -1) {
+       while ((opt = getopt(argc, argv, "Slib:denp:svwh")) != -1) {
                switch (opt) {
                case 'S':
                        cfg.blkorder = 1;
@@ -4568,6 +4569,9 @@ int main(int argc, char *argv[])
                case 'e':
                        cfg.metaviewer = EXIFTOOL;
                        break;
+               case 'n':
+                       cmpfn = &xstrverscasecmp;
+                       break;
                case 'p':
                        cfg.picker = 1;
                        if (optarg[0] == '-' && optarg[1] == '\0')