diff --git a/nnn.c b/nnn.c index e7318d0a..21c16ec4 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;