diff src/channel.c @ 8291:ac0c43e7af20 v7.4.1438

commit https://github.com/vim/vim/commit/c7f0ebc6d1e1cdaed816b88a0d6092c5ace615eb Author: Bram Moolenaar <Bram@vim.org> Date: Sat Feb 27 21:10:09 2016 +0100 patch 7.4.1438 Problem: Can't get buffer number of a channel. Solution: Add ch_getbufnr().
author Christian Brabandt <cb@256bit.org>
date Sat, 27 Feb 2016 21:15:04 +0100
parents 108d30ed34ba
children 4929eca308b7
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -787,12 +787,15 @@ channel_set_job(channel_T *channel, job_
     static buf_T *
 find_buffer(char_u *name)
 {
-    buf_T *buf = buflist_findname(name);
+    buf_T *buf = NULL;
     buf_T *save_curbuf = curbuf;
 
+    if (name != NULL && *name != NUL)
+	buf = buflist_findname(name);
     if (buf == NULL)
     {
-	buf = buflist_new(name, NULL, (linenr_T)0, BLN_LISTED);
+	buf = buflist_new(name == NULL ? (char_u *)"" : name,
+					       NULL, (linenr_T)0, BLN_LISTED);
 	buf_copy_options(buf, BCO_ENTER);
 #ifdef FEAT_QUICKFIX
 	clear_string_option(&buf->b_p_bt);
@@ -880,7 +883,7 @@ channel_set_options(channel_T *channel, 
 	channel->ch_part[PART_OUT].ch_mode = MODE_NL;
 	channel->ch_part[PART_OUT].ch_buffer =
 				       find_buffer(opt->jo_io_name[PART_OUT]);
-	ch_logs(channel, "writing to buffer %s",
+	ch_logs(channel, "writing to buffer '%s'",
 		      (char *)channel->ch_part[PART_OUT].ch_buffer->b_ffname);
     }
 }
@@ -1357,7 +1360,14 @@ may_invoke_callback(channel_T *channel, 
 	callback = channel->ch_part[part].ch_callback;
     else
 	callback = channel->ch_callback;
+
     buffer = channel->ch_part[part].ch_buffer;
+    if (buffer != NULL && !buf_valid(buffer))
+    {
+	/* buffer was wiped out */
+	channel->ch_part[part].ch_buffer = NULL;
+	buffer = NULL;
+    }
 
     if (ch_mode == MODE_JSON || ch_mode == MODE_JS)
     {