From 4b9796eae04c9a25e27c8f4328075019ce446c4a Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Sat, 1 Dec 2018 08:06:34 +0530 Subject: Fix #157: support one combined arg for EDITOR, PAGER and SHELL --- src/nnn.c | 23 +++++++++++++---------- src/nnn.h | 6 +++--- 2 files changed, 16 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/nnn.c b/src/nnn.c index 5751dfb..6885bea 100644 --- 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); diff --git a/src/nnn.h b/src/nnn.h index 9befd59..c8a2cc9 100644 --- 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, "", "" }, -- cgit v1.2.3-70-g09d2