]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix #179
authorArun Prakash Jana <engineerarun@gmail.com>
Fri, 4 Jan 2019 18:26:02 +0000 (23:56 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Fri, 4 Jan 2019 18:26:02 +0000 (23:56 +0530)
README.md
nnn.1
src/nnn.c

index 2627d38446ebe92abb704be81a8ff961992333e4..f9dcea14ef630881f83c99cb0b14767b551f2c31 100644 (file)
--- 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
index 62bb162552d09fad26196dbcf3fc928075246755..6cd8e19128b4aa914ac25462b89d1473d0508bc3 100644 (file)
--- 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:
index 87b504259ea2fff6bdafefc7e4b973bd2ba008da..c6264af5c91542585e688cb75c36b012ed55cf71 100644 (file)
--- 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");