]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix #157: support one combined arg for EDITOR, PAGER and SHELL
authorArun Prakash Jana <engineerarun@gmail.com>
Sat, 1 Dec 2018 02:36:34 +0000 (08:06 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sat, 1 Dec 2018 02:36:34 +0000 (08:06 +0530)
README.md
src/nnn.c
src/nnn.h

index 132c5a62a9f786691645987fdaed7ecc7bd5447c..4ee622ae2a9259b805c136cf410aa43c83ddd3f1 100644 (file)
--- a/README.md
+++ b/README.md
@@ -330,10 +330,12 @@ The following indicators are used in the detail view:
 | $PAGER | page through files (fallback less) |
 | $SHELL | spawn a shell, run script (fallback sh) |
 
-To edit all text files in EDITOR (preferably CLI, fallback vi):
+To edit all text files in EDITOR (preferably CLI, fallback vi):
 
       export NNN_USE_EDITOR=1
-      Note: Arguments to the editor should be combined together, e.g.,
+
+Arguments to the `$EDITOR`, `$PAGER` and `$SHELL` should be combined together, e.g.,
+
       export EDITOR='vim -xR'
 
 #### Help
index 5751dfbc7f2c8aae307faed7ea1f5baf478b5a4e..6885bea535907c3536dbcb1bfbaf686bedc8685f 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -293,6 +293,7 @@ static uint idletimeout, copybufpos, copybuflen;
 static char *copier;
 static char *editor, *editor_arg;
 static char *pager, *pager_arg;
+static char *shell, *shell_arg;
 static blkcnt_t ent_blocks;
 static blkcnt_t dir_blocks;
 static ulong num_files;
@@ -872,7 +873,7 @@ static void getprogarg(char *prog, char **arg)
 {
        char *argptr;
 
-       while (*prog && *prog != ' ')
+       while (*prog && !isblank(*prog))
                ++prog;
 
        if (*prog) {
@@ -882,7 +883,7 @@ static void getprogarg(char *prog, char **arg)
 
                /* Make sure there are no more args */
                while (*argptr) {
-                       if (*argptr == ' ') {
+                       if (isblank(*argptr)) {
                                fprintf(stderr, "Too many args [%s]\n", prog);
                                exit(1);
                        }
@@ -2115,15 +2116,15 @@ static int show_help(char *path)
        if (getenv("PWD"))
                dprintf(fd, "PWD: %s\n", getenv("PWD"));
        if (getenv("SHELL"))
-               dprintf(fd, "SHELL: %s\n", getenv("SHELL"));
+               dprintf(fd, "SHELL: %s\n", shell);
        if (getenv("SHLVL"))
                dprintf(fd, "SHLVL: %s\n", getenv("SHLVL"));
        if (getenv("VISUAL"))
-               dprintf(fd, "VISUAL: %s\n", getenv("VISUAL"));
+               dprintf(fd, "VISUAL: %s\n", editor);
        else if (getenv("EDITOR"))
-               dprintf(fd, "EDITOR: %s\n", getenv("EDITOR"));
+               dprintf(fd, "EDITOR: %s\n", editor);
        if (getenv("PAGER"))
-               dprintf(fd, "PAGER: %s\n", getenv("PAGER"));
+               dprintf(fd, "PAGER: %s\n", pager);
 
        dprintf(fd, "\nVersion: %s\n%s\n", VERSION, GENERAL_INFO);
        close(fd);
@@ -3351,8 +3352,6 @@ nochange:
                        break;
                case SEL_RUN: // fallthrough
                case SEL_RUNSCRIPT:
-                       run = xgetenv(env, run);
-
                        if (sel == SEL_RUNSCRIPT) {
                                tmp = getenv("NNN_SCRIPT");
                                if (tmp) {
@@ -3371,11 +3370,11 @@ nochange:
                                        if (ndents)
                                                curfile = dents[cur].name;
 
-                                       spawn(run, tmp, curfile, path, F_NORMAL | F_SIGINT);
+                                       spawn(shell, tmp, curfile, path, F_NORMAL | F_SIGINT);
                                } else
                                        printmsg("set NNN_SCRIPT");
                        } else {
-                               spawn(run, NULL, NULL, path, F_NORMAL | F_MARKER);
+                               spawn(shell, shell_arg, NULL, path, F_NORMAL | F_MARKER);
 
                                /* Continue in navigate-as-you-type mode, if enabled */
                                if (cfg.filtermode)
@@ -3600,6 +3599,10 @@ int main(int argc, char *argv[])
        pager = xgetenv("PAGER", "less");
        getprogarg(pager, &pager_arg);
 
+       /* Get SHELL */
+       shell = xgetenv("SHELL", "sh");
+       getprogarg(shell, &shell_arg);
+
 #ifdef LINUX_INOTIFY
        /* Initialize inotify */
        inotify_fd = inotify_init1(IN_NONBLOCK);
index 9befd59edffb6be7a00f80e81d1e47c385c61b76..c8a2cc9b0c8b8393e07f2ddfdd0d6476ae59a966 100644 (file)
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -222,10 +222,10 @@ static struct key bindings[] = {
        /* Show help */
        { '?',            SEL_HELP,      "",     "" },
        /* Run command */
-       { '!',            SEL_RUN,       "sh",   "SHELL" },
-       { CONTROL(']'),   SEL_RUN,       "sh",   "SHELL" },
+       { '!',            SEL_RUN,       "",     "" },
+       { CONTROL(']'),   SEL_RUN,       "",     "" },
        /* Run a custom script */
-       { 'R',            SEL_RUNSCRIPT, "sh",   "SHELL" },
+       { 'R',            SEL_RUNSCRIPT, "",     "" },
        /* Run command with argument */
        { 'e',            SEL_RUNEDIT,   "",     "" },
        { 'p',            SEL_RUNPAGE,   "",     "" },