aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKillTheMule <KillTheMule@users.noreply.github.com>2018-05-10 23:13:58 +0200
committerKillTheMule <KillTheMule@users.noreply.github.com>2018-05-23 22:07:27 +0200
commit0bee3925ab5186211f10c823d4f149d4d16eb7a5 (patch)
tree553c7d291be5ac0e73204f5db7ab205f98002785
parentad151847f179e51d70cbde9440e765c2a451a7f6 (diff)
downloadrneovim-0bee3925ab5186211f10c823d4f149d4d16eb7a5.tar.gz
rneovim-0bee3925ab5186211f10c823d4f149d4d16eb7a5.tar.bz2
rneovim-0bee3925ab5186211f10c823d4f149d4d16eb7a5.zip
Send changedtick as first event if buffer contents weren't requested
-rw-r--r--src/nvim/api/buffer.c4
-rw-r--r--src/nvim/buffer_updates.c50
-rw-r--r--test/functional/api/buffer_updates_spec.lua22
3 files changed, 41 insertions, 35 deletions
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c
index 756367f801..12d1feb370 100644
--- a/src/nvim/api/buffer.c
+++ b/src/nvim/api/buffer.c
@@ -80,7 +80,9 @@ String buffer_get_line(Buffer buffer, Integer index, Error *err)
///
/// @param buffer The buffer handle
/// @param send_buffer Set to true if the initial notification should contain
-/// the whole buffer
+/// the whole buffer. If so, the first notification will be a
+/// `nvim_buf_lines_event`. Otherwise, the first notification will be
+/// a `nvim_buf_changedtick_event`
/// @param[out] err Details of an error that may have occurred
/// @return False when updates couldn't be enabled because the buffer isn't
/// loaded; otherwise True.
diff --git a/src/nvim/buffer_updates.c b/src/nvim/buffer_updates.c
index 71ca800ee5..2852561ce0 100644
--- a/src/nvim/buffer_updates.c
+++ b/src/nvim/buffer_updates.c
@@ -28,20 +28,20 @@ bool buf_updates_register(buf_T *buf, uint64_t channel_id, bool send_buffer)
// append the channelid to the list
kv_push(buf->update_channels, channel_id);
- Array args = ARRAY_DICT_INIT;
- args.size = 6;
- args.items = xcalloc(sizeof(Object), args.size);
-
- // the first argument is always the buffer handle
- args.items[0] = BUFFER_OBJ(buf->handle);
- args.items[1] = INTEGER_OBJ(buf->b_changedtick);
- // the first line that changed (zero-indexed)
- args.items[2] = INTEGER_OBJ(-1);
- // the last line that was changed
- args.items[3] = INTEGER_OBJ(-1);
- Array linedata = ARRAY_DICT_INIT;
-
if (send_buffer) {
+ Array args = ARRAY_DICT_INIT;
+ args.size = 6;
+ args.items = xcalloc(sizeof(Object), args.size);
+
+ // the first argument is always the buffer handle
+ args.items[0] = BUFFER_OBJ(buf->handle);
+ args.items[1] = INTEGER_OBJ(buf->b_changedtick);
+ // the first line that changed (zero-indexed)
+ args.items[2] = INTEGER_OBJ(0);
+ // the last line that was changed
+ args.items[3] = INTEGER_OBJ(-1);
+ Array linedata = ARRAY_DICT_INIT;
+
// collect buffer contents
// True now, but a compile time reminder for future systems we support
@@ -50,8 +50,6 @@ bool buf_updates_register(buf_T *buf, uint64_t channel_id, bool send_buffer)
size_t line_count = (size_t)buf->b_ml.ml_line_count;
if (line_count >= 1) {
- args.items[2] = INTEGER_OBJ(0);
-
linedata.size = line_count;
linedata.items = xcalloc(sizeof(Object), line_count);
for (size_t i = 0; i < line_count; i++) {
@@ -66,12 +64,15 @@ bool buf_updates_register(buf_T *buf, uint64_t channel_id, bool send_buffer)
linedata.items[i] = str;
}
}
- }
- args.items[4] = ARRAY_OBJ(linedata);
- args.items[5] = BOOLEAN_OBJ(false);
+ args.items[4] = ARRAY_OBJ(linedata);
+ args.items[5] = BOOLEAN_OBJ(false);
+
+ rpc_send_event(channel_id, "nvim_buf_lines_event", args);
+ } else {
+ buf_updates_changedtick_single(buf, channel_id);
+ }
- rpc_send_event(channel_id, "nvim_buf_lines_event", args);
return true;
}
@@ -207,9 +208,13 @@ void buf_updates_changedtick(buf_T *buf)
{
// notify each of the active channels
for (size_t i = 0; i < kv_size(buf->update_channels); i++) {
- uint64_t channelid = kv_A(buf->update_channels, i);
+ uint64_t channel_id = kv_A(buf->update_channels, i);
+ buf_updates_changedtick_single(buf, channel_id);
+ }
+}
- // send through the changes now channel contents now
+void buf_updates_changedtick_single(buf_T *buf, uint64_t channel_id)
+{
Array args = ARRAY_DICT_INIT;
args.size = 2;
args.items = xcalloc(sizeof(Object), args.size);
@@ -221,6 +226,5 @@ void buf_updates_changedtick(buf_T *buf)
args.items[1] = INTEGER_OBJ(buf->b_changedtick);
// don't try and clean up dead channels here
- rpc_send_event(channelid, "nvim_buf_changedtick", args);
- }
+ rpc_send_event(channel_id, "nvim_buf_changedtick_event", args);
}
diff --git a/test/functional/api/buffer_updates_spec.lua b/test/functional/api/buffer_updates_spec.lua
index 3f15c8a8a5..1bbba91187 100644
--- a/test/functional/api/buffer_updates_spec.lua
+++ b/test/functional/api/buffer_updates_spec.lua
@@ -338,7 +338,7 @@ describe('buffer events', function()
tick = tick + 1
expectn('nvim_buf_lines_event', {b, tick, 1, 2, {}, false})
tick = tick + 1
- expectn('nvim_buf_changedtick', {b, tick})
+ expectn('nvim_buf_changedtick_event', {b, tick})
command('set autoindent')
command('normal! >>')
tick = tick + 1
@@ -356,7 +356,7 @@ describe('buffer events', function()
tick = tick + 1
expectn('nvim_buf_lines_event', {b, tick, 1, 2, {}, false})
tick = tick + 1
- expectn('nvim_buf_changedtick', {b, tick})
+ expectn('nvim_buf_changedtick_event', {b, tick})
command('normal! ggOmmm')
tick = tick + 1
expectn('nvim_buf_lines_event', {b, tick, 0, 0, {"\t"}, false})
@@ -376,7 +376,7 @@ describe('buffer events', function()
tick = tick + 1
expectn('nvim_buf_lines_event', {b, tick, 0, 1, {'Line 1'}, false})
tick = tick + 1
- expectn('nvim_buf_changedtick', {b, tick})
+ expectn('nvim_buf_changedtick_event', {b, tick})
-- change the file directly
local f = io.open(filename, 'a')
@@ -412,7 +412,7 @@ describe('buffer events', function()
tick1 = tick1 + 1
expectn('nvim_buf_lines_event', {b1, tick1, 0, 1, {'A1'}, false})
tick1 = tick1 + 1
- expectn('nvim_buf_changedtick', {b1, tick1})
+ expectn('nvim_buf_changedtick_event', {b1, tick1})
command('b'..b2nr)
command('normal! x')
@@ -422,7 +422,7 @@ describe('buffer events', function()
tick2 = tick2 + 1
expectn('nvim_buf_lines_event', {b2, tick2, 0, 1, {'B1'}, false})
tick2 = tick2 + 1
- expectn('nvim_buf_changedtick', {b2, tick2})
+ expectn('nvim_buf_changedtick_event', {b2, tick2})
command('b'..b3nr)
command('normal! x')
@@ -432,7 +432,7 @@ describe('buffer events', function()
tick3 = tick3 + 1
expectn('nvim_buf_lines_event', {b3, tick3, 0, 1, {'C1'}, false})
tick3 = tick3 + 1
- expectn('nvim_buf_changedtick', {b3, tick3})
+ expectn('nvim_buf_changedtick_event', {b3, tick3})
end)
it('doesn\'t get confused when you turn watching on/off many times',
@@ -514,8 +514,8 @@ describe('buffer events', function()
wantn(2, 'nvim_buf_lines_event', {b, tick, 0, 1, {'AAA'}, false})
wantn(3, 'nvim_buf_lines_event', {b, tick, 0, 1, {'AAA'}, false})
tick = tick + 1
- wantn(2, 'nvim_buf_changedtick', {b, tick})
- wantn(3, 'nvim_buf_changedtick', {b, tick})
+ wantn(2, 'nvim_buf_changedtick_event', {b, tick})
+ wantn(3, 'nvim_buf_changedtick_event', {b, tick})
-- make sure there are no other pending nvim_buf_lines_event messages going to
-- channel 1
@@ -667,7 +667,7 @@ describe('buffer events', function()
tick = tick + 1
expectn('nvim_buf_lines_event', {b, tick, 0, 1, {'AAA'}, false})
tick = tick + 1
- expectn('nvim_buf_changedtick', {b, tick})
+ expectn('nvim_buf_changedtick_event', {b, tick})
-- close our buffer by creating a new one
command('enew')
@@ -694,7 +694,7 @@ describe('buffer events', function()
tick = tick + 1
expectn('nvim_buf_lines_event', {b, tick, 0, 1, {'AAA'}, false})
tick = tick + 1
- expectn('nvim_buf_changedtick', {b, tick})
+ expectn('nvim_buf_changedtick_event', {b, tick})
-- close our buffer by creating a new one
command('set hidden')
@@ -733,7 +733,7 @@ describe('buffer events', function()
helpers.clear()
local b, tick = editoriginal(false)
ok(buffer('attach', b, false))
- expectn('nvim_buf_lines_event', {b, tick, -1, -1, {}, false})
+ expectn('nvim_buf_changedtick_event', {b, tick})
end)
end)