diff options
author | KillTheMule <KillTheMule@users.noreply.github.com> | 2018-01-26 17:42:51 +0100 |
---|---|---|
committer | KillTheMule <KillTheMule@users.noreply.github.com> | 2018-05-23 22:07:27 +0200 |
commit | 8bcc01195968b84d1a74ecb82598bdf538004404 (patch) | |
tree | 3f730cd4048d22c5c2de53409a599e342dec66b5 | |
parent | 71816e584cef01c195797e738e1d6dba1de39102 (diff) | |
download | rneovim-8bcc01195968b84d1a74ecb82598bdf538004404.tar.gz rneovim-8bcc01195968b84d1a74ecb82598bdf538004404.tar.bz2 rneovim-8bcc01195968b84d1a74ecb82598bdf538004404.zip |
Make separate functions to start/stop live updates
-rw-r--r-- | runtime/doc/msgpack_rpc.txt | 26 | ||||
-rw-r--r-- | src/nvim/api/buffer.c | 28 | ||||
-rw-r--r-- | test/functional/api/liveupdate_spec.lua | 44 |
3 files changed, 57 insertions, 41 deletions
diff --git a/runtime/doc/msgpack_rpc.txt b/runtime/doc/msgpack_rpc.txt index ab77e08bc7..6d5ac25b27 100644 --- a/runtime/doc/msgpack_rpc.txt +++ b/runtime/doc/msgpack_rpc.txt @@ -258,24 +258,24 @@ specific buffer. For example, in python > import sys, neovim nvim = neovim.attach('stdio') bufnr = sys.argv[1] - nvim.buffers[bufnr].live_updates(True) + nvim.buffers[bufnr].live_updates_start(True) -After the `"nvim_buf_live_updates"` method is called, neovim will send a -series of notifications containing the entire buffer's contents and any -subsequent changes. The buffer's contents are sent via notifications because -if you were to use the other API methods to retrieve the buffer contents, the -buffer could be changed again before you turn on live updates. This can cause -a delay if your plugin activates live updates for a very large buffer, but it -is the the most efficient way to maintain a copy of the entire buffer's -contents inside your plugin. +After the `"nvim_buf_live_updates_start"` method is called with Argument `"True"`, +neovim will send a series of notifications containing the entire buffer's +contents and any subsequent changes. The buffer's contents are sent via +notifications because if you were to use the other API methods to retrieve the +buffer contents, the buffer could be changed again before you turn on live +updates. This can cause a delay if your plugin activates live updates for a +very large buffer, but it is the the most efficient way to maintain a copy of +the entire buffer's contents inside your plugin. *live-updates-disabling* Turning Off~ -You can use `"nvim_buf_live_updates"` with an argument of `False` to turn off -notifications. One final notification will be sent to indicate that live -updates are no longer active for the specified buffer. Alternatively, you can -just close the channel. +You can use `"nvim_buf_live_updates_stop"` to turn off notifications. One +final notification will be sent to indicate that live updates are no longer +active for the specified buffer. Alternatively, you can just close the +channel. *live-updates-limitations* Limitations~ diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index 44e274484a..2c7480a16b 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -78,15 +78,14 @@ String buffer_get_line(Buffer buffer, Integer index, Error *err) /// Activate live updates from this buffer to the current channel. /// -/// /// @param buffer The buffer handle -/// @param enabled True turns on live updates, False turns them off. +/// @param send_buffer Set to true if the initial notification should contain +/// the whole buffer /// @param[out] err Details of an error that may have occurred /// @return False when live updates couldn't be enabled because the buffer isn't /// loaded; otherwise True. -Boolean nvim_buf_live_updates(uint64_t channel_id, +Boolean nvim_buf_live_updates_start(uint64_t channel_id, Buffer buffer, - Boolean enabled, Boolean send_buffer, Error *err) FUNC_API_SINCE(4) FUNC_API_REMOTE_ONLY @@ -97,8 +96,25 @@ Boolean nvim_buf_live_updates(uint64_t channel_id, return false; } - if (enabled) { - return liveupdate_register(buf, channel_id, send_buffer); + return liveupdate_register(buf, channel_id, send_buffer); + +} +// +/// Deactivate live updates from this buffer to the current channel. +/// +/// @param buffer The buffer handle +/// @param[out] err Details of an error that may have occurred +/// @return False when live updates couldn't be disabled because the buffer +/// isn't loaded; otherwise True. +Boolean nvim_buf_live_updates_stop(uint64_t channel_id, + Buffer buffer, + Error *err) + FUNC_API_SINCE(4) FUNC_API_REMOTE_ONLY +{ + buf_T *buf = find_buffer_by_handle(buffer, err); + + if (!buf) { + return false; } liveupdate_unregister(buf, channel_id); diff --git a/test/functional/api/liveupdate_spec.lua b/test/functional/api/liveupdate_spec.lua index 6f83a3e904..9e071ccaa6 100644 --- a/test/functional/api/liveupdate_spec.lua +++ b/test/functional/api/liveupdate_spec.lua @@ -39,7 +39,7 @@ function open(activate, lines) -- turn on live updates, ensure that the LiveUpdateStart messages -- arrive as expectected if activate then - ok(buffer('live_updates', b, true, true)) + ok(buffer('live_updates_start', b, true)) expectn('LiveUpdateStart', {b, tick, lines, false}) end @@ -47,12 +47,12 @@ function open(activate, lines) end function reopen(buf, expectedlines) - ok(buffer('live_updates', buf, false, true)) + ok(buffer('live_updates_stop', buf)) expectn('LiveUpdateEnd', {buf}) -- for some reason the :edit! increments tick by 2 command('edit!') local tick = eval('b:changedtick') - ok(buffer('live_updates', buf, true, true)) + ok(buffer('live_updates_start', buf, true)) expectn('LiveUpdateStart', {buf, tick, origlines, false}) command('normal! gg') return tick @@ -161,20 +161,20 @@ describe('liveupdate', function() command('enew') local tick = eval('b:changedtick') b2 = nvim('get_current_buf') - ok(buffer('live_updates', b2, true, true)) + ok(buffer('live_updates_start', b2, true)) expectn('LiveUpdateStart', {b2, tick, {""}, false}) eval('append(0, ["new line 1"])') tick = tick + 1 expectn('LiveUpdate', {b2, tick, 0, 0, {'new line 1'}}) -- turn off live updates manually - buffer('live_updates', b2, false, true) + buffer('live_updates_stop', b2) expectn('LiveUpdateEnd', {b2}) -- add multiple lines to a blank file command('enew!') b3 = nvim('get_current_buf') - ok(buffer('live_updates', b3, true, true)) + ok(buffer('live_updates_start', b3, true)) tick = eval('b:changedtick') expectn('LiveUpdateStart', {b3, tick, {""}, false}) eval('append(0, ["new line 1", "new line 2", "new line 3"])') @@ -267,7 +267,7 @@ describe('liveupdate', function() tick = 2 expectn('LiveUpdateEnd', {b}) bnew = nvim('get_current_buf') - ok(buffer('live_updates', bnew, true, true)) + ok(buffer('live_updates_start', bnew, true)) expectn('LiveUpdateStart', {bnew, tick, {''}, false}) sendkeys('i') sendkeys('h') @@ -440,21 +440,21 @@ describe('liveupdate', function() local b, tick = editoriginal(false) -- turn on live updates many times - ok(buffer('live_updates', b, true, true)) - ok(buffer('live_updates', b, true, true)) - ok(buffer('live_updates', b, true, true)) - ok(buffer('live_updates', b, true, true)) - ok(buffer('live_updates', b, true, true)) + ok(buffer('live_updates_start', b, true)) + ok(buffer('live_updates_start', b, true)) + ok(buffer('live_updates_start', b, true)) + ok(buffer('live_updates_start', b, true)) + ok(buffer('live_updates_start', b, true)) expectn('LiveUpdateStart', {b, tick, origlines, false}) eval('rpcnotify('..channel..', "Hello There")') expectn('Hello There', {}) -- turn live updates off many times - ok(buffer('live_updates', b, false, true)) - ok(buffer('live_updates', b, false, true)) - ok(buffer('live_updates', b, false, true)) - ok(buffer('live_updates', b, false, true)) - ok(buffer('live_updates', b, false, true)) + ok(buffer('live_updates_stop', b)) + ok(buffer('live_updates_stop', b)) + ok(buffer('live_updates_stop', b)) + ok(buffer('live_updates_stop', b)) + ok(buffer('live_updates_stop', b)) expectn('LiveUpdateEnd', {b}) eval('rpcnotify('..channel..', "Hello Again")') expectn('Hello Again', {}) @@ -493,9 +493,9 @@ describe('liveupdate', function() local b, tick = open(false, lines) -- turn on live updates for sessions 1, 2 and 3 - ok(request(1, 'nvim_buf_live_updates', b, true, true)) - ok(request(2, 'nvim_buf_live_updates', b, true, true)) - ok(request(3, 'nvim_buf_live_updates', b, true, true)) + ok(request(1, 'nvim_buf_live_updates_start', b, true)) + ok(request(2, 'nvim_buf_live_updates_start', b, true)) + ok(request(3, 'nvim_buf_live_updates_start', b, true)) wantn(1, 'LiveUpdateStart', {b, tick, lines, false}) wantn(2, 'LiveUpdateStart', {b, tick, lines, false}) wantn(3, 'LiveUpdateStart', {b, tick, lines, false}) @@ -508,7 +508,7 @@ describe('liveupdate', function() wantn(3, 'LiveUpdate', {b, tick, 0, 1, {'AA'}}) -- stop watching on channel 1 - ok(request(1, 'nvim_buf_live_updates', b, false, true)) + ok(request(1, 'nvim_buf_live_updates_stop', b)) wantn(1, 'LiveUpdateEnd', {b}) -- undo the change to buffer 1 @@ -735,7 +735,7 @@ describe('liveupdate', function() it('doesn\'t send the buffer\'s content when not requested', function() helpers.clear() local b, tick = editoriginal(false) - ok(buffer('live_updates', b, true, false)) + ok(buffer('live_updates_start', b, false)) expectn('LiveUpdateStart', {b, tick, {}, false}) end) |