aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2018-12-01 08:06:34 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2018-12-01 08:06:34 +0530
commit4b9796eae04c9a25e27c8f4328075019ce446c4a (patch)
treeb1b16950138fb09fa2fd28a657a7d2b23c06b3b8
parentd7da4acde04e8c340ddf4ba95c73c6c90f3ad78d (diff)
downloadnnn-4b9796eae04c9a25e27c8f4328075019ce446c4a.tar.gz
Fix #157: support one combined arg for EDITOR, PAGER and SHELL
-rw-r--r--README.md6
-rw-r--r--src/nnn.c23
-rw-r--r--src/nnn.h6
3 files changed, 20 insertions, 15 deletions
diff --git a/README.md b/README.md
index 132c5a6..4ee622a 100644
--- 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
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, "", "" },