local string_utils = require("codesnap.utils.string") local table_utils = require("codesnap.utils.table") local highlight_module = {} function highlight_module.call_cb_with_parsed_config(cb_name, highlight_start_line_number, highlight_end_line_number) vim.api.nvim_buf_delete(0, {}) vim.schedule(function() local main = require("codesnap") local config = table_utils.merge(main.highlight_mode_config, { highlight_start_line_number = highlight_start_line_number, highlight_end_line_number = highlight_end_line_number, }) main[cb_name](config) end) end function highlight_module.create_highlight_selector_window(cb_name, code) local width = 100 local height = 20 local row = vim.fn.winheight(0) / 2 - height / 2 local col = vim.fn.winwidth(0) / 2 - width / 2 local bufnr = vim.api.nvim_create_buf(false, true) vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, string_utils.split(code, "\n")) local window_id = vim.api.nvim_open_win(bufnr, false, { relative = "editor", width = width, height = height, col = col, row = row, style = "minimal", border = "rounded", title = "Select highlight lines", title_pos = "center", }) vim.api.nvim_buf_set_option(bufnr, "modifiable", false) vim.api.nvim_buf_set_option(bufnr, "filetype", vim.bo.filetype) vim.api.nvim_buf_set_keymap(bufnr, "n", "q", ":q", {}) vim.api.nvim_buf_set_keymap(bufnr, "", "", ":q", {}) vim.api.nvim_buf_set_keymap( bufnr, "v", "", ":lua require('codesnap.highlight').call_cb_with_parsed_config('" .. cb_name .. "', require('codesnap.utils.visual').get_start_line_number(), require('codesnap.utils.visual').get_end_line_number())", { silent = true } ) vim.api.nvim_set_current_win(window_id) end return highlight_module