# HG changeset patch # User Christian Brabandt # Date 1455921004 -3600 # Node ID f96536c291d88ac09916404533ae11c4a9a79bb2 # Parent b5632cf2e77ae76a1e7ee73b3a18a2a9a22a0f9b commit https://github.com/vim/vim/commit/0ba75a9714884895b2ac09733158c47544a8dfb9 Author: Bram Moolenaar 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. diff --git a/src/channel.c b/src/channel.c --- 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; + } } /* diff --git a/src/proto/channel.pro b/src/proto/channel.pro --- 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); diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim --- 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')) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -748,6 +748,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1360, +/**/ 1359, /**/ 1358,