]> Sergey Matveev's repositories - nnn.git/commitdiff
Support up to 2 args for launcher
authorArun Prakash Jana <engineerarun@gmail.com>
Thu, 8 Nov 2018 05:36:57 +0000 (11:06 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Thu, 8 Nov 2018 05:36:57 +0000 (11:06 +0530)
README.md
nnn.c

index de27487744402f602bfc4050c5889948327ae71b..0cd1473a109d79690b27d199daba30e7b002faf5 100644 (file)
--- a/README.md
+++ b/README.md
@@ -107,7 +107,7 @@ Have fun with it! Missing a feature? Want to contribute? Head to the rolling [To
   - Copy absolute file paths with quotes
   - Change directory at exit (*easy* shell integration)
   - Open any file in EDITOR (fallback vi) or PAGER (fallback less)
-  - GUI app launcher
+  - GUI app launcher (maximum 2 space-separated arguments)
   - Terminal screensaver/locker integration
 - Unicode support
 - Highly optimized code, minimal resource usage
diff --git a/nnn.c b/nnn.c
index f03abb071dfbf8a2eb8ffeb496a7ed34655ca38f..66c9d16746d4fe63b37e461c18bd6483d81cea91 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -2046,9 +2046,6 @@ static int show_help(char *path)
        return 0;
 }
 
-static int sum_bsizes(const char */*fpath*/, const struct stat *sb,
-          int typeflag, struct FTW */*ftwbuf*/);
-
 static int sum_bsizes(const char *fpath, const struct stat *sb,
           int typeflag, struct FTW *ftwbuf)
 {
@@ -2984,7 +2981,8 @@ nochange:
                                break;
 
                        /* Allow only relative, same dir paths */
-                       if (tmp[0] == '/' || strcmp(xbasename(tmp), tmp) != 0) {
+                       if ((sel != SEL_LAUNCH) &&
+                           (tmp[0] == '/' || strcmp(xbasename(tmp), tmp) != 0)) {
                                printmsg(messages[STR_INPUT_ID]);
                                goto nochange;
                        }
@@ -3005,7 +3003,26 @@ nochange:
                        }
 
                        if (sel == SEL_LAUNCH) {
-                               spawn(tmp, NULL, NULL, path, F_NOWAIT | F_NOTRACE);
+                               uint args = 0;
+                               char *ptr = tmp, *ptr1 = NULL, *ptr2 = NULL;
+
+                               while (*ptr) {
+                                       if (*ptr == ' ') {
+                                               *ptr = '\0';
+                                               if (args == 0)
+                                                       ptr1 = ptr + 1;
+                                               else if (args == 1)
+                                                       ptr2 = ptr + 1;
+                                               else
+                                                       break;
+
+                                               ++args;
+                                       }
+
+                                       ++ptr;
+                               }
+
+                               spawn(tmp, ptr1, ptr2, path, F_NOWAIT | F_NOTRACE);
                                break;
                        }