diff --git a/lua/jjannotate.lua b/lua/jjannotate.lua index 60858aa..e3889c2 100644 --- a/lua/jjannotate.lua +++ b/lua/jjannotate.lua @@ -115,11 +115,7 @@ function M.is_open(path, revset) return w and w:is_open() or false end - for _, w in pairs(cache.wins) do - if w and w:is_open() then return true end - end - - return false + return vim.iter(cache.wins):any(function(_, w) return w and w:is_open() end) end --- Close annotate window diff --git a/lua/jjannotate/window.lua b/lua/jjannotate/window.lua index 1e55eef..a3b4950 100644 --- a/lua/jjannotate/window.lua +++ b/lua/jjannotate/window.lua @@ -142,17 +142,20 @@ end local function find_file(tab, revision) local uri = util.revision_uri("file", revision) local wins = vim.api.nvim_tabpage_list_wins(tab) - for _, win in ipairs(wins) do - local buf = vim.api.nvim_win_get_buf(win) - local name = vim.api.nvim_buf_get_name(buf) + return vim + .iter(wins) + :map(function(win) + local buf = vim.api.nvim_win_get_buf(win) + local name = vim.api.nvim_buf_get_name(buf) - if name == uri then return { buf = buf, win = win } end + if name == uri then return { buf = buf, win = win } end - local info = util.buf_repo_info(buf) - if info and info.repo == revision.repo and info.path == revision.path then - return { buf = buf, win = win } - end - end + local info = util.buf_repo_info(buf) + if info and info.repo == revision.repo and info.path == revision.path then + return { buf = buf, win = win } + end + end) + :find(function(x) return x ~= nil end) end ---@param revision jjannotate.Revision @@ -630,14 +633,12 @@ end ---@param dir "prev" | "next" function Window:_move_change(dir) local row = cursor_row(self.annotate.win) - 1 + local lines = self.result.lines local target --[[@type jjannotate.Line?]] - for _, line in ipairs(self.result.lines) do - if dir == "next" and line.range.start > row then - target = line - break - elseif dir == "prev" and line.range._end < row then - target = line - end + if dir == "next" then + target = vim.iter(lines):find(function(line) return line.range.start > row end) + else + target = vim.iter(lines):filter(function(line) return line.range._end < row end):last() end if target then local line = target.range.start + 1