diff --git a/nvim/.config/nvim/lua/plugins/data_analysis.lua b/nvim/.config/nvim/lua/plugins/data_analysis.lua index 6d76169..6eb80b2 100644 --- a/nvim/.config/nvim/lua/plugins/data_analysis.lua +++ b/nvim/.config/nvim/lua/plugins/data_analysis.lua @@ -50,7 +50,6 @@ return { ft = { "quarto" }, }, - -- REPL work { "3rd/image.nvim", config = function() @@ -71,41 +70,105 @@ return { end, ft = { "markdown", "vimwiki", "quarto" }, }, + -- REPL work { "benlubas/molten-nvim", + dependencies = { + { "willothy/wezterm.nvim", config = true }, + { "3rd/image.nvim", optional = true }, + }, build = ":UpdateRemotePlugins", config = function() - vim.g.molten_image_provider = "none" -- image integration does NOT work currently :-( + vim.g.molten_image_provider = vim.g.molten_image_provider or "wezterm" vim.g.molten_auto_open_output = false + vim.g.molten_virt_text_output = true + if vim.fn.has("nvim-0.10") then + vim.g.molten_output_show_more = true + end + vim.api.nvim_create_autocmd("User", { + pattern = "MoltenInitPost", + callback = function() + local map = vim.keymap.set + if require("core.util").is_available("which-key") then + require("which-key").register({ ["c"] = { name = "+codecells" } }) + end + -- Operate jupyter notebooks from within vim + map( + "n", + "cc", + ":MoltenEvaluateOperator", + { desc = "evaluate operator", silent = true } + ) + map("n", "cl", ":MoltenEvaluateLine", { desc = "evaluate line", silent = true }) + map( + "x", + "c", + ":MoltenEvaluateVisual", + { desc = "evaluate visual", silent = true } + ) + map( + "n", + "cr", + ":MoltenReevaluateCell", + { desc = "reevaluate cell", silent = true } + ) + map( + "n", + "cp", + ":noautocmd :MoltenEnterOutput", + { silent = true, desc = "show output" } + ) + map("n", "cP", function() + vim.cmd("MoltenHideOutput") + vim.cmd("MoltenDelete") + end, { silent = true, desc = "hide output" }) + map("n", "co", ":MoltenImagePopup", { silent = true, desc = "open image" }) + map("n", "ci", ":MoltenInterrupt", { desc = "interrupt cell", silent = true }) + map("n", "cD", ":MoltenDeinit", { desc = "de-init molten", silent = true }) + map("n", "cR", ":MoltenRestart", { desc = "restart molten", silent = true }) + -- FIXME: Works for toggling TO virt text but not back + local function toggle_virtual_text_output() + if vim.g.molten_virt_text_output then + vim.fn.MoltenUpdateOption("molten_virt_text_output", false) + return + end + vim.fn.MoltenUpdateOption("molten_virt_text_output", true) + end + map( + "n", + "cV", + toggle_virtual_text_output, + { desc = "toggle virtual output", silent = true } + ) + end, + }) + vim.api.nvim_create_autocmd("User", { + pattern = "MoltenDeinitPost", + callback = function() + local unmap = require("core.util").unmap_key + unmap("cc") + unmap("cl") + unmap("c", "x") + unmap("cr") + unmap("cR") + unmap("cp") + unmap("cP") + unmap("co") + unmap("cD") + unmap("ci") + unmap("cV") + local map = vim.keymap.set + map("n", "cI", ":MoltenInit", { desc = "init molten", silent = true }) + end, + }) end, - cmd = { - "MoltenInfo", - "MoltenInit", - "MoltenDeinit", - "MoltenGoto", - "MoltenNext", - "MoltenPrev", - "MoltenEvaluateLine", - "MoltenEvaluateVisual", - "MoltenEvaluateOperator", - "MoltenEvaluateArgument", - "MoltenReevaluateCell", - "MoltenDelete", - "MoltenShowOutput", - "MoltenHideOutput", - "MoltenEnterOutput", - "MoltenInterrupt", - "MoltenRestart", - "MoltenSave", - "MoltenLoad", - "MoltenExportOutput", - }, - ft = { "quarto", "python" }, - lazy = false, + ft = { "norg", "quarto", "python" }, keys = { { "vn", ":MoltenInfo" }, + { "ci", ":MoltenInit" }, }, }, + -- Edit code blocks in md/quarto using whatever language is { "AckslD/nvim-FeMaco.lua",