From 4790d17d04d82d25aaf0b7228ef6023abee6db4f Mon Sep 17 00:00:00 2001
From: Arun Prakash Jana <engineerarun@gmail.com>
Date: Sat, 22 Apr 2017 19:49:00 +0530
Subject: [PATCH] Do not wait when spawning DE file manager

---
 README.md |  4 ++--
 nnn.1     |  4 ++--
 nnn.c     | 25 +++++++++++++++----------
 3 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md
index 0aae7782..ba253e52 100644
--- a/README.md
+++ b/README.md
@@ -139,8 +139,8 @@ nnn needs libreadline, libncursesw (on Linux or ncurses on OS X) and standard li
 | `c` | Show change dir prompt |
 | `d` | Toggle detail view |
 | `D` | Toggle current file details screen |
-| `m` | Show concise mediainfo in less |
-| `M` | Show full mediainfo in less |
+| `m` | Show concise mediainfo |
+| `M` | Show full mediainfo |
 | `.` | Toggle hide .dot files |
 | `s` | Toggle sort by file size |
 | `S` | Toggle disk usage analyzer mode |
diff --git a/nnn.1 b/nnn.1
index ea676254..8b74150a 100644
--- a/nnn.1
+++ b/nnn.1
@@ -56,9 +56,9 @@ Toggle detail view
 .It Ic D
 Toggle current file details screen
 .It Ic m
-Show concise mediainfo in less
+Show concise mediainfo
 .It Ic M
-Show full mediainfo in less
+Show full mediainfo
 .It Ic \&.
 Toggle hide .dot files
 .It Ic s
diff --git a/nnn.c b/nnn.c
index 446d498a..b847f998 100644
--- a/nnn.c
+++ b/nnn.c
@@ -280,8 +280,13 @@ xdirname(const char *path)
 	return buf;
 }
 
+/*
+ * Spawns a child process. Behaviour can be controlled using flag:
+ * flag = 1: draw a marker to indicate nnn spawned e.g., a shell
+ * flag = 2: do not wait in parent for child process e.g. DE file manager
+ */
 static void
-spawn(char *file, char *arg, char *dir, int notify)
+spawn(char *file, char *arg, char *dir, int flag)
 {
 	pid_t pid;
 	int status;
@@ -290,14 +295,16 @@ spawn(char *file, char *arg, char *dir, int notify)
 	if (pid == 0) {
 		if (dir != NULL)
 			status = chdir(dir);
-		if (notify)
+		if (flag == 1)
 			fprintf(stdout, "\n +-++-++-+\n | n n n |\n +-++-++-+\n\n");
 		execlp(file, file, arg, NULL);
 		_exit(1);
 	} else {
-		/* Ignore interruptions */
-		while (waitpid(pid, &status, 0) == -1)
-			DPRINTF_D(status);
+		if (flag != 2) {
+			/* Ignore interruptions */
+			while (waitpid(pid, &status, 0) == -1)
+				DPRINTF_D(status);
+		}
 		DPRINTF_D(pid);
 	}
 }
@@ -937,8 +944,8 @@ show_help(void)
     c                           Show change dir prompt\n\
     d                           Toggle detail view\n\
     D                           Toggle current file details screen\n\
-    m                           Show concise mediainfo in less\n\
-    M                           Show full mediainfo in less\n\
+    m                           Show concise mediainfo\n\
+    M                           Show full mediainfo\n\
     .                           Toggle hide .dot files\n\
     s                           Toggle sort by file size\n\
     S                           Toggle disk usage analyzer mode\n\
@@ -1618,9 +1625,7 @@ nochange:
 				goto nochange;
 			}
 
-			exitcurses();
-			spawn(desktop_manager, path, path, 0);
-			initcurses();
+			spawn(desktop_manager, path, path, 2);
 			break;
 		case SEL_FSIZE:
 			sizeorder = !sizeorder;
-- 
2.51.0