login

<     >

2016-12-15 20:37:14 (UTC-02:00)

Marcel Rodrigues <marcelgmr@gmail.com>

Add 'E' command to toggle execute permission of file.

diff --git a/README.md b/README.md
index f6f9a9b..96a9b99 100644
--- a/README.md
+++ b/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

diff --git a/config.h b/config.h
index c2b644c..ef7ad98 100644
--- a/config.h
+++ b/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"

diff --git a/rover.1 b/rover.1
index 321a61c..6cb7e1f 100644
--- a/rover.1
+++ b/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

diff --git a/rover.c b/rover.c
index 2665a98..640d0d5 100644
--- a/rover.c
+++ b/rover.c
@@ -1356,6 +1356,18 @@ main(int argc, char *argv[])
                 } 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) {
                 message(YELLOW, "Delete \"%s\"? (Y/n)", ENAME(ESEL));