diff --git a/README.md b/README.md index acc500ef..5540e696 100644 --- a/README.md +++ b/README.md @@ -353,6 +353,12 @@ Any other value disables colored directories. The terminal screensaver is disabled by default. To set the wait time in seconds, use environment variable `NNN_IDLE_TIMEOUT`. +#### open file in new process and make the nnn not block + +The desktop file opener should take care of opening files in new processes without causing `nnn` to block. +If `nnn` does block/freeze when a file is open, then set the environment variable `NNN_NOWAIT` to any +non-zero value. + ### Why fork? I chose to fork because: diff --git a/nnn.1 b/nnn.1 index 9ad5c824..13d7c351 100644 --- a/nnn.1 +++ b/nnn.1 @@ -207,6 +207,12 @@ screensaver. echo -n $1 | xsel --clipboard --input ------------------------------------- .Ed +.Pp +\fBNNN_NOWAIT:\fR make nnn not block while a file is open. Only necessary if +nnn is blocking while a file is open. +.Bd -literal + export NNN_NOWAIT=1 +.Ed .Sh KNOWN ISSUES If you are using urxvt you might have to set backspacekey to DEC. .Sh AUTHORS diff --git a/nnn.c b/nnn.c index 3b0ac02a..1b1ba408 100644 --- a/nnn.c +++ b/nnn.c @@ -222,6 +222,7 @@ static char *player; static char *copier; static char *editor; static char *desktop_manager; +static char nowait; static blkcnt_t ent_blocks; static blkcnt_t dir_blocks; static ulong num_files; @@ -2211,7 +2212,7 @@ nochange: } /* Invoke desktop opener as last resort */ - spawn(utils[2], newpath, NULL, NULL, F_NOTRACE); + spawn(utils[2], newpath, NULL, NULL, nowait); continue; } default: @@ -2863,6 +2864,9 @@ main(int argc, char *argv[]) /* Get the default copier, if set */ copier = getenv("NNN_COPIER"); + /* Get nowait flag */ + nowait = F_NOTRACE | (getenv("NNN_NOWAIT") ? F_NOWAIT : 0); + signal(SIGINT, SIG_IGN); /* Test initial path */