README.md | 9 +++++++++
nnn.1 | 6 ++++++
src/nnn.c | 22 ++++++++++++++++++----
src/nnn.h | 5 +++--
diff --git a/README.md b/README.md
index af946e7d535966c169d59c796cae7ee1eaebbbeb..bd5a0790f74592fa42f7563072b3d1fb78ca9f49 100644
--- a/README.md
+++ b/README.md
@@ -73,6 +73,7 @@ - [set idle timeout](#set-idle-timeout)
- [show hot plugged drives](#show-hot-plugged-drives)
- [tmux configuration](#tmux-configuration)
- [BSD terminal issue](#bsd-terminal-issue)
+ - [Disable file open on navigation](#disable-file-open-on-navigation)
- [Why fork?](#why-fork)
- [Mentions](#mentions)
- [Developers](#developers)
@@ -514,6 +515,14 @@
#### BSD terminal issue
By default in OpenBSD & FreeBSD, `stty` maps ^Y to `DSUSP`. This means that typing ^Y will suspend `nnn` as if you typed ^Z (you can bring `nnn` back to the foreground by issuing `fg`) instead of entering multi-copy mode. You can check this with `stty -a`. If it includes the text `dsusp = ^Y`, issuing `stty dsusp undef` will disable this `DSUSP` and let `nnn` receive the ^Y instead.
+
+#### Disable file open on navigation
+
+In order to disable opening files on accidental navigation key (→ or l) press:
+
+ export DISABLE_FILE_OPEN_ON_NAV=1
+
+To open files with this setting, press Enter.
#### WHY FORK?
diff --git a/nnn.1 b/nnn.1
index aef323fa0df1df31d14fd0b93671f36923afe150..736e1f41f1930b75d6eb6b352662b8d705d5654e 100644
--- a/nnn.1
+++ b/nnn.1
@@ -317,6 +317,12 @@ \fBNNN_NO_AUTOSELECT:\fR Disable directory auto-selection in \fInavigate-as-you-type\fR mode.
.Bd -literal
export NNN_NO_AUTOSELECT=1
.Ed
+.Pp
+\fBDISABLE_FILE_OPEN_ON_NAV:\fR Disable file open on \fBRight\fR or \fBl\fR keys. To open
+files, press \fBEnter\fR.
+.Bd -literal
+ export DISABLE_FILE_OPEN_ON_NAV=1
+.Ed
.Sh KNOWN ISSUES
If you are using urxvt you might have to set backspace key to DEC.
.Sh AUTHORS
diff --git a/src/nnn.c b/src/nnn.c
index 35df72168aa7f9891651cd1db6a2b74a19cc365c..522ba64c0c0b3b91c1cc7d35e96dd43a3d431863 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -261,11 +261,12 @@ uint metaviewer : 1; /* Index of metadata viewer in utils[] */
uint quote : 1; /* Copy paths within quotes */
uint color : 3; /* Color code for directories */
uint ctxactive : 1; /* Context active or not */
- uint reserved : 11;
+ uint reserved : 10;
/* The following settings are global */
uint curctx : 2; /* Current context number */
uint picker : 1; /* Write selection to user-specified file */
uint pickraw : 1; /* Write selection to sdtout before exit */
+ uint nonavopen : 1; /* Open file on right arrow or `l` */
} settings;
/* Contexts or workspaces */
@@ -281,7 +282,7 @@
/* GLOBALS */
/* Configuration, contexts */
-static settings cfg = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 4, 1, 0, 0, 0, 0};
+static settings cfg = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0};
static context g_ctx[MAX_CTX] __attribute__ ((aligned));
static struct entry *dents;
@@ -2040,9 +2041,13 @@ dprintf(fd, "copy file: %s\n", g_cppath);
if (getenv("NNN_SCRIPT"))
dprintf(fd, "NNN_SCRIPT: %s\n", getenv("NNN_SCRIPT"));
if (getenv("NNN_MULTISCRIPT"))
- dprintf(fd, "NNN_MULTISCRIPT: %s\n", getenv("NNN_MULTISCRIPT"));
+ dprintf(fd, "NNN_MULTISCRIPT: 1\n");
if (getenv("NNN_SHOW_HIDDEN"))
- dprintf(fd, "NNN_SHOW_HIDDEN: %s\n", getenv("NNN_SHOW_HIDDEN"));
+ dprintf(fd, "NNN_SHOW_HIDDEN: 1\n");
+ if (getenv("NNN_NO_AUTOSELECT"))
+ dprintf(fd, "NNN_NO_AUTOSELECT: 1\n");
+ if (getenv("DISABLE_FILE_OPEN_ON_NAV"))
+ dprintf(fd, "DISABLE_FILE_OPEN_ON_NAV: 1\n");
dprintf(fd, "\n");
@@ -2574,6 +2579,7 @@ xstrlcpy(path, dir, PATH_MAX);
setdirwatch();
goto begin;
+ case SEL_NAV_IN: // fallthrough
case SEL_GOIN:
/* Cannot descend in empty directories */
if (!ndents)
@@ -2612,6 +2618,10 @@ setdirwatch();
goto begin;
case S_IFREG:
{
+ /* If open file is disabled on right arrow or `l`, return */
+ if (cfg.nonavopen && sel == SEL_NAV_IN)
+ continue;
+
/* If NNN_USE_EDITOR is set,
* open text in EDITOR
*/
@@ -3572,6 +3582,10 @@
/* Disable auto-select if opted */
if (getenv("NNN_NO_AUTOSELECT"))
cfg.autoselect = 0;
+
+ /* Disable opening files on right arrow and `l` */
+ if (getenv("DISABLE_FILE_OPEN_ON_NAV"))
+ cfg.nonavopen = 1;
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
diff --git a/src/nnn.h b/src/nnn.h
index 6802167fc72947ac52d56ca66979c84f5ef6f682..4b13d91881537f3fdf8e0c9cbf111684f77c9ee6 100644
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -38,6 +38,7 @@ /* Supported actions */
enum action {
SEL_BACK = 1,
SEL_GOIN,
+ SEL_NAV_IN,
SEL_NEXT,
SEL_PREV,
SEL_PGDN,
@@ -117,8 +118,8 @@ { CONTROL('H'), SEL_BACK, "", "" },
/* Inside */
{ KEY_ENTER, SEL_GOIN, "", "" },
{ '\r', SEL_GOIN, "", "" },
- { KEY_RIGHT, SEL_GOIN, "", "" },
- { 'l', SEL_GOIN, "", "" },
+ { KEY_RIGHT, SEL_NAV_IN, "", "" },
+ { 'l', SEL_NAV_IN, "", "" },
/* Next */
{ 'j', SEL_NEXT, "", "" },
{ KEY_DOWN, SEL_NEXT, "", "" },