diff options
author | Sébastien Helleu <flashcode@flashtux.org> | 2018-11-17 11:39:28 +0100 |
---|---|---|
committer | Sébastien Helleu <flashcode@flashtux.org> | 2018-11-17 11:39:28 +0100 |
commit | 916d99ad405d79853e323024d48a03176c587bca (patch) | |
tree | 36962f20208275226d1831b6bc3748fe91001da8 /src/plugins | |
parent | c94a8f4c683e343aa9eb47008f4172e50d723b48 (diff) | |
download | weechat-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.c | 23 | ||||
-rw-r--r-- | src/plugins/exec/exec-config.c | 11 | ||||
-rw-r--r-- | src/plugins/exec/exec-config.h | 1 |
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; |