diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-02-27 21:10:09 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-02-27 21:10:09 +0100 |
commit | c7f0ebc6d1e1cdaed816b88a0d6092c5ace615eb (patch) | |
tree | 5dc68d43bff1253b9f925123510025dd43884fc7 /src/eval.c | |
parent | 136f29a91dbafce424e31a4af133155f997e8f78 (diff) | |
download | vim-git-c7f0ebc6d1e1cdaed816b88a0d6092c5ace615eb.tar.gz |
patch 7.4.1438v7.4.1438
Problem: Can't get buffer number of a channel.
Solution: Add ch_getbufnr().
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/eval.c b/src/eval.c index 6e018c404..c3b7bccf1 100644 --- a/src/eval.c +++ b/src/eval.c @@ -499,6 +499,7 @@ static void f_ceil(typval_T *argvars, typval_T *rettv); static void f_ch_close(typval_T *argvars, typval_T *rettv); static void f_ch_evalexpr(typval_T *argvars, typval_T *rettv); static void f_ch_evalraw(typval_T *argvars, typval_T *rettv); +static void f_ch_getbufnr(typval_T *argvars, typval_T *rettv); # ifdef FEAT_JOB static void f_ch_getjob(typval_T *argvars, typval_T *rettv); # endif @@ -8195,6 +8196,7 @@ static struct fst {"ch_close", 1, 1, f_ch_close}, {"ch_evalexpr", 2, 3, f_ch_evalexpr}, {"ch_evalraw", 2, 3, f_ch_evalraw}, + {"ch_getbufnr", 2, 2, f_ch_getbufnr}, # ifdef FEAT_JOB {"ch_getjob", 1, 1, f_ch_getjob}, # endif @@ -10227,13 +10229,6 @@ get_job_options(typval_T *tv, jobopt_T *opt, int supported) return FAIL; } - for (part = PART_OUT; part <= PART_IN; ++part) - if (opt->jo_io[part] == JIO_BUFFER && opt->jo_io_name[part] == NULL) - { - EMSG(_("E915: Missing name for buffer")); - return FAIL; - } - return OK; } #endif @@ -10278,6 +10273,33 @@ f_ch_close(typval_T *argvars, typval_T *rettv UNUSED) } } +/* + * "ch_getbufnr()" function + */ + static void +f_ch_getbufnr(typval_T *argvars, typval_T *rettv) +{ + channel_T *channel = get_channel_arg(&argvars[0]); + + rettv->vval.v_number = -1; + if (channel != NULL) + { + char_u *what = get_tv_string(&argvars[1]); + int part; + + if (STRCMP(what, "err") == 0) + part = PART_ERR; + else if (STRCMP(what, "out") == 0) + part = PART_OUT; + else if (STRCMP(what, "in") == 0) + part = PART_IN; + else + part = PART_SOCK; + if (channel->ch_part[part].ch_buffer != NULL) + rettv->vval.v_number = channel->ch_part[part].ch_buffer->b_fnum; + } +} + # ifdef FEAT_JOB /* * "ch_getjob()" function |