From e25aedd94b4bdee47735fdf6e2cc1247571bfd91 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sun, 16 Jun 2024 21:29:34 +0200 Subject: [PATCH] nvim: Set up molten for interactive python repl Set it up with extended options and keymaps. Will use an image provider if it has been set externally (usually set by the 'image.nvim' setup routine) or fall back to use the `wezterm.nvim` plugin to display it in a wezterm pane. This display can be a little buggy so we should prefer others. --- .../nvim/lua/plugins/data_analysis.lua | 115 ++++++++++++++---- 1 file changed, 89 insertions(+), 26 deletions(-) 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",