diff --git a/symlinks/config/nvim/lua/esensar/lua_utils.lua b/symlinks/config/nvim/lua/esensar/lua_utils.lua new file mode 100644 index 0000000..9e86e6e --- /dev/null +++ b/symlinks/config/nvim/lua/esensar/lua_utils.lua @@ -0,0 +1,22 @@ +local M = {} + +function M.eval_lua_buffer(bufnr) + local buffer_content = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false) + return M.eval_lua_code(table.concat(buffer_content, "\n")) +end + +function M.eval_lua_code(code_string) + -- Taken from https://github.com/bfredl/nvim-luadev/blob/master/lua/luadev.lua + local block = coroutine.create(loadstring(code_string)) + local res = { coroutine.resume(block) } + if not res[1] then + _G._errstack = block + -- if the only frame on the traceback is the chunk itself, skip the traceback + if debug.getinfo(block, 0, "f").func ~= code_string then + res[2] = debug.traceback(block, res[2], 0) + end + end + return unpack(res) +end + +return M diff --git a/symlinks/config/nvim/plugin/luapopup.lua b/symlinks/config/nvim/plugin/luapopup.lua index 20d0f71..5209a51 100644 --- a/symlinks/config/nvim/plugin/luapopup.lua +++ b/symlinks/config/nvim/plugin/luapopup.lua @@ -1,6 +1,7 @@ -- Luapopup - get a popup with lua buffer and run the code in neovim afterwards local popup = require("nui.popup") local event = require("nui.utils.autocmd").event +local lua_utils = require("esensar.lua_utils") local last_win @@ -33,18 +34,7 @@ local function popup_and_run() end local function run() - local buffer_content = vim.api.nvim_buf_get_lines(win.bufnr, 0, -1, false) - -- Taken from https://github.com/bfredl/nvim-luadev/blob/master/lua/luadev.lua - local block = coroutine.create(loadstring(table.concat(buffer_content, "\n"))) - local res = { coroutine.resume(block) } - if not res[1] then - _G._errstack = block - -- if the only frame on the traceback is the chunk itself, skip the traceback - if debug.getinfo(block, 0, "f").func ~= buffer_content then - res[2] = debug.traceback(block, res[2], 0) - end - end - local st, r = unpack(res) + local st, r = lua_utils.eval_lua_buffer(win.bufnr) if st == false then vim.notify("Execution failed: \n" .. r) else