Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions lua/neominimap/window/util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ local default_winopt = {
signcolumn = "auto",
number = false,
relativenumber = false,
scrolloff = 99999, -- To center minimap
scrolloff = 0,
sidescrolloff = 0,
winblend = 0,
cursorline = true,
Expand All @@ -79,6 +79,23 @@ M.set_winopt = function(opt, winid)
config.winopt(opt, winid)
end

---@param winid integer
---@param row integer
local function set_line(winid, row)
local win_h = M.win_get_true_height(winid)
local bufnr = api.nvim_win_get_buf(winid)
local line_cnt = api.nvim_buf_line_count(bufnr)
local topline = math.floor(row - (row * win_h) / line_cnt)
row = math.max(1, math.min(row, line_cnt))
topline = math.max(1, math.min(topline, line_cnt))
return function()
local view = vim.fn.winsaveview()
view.topline = topline
view.lnum = row - 1
vim.fn.winrestview(view)
end
end

---@param swinid integer
---@param mwinid integer
M.sync_to_minimap = function(swinid, mwinid)
Expand Down Expand Up @@ -139,7 +156,7 @@ M.sync_to_source = function(swinid, mwinid)
if row <= line_cnt then
local util = require("neominimap.util")
vim.schedule(function()
local ok = util.noautocmd(pcall)(vim.api.nvim_win_set_cursor, mwinid, { row, 0 })
local ok = util.noautocmd(pcall)(api.nvim_win_call, mwinid, set_line(mwinid, row))
if not ok then
logger.log.error("Failed to set cursor")
end
Expand Down
Loading