mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
Refactor SHELL_* defines into enum typedef
The SHELL_* defines are the bitflags that can be passed to `mch_call_shell`. The enum is defined in 'os/shell.h', where all shell-related functions will eventually be defined.
This commit is contained in:
parent
607e1c7ee4
commit
0d61b1c470
@ -25,6 +25,7 @@
|
||||
#include "undo.h"
|
||||
#include "window.h"
|
||||
#include "os/os.h"
|
||||
#include "os/shell.h"
|
||||
|
||||
static int diff_busy = FALSE; // ex_diffgetput() is busy
|
||||
|
||||
@ -840,7 +841,11 @@ static void diff_file(char_u *tmp_orig, char_u *tmp_new, char_u *tmp_diff)
|
||||
tmp_orig, tmp_new);
|
||||
append_redir(cmd, (int)len, p_srr, tmp_diff);
|
||||
block_autocmds(); /* Avoid ShellCmdPost stuff */
|
||||
(void)call_shell(cmd, SHELL_FILTER | SHELL_SILENT | SHELL_DOOUT, NULL);
|
||||
(void)call_shell(
|
||||
cmd,
|
||||
kShellOptFilter | kShellOptSilent | kShellOptDoOut,
|
||||
NULL
|
||||
);
|
||||
unblock_autocmds();
|
||||
vim_free(cmd);
|
||||
}
|
||||
@ -943,7 +948,7 @@ void ex_diffpatch(exarg_T *eap)
|
||||
#endif // ifdef UNIX
|
||||
// Avoid ShellCmdPost stuff
|
||||
block_autocmds();
|
||||
(void)call_shell(buf, SHELL_FILTER | SHELL_COOKED, NULL);
|
||||
(void)call_shell(buf, kShellOptFilter | kShellOptCooked, NULL);
|
||||
unblock_autocmds();
|
||||
}
|
||||
|
||||
|
@ -61,6 +61,7 @@
|
||||
#include "version.h"
|
||||
#include "window.h"
|
||||
#include "os/os.h"
|
||||
#include "os/shell.h"
|
||||
|
||||
#if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
|
||||
# include <math.h>
|
||||
@ -14543,7 +14544,7 @@ static void f_system(typval_T *argvars, typval_T *rettv)
|
||||
}
|
||||
|
||||
res = get_cmd_output(get_tv_string(&argvars[0]), infile,
|
||||
SHELL_SILENT | SHELL_COOKED);
|
||||
kShellOptSilent | kShellOptCooked);
|
||||
|
||||
#ifdef USE_CR
|
||||
/* translate <CR> into <NL> */
|
||||
|
@ -57,6 +57,7 @@
|
||||
#include "undo.h"
|
||||
#include "window.h"
|
||||
#include "os/os.h"
|
||||
#include "os/shell.h"
|
||||
|
||||
static int linelen(int *has_tab);
|
||||
static void do_filter(linenr_T line1, linenr_T line2, exarg_T *eap,
|
||||
@ -1023,21 +1024,21 @@ do_filter (
|
||||
*/
|
||||
|
||||
if (do_out)
|
||||
shell_flags |= SHELL_DOOUT;
|
||||
shell_flags |= kShellOptDoOut;
|
||||
|
||||
if (!do_in && do_out && !p_stmp) {
|
||||
// Use a pipe to fetch stdout of the command, do not use a temp file.
|
||||
shell_flags |= SHELL_READ;
|
||||
shell_flags |= kShellOptRead;
|
||||
curwin->w_cursor.lnum = line2;
|
||||
} else if (do_in && !do_out && !p_stmp) {
|
||||
// Use a pipe to write stdin of the command, do not use a temp file.
|
||||
shell_flags |= SHELL_WRITE;
|
||||
shell_flags |= kShellOptWrite;
|
||||
curbuf->b_op_start.lnum = line1;
|
||||
curbuf->b_op_end.lnum = line2;
|
||||
} else if (do_in && do_out && !p_stmp) {
|
||||
// Use a pipe to write stdin and fetch stdout of the command, do not
|
||||
// use a temp file.
|
||||
shell_flags |= SHELL_READ|SHELL_WRITE;
|
||||
shell_flags |= kShellOptRead | kShellOptWrite;
|
||||
curbuf->b_op_start.lnum = line1;
|
||||
curbuf->b_op_end.lnum = line2;
|
||||
curwin->w_cursor.lnum = line2;
|
||||
@ -1100,9 +1101,13 @@ do_filter (
|
||||
* 'u' to fix the text
|
||||
* Switch to cooked mode when not redirecting stdin, avoids that something
|
||||
* like ":r !cat" hangs.
|
||||
* Pass on the SHELL_DOOUT flag when the output is being redirected.
|
||||
* Pass on the kShellDoOut flag when the output is being redirected.
|
||||
*/
|
||||
if (call_shell(cmd_buf, SHELL_FILTER | SHELL_COOKED | shell_flags, NULL)) {
|
||||
if (call_shell(
|
||||
cmd_buf,
|
||||
kShellOptFilter | kShellOptCooked | shell_flags,
|
||||
NULL
|
||||
)) {
|
||||
redraw_later_clear();
|
||||
wait_return(FALSE);
|
||||
}
|
||||
@ -1133,7 +1138,7 @@ do_filter (
|
||||
|
||||
read_linecount = curbuf->b_ml.ml_line_count - read_linecount;
|
||||
|
||||
if (shell_flags & SHELL_READ) {
|
||||
if (shell_flags & kShellOptRead) {
|
||||
curbuf->b_op_start.lnum = line2 + 1;
|
||||
curbuf->b_op_end.lnum = curwin->w_cursor.lnum;
|
||||
appended_lines_mark(line2, read_linecount);
|
||||
@ -1256,7 +1261,7 @@ do_shell (
|
||||
if (!swapping_screen())
|
||||
windgoto(msg_row, msg_col);
|
||||
cursor_on();
|
||||
(void)call_shell(cmd, SHELL_COOKED | flags, NULL);
|
||||
(void)call_shell(cmd, kShellOptCooked | flags, NULL);
|
||||
did_check_timestamps = FALSE;
|
||||
need_check_timestamps = TRUE;
|
||||
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include "undo.h"
|
||||
#include "window.h"
|
||||
#include "os/os.h"
|
||||
#include "os/shell.h"
|
||||
|
||||
static void cmd_source(char_u *fname, exarg_T *eap);
|
||||
|
||||
@ -3518,7 +3519,7 @@ static char_u **find_locales(void)
|
||||
/* Find all available locales by running command "locale -a". If this
|
||||
* doesn't work we won't have completion. */
|
||||
char_u *locale_a = get_cmd_output((char_u *)"locale -a",
|
||||
NULL, SHELL_SILENT);
|
||||
NULL, kShellOptSilent);
|
||||
if (locale_a == NULL)
|
||||
return NULL;
|
||||
ga_init2(&locales_ga, sizeof(char_u *), 20);
|
||||
|
@ -49,6 +49,7 @@
|
||||
#include "undo.h"
|
||||
#include "window.h"
|
||||
#include "os/os.h"
|
||||
#include "os/shell.h"
|
||||
static char_u *vim_version_dir(char_u *vimdir);
|
||||
static char_u *remove_tail(char_u *p, char_u *pend, char_u *name);
|
||||
static void init_users(void);
|
||||
@ -3670,7 +3671,7 @@ get_cmd_output (
|
||||
* Don't check timestamps here.
|
||||
*/
|
||||
++no_check_timestamps;
|
||||
call_shell(command, SHELL_DOOUT | SHELL_EXPAND | flags, NULL);
|
||||
call_shell(command, kShellOptDoOut | kShellOptExpand | flags, NULL);
|
||||
--no_check_timestamps;
|
||||
|
||||
vim_free(command);
|
||||
|
@ -5,6 +5,17 @@
|
||||
|
||||
#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
|
||||
} ShellOpts;
|
||||
|
||||
char ** shell_build_argv(char_u *cmd, char_u *extra_shell_arg);
|
||||
void shell_free_argv(char **argv);
|
||||
|
||||
|
@ -1681,7 +1681,7 @@ waitstatus *status;
|
||||
return wait_pid;
|
||||
}
|
||||
|
||||
int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
int mch_call_shell(char_u *cmd, ShellOpts opts, char_u *extra_shell_arg)
|
||||
{
|
||||
int tmode = cur_tmode;
|
||||
|
||||
@ -1708,7 +1708,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
int did_settmode = FALSE; /* settmode(TMODE_RAW) called */
|
||||
|
||||
out_flush();
|
||||
if (options & SHELL_COOKED)
|
||||
if (opts & kShellOptCooked)
|
||||
settmode(TMODE_COOK); /* set to normal mode */
|
||||
|
||||
argv = shell_build_argv(cmd, extra_shell_arg);
|
||||
@ -1722,8 +1722,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
* input from the buffer: Try using a pseudo-tty to get the stdin/stdout
|
||||
* of the executed command into the Vim window. Or use a pipe.
|
||||
*/
|
||||
if ((options & (SHELL_READ|SHELL_WRITE))
|
||||
) {
|
||||
if (opts & (kShellOptRead|kShellOptWrite)) {
|
||||
{
|
||||
pipe_error = (pipe(fd_toshell) < 0);
|
||||
if (!pipe_error) { /* pipe create OK */
|
||||
@ -1744,8 +1743,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
|
||||
if ((pid = fork()) == -1) { /* maybe we should use vfork() */
|
||||
MSG_PUTS(_("\nCannot fork\n"));
|
||||
if ((options & (SHELL_READ|SHELL_WRITE))
|
||||
) {
|
||||
if (opts & (kShellOptRead | kShellOptWrite)) {
|
||||
{
|
||||
close(fd_toshell[0]);
|
||||
close(fd_toshell[1]);
|
||||
@ -1756,7 +1754,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
} else if (pid == 0) { /* child */
|
||||
reset_signals(); /* handle signals normally */
|
||||
|
||||
if (!show_shell_mess || (options & SHELL_EXPAND)) {
|
||||
if (!show_shell_mess || (opts & kShellOptExpand)) {
|
||||
int fd;
|
||||
|
||||
/*
|
||||
@ -1789,8 +1787,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
/* Don't need this now that we've duplicated it */
|
||||
close(fd);
|
||||
}
|
||||
} else if ((options & (SHELL_READ|SHELL_WRITE))
|
||||
) {
|
||||
} else if (opts & (kShellOptRead|kShellOptWrite)) {
|
||||
|
||||
# ifdef HAVE_SETSID
|
||||
/* Create our own process group, so that the child and all its
|
||||
@ -1860,8 +1857,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
* This is also used to pipe stdin/stdout to/from the external
|
||||
* command.
|
||||
*/
|
||||
if ((options & (SHELL_READ|SHELL_WRITE))
|
||||
) {
|
||||
if (opts & (kShellOptRead|kShellOptWrite)) {
|
||||
# define BUFLEN 100 /* length for buffer, pseudo tty limit is 128 */
|
||||
char_u buffer[BUFLEN + 1];
|
||||
int buffer_off = 0; /* valid bytes in buffer[] */
|
||||
@ -1907,7 +1903,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
old_State = State;
|
||||
State = EXTERNCMD; /* don't redraw at window resize */
|
||||
|
||||
if ((options & SHELL_WRITE) && toshell_fd >= 0) {
|
||||
if ((opts & kShellOptWrite) && toshell_fd >= 0) {
|
||||
/* Fork a process that will write the lines to the
|
||||
* external program. */
|
||||
if ((wpid = fork()) == -1) {
|
||||
@ -1963,7 +1959,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
}
|
||||
}
|
||||
|
||||
if (options & SHELL_READ)
|
||||
if (opts & kShellOptRead)
|
||||
ga_init2(&ga, 1, BUFLEN);
|
||||
|
||||
noread_cnt = 0;
|
||||
@ -1986,10 +1982,10 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
* typeahead.
|
||||
*/
|
||||
len = 0;
|
||||
if (!(options & SHELL_EXPAND)
|
||||
&& ((options &
|
||||
(SHELL_READ|SHELL_WRITE|SHELL_COOKED))
|
||||
!= (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
|
||||
if (!(opts & kShellOptExpand)
|
||||
&& ((opts &
|
||||
(kShellOptRead|kShellOptWrite|kShellOptCooked))
|
||||
!= (kShellOptRead|kShellOptWrite|kShellOptCooked)
|
||||
)
|
||||
&& wait_pid == 0
|
||||
&& (ta_len > 0 || noread_cnt > 4)) {
|
||||
@ -2081,7 +2077,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
* When writing buffer lines, drop the typed
|
||||
* characters (only check for CTRL-C).
|
||||
*/
|
||||
if (options & SHELL_WRITE)
|
||||
if (opts & kShellOptWrite)
|
||||
ta_len = 0;
|
||||
else if (toshell_fd >= 0) {
|
||||
len = write(toshell_fd, (char *)ta_buf, (size_t)1);
|
||||
@ -2124,7 +2120,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
goto finished;
|
||||
|
||||
noread_cnt = 0;
|
||||
if (options & SHELL_READ) {
|
||||
if (opts & kShellOptRead) {
|
||||
/* Do NUL -> NL translation, append NL separated
|
||||
* lines to the current buffer. */
|
||||
for (i = 0; i < len; ++i) {
|
||||
@ -2227,7 +2223,7 @@ int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg)
|
||||
}
|
||||
finished:
|
||||
p_more = p_more_save;
|
||||
if (options & SHELL_READ) {
|
||||
if (opts & kShellOptRead) {
|
||||
if (ga.ga_len > 0) {
|
||||
append_ga_line(&ga);
|
||||
/* remember that the NL was missing */
|
||||
@ -2283,7 +2279,7 @@ finished:
|
||||
MSG_PUTS(_("\nCannot execute shell "));
|
||||
msg_outtrans(p_sh);
|
||||
msg_putchar('\n');
|
||||
} else if (!(options & SHELL_SILENT)) {
|
||||
} else if (!(opts & kShellOptSilent)) {
|
||||
MSG_PUTS(_("\nshell returned "));
|
||||
msg_outnum((long)retval);
|
||||
msg_putchar('\n');
|
||||
@ -2663,7 +2659,11 @@ int flags; /* EW_* flags */
|
||||
/*
|
||||
* execute the shell command
|
||||
*/
|
||||
i = call_shell(command, SHELL_EXPAND | SHELL_SILENT, extra_shell_arg);
|
||||
i = call_shell(
|
||||
command,
|
||||
kShellOptExpand | kShellOptSilent,
|
||||
extra_shell_arg
|
||||
);
|
||||
|
||||
/* When running in the background, give it some time to create the temp
|
||||
* file, but don't wait for it to finish. */
|
||||
|
@ -1,5 +1,8 @@
|
||||
#ifndef NEOVIM_OS_UNIX_H
|
||||
#define NEOVIM_OS_UNIX_H
|
||||
|
||||
#include "os/shell.h"
|
||||
|
||||
/* os_unix.c */
|
||||
void mch_write(char_u *s, int len);
|
||||
void mch_startjmp(void);
|
||||
@ -42,7 +45,7 @@ int mch_screenmode(char_u *arg);
|
||||
int mch_get_shellsize(void);
|
||||
void mch_set_shellsize(void);
|
||||
void mch_new_shellsize(void);
|
||||
int mch_call_shell(char_u *cmd, int options, char_u *extra_shell_arg);
|
||||
int mch_call_shell(char_u *cmd, ShellOpts opts, char_u *extra_shell_arg);
|
||||
int mch_expandpath(garray_T *gap, char_u *path, int flags);
|
||||
int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file,
|
||||
char_u ***file,
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "misc1.h"
|
||||
#include "misc2.h"
|
||||
#include "os/os.h"
|
||||
#include "os/shell.h"
|
||||
#include "os_unix.h"
|
||||
#include "regexp.h"
|
||||
#include "tag.h"
|
||||
@ -1212,7 +1213,7 @@ expand_backtick (
|
||||
buffer = eval_to_string(cmd + 1, &p, TRUE);
|
||||
else
|
||||
buffer = get_cmd_output(cmd, NULL,
|
||||
(flags & EW_SILENT) ? SHELL_SILENT : 0);
|
||||
(flags & EW_SILENT) ? kShellOptSilent : 0);
|
||||
vim_free(cmd);
|
||||
if (buffer == NULL)
|
||||
return 0;
|
||||
|
@ -2546,7 +2546,7 @@ void ex_make(exarg_T *eap)
|
||||
msg_outtrans(cmd); /* show what we are doing */
|
||||
|
||||
/* let the shell know if we are redirecting output or not */
|
||||
do_shell(cmd, *p_sp != NUL ? SHELL_DOOUT : 0);
|
||||
do_shell(cmd, *p_sp != NUL ? kShellOptDoOut : 0);
|
||||
|
||||
|
||||
res = qf_init(wp, fname, (eap->cmdidx != CMD_make
|
||||
|
@ -489,15 +489,6 @@ enum {
|
||||
#define REMAP_SCRIPT -2 /* remap script-local mappings only */
|
||||
#define REMAP_SKIP -3 /* no remapping for first char */
|
||||
|
||||
/* Values for mch_call_shell() second argument */
|
||||
#define SHELL_FILTER 1 /* filtering text */
|
||||
#define SHELL_EXPAND 2 /* expanding wildcards */
|
||||
#define SHELL_COOKED 4 /* set term to cooked mode */
|
||||
#define SHELL_DOOUT 8 /* redirecting output */
|
||||
#define SHELL_SILENT 16 /* don't print error returned by command */
|
||||
#define SHELL_READ 32 /* read lines and insert into buffer */
|
||||
#define SHELL_WRITE 64 /* write lines from buffer */
|
||||
|
||||
/* Values returned by mch_nodetype() */
|
||||
#define NODE_NORMAL 0 /* file or directory, check with os_isdir()*/
|
||||
#define NODE_WRITABLE 1 /* something we can write to (character
|
||||
|
Loading…
Reference in New Issue
Block a user