Prevent nnn from waiting on open file process (#40)

* Prevent nnn from waiting on open file process

* Add env var flag to not wait for child process when opening file

* Set nowait flag once to skip bit-or every time we open a file

* Add documentation for NNN_NOWAIT
This commit is contained in:
Paul 2017-09-19 02:30:54 -04:00 committed by Arun Prakash Jana
parent 968beb434a
commit df4b557ca1
3 changed files with 17 additions and 1 deletions

View file

@ -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`. 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? ### Why fork?
I chose to fork because: I chose to fork because:

6
nnn.1
View file

@ -207,6 +207,12 @@ screensaver.
echo -n $1 | xsel --clipboard --input echo -n $1 | xsel --clipboard --input
------------------------------------- -------------------------------------
.Ed .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 .Sh KNOWN ISSUES
If you are using urxvt you might have to set backspacekey to DEC. If you are using urxvt you might have to set backspacekey to DEC.
.Sh AUTHORS .Sh AUTHORS

6
nnn.c
View file

@ -222,6 +222,7 @@ static char *player;
static char *copier; static char *copier;
static char *editor; static char *editor;
static char *desktop_manager; static char *desktop_manager;
static char nowait;
static blkcnt_t ent_blocks; static blkcnt_t ent_blocks;
static blkcnt_t dir_blocks; static blkcnt_t dir_blocks;
static ulong num_files; static ulong num_files;
@ -2211,7 +2212,7 @@ nochange:
} }
/* Invoke desktop opener as last resort */ /* Invoke desktop opener as last resort */
spawn(utils[2], newpath, NULL, NULL, F_NOTRACE); spawn(utils[2], newpath, NULL, NULL, nowait);
continue; continue;
} }
default: default:
@ -2863,6 +2864,9 @@ main(int argc, char *argv[])
/* Get the default copier, if set */ /* Get the default copier, if set */
copier = getenv("NNN_COPIER"); copier = getenv("NNN_COPIER");
/* Get nowait flag */
nowait = F_NOTRACE | (getenv("NNN_NOWAIT") ? F_NOWAIT : 0);
signal(SIGINT, SIG_IGN); signal(SIGINT, SIG_IGN);
/* Test initial path */ /* Test initial path */