Commit Diff


commit - 89654e2bc1cbd34103ad381b6137889c165f43f6
commit + 7a9072e20ad89d8fd88a5b1c19e1dc3952cea755
blob - f6f9a9bd6890469edf93808e2aa9c833ef8c549f
blob + 96a9b992eb2cf691b3f72dc74adbc297d9410a08
--- README.md
+++ README.md
@@ -46,6 +46,7 @@ Quick Start
    f/d/s - toggle file/directory/hidden listing
      n/N - create new file/directory
        R - rename selected file or directory
+       E - toggle execute permission of the selected file
        D - delete selected file or (empty) directory
        m - toggle mark on the selected entry
        M - toggle mark on all visible entries
blob - c2b644ca91fa355d40ddcb2cbc29b7a08eaac8bf
blob + ef7ad987f78e26ca6ec40a0c15b0428e89549b2b
--- config.h
+++ config.h
@@ -26,6 +26,7 @@
 #define RVK_NEW_FILE    "n"
 #define RVK_NEW_DIR     "N"
 #define RVK_RENAME      "R"
+#define RVK_TG_EXEC     "E"
 #define RVK_DELETE      "D"
 #define RVK_TG_MARK     "m"
 #define RVK_INVMARK     "M"
blob - 321a61c90db0953abfb374ae6dcc83a4c97d0cec
blob + 6cb7e1f835183e87afc182c2ed4b2070bdbc7631
--- rover.1
+++ rover.1
@@ -126,6 +126,9 @@ Create new file/directory.
 .B R
 Rename selected file or directory.
 .TP
+.B E
+Toggle execute permission of the selected file.
+.TP
 .B D
 Delete selected file or (empty) directory.
 .TP
blob - 2665a989a6773868b1b28717267b7c1d3de3b380
blob + 640d0d5d9d399ef66b80e5f67cc850a9791edf70
--- rover.c
+++ rover.c
@@ -1355,6 +1355,18 @@ main(int argc, char *argv[])
                     update_view();
                 } else
                     message(RED, "\"%s\" already exists.", INPUT);
+            }
+        } else if (!strcmp(key, RVK_TG_EXEC)) {
+            if (!rover.nfiles || S_ISDIR(EMODE(ESEL))) continue;
+            if (S_IXUSR & EMODE(ESEL))
+                EMODE(ESEL) &= ~(S_IXUSR | S_IXGRP | S_IXOTH);
+            else
+                EMODE(ESEL) |=   S_IXUSR | S_IXGRP | S_IXOTH ;
+            if (chmod(ENAME(ESEL), EMODE(ESEL))) {
+                message(RED, "Failed to change mode of \"%s\".", ENAME(ESEL));
+            } else {
+                message(GREEN, "Changed mode of \"%s\".", ENAME(ESEL));
+                update_view();
             }
         } else if (!strcmp(key, RVK_DELETE)) {
             if (rover.nfiles) {