mirror of
https://github.com/neovim/neovim.git
synced 2025-10-17 07:16:09 +00:00
system(): handle profiling and 'verbose' #8730
closes #8362 Vim's code calls `call_shell` directly from `get_system_output_as_rettv` whereas in Nvim this function has been rewritten to not call `call_shell` but to call `os_system` via `do_os_system`, losing the support for profiling and verbose. Changing the code to call `call_shell` from `get_system_output_as_rettv` seems to be too complicated to be worth it on the current version of the code. So this commit duplicates the relevant code.
This commit is contained in:

committed by
Justin M. Keyes

parent
befc7de26f
commit
a2253744c9
@@ -16401,9 +16401,12 @@ static list_T *string_to_list(const char *str, size_t len, const bool keepempty)
|
||||
return list;
|
||||
}
|
||||
|
||||
// os_system wrapper. Handles 'verbose', :profile, and v:shell_error.
|
||||
static void get_system_output_as_rettv(typval_T *argvars, typval_T *rettv,
|
||||
bool retlist)
|
||||
{
|
||||
proftime_T wait_time;
|
||||
|
||||
rettv->v_type = VAR_STRING;
|
||||
rettv->vval.v_string = NULL;
|
||||
|
||||
@@ -16430,11 +16433,29 @@ static void get_system_output_as_rettv(typval_T *argvars, typval_T *rettv,
|
||||
return; // Already did emsg.
|
||||
}
|
||||
|
||||
if (p_verbose > 3) {
|
||||
char buf[NUMBUFLEN];
|
||||
const char * cmd = tv_get_string_buf(argvars, buf);
|
||||
|
||||
verbose_enter_scroll();
|
||||
smsg(_("Calling shell to execute: \"%s\""), cmd);
|
||||
msg_puts("\n\n");
|
||||
verbose_leave_scroll();
|
||||
}
|
||||
|
||||
if (do_profiling == PROF_YES) {
|
||||
prof_child_enter(&wait_time);
|
||||
}
|
||||
|
||||
// execute the command
|
||||
size_t nread = 0;
|
||||
char *res = NULL;
|
||||
int status = os_system(argv, input, input_len, &res, &nread);
|
||||
|
||||
if (do_profiling == PROF_YES) {
|
||||
prof_child_exit(&wait_time);
|
||||
}
|
||||
|
||||
xfree(input);
|
||||
|
||||
set_vim_var_nr(VV_SHELL_ERROR, (long) status);
|
||||
|
Reference in New Issue
Block a user