TUI/paste: define paste function as Lua builtin

- Define in Lua so that it is compiled-in (available with `-u NONE`).

TODO: Eventually we will want a 'pastefunc' option or some other way to
override the default paste handler.
This commit is contained in:
Justin M. Keyes
2019-08-18 22:55:54 +02:00
parent 7df566060c
commit 6d277f43a2
2 changed files with 21 additions and 2 deletions

View File

@@ -93,6 +93,23 @@ local function _os_proc_children(ppid)
return children return children
end end
-- Default paste function.
local function _paste(data)
-- local eof = (data == {''})
local curline = vim.api.nvim_call_function('line', {'.'})
vim.api.nvim_buf_set_lines(
0,
curline,
curline,
false,
data)
vim.api.nvim_call_function('cursor', {curline + #data, 1})
-- if eof then
-- vim.api.nvim_command('redraw')
-- end
return 0
end
-- TODO(ZyX-I): Create compatibility layer. -- TODO(ZyX-I): Create compatibility layer.
--{{{1 package.path updater function --{{{1 package.path updater function
-- Last inserted paths. Used to clear out items from package.[c]path when they -- Last inserted paths. Used to clear out items from package.[c]path when they
@@ -186,6 +203,7 @@ local module = {
_update_package_paths = _update_package_paths, _update_package_paths = _update_package_paths,
_os_proc_children = _os_proc_children, _os_proc_children = _os_proc_children,
_os_proc_info = _os_proc_info, _os_proc_info = _os_proc_info,
_paste = _paste,
_system = _system, _system = _system,
schedule_wrap = schedule_wrap, schedule_wrap = schedule_wrap,
} }

View File

@@ -132,7 +132,8 @@ static void tinput_wait_enqueue(void **argv)
Object keys_array = ARRAY_OBJ(string_to_array(keys)); Object keys_array = ARRAY_OBJ(string_to_array(keys));
Array args = { .capacity = 1, .size = 1, .items = &keys_array }; Array args = { .capacity = 1, .size = 1, .items = &keys_array };
Error err = ERROR_INIT; Error err = ERROR_INIT;
Object fret = nvim_call_function(STATIC_CSTR_AS_STRING("PasteCallback"), Object fret
= nvim_execute_lua(STATIC_CSTR_AS_STRING("return vim._paste(...)"),
args, &err); args, &err);
if ((fret.type == kObjectTypeInteger && fret.data.integer) if ((fret.type == kObjectTypeInteger && fret.data.integer)
|| (fret.type == kObjectTypeBoolean && fret.data.boolean) || (fret.type == kObjectTypeBoolean && fret.data.boolean)