commit e87ff1129c956da53116c4ca18ceef37b65baa92
parent a40cdadb8250ad8efb4c25f4846b09ca096e26f9
Author: Arun Prakash Jana <engineerarun@gmail.com>
Date: Fri, 4 Jan 2019 23:56:02 +0530
Fix #179
Diffstat:
3 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/README.md b/README.md
@@ -372,9 +372,7 @@ To edit all text files in EDITOR (preferably CLI, fallback vi):
export NNN_USE_EDITOR=1
-Arguments to the `$EDITOR`, `$PAGER` and `$SHELL` should be combined together, e.g.,
-
- export EDITOR='vim -xR'
+Arguments to the `$PAGER` and `$SHELL` should be combined together.
The option `open with` takes 1 combined argument.
diff --git a/nnn.1 b/nnn.1
@@ -264,10 +264,7 @@ be copied, moved or removed using respective keyboard shortcuts.
To list the file paths copied to memory press \fIy\fR.
.Sh ENVIRONMENT
The SHELL, EDITOR (VISUAL, if defined) and PAGER environment variables take precedence
-when dealing with the !, e and p commands respectively. A single combination to arguments is supported, e.g.:
-.Bd -literal
- export EDITOR='vim -xR'
-.Ed
+when dealing with the !, e and p commands respectively. A single combination to arguments is supported for SHELL and PAGER.
.Pp
\fBNNN_BMS:\fR bookmark string as \fIkey_char:location\fR pairs (max 10) separated by
\fI;\fR:
diff --git a/src/nnn.c b/src/nnn.c
@@ -293,7 +293,7 @@ static int ndents, cur, total_dents = ENTRY_INCR;
static uint idle;
static uint idletimeout, copybufpos, copybuflen;
static char *copier;
-static char *editor, *editor_arg;
+static char *editor;
static char *pager, *pager_arg;
static char *shell, *shell_arg;
static char *runpath;
@@ -2125,9 +2125,9 @@ static bool show_help(char *path)
if (getenv("SHLVL"))
dprintf(fd, "SHLVL: %s\n", getenv("SHLVL"));
if (getenv("VISUAL"))
- dprintf(fd, "VISUAL: %s %s\n", editor, editor_arg);
+ dprintf(fd, "VISUAL: %s\n", editor);
else if (getenv("EDITOR"))
- dprintf(fd, "EDITOR: %s %s\n", editor, editor_arg);
+ dprintf(fd, "EDITOR: %s\n", editor);
if (getenv("PAGER"))
dprintf(fd, "PAGER: %s %s\n", pager, pager_arg);
@@ -2717,7 +2717,11 @@ nochange:
if (cfg.useeditor &&
get_output(g_buf, CMD_LEN_MAX, "file", FILE_OPTS, newpath, FALSE) &&
strstr(g_buf, "text/") == g_buf) {
- spawn(editor, editor_arg, newpath, path, F_NORMAL);
+ r = xstrlcpy(g_buf, editor, CMD_LEN_MAX);
+ g_buf[r - 1] = ' ';
+ xstrlcpy(g_buf + r, newpath, CMD_LEN_MAX - r);
+ DPRINTF_S(g_buf);
+ spawn("sh", "-c", g_buf, path, F_NORMAL);
continue;
}
@@ -3023,8 +3027,11 @@ nochange:
r = show_help(path);
break;
case SEL_RUNEDIT:
+ r = xstrlcpy(g_buf, editor, CMD_LEN_MAX);
+ g_buf[r - 1] = ' ';
+ xstrlcpy(g_buf + r, dents[cur].name, CMD_LEN_MAX - r);
r = TRUE;
- spawn(editor, editor_arg, dents[cur].name, path, F_NORMAL);
+ spawn("sh", "-c", g_buf, path, F_NORMAL);
break;
case SEL_RUNPAGE:
r = TRUE;
@@ -3666,7 +3673,6 @@ int main(int argc, char *argv[])
/* Get VISUAL/EDITOR */
editor = xgetenv("VISUAL", xgetenv("EDITOR", "vi"));
- getprogarg(editor, &editor_arg);
/* Get PAGER */
pager = xgetenv("PAGER", "less");