From: Arun Prakash Jana <engineerarun@gmail.com>
Date: Tue, 16 Apr 2019 17:25:59 +0000 (+0530)
Subject: nnn as file manager: more changes
X-Git-Tag: v2.5~102
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=39035bd75c56e9e20f988cfab7afd87996cfd91a;p=nnn.git

nnn as file manager: more changes

1. Support passing files to nnn
2. Enable debug logs much early
---

diff --git a/src/dbg.h b/src/dbg.h
index 4d5b54a4..7bd757a4 100644
--- a/src/dbg.h
+++ b/src/dbg.h
@@ -47,7 +47,7 @@ static int xprintf(int fd, const char *fmt, ...)
 	return r;
 }
 
-static int enabledbg()
+static int enabledbg(void)
 {
 	FILE *fp = fopen("/tmp/nnndbg", "w");
 
@@ -71,7 +71,7 @@ static int enabledbg()
 	return 0;
 }
 
-static void disabledbg()
+static void disabledbg(void)
 {
 	close(DEBUG_FD);
 }
diff --git a/src/nnn.c b/src/nnn.c
index c11aa237..72db2c5e 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -4045,9 +4045,20 @@ int main(int argc, char *argv[])
 		++opt;
 	}
 
+#ifdef DBGMODE
+	enabledbg();
+	atexit(disabledbg);
+#endif
+
 	home = getenv("HOME");
 	DPRINTF_S(home);
 
+	/* Get custom opener, if set */
+	opener = xgetenv(env_cfg[NNN_OPENER], utils[OPENER]);
+	if (getenv(env_cfg[NNN_OPENER_DETACH]))
+		opener_flag |= F_NOWAIT;
+	DPRINTF_S(opener);
+
 	/* Parse bookmarks string */
 	if (!parsebmstr()) {
 		fprintf(stderr, "%s\n", env_cfg[NNN_BMS]);
@@ -4072,10 +4083,28 @@ int main(int argc, char *argv[])
 		    && ipath[3] == 'e' && ipath[4] == ':' && ipath[5] == '/' && ipath[6] == '/')
 			ipath = ipath + 7;
 		ipath = realpath(ipath, cwd);
+		DPRINTF_S(ipath);
 		if (!ipath) {
 			xerror();
 			return 1;
 		}
+
+		/*
+		 * If nnn is set as the file manager, applications may try to open
+		 * files by invoking nnn. In that case pass the file path to the
+		 * desktop opener and exit.
+		 */
+		struct stat sb;
+
+		if (stat(ipath, &sb) == -1) {
+			printwarn();
+			return 1;
+		}
+
+		if (S_ISREG(sb.st_mode)) {
+			spawn(opener, ipath, NULL, NULL, opener_flag);
+			return 0;
+		}
 	}
 
 	/* Edit text in EDITOR, if opted */
@@ -4113,12 +4142,6 @@ int main(int argc, char *argv[])
 	}
 #endif
 
-	/* Get custom opener, if set */
-	opener = xgetenv(env_cfg[NNN_OPENER], utils[OPENER]);
-	if (getenv(env_cfg[NNN_OPENER_DETACH]))
-		opener_flag |= F_NOWAIT;
-	DPRINTF_S(opener);
-
 	/* Set nnn nesting level, idletimeout used as tmp var */
 	idletimeout = xatoi(getenv(env_cfg[NNNLVL]));
 	setenv(env_cfg[NNNLVL], xitoa(++idletimeout), 1);
@@ -4200,9 +4223,6 @@ int main(int argc, char *argv[])
 	read_history(NULL);
 #endif
 
-#ifdef DBGMODE
-	enabledbg();
-#endif
 	if (!initcurses())
 		return 1;
 
@@ -4236,8 +4256,5 @@ int main(int argc, char *argv[])
 	close(kq);
 #endif
 
-#ifdef DBGMODE
-	disabledbg();
-#endif
 	return 0;
 }