]> Sergey Matveev's repositories - nnn.git/commitdiff
A compact help format
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 20 Aug 2017 16:10:52 +0000 (21:40 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 20 Aug 2017 17:48:58 +0000 (23:18 +0530)
README.md
nnn.c

index ab2276d4312c4522d41b51dd9ac6915c10b14982..53605c9673f02b649e737322aa86f606519a1403 100644 (file)
--- a/README.md
+++ b/README.md
@@ -185,43 +185,43 @@ To cook yourself, download the [latest stable release](https://github.com/jarun/
 #### Keyboard shortcuts
 
 ```
-           Key | Function
-              -+-
-      ↑, k, ^P | Previous entry
-      ↓, j, ^N | Next entry
-      PgUp, ^U | Scroll half page up
-      PgDn, ^D | Scroll half page down
-Home, g, ^, ^A | Jump to first entry
- End, G, $, ^E | Jump to last entry
-   →, ↵, l, ^M | Open file or enter dir
-←, Bksp, h, ^H | Go to parent dir
-        Insert | Toggle navigate-as-you-type
-             ~ | Jump to HOME dir
-             & | Jump to initial dir
-             - | Jump to last visited dir
-             / | Filter dir contents
-            ^/ | Open desktop search tool
-             . | Toggle hide .dot files
-             b | Show bookmark key prompt
-            ^B | Mark current dir
-            ^V | Visit marked dir
-             c | Show change dir prompt
-             d | Toggle detail view
-             D | Show current file details
-             m | Show concise media info
-             M | Show full media info
-             s | Toggle sort by file size
-             S | Toggle disk usage mode
-             t | Toggle sort by mtime
-             ! | Spawn SHELL in current dir
-             e | Edit entry in EDITOR
-             o | Open dir in file manager
-             p | Open entry in PAGER
-            ^K | Invoke file path copier
-        ^L, F2 | Force a redraw, unfilter
-             ? | Show help, settings
-             Q | Quit and change dir
-         q, ^Q | Quit
+            Key | Function
+              - + -
+       ↑, k, ^P | Previous entry
+       ↓, j, ^N | Next entry
+       PgUp, ^U | Scroll half page up
+       PgDn, ^D | Scroll half page down
+ Home, g, ^, ^A | Jump to first entry
 End, G, $, ^E | Jump to last entry
+    →, ↵, l, ^M | Open file or enter dir
+ ←, Bksp, h, ^H | Go to parent dir
+         Insert | Toggle navigate-as-you-type
+              ~ | Jump to HOME dir
+              & | Jump to initial dir
+              - | Jump to last visited dir
+              / | Filter dir contents
+             ^/ | Open desktop search tool
+              . | Toggle hide .dot files
+              b | Show bookmark key prompt
+             ^B | Mark current dir
+             ^V | Visit marked dir
+              c | Show change dir prompt
+              d | Toggle detail view
+              D | Show current file details
+              m | Show concise media info
+              M | Show full media info
+              s | Toggle sort by file size
+              S | Toggle disk usage mode
+              t | Toggle sort by mtime
+              ! | Spawn SHELL in current dir
+              e | Edit entry in EDITOR
+              o | Open dir in file manager
+              p | Open entry in PAGER
+             ^K | Invoke file path copier
+         ^L, F2 | Force a redraw, unfilter
+              ? | Show help, settings
+              Q | Quit and change dir
+          q, ^Q | Quit
 ```
 
 #### Filters
diff --git a/nnn.c b/nnn.c
index 2991482f61ab42223968f11e1f2e22b8203046d8..4605d19161724362e29a2d8887834440292b6fb1 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -597,6 +597,20 @@ xstricmp(char *s1, char *s2)
        return (int) (TOUPPER(*s1) - TOUPPER(*s2));
 }
 
+/* Return the integer value of a char representing HEX */
+static char
+xchartohex(char c)
+{
+       if (c >= '0' && c <= '9')
+               return c - '0';
+
+       c = TOUPPER(c);
+       if (c >= 'A' && c <= 'F')
+               return c - 'A' + 10;
+
+       return c;
+}
+
 /* Trim all whitespace from both ends, / from end */
 static char *
 strstrip(char *s)
@@ -1477,55 +1491,77 @@ show_mediainfo(char *fpath, char *arg)
        return 0;
 }
 
+/*
+ * The help string tokens (each line) start with a HEX value
+ * which indicates the number of spaces to print before the
+ * particular token. This method was chosen instead of a flat
+ * string because the number of bytes in help was increasing
+ * the binary size by around a hundred bytes. This would only
+ * have increased as we keep adding new options.
+ */
 static int
 show_help(char *path)
 {
        char tmp[] = "/tmp/nnnXXXXXX";
-       static char helpstr[] = ("\
-           Key | Function\n\
-              -+-\n\
-      ↑, k, ^P | Previous entry\n\
-      ↓, j, ^N | Next entry\n\
-      PgUp, ^U | Scroll half page up\n\
-      PgDn, ^D | Scroll half page down\n\
-Home, g, ^, ^A | Jump to first entry\n\
- End, G, $, ^E | Jump to last entry\n\
-   →, ↵, l, ^M | Open file or enter dir\n\
-←, Bksp, h, ^H | Go to parent dir\n\
-        Insert | Toggle navigate-as-you-type\n\
-             ~ | Jump to HOME dir\n\
-             & | Jump to initial dir\n\
-             - | Jump to last visited dir\n\
-             / | Filter dir contents\n\
-            ^/ | Open desktop search tool\n\
-             . | Toggle hide .dot files\n\
-             b | Show bookmark key prompt\n\
-            ^B | Mark current dir\n\
-            ^V | Visit marked dir\n\
-             c | Show change dir prompt\n\
-             d | Toggle detail view\n\
-             D | Show current file details\n\
-             m | Show concise media info\n\
-             M | Show full media info\n\
-             s | Toggle sort by file size\n\
-             S | Toggle disk usage mode\n\
-             t | Toggle sort by mtime\n\
-             ! | Spawn SHELL in current dir\n\
-             e | Edit entry in EDITOR\n\
-             o | Open dir in file manager\n\
-             p | Open entry in PAGER\n\
-            ^K | Invoke file path copier\n\
-        ^L, F2 | Force a redraw, unfilter\n\
-             ? | Show help, settings\n\
-             Q | Quit and change dir\n\
-         q, ^Q | Quit\n\n");
-
        int i = 0, fd = mkstemp(tmp);
+       char *start, *end;
+       static char helpstr[] = (
+           "cKey | Function\n"
+             "e- + -\n"
+      "7↑, k, ^P | Previous entry\n"
+      "7↓, j, ^N | Next entry\n"
+      "7PgUp, ^U | Scroll half page up\n"
+      "7PgDn, ^D | Scroll half page down\n"
+"1Home, g, ^, ^A | Jump to first entry\n"
+ "2End, G, $, ^E | Jump to last entry\n"
+   "4→, ↵, l, ^M | Open file or enter dir\n"
+"1←, Bksp, h, ^H | Go to parent dir\n"
+        "9Insert | Toggle navigate-as-you-type\n"
+             "e~ | Jump to HOME dir\n"
+             "e& | Jump to initial dir\n"
+             "e- | Jump to last visited dir\n"
+             "e/ | Filter dir contents\n"
+            "d^/ | Open desktop search tool\n"
+             "e. | Toggle hide .dot files\n"
+             "eb | Show bookmark key prompt\n"
+            "d^B | Mark current dir\n"
+            "d^V | Visit marked dir\n"
+             "ec | Show change dir prompt\n"
+             "ed | Toggle detail view\n"
+             "eD | Show current file details\n"
+             "em | Show concise media info\n"
+             "eM | Show full media info\n"
+             "es | Toggle sort by file size\n"
+             "eS | Toggle disk usage mode\n"
+             "et | Toggle sort by mtime\n"
+             "e! | Spawn SHELL in current dir\n"
+             "ee | Edit entry in EDITOR\n"
+             "eo | Open dir in file manager\n"
+             "ep | Open entry in PAGER\n"
+            "d^K | Invoke file path copier\n"
+        "9^L, F2 | Force a redraw, unfilter\n"
+             "e? | Show help, settings\n"
+             "eQ | Quit and change dir\n"
+         "aq, ^Q | Quit\n\n");
 
        if (fd == -1)
                return -1;
 
-       dprintf(fd, "%s", helpstr);
+       start = end = helpstr;
+       while (*end) {
+               while (*end != '\n')
+                       ++end;
+
+               if (start == end) {
+                       ++end;
+                       continue;
+               }
+
+               dprintf(fd, "%*c%.*s", xchartohex(*start), ' ', (int)(end - start), start + 1);
+               start = ++end;
+       }
+
+       dprintf(fd, "\n");
 
        if (getenv("NNN_BMS")) {
                dprintf(fd, "BOOKMARKS\n");