aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKillTheMule <KillTheMule@users.noreply.github.com>2018-01-26 17:42:51 +0100
committerKillTheMule <KillTheMule@users.noreply.github.com>2018-05-23 22:07:27 +0200
commit8bcc01195968b84d1a74ecb82598bdf538004404 (patch)
tree3f730cd4048d22c5c2de53409a599e342dec66b5
parent71816e584cef01c195797e738e1d6dba1de39102 (diff)
downloadrneovim-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.txt26
-rw-r--r--src/nvim/api/buffer.c28
-rw-r--r--test/functional/api/liveupdate_spec.lua44
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)