diff --git a/nvim/lua/plugs/leap.lua b/nvim/lua/plugs/leap.lua index 41bdd1c..841b420 100644 --- a/nvim/lua/plugs/leap.lua +++ b/nvim/lua/plugs/leap.lua @@ -1,3 +1,31 @@ +local buffers_without_inlay_hints = {} +local function set_inlay_hints_active(buffers, enable) + for i, bufnr in pairs(buffers) do + vim.lsp.inlay_hint.enable(bufnr, enable) + end +end + +local function get_open_buffers_with_inlay_hints() + local buffers = {} + for _, win in ipairs(vim.api.nvim_list_wins()) do + local bufnr = vim.api.nvim_win_get_buf(win) + if vim.lsp.inlay_hint.is_enabled(bufnr) then + table.insert(buffers, bufnr) + end + end + + return buffers +end + +local function add_leap_autocmd(pattern, callback) + vim.api.nvim_create_autocmd("User", { + pattern = pattern, + callback = function() + callback() + end, + }) +end + return { "ggandor/leap.nvim", dependencies = { @@ -7,27 +35,26 @@ return { local leap = require("leap") leap.opts.safe_labels = {} - -- Hide the (real) cursor when leaping, and restore it afterwards. - vim.api.nvim_create_autocmd( - "User", + local autocmds = { { pattern = "LeapEnter", - callback = function() - vim.cmd.hi("Cursor", "blend=100") - vim.opt.guicursor:append { "a:Cursor/lCursor" } - end, - } - ) - vim.api.nvim_create_autocmd( - "User", + cb = function() + local open_buffers = get_open_buffers_with_inlay_hints() + set_inlay_hints_active(open_buffers, false) + buffers_without_inlay_hints = open_buffers + end + }, { pattern = "LeapLeave", - callback = function() - vim.cmd.hi("Cursor", "blend=0") - vim.opt.guicursor:remove { "a:Cursor/lCursor" } - end, - } - ) + cb = function() + set_inlay_hints_active(buffers_without_inlay_hints, true) + end + }, + } + + for _, cmd in ipairs(autocmds) do + add_leap_autocmd(cmd.pattern, cmd.cb) + end require("utils").add_keymaps({ n = {