changeset 8436:0e6fd2f802b3 v7.4.1509

commit https://github.com/vim/vim/commit/151f656e171f6ffbb0cbeb343cbcf2ffac0c36b0 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Mar 7 21:19:38 2016 +0100 patch 7.4.1509 Problem: Keeping both a variable for a job and the channel it refers to is a hassle. Solution: Allow passing the job where a channel is expected. (Damien)
author Christian Brabandt <cb@256bit.org>
date Mon, 07 Mar 2016 21:30:14 +0100
parents 1f91306880c1
children cba3eee020fa
files src/eval.c src/testdir/test_channel.vim src/version.c
diffstat 3 files changed, 21 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -10285,14 +10285,22 @@ get_job_options(typval_T *tv, jobopt_T *
     static channel_T *
 get_channel_arg(typval_T *tv)
 {
-    channel_T *channel;
-
-    if (tv->v_type != VAR_CHANNEL)
+    channel_T *channel = NULL;
+
+    if (tv->v_type == VAR_JOB)
+    {
+	if (tv->vval.v_job != NULL)
+	    channel = tv->vval.v_job->jv_channel;
+    }
+    else if (tv->v_type == VAR_CHANNEL)
+    {
+	channel = tv->vval.v_channel;
+    }
+    else
     {
 	EMSG2(_(e_invarg2), get_tv_string(tv));
 	return NULL;
     }
-    channel = tv->vval.v_channel;
 
     if (channel == NULL || !channel_is_open(channel))
     {
@@ -15106,7 +15114,7 @@ f_job_setoptions(typval_T *argvars, typv
  * "job_start()" function
  */
     static void
-f_job_start(typval_T *argvars UNUSED, typval_T *rettv)
+f_job_start(typval_T *argvars, typval_T *rettv)
 {
     job_T	*job;
     char_u	*cmd = NULL;
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -463,16 +463,16 @@ func Test_raw_pipe()
   let job = job_start(s:python . " test_channel_pipe.py", {'mode': 'raw'})
   call assert_equal("run", job_status(job))
   try
-    let handle = job_getchannel(job)
-    call ch_sendraw(handle, "echo something\n")
-    let msg = ch_readraw(handle)
+    " For a change use the job where a channel is expected.
+    call ch_sendraw(job, "echo something\n")
+    let msg = ch_readraw(job)
     call assert_equal("something\n", substitute(msg, "\r", "", 'g'))
 
-    call ch_sendraw(handle, "double this\n")
-    let msg = ch_readraw(handle)
+    call ch_sendraw(job, "double this\n")
+    let msg = ch_readraw(job)
     call assert_equal("this\nAND this\n", substitute(msg, "\r", "", 'g'))
 
-    let reply = ch_evalraw(handle, "quit\n", {'timeout': 100})
+    let reply = ch_evalraw(job, "quit\n", {'timeout': 100})
     call assert_equal("Goodbye!\n", substitute(reply, "\r", "", 'g'))
   finally
     call job_stop(job)
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1509,
+/**/
     1508,
 /**/
     1507,