Mercurial > vim
changeset 8132:f96536c291d8 v7.4.1360
commit https://github.com/vim/vim/commit/0ba75a9714884895b2ac09733158c47544a8dfb9
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Feb 19 23:21:26 2016 +0100
patch 7.4.1360
Problem: Can't remove a callback with ch_setoptions().
Solution: When passing zero or an empty string remove the callback.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 19 Feb 2016 23:30:04 +0100 |
parents | b5632cf2e77a |
children | ea8dc9e33ecd |
files | src/channel.c src/proto/channel.pro src/testdir/test_channel.vim src/version.c |
diffstat | 4 files changed, 11 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/channel.c +++ b/src/channel.c @@ -749,16 +749,6 @@ channel_set_job(channel_T *channel, job_ } /* - * Set the callback for channel "channel". - */ - void -channel_set_callback(channel_T *channel, char_u *callback) -{ - vim_free(channel->ch_callback); - channel->ch_callback = vim_strsave(callback); -} - -/* * Set various properties from an "options" argument. */ void @@ -769,9 +759,14 @@ channel_set_options(channel_T *channel, if (options->jo_set & JO_TIMEOUT) channel->ch_timeout = options->jo_timeout; - if ((options->jo_set & JO_CALLBACK) - && options->jo_callback != NULL && *options->jo_callback != NUL) - channel_set_callback(channel, options->jo_callback); + if (options->jo_set & JO_CALLBACK) + { + vim_free(channel->ch_callback); + if (options->jo_callback != NULL && *options->jo_callback != NUL) + channel->ch_callback = vim_strsave(options->jo_callback); + else + channel->ch_callback = NULL; + } } /*
--- a/src/proto/channel.pro +++ b/src/proto/channel.pro @@ -10,7 +10,6 @@ void channel_gui_register_all(void); channel_T *channel_open(char *hostname, int port_in, int waittime, void (*close_cb)(void)); void channel_set_pipes(channel_T *channel, sock_T in, sock_T out, sock_T err); void channel_set_job(channel_T *channel, job_T *job); -void channel_set_callback(channel_T *channel, char_u *callback); void channel_set_options(channel_T *channel, jobopt_T *options); void channel_set_req_callback(channel_T *channel, char_u *callback, int id); char_u *channel_get(channel_T *channel);
--- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -149,6 +149,7 @@ func s:communicate(port) call ch_setoptions(handle, {'timeout': 1111}) call assert_fails("call ch_setoptions(handle, {'waittime': 111})", "E475") call assert_fails("call ch_setoptions(handle, {'mode': 'json'})", "E475") + call ch_setoptions(handle, {'callback': ''}) " Send an eval request that works. call assert_equal('ok', ch_sendexpr(handle, 'eval-works'))