From 2efccdb4de08b2606fda5db458f594a83e36bf3f Mon Sep 17 00:00:00 2001 From: hektor Date: Sun, 26 Apr 2026 19:00:49 +0200 Subject: [PATCH] feat(hydra): add hydra-repl filetype integration --- dots/.config/nvim/after/plugin/hydra.lua | 35 ++++++++++++++++++++++++ dots/.config/nvim/lua/ftdetect.lua | 1 + 2 files changed, 36 insertions(+) create mode 100644 dots/.config/nvim/after/plugin/hydra.lua diff --git a/dots/.config/nvim/after/plugin/hydra.lua b/dots/.config/nvim/after/plugin/hydra.lua new file mode 100644 index 00000000..0d57352a --- /dev/null +++ b/dots/.config/nvim/after/plugin/hydra.lua @@ -0,0 +1,35 @@ +local hydra_repl = "hydra-repl" + +if not vim.fn.executable(hydra_repl) then + return +end + +local function send(lines) + vim.system({ hydra_repl, table.concat(lines, "\n") }) +end + +local function get_paragraph(buf) + local start_ = vim.fn.search("^$", "bnW") + local end_ = vim.fn.search("^$", "nW") - 1 + if end_ < vim.api.nvim_win_get_cursor(0)[1] then + end_ = vim.api.nvim_buf_line_count(buf) + end + return vim.api.nvim_buf_get_lines(buf, start_, end_, false) +end + +local function get_selection(buf) + return vim.api.nvim_buf_get_lines(buf, vim.fn.line("'<") - 1, vim.fn.line("'>"), false) +end + +vim.api.nvim_create_autocmd("FileType", { + pattern = "javascript", + callback = function(e) + if vim.fn.fnamemodify(vim.api.nvim_buf_get_name(e.buf), ":e") ~= "hydra" then + return + end + + local buf = e.buf + vim.keymap.set("n", "", function() send(get_paragraph(buf)) end, { buffer = buf, desc = "hydra: send block" }) + vim.keymap.set("v", "", function() send(get_selection(buf)) end, { buffer = buf, desc = "hydra: send selection" }) + end, +}) diff --git a/dots/.config/nvim/lua/ftdetect.lua b/dots/.config/nvim/lua/ftdetect.lua index 28856c51..3ba50bcd 100644 --- a/dots/.config/nvim/lua/ftdetect.lua +++ b/dots/.config/nvim/lua/ftdetect.lua @@ -9,5 +9,6 @@ vim.filetype.add({ ["%.env.*"] = "dotenv", ["%.pl$"] = "prolog", [".*.containerfile.*"] = "dockerfile", + ["%.hydra$"] = "javascript", }, })