diff options
Diffstat (limited to 'ar/.config/LazyVim/lua/plugins/jupyter.lua')
| -rw-r--r-- | ar/.config/LazyVim/lua/plugins/jupyter.lua | 345 |
1 files changed, 0 insertions, 345 deletions
diff --git a/ar/.config/LazyVim/lua/plugins/jupyter.lua b/ar/.config/LazyVim/lua/plugins/jupyter.lua deleted file mode 100644 index 0cb684b..0000000 --- a/ar/.config/LazyVim/lua/plugins/jupyter.lua +++ /dev/null @@ -1,345 +0,0 @@ -local function get_commenter() - local commenter = { python = "# ", lua = "-- ", julia = "# ", fennel = ";; ", scala = "// ", r = "# " } - local bufnr = vim.api.nvim_get_current_buf() - local ft = vim.api.nvim_buf_get_option(bufnr, "filetype") - if ft == nil or ft == "" then - return commenter["python"] - elseif commenter[ft] == nil then - return commenter["python"] - end - - return commenter[ft] -end - -local CELL_MARKER = get_commenter() .. "%%" -vim.api.nvim_set_hl(0, "CellMarkerHl", { default = true, bg = "#c5c5c5", fg = "#111111" }) - -local function miniai_spec(mode) - local start_line = vim.fn.search("^" .. CELL_MARKER, "bcnW") - - if start_line == 0 then - start_line = 1 - else - if mode == "i" then - start_line = start_line + 1 - end - end - - local end_line = vim.fn.search("^" .. CELL_MARKER, "nW") - 1 - if end_line == -1 then - end_line = vim.fn.line("$") - end - - local last_col = math.max(vim.fn.getline(end_line):len(), 1) - - local from = { line = start_line, col = 1 } - local to = { line = end_line, col = last_col } - - return { from = from, to = to } -end - -local function show_cell_markers() - require("mini.hipatterns").enable(0, { - highlighters = { - marker = { pattern = "^" .. get_commenter() .. "%%%%", group = "CellMarkerHl" }, - }, - }) -end - -local function select_cell() - local bufnr = vim.api.nvim_get_current_buf() - local current_row = vim.api.nvim_win_get_cursor(0)[1] - local current_col = vim.api.nvim_win_get_cursor(0)[2] - - local start_line = nil - local end_line = nil - - for line = current_row, 1, -1 do - local line_content = vim.api.nvim_buf_get_lines(bufnr, line - 1, line, false)[1] - if line_content:find("^" .. CELL_MARKER) then - start_line = line - break - end - end - local line_count = vim.api.nvim_buf_line_count(bufnr) - for line = current_row + 1, line_count do - local line_content = vim.api.nvim_buf_get_lines(bufnr, line - 1, line, false)[1] - if line_content:find("^" .. CELL_MARKER) then - end_line = line - break - end - end - - if not start_line then - start_line = 1 - end - if not end_line then - end_line = line_count - end - return current_row, current_col, start_line, end_line -end - -local function execute_cell() - local current_row, current_col, start_line, end_line = select_cell() - if start_line and end_line then - vim.fn.setpos("'<", { 0, start_line + 1, 0, 0 }) - vim.fn.setpos("'>", { 0, end_line - 1, 0, 0 }) - require("iron.core").visual_send() - vim.api.nvim_win_set_cursor(0, { current_row, current_col }) - end -end - -local function delete_cell() - local _, _, start_line, end_line = select_cell() - if start_line and end_line then - local rows_to_select = end_line - start_line - 1 - vim.api.nvim_win_set_cursor(0, { start_line, 0 }) - vim.cmd("normal!V " .. rows_to_select .. "j") - vim.cmd("normal!d") - vim.cmd("normal!k") - end -end - -local function navigate_cell(up) - local is_up = up or false - local _, _, start_line, end_line = select_cell() - if is_up and start_line ~= 1 then - vim.api.nvim_win_set_cursor(0, { start_line - 1, 0 }) - elseif end_line then - local bufnr = vim.api.nvim_get_current_buf() - local line_count = vim.api.nvim_buf_line_count(bufnr) - if end_line ~= line_count then - vim.api.nvim_win_set_cursor(0, { end_line + 1, 0 }) - _, _, start_line, end_line = select_cell() - vim.api.nvim_win_set_cursor(0, { end_line - 1, 0 }) - end - end -end - -local function move_cell(dir) - local search_res - local result - if dir == "d" then - search_res = vim.fn.search("^" .. CELL_MARKER, "W") - if search_res == 0 then - result = "last" - end - else - search_res = vim.fn.search("^" .. CELL_MARKER, "bW") - if search_res == 0 then - result = "first" - vim.api.nvim_win_set_cursor(0, { 1, 0 }) - end - end - - return result -end - -local function insert_cell_before(content) - content = content or CELL_MARKER - local cell_object = miniai_spec("a") - vim.api.nvim_buf_set_lines(0, cell_object.from.line - 1, cell_object.from.line - 1, false, { content, "" }) - move_cell("u") -end - -local function insert_cell_after(content) - content = content or CELL_MARKER - vim.print(content) - local cell_object = miniai_spec("a") - vim.api.nvim_buf_set_lines(0, cell_object.to.line, cell_object.to.line, false, { content, "" }) - move_cell("d") -end - -local function insert_markdown_cell() - insert_cell_after(CELL_MARKER .. " [markdown]") -end - -local function repl_menu() - local cmd = require("hydra.keymap-util").cmd - - local hint = [[ - ^ - _a_: Insert Cell After - _b_: Insert Cell Before - _e_: Execute Cell - _j_: Next Cell - _k_: Previous Cell - _m_: Insert Markdown Cell - _x_: Delete Cell - ^ - _s_: Send Motion - _l_: Send Line - _t_: Send Until Cursor - _f_: Send File - ^ - _R_: Show REPL - _C_: Close REPL - _S_: Restart REPL - _F_: Focus - _H_: Hide - ^ - _c_: Clear - _L_: Clear Highlight - _<CR>_: ENTER - _I_: Interrupt - ^ - ^ ^ _q_: Quit -]] - - return { - name = "REPL", - hint = hint, - config = { - color = "pink", - invoke_on_body = true, - hint = { - border = "rounded", - position = "bottom-middle", - }, - }, - mode = "n", - body = "<A-n>", - -- stylua: ignore - heads = { - { "a", insert_cell_after, desc = "Insert Cell After", }, - { "b", insert_cell_before, desc = "Insert Cell Before", }, - { "e", execute_cell, desc = "Execute Cell", }, - { "j", navigate_cell , desc = "Next Cell", }, - { "k", function() navigate_cell(true) end, desc = "Previous Cell", }, - { "m", insert_markdown_cell, desc = "Insert Markdown Cell", }, - { "x", delete_cell, desc = "Delete Cell", }, - { "s", function() require("iron.core").run_motion("send_motion") end, desc = "Send Motion" }, - { "l", function() require("iron.core").send_line() end, desc = "Send Line" }, - { "t", function() require("iron.core").send_until_cursor() end, desc = "Send Until Cursor" }, - { "f", function() require("iron.core").send_file() end, desc = "Send File" }, - { "L", function() require("iron.marks").clear_hl() end, mode = {"v"}, desc = "Clear Highlight" }, - { "<CR>", function() require("iron.core").send(nil, string.char(13)) end, desc = "ENTER" }, - { "I", function() require("iron.core").send(nil, string.char(03)) end, desc = "Interrupt" }, - { "C", function() require("iron.core").close_repl() end, desc = "Close REPL" }, - { "c", function() require("iron.core").send(nil, string.char(12)) end, desc = "Clear" }, - { "R", cmd("IronRepl"), desc = "REPL" }, - { "S", cmd("IronRestart"), desc = "Restart" }, - { "F", cmd("IronFocus"), desc = "Focus" }, - { "H", cmd("IronHide"), desc = "Hide" }, - { "q", nil, { exit = true, nowait = true, desc = "Exit" } }, - }, - } -end - -return { - { - "goerz/jupytext.vim", - build = "pip install jupytext", - event = "VeryLazy", - dependencies = { "neovim/nvim-lspconfig" }, - opts = {}, - config = function() - -- The destination format: 'ipynb', 'markdown' or 'script', or a file extension: 'md', 'Rmd', 'jl', 'py', 'R', ..., 'auto' (script - -- extension matching the notebook language), or a combination of an extension and a format name, e.g. md:markdown, md:pandoc, - -- md:myst or py:percent, py:light, py:nomarker, py:hydrogen, py:sphinx. The default format for scripts is the 'light' format, - -- which uses few cell markers (none when possible). Alternatively, a format compatible with many editors is the 'percent' format, - -- which uses '# %%' as cell markers. The main formats (markdown, light, percent) preserve notebooks and text documents in a - -- roundtrip. Use the --test and and --test-strict commands to test the roundtrip on your files. Read more about the available - -- formats at https://jupytext.readthedocs.io/en/latest/formats.html (default: None) - vim.g.jupytext_fmt = "py:percent" - - -- Autocmd to set cell markers - vim.api.nvim_create_autocmd({ "BufEnter" }, { -- "BufWriteCmd" - group = vim.api.nvim_create_augroup("au_show_cell_markers", { clear = true }), - pattern = { "*.py", "*.r", "*.ipynb", "*.jl", "*.scala", "*.lua", "*.fnl" }, - callback = function(event) - show_cell_markers() - end, - }) - end, - }, - { - "Vigemus/iron.nvim", - event = "VeryLazy", - opts = function() - return { - config = { - -- Whether a repl should be discarded or not - scratch_repl = true, - -- Your repl definitions come here - - repl_definition = { - python = require("iron.fts.python").ipython, - scala = require("iron.fts.scala").scala, - }, - -- How the repl window will be displayed - -- See below for more information - repl_open_cmd = require("iron.view").right("50%"), - }, - -- If the highliht is on, you can change how it looks - -- For the available options, check nvim_set_hl - highlight = { - italic = true, - }, - ignore_blank_lines = true, -- ignore blank lines when sending visual select lines - } - end, - -- stylua: ignore - keys = { - { "<leader>i", function() end, mode = {"n", "x"}, desc = "+REPL" }, - { "<leader>im", function() end, mode = {"n", "x"}, desc = "+Mark" }, - { "<leader>ire>", execute_cell, desc = "Execute Cell" }, - { "<leader>irx", delete_cell, desc = "Delete Cell" }, - { "<leader>ir]", navigate_cell, desc = "Next Cell" }, - { "<leader>ir[", function() navigate_cell(true) end, desc = "Previous Cell" }, - { "<leader>is", function() require("iron.core").run_motion("send_motion") end, desc = "Send Motion" }, - { "<leader>is", function() require("iron.core").visual_send() end, mode = {"v"}, desc = "Send" }, - { "<leader>il", function() require("iron.core").send_line() end, desc = "Send Line" }, - { "<leader>it", function() require("iron.core").send_until_cursor() end, desc = "Send Until Cursor" }, - { "<leader>if", function() require("iron.core").send_file() end, desc = "Send File" }, - { "<leader>iL", function() require("iron.marks").clear_hl() end, mode = {"v"}, desc = "Clear Highlight" }, - { "<leader>i<cr>", function() require("iron.core").send(nil, string.char(13)) end, desc = "ENTER" }, - { "<leader>iI", function() require("iron.core").send(nil, string.char(03)) end, desc = "Interrupt" }, - { "<leader>iC", function() require("iron.core").close_repl() end, desc = "Close REPL" }, - { "<leader>ic", function() require("iron.core").send(nil, string.char(12)) end, desc = "Clear" }, - { "<leader>ims", function() require("iron.core").send_mark() end, desc = "Send Mark" }, - { "<leader>imm", function() require("iron.core").run_motion("mark_motion") end, desc = "Mark Motion" }, - { "<leader>imv", function() require("iron.core").mark_visual() end, mode = {"v"}, desc = "Mark Visual" }, - { "<leader>imr", function() require("iron.marks").drop_last() end, desc = "Remove Mark" }, - { "<leader>iR", "<cmd>IronRepl<cr>", desc = "REPL" }, - { "<leader>iS", "<cmd>IronRestart<cr>", desc = "Restart" }, - { "<leader>iF", "<cmd>IronFocus<cr>", desc = "Focus" }, - { "<leader>iH", "<cmd>IronHide<cr>", desc = "Hide" }, - }, - config = function(_, opts) - local iron = require("iron.core") - iron.setup(opts) - end, - }, - { - "folke/which-key.nvim", - event = "VeryLazy", - opts = { - defaults = { - ["<leader>i"] = { name = "+REPL" }, - ["<leader>im"] = { name = "+Mark" }, - }, - }, - }, - { - "anuvyklack/hydra.nvim", - event = { "VeryLazy" }, - opts = { - specs = { - repl = repl_menu, - }, - }, - config = function(_, opts) - local hydra = require("hydra") - for s, _ in pairs(opts.specs) do - hydra(opts.specs[s]()) - end - end, - }, - { - "echasnovski/mini.ai", - opts = function(_, opts) - opts.custom_textobjects = vim.tbl_extend("force", opts.custom_textobjects, { h = miniai_spec }) - end, - }, -} |
