terminal: Support extra arguments in 'shell'. #4504

Tokenize p_sh if used as default in ex_terminal(). Previously p_sh was
used as the first arg in a list when calling termopen(), this would try
to call an untokenized version of shell, meaning if you had an argument
in 'shell':
    set shell=/bin/bash\ --login
the command would fail.

Helped-by: oni-link <knil.ino@gmail.com>

Closes #3999
This commit is contained in:
Jack Bracewell
2016-03-29 13:47:30 +01:00
committed by Justin M. Keyes
parent 0c1f783164
commit 2ea7bfc627
4 changed files with 84 additions and 21 deletions

View File

@@ -39,12 +39,13 @@ typedef struct {
#endif
/// Builds the argument vector for running the user-configured 'shell' (p_sh)
/// with an optional command prefixed by 'shellcmdflag' (p_shcf).
/// with an optional command prefixed by 'shellcmdflag' (p_shcf). E.g.:
///
/// ["shell", "-extra_args", "-shellcmdflag", "command with spaces"]
///
/// @param cmd Command string, or NULL to run an interactive shell.
/// @param extra_args Extra arguments to the shell, or NULL.
/// @return A newly allocated argument vector. It must be freed with
/// `shell_free_argv` when no longer needed.
/// @return Newly allocated argument vector. Must be freed with shell_free_argv.
char **shell_build_argv(const char *cmd, const char *extra_args)
FUNC_ATTR_NONNULL_RET FUNC_ATTR_MALLOC
{