]> Sergey Matveev's repositories - nnn.git/commitdiff
Archive handling on OS X using unar+lsar
authorArun Prakash Jana <engineerarun@gmail.com>
Wed, 27 Sep 2017 16:26:02 +0000 (21:56 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Wed, 27 Sep 2017 16:44:07 +0000 (22:14 +0530)
nnn.c

diff --git a/nnn.c b/nnn.c
index e7318d0a40a26efb5b8feb1015e046c79f6d0d82..21c16ec406a7cfe25d30314a52c62a86d227ff20 100644 (file)
--- 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;