aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Adenling <dreeze@gmail.com>2016-08-06 13:23:52 +0200
committerJustin M. Keyes <justinkz@gmail.com>2017-05-08 13:49:14 +0200
commita6f74debc01b1d76713b392819d429de7d92f875 (patch)
tree15e6aeba452d6bde23430c6354f7d21f44699c6a
parenta9605bb4aff76a934a4c39fbda093ee8fc8a1c71 (diff)
downloadrneovim-a6f74debc01b1d76713b392819d429de7d92f875.tar.gz
rneovim-a6f74debc01b1d76713b392819d429de7d92f875.tar.bz2
rneovim-a6f74debc01b1d76713b392819d429de7d92f875.zip
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 <knil.ino@gmail.com>
-rw-r--r--src/nvim/buffer.c2
-rw-r--r--src/nvim/terminal.c10
2 files changed, 10 insertions, 2 deletions
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