From b0e26199ec02c9b392af6161522004c55db0441f Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Mon, 15 Jul 2019 18:23:11 +0200 Subject: lua: add {old_byte_size} to on_lines buffer change event --- src/nvim/buffer_updates.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/nvim/buffer_updates.c') diff --git a/src/nvim/buffer_updates.c b/src/nvim/buffer_updates.c index 21efda9fd9..7dea8bfac5 100644 --- a/src/nvim/buffer_updates.c +++ b/src/nvim/buffer_updates.c @@ -169,6 +169,8 @@ void buf_updates_send_changes(buf_T *buf, int64_t num_removed, bool send_tick) { + size_t deleted_bytes = ml_flush_deleted_bytes(buf); + if (!buf_updates_active(buf)) { return; } @@ -231,8 +233,8 @@ void buf_updates_send_changes(buf_T *buf, bool keep = true; if (cb.on_lines != LUA_NOREF) { Array args = ARRAY_DICT_INIT; - Object items[5]; - args.size = 5; + Object items[6]; + args.size = 6; args.items = items; // the first argument is always the buffer handle @@ -250,6 +252,8 @@ void buf_updates_send_changes(buf_T *buf, // the last line in the updated range args.items[4] = INTEGER_OBJ(firstline - 1 + num_added); + // byte count of previous contents + args.items[5] = INTEGER_OBJ((Integer)deleted_bytes); textlock++; Object res = executor_exec_lua_cb(cb.on_lines, "lines", args, true); textlock--; -- cgit From c0993ed3433ef4111a39e59642d15b15261e8b68 Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Sun, 4 Aug 2019 12:22:22 +0200 Subject: lua: support getting UTF-32 and UTF-16 sizes of replaced text --- src/nvim/buffer_updates.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/nvim/buffer_updates.c') diff --git a/src/nvim/buffer_updates.c b/src/nvim/buffer_updates.c index 7dea8bfac5..3604578b50 100644 --- a/src/nvim/buffer_updates.c +++ b/src/nvim/buffer_updates.c @@ -26,6 +26,9 @@ bool buf_updates_register(buf_T *buf, uint64_t channel_id, if (channel_id == LUA_INTERNAL_CALL) { kv_push(buf->update_callbacks, cb); + if (cb.utf_sizes) { + buf->update_need_codepoints = true; + } return true; } @@ -169,7 +172,9 @@ void buf_updates_send_changes(buf_T *buf, int64_t num_removed, bool send_tick) { - size_t deleted_bytes = ml_flush_deleted_bytes(buf); + size_t deleted_codepoints, deleted_codeunits; + size_t deleted_bytes = ml_flush_deleted_bytes(buf, &deleted_codepoints, + &deleted_codeunits); if (!buf_updates_active(buf)) { return; @@ -233,8 +238,8 @@ void buf_updates_send_changes(buf_T *buf, bool keep = true; if (cb.on_lines != LUA_NOREF) { Array args = ARRAY_DICT_INIT; - Object items[6]; - args.size = 6; + Object items[8]; + args.size = 6; // may be increased to 8 below args.items = items; // the first argument is always the buffer handle @@ -254,6 +259,11 @@ void buf_updates_send_changes(buf_T *buf, // byte count of previous contents args.items[5] = INTEGER_OBJ((Integer)deleted_bytes); + if (cb.utf_sizes) { + args.size = 8; + args.items[6] = INTEGER_OBJ((Integer)deleted_codepoints); + args.items[7] = INTEGER_OBJ((Integer)deleted_codeunits); + } textlock++; Object res = executor_exec_lua_cb(cb.on_lines, "lines", args, true); textlock--; -- cgit