aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2016-02-21 02:04:13 -0500
committerJustin M. Keyes <justinkz@gmail.com>2016-02-21 02:04:13 -0500
commitfc51f86b727bb3bd8e65b8a0bab0548a90582269 (patch)
tree2369c276b51a8b3772383c752a4240366dbed6fa
parent51055c14a623ca824d69b257304f0dd813cfda1f (diff)
parent6732f0193af55edd48bce6a988254ccdcd7ab8b4 (diff)
downloadrneovim-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.c1
-rw-r--r--src/nvim/terminal.c7
-rw-r--r--test/functional/autocmd/termclose_spec.lua16
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)