Always detach opener

This may affect issue #227 but the defunct processes do not use any memory and exit when nnn exits. I guess that happens because of xdg-open using an intermediate script.

However, if we do not detach xdg-open, the child process is killed when the terminal is closed which is a severe problem.
This commit is contained in:
Arun Prakash Jana 2019-04-26 08:46:37 +05:30
parent f07c8a9dfd
commit 4f15fb765a
No known key found for this signature in database
GPG key ID: A75979F35C080412
3 changed files with 4 additions and 15 deletions

View file

@ -335,7 +335,6 @@ The following indicators are used in the detail view:
| --- | --- | | --- | --- |
| `NNN_BMS='d:~/Documents;D:~/Docs archive/'` | specify bookmarks (max 10) | | `NNN_BMS='d:~/Documents;D:~/Docs archive/'` | specify bookmarks (max 10) |
| `NNN_OPENER=mimeopen` | custom file opener | | `NNN_OPENER=mimeopen` | custom file opener |
| `NNN_OPENER_DETACH=1` | do not block when invoking file opener |
| `NNN_CONTEXT_COLORS='1234'` | specify per context color [default: '4444' (all blue)] | | `NNN_CONTEXT_COLORS='1234'` | specify per context color [default: '4444' (all blue)] |
| `NNN_IDLE_TIMEOUT=300` | idle seconds before locking terminal [default: disabled] | | `NNN_IDLE_TIMEOUT=300` | idle seconds before locking terminal [default: disabled] |
| `NNN_COPIER='/absolute/path/to/copier'` | system clipboard copier script [default: none] | | `NNN_COPIER='/absolute/path/to/copier'` | system clipboard copier script [default: none] |

5
nnn.1
View file

@ -154,11 +154,6 @@ when dealing with the !, e and p commands respectively. A single combination to
export NNN_OPENER=mimeopen export NNN_OPENER=mimeopen
.Ed .Ed
.Pp .Pp
\fBNNN_OPENER_DETACH:\fR do not block when invoking file opener.
.Bd -literal
export NNN_OPENER_DETACH=1
.Ed
.Pp
\fBNNN_CONTEXT_COLORS:\fR string of color codes for each context, e.g.: \fBNNN_CONTEXT_COLORS:\fR string of color codes for each context, e.g.:
.Bd -literal .Bd -literal
export NNN_CONTEXT_COLORS='1234' export NNN_CONTEXT_COLORS='1234'

View file

@ -291,7 +291,6 @@ static bm bookmark[BM_MAX];
static size_t g_tmpfplen; static size_t g_tmpfplen;
static uchar g_crc; static uchar g_crc;
static uchar BLK_SHIFT = 9; static uchar BLK_SHIFT = 9;
static uchar opener_flag = F_NOTRACE;
static bool interrupted = FALSE; static bool interrupted = FALSE;
/* Retain old signal handlers */ /* Retain old signal handlers */
@ -392,10 +391,9 @@ static const char * const messages[] = {
#define NNN_NO_AUTOSELECT 9 #define NNN_NO_AUTOSELECT 9
#define NNN_RESTRICT_NAV_OPEN 10 #define NNN_RESTRICT_NAV_OPEN 10
#define NNN_RESTRICT_0B 11 #define NNN_RESTRICT_0B 11
#define NNN_OPENER_DETACH 12 #define NNN_TRASH 12
#define NNN_TRASH 13
#ifdef __linux__ #ifdef __linux__
#define NNN_OPS_PROG 14 #define NNN_OPS_PROG 13
#endif #endif
static const char * const env_cfg[] = { static const char * const env_cfg[] = {
@ -411,7 +409,6 @@ static const char * const env_cfg[] = {
"NNN_NO_AUTOSELECT", "NNN_NO_AUTOSELECT",
"NNN_RESTRICT_NAV_OPEN", "NNN_RESTRICT_NAV_OPEN",
"NNN_RESTRICT_0B", "NNN_RESTRICT_0B",
"NNN_OPENER_DETACH",
"NNN_TRASH", "NNN_TRASH",
#ifdef __linux__ #ifdef __linux__
"NNN_OPS_PROG", "NNN_OPS_PROG",
@ -3151,7 +3148,7 @@ nochange:
} }
/* Invoke desktop opener as last resort */ /* Invoke desktop opener as last resort */
spawn(opener, newpath, NULL, NULL, opener_flag); spawn(opener, newpath, NULL, NULL, F_NOTRACE | F_NOWAIT);
continue; continue;
} }
default: default:
@ -4276,8 +4273,6 @@ int main(int argc, char *argv[])
/* Get custom opener, if set */ /* Get custom opener, if set */
opener = xgetenv(env_cfg[NNN_OPENER], utils[OPENER]); opener = xgetenv(env_cfg[NNN_OPENER], utils[OPENER]);
if (xgetenv_set(env_cfg[NNN_OPENER_DETACH]))
opener_flag |= F_NOWAIT;
DPRINTF_S(opener); DPRINTF_S(opener);
/* Parse bookmarks string */ /* Parse bookmarks string */
@ -4321,7 +4316,7 @@ int main(int argc, char *argv[])
} }
if (S_ISREG(sb.st_mode)) { if (S_ISREG(sb.st_mode)) {
spawn(opener, initpath, NULL, NULL, opener_flag); spawn(opener, initpath, NULL, NULL, F_NOTRACE | F_NOWAIT);
return 0; return 0;
} }
} }