diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2019-06-15 15:59:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-15 15:59:45 +0200 |
commit | 2f1a653a845680efab1a27f6411e36e8cd2f3696 (patch) | |
tree | fa562d5f83dbeb611d91cdf780bc1ce1e75a4408 /src/nvim/api/buffer.c | |
parent | 93f8c2793cf5020d6fca00b6f10e4a158578034f (diff) | |
parent | 64cdf9f78a9bfd4d08a9d9bf2df48a4b2f296190 (diff) | |
download | rneovim-2f1a653a845680efab1a27f6411e36e8cd2f3696.tar.gz rneovim-2f1a653a845680efab1a27f6411e36e8cd2f3696.tar.bz2 rneovim-2f1a653a845680efab1a27f6411e36e8cd2f3696.zip |
Merge pull request #10231 from bfredl/bufcb_end
api/lua: add on_detach to nvim_buf_attach
Diffstat (limited to 'src/nvim/api/buffer.c')
-rw-r--r-- | src/nvim/api/buffer.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index 81b3851c53..b0b65545ab 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -12,6 +12,7 @@ #include "nvim/api/buffer.h" #include "nvim/api/private/helpers.h" #include "nvim/api/private/defs.h" +#include "nvim/lua/executor.h" #include "nvim/vim.h" #include "nvim/buffer.h" #include "nvim/charset.h" @@ -137,24 +138,38 @@ Boolean nvim_buf_attach(uint64_t channel_id, if (is_lua && strequal("on_lines", k.data)) { if (v->type != kObjectTypeLuaRef) { api_set_error(err, kErrorTypeValidation, "callback is not a function"); - return false; + goto error; } cb.on_lines = v->data.luaref; v->data.integer = LUA_NOREF; } else if (is_lua && strequal("on_changedtick", k.data)) { if (v->type != kObjectTypeLuaRef) { api_set_error(err, kErrorTypeValidation, "callback is not a function"); - return false; + goto error; } cb.on_changedtick = v->data.luaref; v->data.integer = LUA_NOREF; + } else if (is_lua && strequal("on_detach", k.data)) { + if (v->type != kObjectTypeLuaRef) { + api_set_error(err, kErrorTypeValidation, "callback is not a function"); + goto error; + } + cb.on_detach = v->data.luaref; + v->data.integer = LUA_NOREF; } else { api_set_error(err, kErrorTypeValidation, "unexpected key: %s", k.data); - return false; + goto error; } } return buf_updates_register(buf, channel_id, cb, send_buffer); + +error: + // TODO(bfredl): ASAN build should check that the ref table is empty? + executor_free_luaref(cb.on_lines); + executor_free_luaref(cb.on_changedtick); + executor_free_luaref(cb.on_detach); + return false; } /// Deactivates buffer-update events on the channel. |