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.
This commit is contained in:
Arun Prakash Jana 2019-01-11 18:54:54 +05:30
parent 625f2f8830
commit 5df41255b2
3 changed files with 25 additions and 3 deletions

View file

@ -80,6 +80,7 @@ We need contributors. Please visit the [ToDo list](https://github.com/jarun/nnn/
- [tmux configuration](#tmux-configuration) - [tmux configuration](#tmux-configuration)
- [BSD terminal issue](#bsd-terminal-issue) - [BSD terminal issue](#bsd-terminal-issue)
- [restrict file open](#restrict-file-open) - [restrict file open](#restrict-file-open)
- [restrict 0-byte files](#restrict-0-byte-files)
- [Why fork?](#why-fork) - [Why fork?](#why-fork)
- [Mentions](#mentions) - [Mentions](#mentions)
- [Developers](#developers) - [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. 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: 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. 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? #### 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: `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:

5
nnn.1
View file

@ -309,6 +309,11 @@ files.
.Bd -literal .Bd -literal
export DISABLE_FILE_OPEN_ON_NAV=1 export DISABLE_FILE_OPEN_ON_NAV=1
.Ed .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 .Sh KNOWN ISSUES
If you are using urxvt you might have to set backspace key to DEC. If you are using urxvt you might have to set backspace key to DEC.
.Sh AUTHORS .Sh AUTHORS

View file

@ -260,7 +260,7 @@ typedef struct {
uint dircolor : 1; /* Current status of dir color */ uint dircolor : 1; /* Current status of dir color */
uint metaviewer : 1; /* Index of metadata viewer in utils[] */ uint metaviewer : 1; /* Index of metadata viewer in utils[] */
uint ctxactive : 1; /* Context active or not */ uint ctxactive : 1; /* Context active or not */
uint reserved : 10; uint reserved : 9;
/* The following settings are global */ /* The following settings are global */
uint curctx : 2; /* Current context number */ uint curctx : 2; /* Current context number */
uint picker : 1; /* Write selection to user-specified file */ 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 useeditor : 1; /* Use VISUAL to open text files */
uint runscript : 1; /* Choose script to run mode */ uint runscript : 1; /* Choose script to run mode */
uint runctx : 2; /* The context in which script is to be run */ uint runctx : 2; /* The context in which script is to be run */
uint restrict0b : 1; /* Restrict 0-byte file opening */
} settings; } settings;
/* Contexts or workspaces */ /* Contexts or workspaces */
@ -284,7 +285,7 @@ typedef struct {
/* GLOBALS */ /* GLOBALS */
/* Configuration, contexts */ /* 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 context g_ctx[CTX_MAX] __attribute__ ((aligned));
static struct entry *dents; static struct entry *dents;
@ -2770,6 +2771,11 @@ nochange:
continue; continue;
} }
if (!sb.st_size && cfg.restrict0b) {
printmsg("empty: use edit or open with");
goto nochange;
}
/* Invoke desktop opener as last resort */ /* Invoke desktop opener as last resort */
spawn(utils[OPENER], newpath, NULL, NULL, F_NOWAIT | F_NOTRACE); spawn(utils[OPENER], newpath, NULL, NULL, F_NOWAIT | F_NOTRACE);
continue; continue;
@ -3775,6 +3781,10 @@ int main(int argc, char *argv[])
if (getenv("DISABLE_FILE_OPEN_ON_NAV")) if (getenv("DISABLE_FILE_OPEN_ON_NAV"))
cfg.nonavopen = 1; cfg.nonavopen = 1;
/* Restrict opening of 0-byte files */
if (getenv("NNN_RESTRICT_0B"))
cfg.restrict0b = 1;
signal(SIGINT, SIG_IGN); signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN); signal(SIGQUIT, SIG_IGN);