diff options
author | Arun Prakash Jana <engineerarun@gmail.com> | 2019-01-11 18:54:54 +0530 |
---|---|---|
committer | Arun Prakash Jana <engineerarun@gmail.com> | 2019-01-11 21:43:57 +0530 |
commit | 5df41255b293d20ea5f1a54ba1950ff483c66187 (patch) | |
tree | 277d3477d65685f63bde92ca0d27ca4dd8b3c7e4 | |
parent | 625f2f88309c86395f902cb7e6e73b41c6238813 (diff) | |
download | nnn-5df41255b293d20ea5f1a54ba1950ff483c66187.tar.gz |
Fix #187
It seems the behaviour of the default opener (xdg-open) varies across platforms
and environments. Details are documented in the issue. To prevent an empty file
from being accidentally opened leading to unexpected behaviour, we are adding a
guard with the message that the empty file should be opened using edit or open
option.
-rw-r--r-- | README.md | 9 | ||||
-rw-r--r-- | nnn.1 | 5 | ||||
-rw-r--r-- | src/nnn.c | 14 |
3 files changed, 25 insertions, 3 deletions
@@ -80,6 +80,7 @@ We need contributors. Please visit the [ToDo list](https://github.com/jarun/nnn/ - [tmux configuration](#tmux-configuration) - [BSD terminal issue](#bsd-terminal-issue) - [restrict file open](#restrict-file-open) + - [restrict 0-byte files](#restrict-0-byte-files) - [Why fork?](#why-fork) - [Mentions](#mentions) - [Developers](#developers) @@ -531,7 +532,7 @@ Enable volume management in your DE file manager and set removable drives or med By default in OpenBSD & FreeBSD, `stty` maps <kbd>^Y</kbd> to `DSUSP`. This means that typing <kbd>^Y</kbd> will suspend `nnn` as if you typed <kbd>^Z</kbd> (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 <kbd>^Y</kbd> instead. -#### Restrict file open +#### restrict file open In order to disable opening files on accidental navigation key (<kbd>→</kbd> or <kbd>l</kbd>) press: @@ -539,6 +540,12 @@ In order to disable opening files on accidental navigation key (<kbd>→</kbd> o Use <kbd>Enter</kbd> to open files. +#### restrict 0-byte files + +Restrict opening 0-byte files due to [unexpected behaviour](https://github.com/jarun/nnn/issues/187); use _edit_ or _open with_ to open the file. + + export NNN_RESTRICT_0B=1 + #### WHY FORK? `nnn` was initially forked from [noice](http://git.2f30.org/noice/) but is significantly [different](https://github.com/jarun/nnn/wiki/nnn-vs.-noice) today. I chose to fork because: @@ -309,6 +309,11 @@ files. .Bd -literal export DISABLE_FILE_OPEN_ON_NAV=1 .Ed +.Pp +\fBNNN_RESTRICT_0B:\fR restrict opening 0-byte files due to unexpected behaviour; use \fIedit\fR or \fIopen with\fR to open the file. +.Bd -literal + export NNN_RESTRICT_0B=1 +.Ed .Sh KNOWN ISSUES If you are using urxvt you might have to set backspace key to DEC. .Sh AUTHORS @@ -260,7 +260,7 @@ typedef struct { uint dircolor : 1; /* Current status of dir color */ uint metaviewer : 1; /* Index of metadata viewer in utils[] */ uint ctxactive : 1; /* Context active or not */ - uint reserved : 10; + uint reserved : 9; /* The following settings are global */ uint curctx : 2; /* Current context number */ uint picker : 1; /* Write selection to user-specified file */ @@ -269,6 +269,7 @@ typedef struct { uint useeditor : 1; /* Use VISUAL to open text files */ uint runscript : 1; /* Choose script to run mode */ uint runctx : 2; /* The context in which script is to be run */ + uint restrict0b : 1; /* Restrict 0-byte file opening */ } settings; /* Contexts or workspaces */ @@ -284,7 +285,7 @@ typedef struct { /* GLOBALS */ /* Configuration, contexts */ -static settings cfg = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}; +static settings cfg = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}; static context g_ctx[CTX_MAX] __attribute__ ((aligned)); static struct entry *dents; @@ -2770,6 +2771,11 @@ nochange: continue; } + if (!sb.st_size && cfg.restrict0b) { + printmsg("empty: use edit or open with"); + goto nochange; + } + /* Invoke desktop opener as last resort */ spawn(utils[OPENER], newpath, NULL, NULL, F_NOWAIT | F_NOTRACE); continue; @@ -3775,6 +3781,10 @@ int main(int argc, char *argv[]) if (getenv("DISABLE_FILE_OPEN_ON_NAV")) cfg.nonavopen = 1; + /* Restrict opening of 0-byte files */ + if (getenv("NNN_RESTRICT_0B")) + cfg.restrict0b = 1; + signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); |