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, "", "" },