diff --git a/lua/jjannotate.lua b/lua/jjannotate.lua index e5905db..156ba75 100644 --- a/lua/jjannotate.lua +++ b/lua/jjannotate.lua @@ -53,16 +53,6 @@ local states = {} ---@return integer local function cursor_row(win) return vim.api.nvim_win_get_cursor(win or 0)[1] end ----@param path string ----@return { win: integer, buf: integer} | nil -local function find_visible_buf_with_path(path) - local target = vim.fn.fnamemodify(path, ":p") - for _, win in ipairs(vim.api.nvim_list_wins()) do - local buf = vim.api.nvim_win_get_buf(win) - if vim.api.nvim_buf_get_name(buf) == target then return { win = win, buf = buf } end - end -end - ---@param win integer ---@param longest_line integer local function win_set_width(win, longest_line) @@ -174,14 +164,12 @@ end ---@param state jjannotate.State local function setup_autocmds(state) - if state.original then - vim.api.nvim_create_autocmd({ "BufWritePost", "FileChangedShellPost" }, { - desc = "Update jjannotate on file change", - group = augroup, - buffer = state.original.buf, - callback = function() update(state) end, - }) - end + vim.api.nvim_create_autocmd({ "BufWritePost", "FileChangedShellPost" }, { + desc = "Update jjannotate on file change", + group = augroup, + buffer = state.original.buf, + callback = function() update(state) end, + }) if state.opts.view.highlight_lines then local callback = vim.schedule_wrap(function() highlight_lines(state) end) @@ -193,14 +181,12 @@ local function setup_autocmds(state) callback = callback, }) - if state.original then - vim.api.nvim_create_autocmd("CursorMoved", { - desc = "Highlight lines in original buffer", - group = augroup, - buffer = state.original.buf, - callback = callback, - }) - end + vim.api.nvim_create_autocmd("CursorMoved", { + desc = "Highlight lines in original buffer", + group = augroup, + buffer = state.original.buf, + callback = callback, + }) end vim.api.nvim_create_autocmd({ "BufHidden", "BufUnload" }, { @@ -212,16 +198,14 @@ local function setup_autocmds(state) vim.api.nvim_clear_autocmds({ group = augroup, buffer = state.buf }) vim.api.nvim_buf_clear_namespace(state.buf, ns_hl, 0, -1) - if state.original then - if vim.api.nvim_buf_is_valid(state.original.buf) then - vim.api.nvim_clear_autocmds({ group = augroup, buffer = state.original.buf }) - vim.api.nvim_buf_clear_namespace(state.original.buf, ns_hl, 0, -1) - end + if vim.api.nvim_buf_is_valid(state.original.buf) then + vim.api.nvim_clear_autocmds({ group = augroup, buffer = state.original.buf }) + vim.api.nvim_buf_clear_namespace(state.original.buf, ns_hl, 0, -1) + end - if vim.api.nvim_win_is_valid(state.original.win) then - for opt, value in pairs(state.original_opts) do - vim.api.nvim_set_option_value(opt, value, { win = state.original.win }) - end + if vim.api.nvim_win_is_valid(state.original.win) then + for opt, value in pairs(state.original_opts) do + vim.api.nvim_set_option_value(opt, value, { win = state.original.win }) end end @@ -264,12 +248,17 @@ end ---@param opts jjannotate.Opts ---@return jjannotate.State local function open(path, result, opts) + local buf = vim.api.nvim_create_buf(false, true) + ---@type jjannotate.State local state = { path = path, - win = nil, - buf = vim.api.nvim_create_buf(false, true), - original = nil, + buf = buf, + win = vim.api.nvim_open_win(buf, false, { split = "left" }), + original = { + win = vim.api.nvim_get_current_win(), + buf = vim.api.nvim_get_current_buf(), + }, original_opts = {}, result = result, opts = opts, @@ -281,33 +270,27 @@ local function open(path, result, opts) vim.api.nvim_set_option_value("bufhidden", "wipe", { buf = state.buf }) vim.api.nvim_set_option_value("swapfile", false, { buf = state.buf }) - local longest_line = render_lines(state) - - state.original = find_visible_buf_with_path(path) - local row = cursor_row(state.original.win) - - state.win = vim.api.nvim_open_win(state.buf, true, { split = "left" }) vim.api.nvim_set_option_value("list", false, { win = state.win }) vim.api.nvim_set_option_value("spell", false, { win = state.win }) vim.api.nvim_set_option_value("signcolumn", "no", { win = state.win }) vim.api.nvim_set_option_value("foldcolumn", "0", { win = state.win }) - vim.api.nvim_set_option_value("number", true, { win = state.win }) - vim.api.nvim_set_option_value("relativenumber", true, { win = state.win }) + vim.api.nvim_set_option_value("number", false, { win = state.win }) + vim.api.nvim_set_option_value("relativenumber", false, { win = state.win }) vim.api.nvim_set_option_value("sidescrolloff", 0, { win = state.win }) vim.api.nvim_set_option_value("winfixwidth", true, { win = state.win }) + + local longest_line = render_lines(state) win_set_width(state.win, longest_line) - if state.original then vim.api.nvim_win_set_cursor(state.win, { row, 0 }) end + vim.api.nvim_win_set_cursor(state.win, { cursor_row(state.original.win), 0 }) setup_autocmds(state) setup_keymaps(state) - if state.original then - for opt, value in pairs(enabled_opts) do - state.original_opts[opt] = vim.api.nvim_get_option_value(opt, { win = state.original.win }) - vim.api.nvim_set_option_value(opt, value, { win = state.original.win }) - vim.api.nvim_set_option_value(opt, value, { win = state.win }) - end + for opt, value in pairs(enabled_opts) do + state.original_opts[opt] = vim.api.nvim_get_option_value(opt, { win = state.original.win }) + vim.api.nvim_set_option_value(opt, value, { win = state.original.win }) + vim.api.nvim_set_option_value(opt, value, { win = state.win }) end vim.api.nvim_win_call(state.original.win, function() vim.cmd.syncbind() end) @@ -329,9 +312,8 @@ end local M = {} ----@param path? string -function M.open(path) - path = path or vim.fn.expand("%") +function M.open() + local path = vim.fn.expand("%") local state = states[path] if state then @@ -381,10 +363,9 @@ function M.close(path) return closed > 0 end ----@param path? string -function M.toggle(path) - path = path or vim.b.jjannotate_path or vim.fn.expand("%") - if not M.close(path) then M.open(path) end +function M.toggle() + local path = vim.b.jjannotate_path or vim.fn.expand("%") + if not M.close(path) then M.open() end end return M