]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix #187
authorArun Prakash Jana <engineerarun@gmail.com>
Fri, 11 Jan 2019 13:24:54 +0000 (18:54 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Fri, 11 Jan 2019 16:13:57 +0000 (21:43 +0530)
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.

README.md
nnn.1
src/nnn.c

index 27f30734255e484e0ac2366d2fae0ce6949c664c..c8ecfdba91a786424a7f20d0271246eb45d93627 100644 (file)
--- a/README.md
+++ b/README.md
@@ -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:
diff --git a/nnn.1 b/nnn.1
index f78cd9960a7f297a2d3473f1576a8998fd2f0bd8..4a824a1f39482ac937b6e321b1c0062a7badda6d 100644 (file)
--- a/nnn.1
+++ b/nnn.1
@@ -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
index 50c9b9de2bc3b9d501b678659fb45480e066c995..1cdaa569d7d37a295befa4891034374699fca6a6 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -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);