summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2018-11-17 11:39:28 +0100
committerSébastien Helleu <flashcode@flashtux.org>2018-11-17 11:39:28 +0100
commit916d99ad405d79853e323024d48a03176c587bca (patch)
tree36962f20208275226d1831b6bc3748fe91001da8 /src/plugins
parentc94a8f4c683e343aa9eb47008f4172e50d723b48 (diff)
downloadweechat-916d99ad405d79853e323024d48a03176c587bca.zip
exec: add option exec.command.shell to customize the shell used with /exec -sh
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/exec/exec-command.c23
-rw-r--r--src/plugins/exec/exec-config.c11
-rw-r--r--src/plugins/exec/exec-config.h1
3 files changed, 31 insertions, 4 deletions
diff --git a/src/plugins/exec/exec-command.c b/src/plugins/exec/exec-command.c
index b5e4dfc52..32a00c410 100644
--- a/src/plugins/exec/exec-command.c
+++ b/src/plugins/exec/exec-command.c
@@ -405,7 +405,8 @@ int
exec_command_run (struct t_gui_buffer *buffer,
int argc, char **argv, char **argv_eol, int start_arg)
{
- char str_buffer[512];
+ char str_buffer[512], *default_shell = "sh";
+ const char *ptr_shell;
struct t_exec_cmd *new_exec_cmd;
struct t_exec_cmd_options cmd_options;
struct t_hashtable *process_options;
@@ -480,6 +481,19 @@ exec_command_run (struct t_gui_buffer *buffer,
/* automatically disable shell if we are downloading an URL */
if (strncmp (argv_eol[cmd_options.command_index], "url:", 4) == 0)
cmd_options.use_shell = 0;
+
+ /* get default shell */
+ if (cmd_options.use_shell)
+ {
+ ptr_shell = weechat_config_string (exec_config_command_shell);
+ if (!ptr_shell || !ptr_shell[0])
+ ptr_shell = default_shell;
+ }
+ else
+ {
+ ptr_shell = NULL;
+ }
+
if (cmd_options.use_shell)
{
/* command will be: sh -c "command arguments..." */
@@ -574,14 +588,15 @@ exec_command_run (struct t_gui_buffer *buffer,
/* execute the command */
if (weechat_exec_plugin->debug >= 1)
{
- weechat_printf (NULL, "%s: executing command: \"%s%s%s\"",
+ weechat_printf (NULL, "%s: executing command: \"%s%s%s%s\"",
EXEC_PLUGIN_NAME,
- (cmd_options.use_shell) ? "sh -c '" : "",
+ (cmd_options.use_shell) ? ptr_shell : "",
+ (cmd_options.use_shell) ? " -c '" : "",
argv_eol[cmd_options.command_index],
(cmd_options.use_shell) ? "'" : "");
}
new_exec_cmd->hook = weechat_hook_process_hashtable (
- (cmd_options.use_shell) ? "sh" : argv_eol[cmd_options.command_index],
+ (cmd_options.use_shell) ? ptr_shell : argv_eol[cmd_options.command_index],
process_options,
cmd_options.timeout * 1000,
&exec_process_cb,
diff --git a/src/plugins/exec/exec-config.c b/src/plugins/exec/exec-config.c
index 43693aa47..017cff635 100644
--- a/src/plugins/exec/exec-config.c
+++ b/src/plugins/exec/exec-config.c
@@ -34,6 +34,7 @@ struct t_config_file *exec_config_file = NULL;
struct t_config_option *exec_config_command_default_options;
struct t_config_option *exec_config_command_purge_delay;
+struct t_config_option *exec_config_command_shell;
/* exec config, color section */
@@ -130,6 +131,16 @@ exec_config_init ()
"commands immediately, -1 = never purge)"),
NULL, -1, 36000 * 24 * 30, "0", NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ exec_config_command_shell = weechat_config_new_option (
+ exec_config_file, ptr_section,
+ "shell", "string",
+ N_("shell to use with command \"/exec -sh\"; it can be just the name "
+ "of shell if it is in PATH (for example \"bash\") or the absolute "
+ "path to the shell (for example \"/bin/bash\")"),
+ NULL, 0, 0, "sh", NULL, 0,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL);
/* color */
ptr_section = weechat_config_new_section (exec_config_file, "color",
diff --git a/src/plugins/exec/exec-config.h b/src/plugins/exec/exec-config.h
index 537597c11..ded5fde01 100644
--- a/src/plugins/exec/exec-config.h
+++ b/src/plugins/exec/exec-config.h
@@ -26,6 +26,7 @@ extern struct t_config_file *exec_config_file;
extern struct t_config_option *exec_config_command_default_options;
extern struct t_config_option *exec_config_command_purge_delay;
+extern struct t_config_option *exec_config_command_shell;
extern struct t_config_option *exec_config_color_flag_running;
extern struct t_config_option *exec_config_color_flag_finished;