Support up to 2 args for launcher

This commit is contained in:
Arun Prakash Jana 2018-11-08 11:06:57 +05:30
parent 99a9d63ee7
commit 729c13b162
No known key found for this signature in database
GPG key ID: A75979F35C080412
2 changed files with 23 additions and 6 deletions

View file

@ -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 - Copy absolute file paths with quotes
- Change directory at exit (*easy* shell integration) - Change directory at exit (*easy* shell integration)
- Open any file in EDITOR (fallback vi) or PAGER (fallback less) - 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 - Terminal screensaver/locker integration
- Unicode support - Unicode support
- Highly optimized code, minimal resource usage - Highly optimized code, minimal resource usage

27
nnn.c
View file

@ -2046,9 +2046,6 @@ static int show_help(char *path)
return 0; 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, static int sum_bsizes(const char *fpath, const struct stat *sb,
int typeflag, struct FTW *ftwbuf) int typeflag, struct FTW *ftwbuf)
{ {
@ -2984,7 +2981,8 @@ nochange:
break; break;
/* Allow only relative, same dir paths */ /* 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]); printmsg(messages[STR_INPUT_ID]);
goto nochange; goto nochange;
} }
@ -3005,7 +3003,26 @@ nochange:
} }
if (sel == SEL_LAUNCH) { 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; break;
} }