From a6f74debc01b1d76713b392819d429de7d92f875 Mon Sep 17 00:00:00 2001 From: Richard Adenling Date: Sat, 6 Aug 2016 13:23:52 +0200 Subject: terminal: refresh before on_exit. #5217 References #3030 References https://github.com/radenling/vim-dispatch-neovim/issues/6 The terminal is updated by a timer, but on_exit needs the final state. Before this change, on_exit callback could see a stale terminal buffer. Helped-by: oni-link --- src/nvim/buffer.c | 2 +- src/nvim/terminal.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 7def8c1684..fe80f7f62e 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -449,7 +449,7 @@ void close_buffer(win_T *win, buf_T *buf, int action, int abort_if_last) if (buf->terminal) { terminal_close(buf->terminal, NULL); - } + } /* Always remove the buffer when there is no file name. */ if (buf->b_ffname == NULL) diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c index c44fe15be5..cc1de583d3 100644 --- a/src/nvim/terminal.c +++ b/src/nvim/terminal.c @@ -302,8 +302,16 @@ void terminal_close(Terminal *term, char *msg) } term->forward_mouse = false; - term->closed = true; + + // flush any pending changes to the buffer + if (!exiting) { + block_autocmds(); + refresh_terminal(term); + unblock_autocmds(); + } + buf_T *buf = handle_get_buffer(term->buf_handle); + term->closed = true; if (!msg || exiting) { // If no msg was given, this was called by close_buffer(buffer.c). Or if -- cgit