diff --git a/README.md b/README.md index f0589395..36b15ea0 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,6 @@ Have fun with it! PRs are welcome. Check out [#1](https://github.com/jarun/nnn/i - [boost chdir prompt](#boost-chdir-prompt) - [set idle timeout](#set-idle-timeout) - [show hot plugged drives](#show-hot-plugged-drives) -- [Troubleshooting](#troubleshooting) - - [nnn blocks on opening files](#nnn-blocks-on-opening-files) - [Why fork?](#why-fork) - [Mentions](#mentions) - [Developers](#developers) @@ -453,14 +451,6 @@ The terminal screensaver is disabled by default. To set the wait time in seconds Enable volume management in your DE file manager and set removable drives or media to be auto-mounted when inserted. Then visit the usual mount point location (`/mnt` or `/media/user`) in `nnn`. -### Troubleshooting - -#### nnn blocks on opening files - -Ideally nnn should not block. Unfortunately, sometimes even the same desktop opener behaves differently on different Linux desktop environments. If `nnn` does block when a file is open, set the environment variable `NNN_NOWAIT` to any non-zero value. For example, - - export NNN_NOWAIT=1 - ### Why fork? I chose to fork because: diff --git a/nnn.1 b/nnn.1 index 38962000..92245a69 100644 --- a/nnn.1 +++ b/nnn.1 @@ -253,11 +253,6 @@ screensaver. export NNN_NO_X=1 .Ed .Pp -\fBNNN_NOWAIT:\fR necessary only if nnn blocks while a file is open. -.Bd -literal - export NNN_NOWAIT=1 -.Ed -.Pp \fBNNN_QUOTE_ON:\fR wrap copied paths within single quotes. Useful for pasting names in the shell. .Sh KNOWN ISSUES diff --git a/nnn.c b/nnn.c index 389a63a1..d5d544cd 100644 --- a/nnn.c +++ b/nnn.c @@ -248,7 +248,6 @@ static char *player; static char *copier; static char *editor; static char *desktop_manager; -static char nowait = F_NOTRACE; static blkcnt_t ent_blocks; static blkcnt_t dir_blocks; static ulong num_files; @@ -759,6 +758,12 @@ spawn(const char *file, const char *arg1, const char *arg2, const char *dir, uch close(fd); } + if (flag & F_NOWAIT) { + signal(SIGHUP, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + setsid(); + } + if (flag & F_SIGINT) signal(SIGINT, SIG_DFL); execlp(file, file, arg1, arg2, NULL); @@ -2520,7 +2525,7 @@ nochange: } /* Invoke desktop opener as last resort */ - spawn(utils[OPENER], newpath, NULL, NULL, nowait); + spawn(utils[OPENER], newpath, NULL, NULL, F_NOWAIT | F_NOTRACE); continue; } default: @@ -2878,7 +2883,7 @@ nochange: goto nochange; } - spawn(desktop_manager, path, NULL, path, F_NOTRACE | F_NOWAIT); + spawn(desktop_manager, path, NULL, path, F_NOWAIT | F_NOTRACE); break; case SEL_FSIZE: cfg.sizeorder ^= 1; @@ -3341,9 +3346,6 @@ main(int argc, char *argv[]) /* Get the default copier, if set */ copier = getenv("NNN_COPIER"); - /* Get nowait flag */ - nowait |= getenv("NNN_NOWAIT") ? F_NOWAIT : 0; - /* Enable quotes if opted */ if (getenv("NNN_QUOTE_ON")) cfg.quote = 1;