aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os/shell.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/os/shell.h')
-rw-r--r--src/nvim/os/shell.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/nvim/os/shell.h b/src/nvim/os/shell.h
new file mode 100644
index 0000000000..776c36d384
--- /dev/null
+++ b/src/nvim/os/shell.h
@@ -0,0 +1,45 @@
+#ifndef NEOVIM_OS_SHELL_H
+#define NEOVIM_OS_SHELL_H
+
+#include <stdbool.h>
+
+#include "types.h"
+
+// Flags for mch_call_shell() second argument
+typedef enum {
+ kShellOptFilter = 1, ///< filtering text
+ kShellOptExpand = 2, ///< expanding wildcards
+ kShellOptCooked = 4, ///< set term to cooked mode
+ kShellOptDoOut = 8, ///< redirecting output
+ kShellOptSilent = 16, ///< don't print error returned by command
+ kShellOptRead = 32, ///< read lines and insert into buffer
+ kShellOptWrite = 64, ///< write lines from buffer
+ kShellOptHideMess = 128, ///< previously a global variable from os_unix.c
+} ShellOpts;
+
+/// Builds the argument vector for running the shell configured in `sh`
+/// ('shell' option), optionally with a command that will be passed with `shcf`
+/// ('shellcmdflag').
+///
+/// @param cmd Command string. If NULL it will run an interactive shell.
+/// @param extra_shell_opt Extra argument to the shell. If NULL it is ignored
+/// @return A newly allocated argument vector. It must be freed with
+/// `shell_free_argv` when no longer needed.
+char ** shell_build_argv(char_u *cmd, char_u *extra_shell_arg);
+
+/// Releases the memory allocated by `shell_build_argv`.
+///
+/// @param argv The argument vector.
+void shell_free_argv(char **argv);
+
+/// Calls the user shell for running a command, interactive session or
+/// wildcard expansion. It uses the shell set in the `sh` option.
+///
+/// @param cmd The command to be executed. If NULL it will run an interactive
+/// shell
+/// @param opts Various options that control how the shell will work
+/// @param extra_shell_arg Extra argument to be passed to the shell
+int os_call_shell(char_u *cmd, ShellOpts opts, char_u *extra_shell_arg);
+
+#endif // NEOVIM_OS_SHELL_H
+