aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-01-02 23:13:56 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-01-02 23:36:08 +0530
commitc92c5c7b1576dd3ab13c055ed399ad0f09d74bbc (patch)
treeca7323488eb18be71f0d9af814e6ad23e1febbec /src
parente1c91e1aefc1a20e738fc1b4d5b2a612ff959ffd (diff)
downloadnnn-c92c5c7b1576dd3ab13c055ed399ad0f09d74bbc.tar.gz
Support toggle exe
Diffstat (limited to 'src')
-rw-r--r--src/nnn.c19
-rw-r--r--src/nnn.h3
2 files changed, 19 insertions, 3 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 85d52fe..afe7fae 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -3108,6 +3108,13 @@ static bool show_stats(const char *fpath, const struct stat *sb)
return TRUE;
}
+static bool xchmod(const char *fpath, mode_t mode)
+{
+ (S_IXUSR & mode) ? (mode &= ~(S_IXUSR | S_IXGRP | S_IXOTH)) : (mode |= (S_IXUSR | S_IXGRP | S_IXOTH));
+
+ return (chmod(fpath, mode) == 0);
+}
+
static size_t get_fs_info(const char *path, bool type)
{
struct statvfs svb;
@@ -3491,7 +3498,7 @@ static void show_help(const char *path)
"cV Move sel here%-10c^V Copy/move sel as\n"
"cX Delete sel%-13c^X Delete entry\n"
"ce Edit in EDITOR%-10cp Open in PAGER\n"
- "ci Archive entry%-0c\n"
+ "ci Archive entry%-11c* Toggle exe\n"
"1ORDER TOGGLES\n"
"cS Disk usage%-14cA Apparent du\n"
"cz Size%-20ct Time\n"
@@ -4849,13 +4856,19 @@ nochange:
if (ndents)
copycurname();
goto begin;
- case SEL_STATS:
+ case SEL_STATS: // fallthrough
+ case SEL_CHMODX:
if (ndents) {
mkpath(path, dents[cur].name, newpath);
- if (lstat(newpath, &sb) == -1 || !show_stats(newpath, &sb)) {
+ if (lstat(newpath, &sb) == -1
+ || (sel == SEL_STATS && !show_stats(newpath, &sb))
+ || (sel == SEL_CHMODX && !xchmod(newpath, sb.st_mode))) {
printwarn(&presel);
goto nochange;
}
+
+ if (sel == SEL_CHMODX)
+ dents[cur].mode ^= S_IXUSR;
}
break;
case SEL_REDRAW: // fallthrough
diff --git a/src/nnn.h b/src/nnn.h
index 4ef40bf..4e1311c 100644
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -65,6 +65,7 @@ enum action {
SEL_TOGGLEDOT,
SEL_DETAIL,
SEL_STATS,
+ SEL_CHMODX,
SEL_ARCHIVE,
SEL_FSIZE, /* file size */
SEL_ASIZE, /* apparent size */
@@ -177,6 +178,8 @@ static struct key bindings[] = {
{ 'd', SEL_DETAIL },
/* File details */
{ 'D', SEL_STATS },
+ /* Toggle executable status */
+ { '*', SEL_CHMODX },
/* Create archive */
{ 'i', SEL_ARCHIVE },
/* Toggle sort by size */