Mercurial > vim
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) {