Skip to content

Commit

Permalink
feat: attach to popup if already open
Browse files Browse the repository at this point in the history
  • Loading branch information
Sebastian Lyng Johansen committed Sep 13, 2022
1 parent 79c55eb commit 5e423c3
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 10 deletions.
17 changes: 15 additions & 2 deletions lua/gitsigns/actions.lua

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 16 additions & 3 deletions lua/gitsigns/popup.lua

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 15 additions & 2 deletions teal/gitsigns/actions.tl
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,10 @@ end
--- Preview the hunk at the cursor position in a floating
--- window.
M.preview_hunk = noautocmd(function()
local diff_popup_var = 'gitsigns_preview_diff'
if popup.try_attach(diff_popup_var) then
return
end
-- Wrap in noautocmd so vim-repeat continues to work
local bufnr = current_buf()
local bcache = cache[bufnr]
Expand All @@ -645,7 +649,9 @@ M.preview_hunk = noautocmd(function()
hunk = gs_hunks.patch_lines(hunk, vim.bo[bufnr].fileformat),
})

popup.create(lines_spec, config.preview_config)
local winid = popup.create(lines_spec, config.preview_config)

api.nvim_win_set_var(winid, diff_popup_var, true)
end)

--- Select the hunk under the cursor.
Expand Down Expand Up @@ -747,6 +753,11 @@ end
--- Attributes: ~
--- {async}
M.blame_line = void(function(opts: BlameOpts)
local blame_popup_var = 'gitsigns_preview_blame'
if popup.try_attach(blame_popup_var) then
return
end

opts = opts or {}

local bufnr = current_buf()
Expand Down Expand Up @@ -786,7 +797,9 @@ M.blame_line = void(function(opts: BlameOpts)

scheduler()

popup.create(lines_format(blame_fmt, info), config.preview_config)
local winid = popup.create(lines_format(blame_fmt, info), config.preview_config)

api.nvim_win_set_var(winid, blame_popup_var, true)
end)

local function update_buf_base(buf: integer, bcache: CacheEntry, base: string)
Expand Down
19 changes: 16 additions & 3 deletions teal/gitsigns/popup.tl
Original file line number Diff line number Diff line change
Expand Up @@ -189,14 +189,27 @@ function popup.create(lines_spec: popup.LinesSpec, opts: {string:any}): integer,
return winnr, bufnr
end

function popup.is_open(): boolean
local function is_open(var: string): boolean, integer
for _, winid in ipairs(api.nvim_list_wins()) do
local exists = pcall(api.nvim_win_get_var, winid, 'gitsigns_preview')
local exists = pcall(api.nvim_win_get_var, winid, var)
if exists then
return true
return true, winid
end
end
return false, -1
end

function popup.try_attach(var: string): boolean
local open, winid = is_open(var)
if open then
api.nvim_set_current_win(winid)
return true
end
return false
end

function popup.is_open(): boolean, integer
return is_open('gitsigns_preview')
end

return popup

0 comments on commit 5e423c3

Please sign in to comment.