Mercurial > vim
diff src/evalfunc.c @ 10422:e664ee056a84 v8.0.0105
commit https://github.com/vim/vim/commit/4b785f69c0616dba5d3f38e8ce4b5398cec89407
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Nov 29 21:54:44 2016 +0100
patch 8.0.0105
Problem: When using ch_read() with zero timeout, can't tell the difference
between reading an empty line and nothing available.
Solution: Add ch_canread().
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 29 Nov 2016 22:00:05 +0100 |
parents | 65e0537a4560 |
children | acfc83aca8ee |
line wrap: on
line diff
--- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -76,6 +76,7 @@ static void f_call(typval_T *argvars, ty static void f_ceil(typval_T *argvars, typval_T *rettv); #endif #ifdef FEAT_JOB_CHANNEL +static void f_ch_canread(typval_T *argvars, typval_T *rettv); static void f_ch_close(typval_T *argvars, typval_T *rettv); static void f_ch_close_in(typval_T *argvars, typval_T *rettv); static void f_ch_evalexpr(typval_T *argvars, typval_T *rettv); @@ -499,6 +500,7 @@ static struct fst {"ceil", 1, 1, f_ceil}, #endif #ifdef FEAT_JOB_CHANNEL + {"ch_canread", 1, 1, f_ch_canread}, {"ch_close", 1, 1, f_ch_close}, {"ch_close_in", 1, 1, f_ch_close_in}, {"ch_evalexpr", 2, 3, f_ch_evalexpr}, @@ -1779,6 +1781,21 @@ f_ceil(typval_T *argvars, typval_T *rett #ifdef FEAT_JOB_CHANNEL /* + * "ch_canread()" function + */ + static void +f_ch_canread(typval_T *argvars, typval_T *rettv) +{ + channel_T *channel = get_channel_arg(&argvars[0], TRUE, TRUE, 0); + + rettv->vval.v_number = 0; + if (channel != NULL) + rettv->vval.v_number = channel_has_readahead(channel, PART_SOCK) + || channel_has_readahead(channel, PART_OUT) + || channel_has_readahead(channel, PART_ERR); +} + +/* * "ch_close()" function */ static void