diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2016-02-21 02:04:13 -0500 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2016-02-21 02:04:13 -0500 |
commit | fc51f86b727bb3bd8e65b8a0bab0548a90582269 (patch) | |
tree | 2369c276b51a8b3772383c752a4240366dbed6fa | |
parent | 51055c14a623ca824d69b257304f0dd813cfda1f (diff) | |
parent | 6732f0193af55edd48bce6a988254ccdcd7ab8b4 (diff) | |
download | rneovim-fc51f86b727bb3bd8e65b8a0bab0548a90582269.tar.gz rneovim-fc51f86b727bb3bd8e65b8a0bab0548a90582269.tar.bz2 rneovim-fc51f86b727bb3bd8e65b8a0bab0548a90582269.zip |
Merge pull request #4296 from mhinz/fix-termclose
Make TermClose event return the associated buffer
-rw-r--r-- | src/nvim/eval.c | 1 | ||||
-rw-r--r-- | src/nvim/terminal.c | 7 | ||||
-rw-r--r-- | test/functional/autocmd/termclose_spec.lua | 16 |
3 files changed, 22 insertions, 2 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 837e19ab98..94683d22cb 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -22199,7 +22199,6 @@ static void on_process_exit(Process *proc, int status, void *d) char msg[22]; snprintf(msg, sizeof msg, "\r\n[Process exited %d]", proc->status); terminal_close(data->term, msg); - apply_autocmds(EVENT_TERMCLOSE, NULL, NULL, false, curbuf); } if (data->status_ptr) { diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c index dc5f348078..fb74569e3b 100644 --- a/src/nvim/terminal.c +++ b/src/nvim/terminal.c @@ -288,8 +288,9 @@ void terminal_close(Terminal *term, char *msg) term->forward_mouse = false; term->closed = true; + buf_T *buf = handle_get_buffer(term->buf_handle); + if (!msg || exiting) { - buf_T *buf = handle_get_buffer(term->buf_handle); // If no msg was given, this was called by close_buffer(buffer.c). Or if // exiting, we must inform the buffer the terminal no longer exists so that // close_buffer() doesn't call this again. @@ -304,6 +305,10 @@ void terminal_close(Terminal *term, char *msg) } else { terminal_receive(term, msg, strlen(msg)); } + + if (buf) { + apply_autocmds(EVENT_TERMCLOSE, NULL, NULL, false, buf); + } } void terminal_resize(Terminal *term, uint16_t width, uint16_t height) diff --git a/test/functional/autocmd/termclose_spec.lua b/test/functional/autocmd/termclose_spec.lua index 0961340e61..4de3f039c1 100644 --- a/test/functional/autocmd/termclose_spec.lua +++ b/test/functional/autocmd/termclose_spec.lua @@ -3,6 +3,7 @@ local Screen = require('test.functional.ui.screen') local clear, execute, feed, nvim, nvim_dir = helpers.clear, helpers.execute, helpers.feed, helpers.nvim, helpers.nvim_dir +local eval, eq = helpers.eval, helpers.eq describe('TermClose event', function() local screen @@ -25,4 +26,19 @@ describe('TermClose event', function() TermClose works! | ]]) end) + + it('reports the correct <abuf>', function() + execute('set hidden') + execute('autocmd TermClose * let g:abuf = expand("<abuf>")') + execute('edit foo') + execute('edit bar') + eq(2, eval('bufnr("%")')) + execute('terminal') + feed('<c-\\><c-n>') + eq(3, eval('bufnr("%")')) + execute('buffer 1') + eq(1, eval('bufnr("%")')) + execute('3bdelete!') + eq('3', eval('g:abuf')) + end) end) |