commit 18a6a010cf76b6090cbae976c7ebc61dd18a3280
parent 4ddd048febef9e9098c8f5a19837a38c776b538b
Author: Arun Prakash Jana <engineerarun@gmail.com>
Date: Tue, 10 May 2022 19:46:19 +0530
Fix #1355: interpret suffix `$nnn` when paging
Diffstat:
3 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/nnn.1 b/nnn.1
@@ -410,20 +410,21 @@ separated by \fI;\fR:
NOTES:
1. Use single quotes for $NNN_PLUG so $nnn is not interpreted
- 2. (Again) add \fB!\fR before the command
- 3. To disable directory refresh after running a \fIcommand as plugin\fR,
+ 2. $nnn must be the last argument (if used) to run a \fIcommand as plugin\fR
+ 3. (Again) add \fB!\fR before the command
+ 4. To disable directory refresh after running a \fIcommand as plugin\fR,
prefix with \fB-!\fR
- 4. To skip user confirmation after command execution, suffix with \fB*\fR
+ 5. To skip user confirmation after command execution, suffix with \fB*\fR
Note: Do not use \fB*\fR with programs those run and exit e.g. cat
export NNN_PLUG='y:-!sync*'
- 5. To run a \fIGUI app as plugin\fR, add a \fB&\fR after \fB!\fR
+ 6. To run a \fIGUI app as plugin\fR, add a \fB&\fR after \fB!\fR
Note: \fI$nnn\fR must be the last argument in this case.
export NNN_PLUG='m:-!&mousepad $nnn'
- 6. To show the output of run-and-exit commands which do not need user input,
+ 7. To show the output of run-and-exit commands which do not need user input,
add \fB|\fR (pipe) after \fB!\fR
Note: This option is incompatible with \fB&\fR (terminal output is masked
for GUI programs) and ignores \fB*\fR (output is already paged for user)
diff --git a/plugins/README.md b/plugins/README.md
@@ -183,8 +183,9 @@ This option is incompatible with `&` (terminal output is masked for GUI programs
Notes:
1. Use single quotes for `$NNN_PLUG` so `$nnn` is not interpreted
-2. (_Again_) add `!` before the command
-3. To disable directory refresh after running a _command as plugin_, prefix with `-!`
+2. `$nnn` must be the last argument (if used) to run a _command as plugin_
+3. (_Again_) add `!` before the command
+4. To disable directory refresh after running a _command as plugin_, prefix with `-!`
#### Some useful key-command examples
diff --git a/src/nnn.c b/src/nnn.c
@@ -5142,7 +5142,7 @@ static void setexports(void)
setenv("NNN_INCLUDE_HIDDEN", xitoa(cfg.showhidden), 1);
}
-static bool run_cmd_as_plugin(const char *file, char *runfile, uchar_t flags)
+static void run_cmd_as_plugin(const char *file, char *runfile, uchar_t flags)
{
size_t len;
@@ -5155,18 +5155,18 @@ static bool run_cmd_as_plugin(const char *file, char *runfile, uchar_t flags)
--len;
}
- if (flags & F_PAGE)
- get_output(g_buf, NULL, NULL, -1, TRUE, TRUE);
- else if (flags & F_NOTRACE) {
+ if ((flags & F_PAGE) || (flags & F_NOTRACE)) {
if (is_suffix(g_buf, " $nnn"))
g_buf[len - 5] = '\0';
else
runfile = NULL;
- spawn(g_buf, runfile, NULL, NULL, flags);
+
+ if (flags & F_PAGE)
+ get_output(g_buf, runfile, NULL, -1, TRUE, TRUE);
+ else // F_NOTRACE
+ spawn(g_buf, runfile, NULL, NULL, flags);
} else
spawn(utils[UTIL_SH_EXEC], g_buf, NULL, NULL, flags);
-
- return TRUE;
}
static bool plctrl_init(void)
@@ -5296,8 +5296,10 @@ static bool run_plugin(char **path, const char *file, char *runfile, char **last
if (!*file)
return FALSE;
- if ((flags & F_NOTRACE) || (flags & F_PAGE))
- return run_cmd_as_plugin(file, runfile, flags);
+ if ((flags & F_NOTRACE) || (flags & F_PAGE)) {
+ run_cmd_as_plugin(file, runfile, flags);
+ return TRUE;
+ }
cmd_as_plugin = TRUE;
}
@@ -5331,7 +5333,7 @@ static bool run_plugin(char **path, const char *file, char *runfile, char **last
} else
spawn(g_buf, NULL, *path, sel, 0);
} else
- run_cmd_as_plugin(file, NULL, flags);
+ run_cmd_as_plugin(file, runfile, flags);
close(wfd);
_exit(EXIT_SUCCESS);