patch 8.0.0015
Problem: Can't tell which part of a channel has "buffered" status.
Solution: Add an optional argument to ch_status(). Let ch_info() also
return "buffered" for out_status and err_status.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index e89bc30..84eaa8c 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -514,7 +514,7 @@
{"ch_sendexpr", 2, 3, f_ch_sendexpr},
{"ch_sendraw", 2, 3, f_ch_sendraw},
{"ch_setoptions", 2, 2, f_ch_setoptions},
- {"ch_status", 1, 1, f_ch_status},
+ {"ch_status", 1, 2, f_ch_status},
#endif
{"changenr", 0, 0, f_changenr},
{"char2nr", 1, 2, f_char2nr},
@@ -1985,13 +1985,24 @@
f_ch_status(typval_T *argvars, typval_T *rettv)
{
channel_T *channel;
+ jobopt_T opt;
+ int part = -1;
/* return an empty string by default */
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0);
- rettv->vval.v_string = vim_strsave((char_u *)channel_status(channel));
+
+ if (argvars[1].v_type != VAR_UNKNOWN)
+ {
+ clear_job_options(&opt);
+ if (get_job_options(&argvars[1], &opt, JO_PART) == OK
+ && (opt.jo_set & JO_PART))
+ part = opt.jo_part;
+ }
+
+ rettv->vval.v_string = vim_strsave((char_u *)channel_status(channel, part));
}
#endif