diff options
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/mason-core/ui/display.lua | 14 | ||||
| -rw-r--r-- | lua/mason/api/command.lua | 6 | ||||
| -rw-r--r-- | lua/mason/ui/components/main/package_list.lua | 5 | ||||
| -rw-r--r-- | lua/mason/ui/init.lua | 7 | ||||
| -rw-r--r-- | lua/mason/ui/instance.lua | 3 |
5 files changed, 31 insertions, 4 deletions
diff --git a/lua/mason-core/ui/display.lua b/lua/mason-core/ui/display.lua index 7a61d766..2bae3d81 100644 --- a/lua/mason-core/ui/display.lua +++ b/lua/mason-core/ui/display.lua @@ -195,7 +195,7 @@ end ---@param filetype string function M.new_view_only_win(name, filetype) local namespace = vim.api.nvim_create_namespace(("installer_%s"):format(name)) - local bufnr, renderer, mutate_state, get_state, unsubscribe, win_id, window_mgmt_augroup, autoclose_augroup, registered_keymaps, registered_keybinds, registered_effect_handlers + local bufnr, renderer, mutate_state, get_state, unsubscribe, win_id, window_mgmt_augroup, autoclose_augroup, registered_keymaps, registered_keybinds, registered_effect_handlers, sticky_cursor local has_initiated = false ---@type WindowOpts local window_opts = {} @@ -261,7 +261,6 @@ function M.new_view_only_win(name, filetype) win_width = win_width, } local cursor_pos_pre_render = vim.api.nvim_win_get_cursor(win_id) - local sticky_cursor if output then sticky_cursor = output.sticky_cursors.line_map[cursor_pos_pre_render[1]] end @@ -501,6 +500,17 @@ function M.new_view_only_win(name, filetype) assert(win_id ~= nil, "Window has not been opened, cannot get cursor.") return vim.api.nvim_win_get_cursor(win_id) end, + ---@param tag any + set_sticky_cursor = function(tag) + if output then + local new_sticky_cursor_line = output.sticky_cursors.id_map[tag] + if new_sticky_cursor_line then + sticky_cursor = tag + local cursor = vim.api.nvim_win_get_cursor(win_id) + vim.api.nvim_win_set_cursor(win_id, { new_sticky_cursor_line, cursor[2] }) + end + end + end, } end diff --git a/lua/mason/api/command.lua b/lua/mason/api/command.lua index 6e20a449..608740e9 100644 --- a/lua/mason/api/command.lua +++ b/lua/mason/api/command.lua @@ -102,7 +102,11 @@ local function MasonInstall(package_specifiers) if is_headless then join_handles(handles) else - require("mason.ui").open() + local ui = require "mason.ui" + ui.open() + vim.schedule(function() + ui.set_sticky_cursor "installing-section" + end) end end diff --git a/lua/mason/ui/components/main/package_list.lua b/lua/mason/ui/components/main/package_list.lua index 578f9921..1502629a 100644 --- a/lua/mason/ui/components/main/package_list.lua +++ b/lua/mason/ui/components/main/package_list.lua @@ -190,7 +190,10 @@ local function Installing(state) local packages = state.packages.installing return PackageListContainer { state = state, - heading = Ui.HlTextNode(p.heading "Installing"), + heading = Ui.Node { + Ui.HlTextNode(p.heading "Installing"), + Ui.StickyCursor { id = "installing-section" }, + }, hide_when_empty = true, packages = packages, ---@param pkg Package diff --git a/lua/mason/ui/init.lua b/lua/mason/ui/init.lua index 2181a555..5b9ef197 100644 --- a/lua/mason/ui/init.lua +++ b/lua/mason/ui/init.lua @@ -8,9 +8,16 @@ function M.open() } end +---@param view string function M.set_view(view) local api = require "mason.ui.instance" api.set_view(view) end +---@param tag any +function M.set_sticky_cursor(tag) + local api = require "mason.ui.instance" + api.set_sticky_cursor(tag) +end + return M diff --git a/lua/mason/ui/instance.lua b/lua/mason/ui/instance.lua index 185f9fa6..9bfe0669 100644 --- a/lua/mason/ui/instance.lua +++ b/lua/mason/ui/instance.lua @@ -609,4 +609,7 @@ return { set_view = function(view) set_view { payload = view } end, + set_sticky_cursor = function(tag) + window.set_sticky_cursor(tag) + end, } |
