Mercurial > vim
diff src/evalfunc.c @ 10233:d709622a18c9 v8.0.0015
commit https://github.com/vim/vim/commit/7ef3810d28b7ab2edbfcafab3fe8ad8bc2c2f138
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Sep 26 22:36:58 2016 +0200
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 26 Sep 2016 22:45:05 +0200 |
parents | 7a4fb555c83a |
children | c036c0f636d5 |
line wrap: on
line diff
--- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -514,7 +514,7 @@ static struct fst {"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_setoptions(typval_T *argvars, typva 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