Add fennel support to luapopup thing
parent
6a67d9251f
commit
47f625593d
|
@ -1,3 +1,5 @@
|
||||||
|
local aeval = require("aniseed.eval")
|
||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
function M.eval_lua_buffer(bufnr)
|
function M.eval_lua_buffer(bufnr)
|
||||||
|
@ -19,4 +21,13 @@ function M.eval_lua_code(code_string)
|
||||||
return unpack(res)
|
return unpack(res)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.eval_fennel_buffer(bufnr)
|
||||||
|
local buffer_content = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
|
||||||
|
return M.eval_fennel_code(table.concat(buffer_content, "\n"))
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.eval_fennel_code(code_string)
|
||||||
|
return aeval.str(code_string, {})
|
||||||
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
@ -1,11 +1,44 @@
|
||||||
-- Luapopup - get a popup with lua buffer and run the code in neovim afterwards
|
-- Luapopup - get a popup with lua buffer and run the code in neovim afterwards
|
||||||
|
-- Provides the same for fennel too
|
||||||
local popup = require("nui.popup")
|
local popup = require("nui.popup")
|
||||||
local event = require("nui.utils.autocmd").event
|
local event = require("nui.utils.autocmd").event
|
||||||
local lua_utils = require("esensar.lua_utils")
|
local lua_utils = require("esensar.lua_utils")
|
||||||
|
|
||||||
local last_win
|
local last_lua_win
|
||||||
|
local last_fennel_win
|
||||||
|
|
||||||
local function popup_and_run()
|
local popup_type = {
|
||||||
|
lua = 1,
|
||||||
|
fennel = 2,
|
||||||
|
}
|
||||||
|
local restore_commands = {
|
||||||
|
[popup_type.lua] = ":LuaPopupRestore",
|
||||||
|
[popup_type.fennel] = ":FennelPopupRestore",
|
||||||
|
}
|
||||||
|
local eval_functions = {
|
||||||
|
[popup_type.lua] = lua_utils.eval_lua_buffer,
|
||||||
|
[popup_type.fennel] = lua_utils.eval_fennel_buffer,
|
||||||
|
}
|
||||||
|
|
||||||
|
local function get_last_win(type)
|
||||||
|
if type == popup_type.lua then
|
||||||
|
return last_lua_win
|
||||||
|
elseif type == popup_type.fennel then
|
||||||
|
return last_fennel_win
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_last_win(type, win)
|
||||||
|
if type == popup_type.lua then
|
||||||
|
last_lua_win = win
|
||||||
|
elseif type == popup_type.fennel then
|
||||||
|
last_fennel_win = win
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function popup_and_run(type)
|
||||||
|
local last_win = get_last_win(type)
|
||||||
if last_win then
|
if last_win then
|
||||||
last_win:unmount()
|
last_win:unmount()
|
||||||
end
|
end
|
||||||
|
@ -29,12 +62,15 @@ local function popup_and_run()
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
local function cancel()
|
local function cancel()
|
||||||
vim.notify("Cancelled operation, code not run! Use :LuaPopupRestore to restore buffer")
|
vim.notify("Cancelled operation, code not run! Use " .. restore_commands[type] .. " to restore buffer")
|
||||||
win:hide()
|
win:hide()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function run()
|
local function run()
|
||||||
local st, r = lua_utils.eval_lua_buffer(win.bufnr)
|
print(vim.inspect(eval_functions))
|
||||||
|
print(vim.inspect(eval_functions[type]))
|
||||||
|
print(vim.inspect(eval_functions[type](win.bufnr)))
|
||||||
|
local st, r = eval_functions[type](win.bufnr)
|
||||||
if st == false then
|
if st == false then
|
||||||
vim.notify("Execution failed: \n" .. r)
|
vim.notify("Execution failed: \n" .. r)
|
||||||
else
|
else
|
||||||
|
@ -63,21 +99,33 @@ local function popup_and_run()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
last_win = win
|
set_last_win(type, win)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function restore_popup()
|
local function restore_popup(type)
|
||||||
last_win:show()
|
get_last_win(type):show()
|
||||||
end
|
end
|
||||||
|
|
||||||
vim.api.nvim_create_user_command("LuaPopup", function()
|
vim.api.nvim_create_user_command("LuaPopup", function()
|
||||||
popup_and_run()
|
popup_and_run(popup_type.lua)
|
||||||
end, {})
|
end, {})
|
||||||
|
|
||||||
vim.api.nvim_create_user_command("LuaPopupRestore", function()
|
vim.api.nvim_create_user_command("LuaPopupRestore", function()
|
||||||
if last_win then
|
if get_last_win(popup_type.lua) then
|
||||||
restore_popup()
|
restore_popup(popup_type.lua)
|
||||||
else
|
else
|
||||||
vim.notify("No popup to restore! Use :LuaPopup first!", vim.log.levels.WARN)
|
vim.notify("No popup to restore! Use :LuaPopup first!", vim.log.levels.WARN)
|
||||||
end
|
end
|
||||||
end, {})
|
end, {})
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command("FennelPopup", function()
|
||||||
|
popup_and_run(popup_type.fennel)
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command("FennelPopupRestore", function()
|
||||||
|
if get_last_win(popup_type.fennel) then
|
||||||
|
restore_popup(popup_type.fennel)
|
||||||
|
else
|
||||||
|
vim.notify("No popup to restore! Use :FennelPopup first!", vim.log.levels.WARN)
|
||||||
|
end
|
||||||
|
end, {})
|
||||||
|
|
Loading…
Reference in New Issue