Refactor wins_launch_external()

Allow for passing an arbitrary number of arguments. This also allows us
to remove wins_launch_external2() and use wins_launch_external() at all
call sites instead.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
Lukas Fleischer 2014-07-16 23:53:30 +02:00
parent b37ed2fcc8
commit 71234ec0bd
6 changed files with 20 additions and 29 deletions

View File

@ -290,10 +290,13 @@ static inline void key_generic_reload(void)
io_save_todo(path_todo_backup);
io_save_mutex_unlock();
wins_launch_external2(path_apts, path_apts_backup,
conf.mergetool);
wins_launch_external2(path_todo, path_todo_backup,
conf.mergetool);
const char *arg_apts[] = { conf.mergetool, path_apts,
path_apts_backup, NULL };
wins_launch_external(arg_apts);
const char *arg_todo[] = { conf.mergetool, path_todo,
path_todo_backup, NULL };
wins_launch_external(arg_todo);
xfree(path_apts_backup);
xfree(path_todo_backup);

View File

@ -1124,8 +1124,7 @@ void wins_reset_noupdate(void);
void wins_reset(void);
void wins_prepare_external(void);
void wins_unprepare_external(void);
void wins_launch_external(const char *, const char *);
void wins_launch_external2(const char *, const char *, const char *);
void wins_launch_external(const char *[]);
void wins_status_bar(void);
void wins_erase_status_bar(void);
void wins_other_status_page(int);

View File

@ -189,7 +189,8 @@ int display_help(const char *topic)
}
if (io_file_exists(path)) {
wins_launch_external(path, conf.pager);
const char *arg[] = { conf.pager, path, NULL };
wins_launch_external(arg);
return 1;
} else {
return 0;

View File

@ -1175,8 +1175,10 @@ void io_log_display(struct io_file *log, const char *msg,
child_wait(NULL, NULL, pid);
}
} else {
if (status_ask_bool(msg) == 1)
wins_launch_external(log->name, pager);
if (status_ask_bool(msg) == 1) {
const char *arg[] = { pager, log->name, NULL };
wins_launch_external(arg);
}
wins_erase_status_bar();
}
}

View File

@ -95,7 +95,8 @@ void edit_note(char **note, const char *editor)
io_file_cp(notepath, tmppath);
}
wins_launch_external(tmppath, editor);
const char *arg[] = { editor, tmppath, NULL };
wins_launch_external(arg);
if (io_file_is_empty(tmppath) > 0) {
erase_note(note);
@ -119,7 +120,9 @@ void view_note(const char *note, const char *pager)
if (note == NULL)
return;
snprintf(fullname, BUFSIZ, "%s%s", path_notes, note);
wins_launch_external(fullname, pager);
const char *arg[] = { pager, fullname, NULL };
wins_launch_external(arg);
}
/* Erase a note previously attached to an item. */

View File

@ -600,25 +600,8 @@ void wins_unprepare_external(void)
* While inside interactive mode, launch the external command cmd on the given
* file.
*/
void wins_launch_external(const char *file, const char *cmd)
void wins_launch_external(const char *arg[])
{
const char *arg[] = { cmd, file, NULL };
int pid;
wins_prepare_external();
if ((pid = shell_exec(NULL, NULL, *arg, arg)))
child_wait(NULL, NULL, pid);
wins_unprepare_external();
}
/*
* While inside interactive mode, launch the external command cmd on the given
* two files.
*/
void wins_launch_external2(const char *file1, const char *file2,
const char *cmd)
{
const char *arg[] = { cmd, file1, file2, NULL };
int pid;
wins_prepare_external();