Commit Diff


commit - 71ee162773e8955eb4d4ece8959a8fb005bba95d
commit + 0b30116779ab06d7a35f312fb298ec377e3b3fa9
blob - 2b49ec11645715470257939247bc337bd3b44606
blob + 0a821b67164058ebc026634145d821819e2ad746
--- config.h
+++ config.h
@@ -1,12 +1,15 @@
-#define RVK_QUIT        'q'
-#define RVK_DOWN        'j'
-#define RVK_UP          'k'
-#define RVK_JUMP_DOWN   'J'
-#define RVK_JUMP_UP     'K'
-#define RVK_CD_DOWN     'l'
-#define RVK_CD_UP       'h'
-#define RVK_HOME        'H'
-#define RVK_SHELL       '\r'
-#define RVK_EDIT        ' '
+/* CTRL+X: "^X"
+ * ALT+X: "M-X"
+ */
+#define RVK_QUIT        "q"
+#define RVK_DOWN        "j"
+#define RVK_UP          "k"
+#define RVK_JUMP_DOWN   "J"
+#define RVK_JUMP_UP     "K"
+#define RVK_CD_DOWN     "l"
+#define RVK_CD_UP       "h"
+#define RVK_HOME        "H"
+#define RVK_SHELL       "^M"
+#define RVK_EDIT        " "
 
 #define RV_JUMP         10
blob - 9fde40875ba652b6f1a539db580e56a856eb91e2
blob + a8110e1551fb9d4345639c874a5c100b9b85cfc6
--- rover.c
+++ rover.c
@@ -181,8 +181,8 @@ spawn()
 int
 main()
 {
-    int ch;
     char *program;
+    char *key;
 
     sk_init();
     /* Avoid invalid free() calls in cd() by zeroing the tally. */
@@ -191,8 +191,11 @@ main()
     strcat(skit.cwd, "/");
     skit.window = subwin(stdscr, LINES - 2, COLS, 1, 0);
     cd();
-    while ((ch = getch()) != RVK_QUIT) switch (ch) {
-        case RVK_DOWN:
+    while (1) {
+        key = keyname(getch());
+        if (!strcmp(key, RVK_QUIT))
+            break;
+        else if (!strcmp(key, RVK_DOWN)) {
             if (skit.fsel == skit.nfiles - 1)
                 skit.scroll = skit.fsel = 0;
             else {
@@ -201,8 +204,8 @@ main()
                     skit.scroll++;
             }
             update_browser();
-            break;
-        case RVK_UP:
+        }
+        else if (!strcmp(key, RVK_UP)) {
             if (skit.fsel == 0) {
                 skit.fsel = skit.nfiles - 1;
                 skit.scroll = skit.nfiles - LINES + 4;
@@ -215,8 +218,8 @@ main()
                     skit.scroll--;
             }
             update_browser();
-            break;
-        case RVK_JUMP_DOWN:
+        }
+        else if (!strcmp(key, RVK_JUMP_DOWN)) {
             skit.fsel += RV_JUMP;
             if (skit.fsel >= skit.nfiles)
                 skit.fsel = skit.nfiles - 1;
@@ -226,8 +229,8 @@ main()
                     skit.scroll = skit.nfiles - LINES + 4;
             }
             update_browser();
-            break;
-        case RVK_JUMP_UP:
+        }
+        else if (!strcmp(key, RVK_JUMP_UP)) {
             skit.fsel -= RV_JUMP;
             if (skit.fsel < 0)
                 skit.fsel = 0;
@@ -235,35 +238,35 @@ main()
             if (skit.scroll < 0)
                 skit.scroll = 0;
             update_browser();
-            break;
-        case RVK_CD_DOWN:
+        }
+        else if (!strcmp(key, RVK_CD_DOWN)) {
             if (strchr(skit.fnames[skit.fsel], '/') == NULL)
                 continue;
             strcat(skit.cwd, skit.fnames[skit.fsel]);
             cd();
-            break;
-        case RVK_CD_UP:
+        }
+        else if (!strcmp(key, RVK_CD_UP)) {
             if (strlen(skit.cwd) == 1)
                 continue;
             skit.cwd[strlen(skit.cwd) - 1] = '\0';
             *(strrchr(skit.cwd, '/') + 1) = '\0';
             cd();
-            break;
-        case RVK_HOME:
+        }
+        else if (!strcmp(key, RVK_HOME)) {
             strcpy(skit.cwd, getenv("HOME"));
             if (skit.cwd[strlen(skit.cwd) - 1] != '/')
                 strcat(skit.cwd, "/");
             cd();
-            break;
-        case RVK_SHELL:
+        }
+        else if (!strcmp(key, RVK_SHELL)) {
             program = getenv("SHELL");
             if (program) {
                 args[0] = program;
                 args[1] = NULL;
                 spawn();
             }
-            break;
-        case RVK_EDIT:
+        }
+        else if (!strcmp(key, RVK_EDIT)) {
             if (strchr(skit.fnames[skit.fsel], '/') != NULL)
                 continue;
             program = getenv("EDITOR");
@@ -273,9 +276,7 @@ main()
                 args[2] = NULL;
                 spawn();
             }
-            break;
-        default:
-            continue;
+        }
     }
     while (skit.nfiles--) free(skit.fnames[skit.nfiles]);
     free(skit.fnames);