aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2017-09-27 21:56:02 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2017-09-27 22:14:07 +0530
commit7c54f073fca7db5f677af5d02da7f39136b0aa65 (patch)
tree12717b907d846e2423da4da561631c5b68c62705
parent71d27de5170b7a09ba93ecd51f8bbfdf9d6c5d48 (diff)
downloadnnn-7c54f073fca7db5f677af5d02da7f39136b0aa65.tar.gz
Archive handling on OS X using unar+lsar
-rw-r--r--nnn.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/nnn.c b/nnn.c
index e7318d0..21c16ec 100644
--- a/nnn.c
+++ b/nnn.c
@@ -252,7 +252,12 @@ static char * const utils[] = {
"/usr/bin/xdg-open",
#endif
"nlay",
+#ifdef __APPLE__
+ "unar",
+ "lsar"
+#else
"atool"
+#endif
};
/* Common message strings */
@@ -1629,6 +1634,21 @@ show_mediainfo(char *fpath, char *arg)
static int
handle_archive(char *fpath, char *arg, char *dir)
{
+#ifdef __APPLE__
+ if (arg[1] == 'x') {
+ if (!get_output(g_buf, MAX_CMD_LEN, "which", utils[4], NULL, 0))
+ return -1;
+
+ spawn(utils[4], fpath, NULL, dir, F_NORMAL);
+ } else {
+ if (!get_output(g_buf, MAX_CMD_LEN, "which", utils[5], NULL, 0))
+ return -1;
+
+ exitcurses();
+ get_output(NULL, 0, utils[5], fpath, NULL, 1);
+ initcurses();
+ }
+#else
if (!get_output(g_buf, MAX_CMD_LEN, "which", utils[4], NULL, 0))
return -1;
@@ -1639,6 +1659,7 @@ handle_archive(char *fpath, char *arg, char *dir)
get_output(NULL, 0, utils[4], arg, fpath, 1);
initcurses();
}
+#endif
return 0;
}
@@ -2585,8 +2606,14 @@ nochange:
if (r == -1) {
if (sel == SEL_MEDIA || sel == SEL_FMEDIA)
sprintf(g_buf, "%s missing", utils[cfg.metaviewer]);
- else
- sprintf(g_buf, "%s missing", utils[4]);
+ else {
+#ifdef __APPLE__
+ if (sel == SEL_LIST)
+ sprintf(g_buf, "%s missing", utils[5]);
+ else
+#endif
+ sprintf(g_buf, "%s missing", utils[4]);
+ }
printmsg(g_buf);
goto nochange;