diff --git a/lua/octo/autocmds.lua b/lua/octo/autocmds.lua index 49e127cd..a0d77eab 100644 --- a/lua/octo/autocmds.lua +++ b/lua/octo/autocmds.lua @@ -21,7 +21,7 @@ function M.setup() group = "octo_autocmds", pattern = { "octo://*" }, callback = function(ev) - require("octo").load_buffer(ev.buf) + require("octo").load_buffer { bufnr = ev.buf } end, }) define({ "BufWriteCmd" }, { diff --git a/lua/octo/commands.lua b/lua/octo/commands.lua index 17952f9e..5ed72c3d 100644 --- a/lua/octo/commands.lua +++ b/lua/octo/commands.lua @@ -104,7 +104,7 @@ function M.setup() picker.search(opts) end, reload = function() - M.reload() + M.reload { verbose = true } end, browser = function() navigation.open_in_browser() @@ -173,10 +173,11 @@ function M.setup() prompt = prompt .. k .. ":" .. v .. " " end opts.prompt = prompt + opts.search_prs = true picker.search(opts) end, reload = function() - M.reload() + M.reload { verbose = true } end, browser = function() navigation.open_in_browser() @@ -1445,8 +1446,8 @@ function M.remove_project_v2_card() end) end -function M.reload(bufnr) - require("octo").load_buffer(bufnr) +function M.reload(opts) + require("octo").load_buffer(opts) end function random_hex_color() diff --git a/lua/octo/init.lua b/lua/octo/init.lua index 4a1344c6..192858e0 100644 --- a/lua/octo/init.lua +++ b/lua/octo/init.lua @@ -64,8 +64,16 @@ function M.save_buffer() buffer:save() end -function M.load_buffer(bufnr) - bufnr = bufnr or vim.api.nvim_get_current_buf() +---@class ReloadOpts +---@field bufnr number +---@field verbose boolean + +--- Load issue/pr/repo buffer +---@param opts ReloadOpts +---@return nil +function M.load_buffer(opts) + local bufnr = opts.bufnr or vim.api.nvim_get_current_buf() + local cursor_pos = vim.api.nvim_win_get_cursor(0) local bufname = vim.fn.bufname(bufnr) local repo, kind, number = string.match(bufname, "octo://(.+)/(.+)/(%d+)") if not repo then @@ -84,6 +92,17 @@ function M.load_buffer(bufnr) M.load(repo, kind, number, function(obj) vim.api.nvim_buf_call(bufnr, function() M.create_buffer(kind, obj, repo, false) + + -- One to the left + local new_cursor_pos = { + cursor_pos[1], + math.max(0, cursor_pos[2] - 1), + } + vim.api.nvim_win_set_cursor(0, new_cursor_pos) + + if opts.verbose then + utils.info(string.format("Loaded %s/%s/%d", repo, kind, number)) + end end) end) end diff --git a/lua/octo/pickers/telescope/provider.lua b/lua/octo/pickers/telescope/provider.lua index e880bc9e..cc6edef8 100644 --- a/lua/octo/pickers/telescope/provider.lua +++ b/lua/octo/pickers/telescope/provider.lua @@ -557,6 +557,10 @@ function M.search(opts) end) map("i", cfg.picker_config.mappings.open_in_browser.lhs, open_in_browser()) map("i", cfg.picker_config.mappings.copy_url.lhs, copy_url()) + if opts.search_prs then + map("i", cfg.picker_config.mappings.checkout_pr.lhs, checkout_pull_request()) + map("i", cfg.picker_config.mappings.merge_pr.lhs, merge_pull_request()) + end return true end, })