commit bd72d1f8183acdd12a96abe9a1bd6cb26f9b5a77 from: Marcel Rodrigues date: Sun Jan 03 15:22:17 2016 UTC Make use of shell optional. commit - ae5756808c915ca9a760e969eb55971346aac807 commit + bd72d1f8183acdd12a96abe9a1bd6cb26f9b5a77 blob - 866a659f99387f1f8f6944d66a26327313d8d39f blob + b6a74d7cffd66d7be451099151c52d9418338d3b --- config.h +++ config.h @@ -67,5 +67,13 @@ /* Optional macro to be executed when a batch operation finishes. */ #define RV_ALERT() beep() -/* Shell used to launch external programs. */ +/* Shell used to launch external programs. + Defining this macro will force Rover to launch external + programs with `sh -c "$EXTERNAL_PROGRAM [arg]"`. This gives more + flexibility, allowing command-line arguments to be embedded in + environment variables (e.g. PAGER="less -N"). On the other hand, + this requires the presence of a shell and will spawn an additional + process each time an external program is invoked. Leave this macro + undefined if you prefer external programs to be launched with just + `$EXTERNAL_PROGRAM [arg]`. */ #define RV_SHELL "/bin/sh" blob - 3dca3b5149b958d64a9f5d0a723b296fbccb2fda blob + ef44d7b5a6a8a19134fdd144703155b0668218f6 --- rover.c +++ rover.c @@ -1074,28 +1074,40 @@ main(int argc, char *argv[]) } else if (!strcmp(key, RVK_SHELL)) { program = getenv("SHELL"); if (program) { +#ifdef RV_SHELL spawn((char *[]) {RV_SHELL, "-c", program, NULL}); +#else + spawn((char *[]) {program, NULL}); +#endif reload(); } } else if (!strcmp(key, RVK_VIEW)) { if (!rover.nfiles || S_ISDIR(EMODE(ESEL))) continue; program = getenv("PAGER"); if (program) { +#ifdef RV_SHELL strncpy(BUF1, program, BUFLEN - 1); strncat(BUF1, " ", BUFLEN - strlen(program) - 1); strncat(BUF1, ENAME(ESEL), BUFLEN - strlen(program) - strlen(ENAME(ESEL)) - 2); spawn((char *[]) {RV_SHELL, "-c", BUF1, NULL}); +#else + spawn((char *[]) {program, ENAME(ESEL), NULL}); +#endif } } else if (!strcmp(key, RVK_EDIT)) { if (!rover.nfiles || S_ISDIR(EMODE(ESEL))) continue; program = getenv("EDITOR"); if (program) { +#ifdef RV_SHELL strncpy(BUF1, program, BUFLEN - 1); strncat(BUF1, " ", BUFLEN - strlen(program) - 1); strncat(BUF1, ENAME(ESEL), BUFLEN - strlen(program) - strlen(ENAME(ESEL)) - 2); spawn((char *[]) {RV_SHELL, "-c", BUF1, NULL}); +#else + spawn((char *[]) {program, ENAME(ESEL), NULL}); +#endif cd(0); } } else if (!strcmp(key, RVK_SEARCH)) {