215 |
} |
} |
216 |
} |
} |
217 |
|
|
218 |
|
static int |
219 |
|
invoke (char *compname, char *defval, int argc, char **argv, |
220 |
|
char *extra0, char *extra1, int *status) |
221 |
|
{ |
222 |
|
int i, rc; |
223 |
|
char **xargv; |
224 |
|
char *progname; |
225 |
|
|
226 |
|
progname = mh_global_profile_get (compname, defval); |
227 |
|
if (!progname) |
228 |
|
return -1; |
229 |
|
|
230 |
|
xargv = calloc (argc+3, sizeof (*xargv)); |
231 |
|
if (!xargv) |
232 |
|
{ |
233 |
|
mh_err_memory (0); |
234 |
|
return -1; |
235 |
|
} |
236 |
|
|
237 |
|
xargv[0] = progname; |
238 |
|
for (i = 1; i < argc; i++) |
239 |
|
xargv[i] = argv[i]; |
240 |
|
if (extra0) |
241 |
|
xargv[i++] = extra0; |
242 |
|
if (extra1) |
243 |
|
xargv[i++] = extra1; |
244 |
|
xargv[i++] = NULL; |
245 |
|
rc = mu_spawnvp (xargv[0], (const char **) xargv, status); |
246 |
|
free (xargv); |
247 |
|
return rc; |
248 |
|
} |
249 |
|
|
250 |
|
|
251 |
/* ************************ Shell Function ************************* */ |
/* ************************ Shell Function ************************* */ |
252 |
|
|
304 |
static int |
static int |
305 |
edit (struct mh_whatnow_env *wh, int argc, char **argv, int *status) |
edit (struct mh_whatnow_env *wh, int argc, char **argv, int *status) |
306 |
{ |
{ |
|
char *editor; |
|
307 |
char *name; |
char *name; |
308 |
|
int rc; |
309 |
|
|
310 |
asprintf (&name, "%s-next", wh->editor); |
asprintf (&name, "%s-next", wh->editor); |
311 |
editor = mh_global_profile_get (name, wh->editor); |
invoke (name, wh->editor, argc, argv, wh->file, NULL, &rc); |
312 |
free (name); |
free (name); |
|
|
|
|
if (argc == 1) |
|
|
{ |
|
|
mh_spawnp (editor, wh->file); |
|
|
} |
|
|
else |
|
|
{ |
|
|
int i, rc, status; |
|
|
char **xargv; |
|
|
|
|
|
xargv = calloc (argc+2, sizeof (*xargv)); |
|
|
if (!xargv) |
|
|
{ |
|
|
mh_err_memory (0); |
|
|
return 0; |
|
|
} |
|
|
|
|
|
xargv[0] = editor; |
|
|
for (i = 1; i < argc; i++) |
|
|
xargv[i] = argv[i]; |
|
|
xargv[i++] = wh->file; |
|
|
xargv[i++] = NULL; |
|
|
rc = mu_spawnvp (xargv[0], (const char **) xargv, &status); |
|
|
free (xargv); |
|
|
} |
|
313 |
|
|
314 |
return 0; |
return 0; |
315 |
} |
} |
356 |
static int |
static int |
357 |
refile (struct mh_whatnow_env *wh, int argc, char **argv, int *status) |
refile (struct mh_whatnow_env *wh, int argc, char **argv, int *status) |
358 |
{ |
{ |
359 |
|
int rc; |
360 |
|
invoke ("fileproc", "refile", argc, argv, "-file", wh->file, &rc); |
361 |
return 0; |
return 0; |
362 |
} |
} |
363 |
|
|