113 lines
3.4 KiB
Lua
113 lines
3.4 KiB
Lua
local buffers_without_inlay_hints = {}
|
|
local saved_hlsearch = false
|
|
|
|
local function set_inlay_hints_active(buffers, enable)
|
|
for _, bufnr in pairs(buffers) do
|
|
vim.lsp.inlay_hint.enable(enable, { burfnr = bufnr })
|
|
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 = bufnr }) then
|
|
table.insert(buffers, bufnr)
|
|
end
|
|
end
|
|
|
|
return buffers
|
|
end
|
|
|
|
return {
|
|
"ggandor/leap.nvim",
|
|
dependencies = {
|
|
{ "tpope/vim-repeat", lazy = true },
|
|
},
|
|
event = "VeryLazy",
|
|
lazy = true,
|
|
config = function()
|
|
local leap = require("leap")
|
|
|
|
-- Disable auto jumping to the first match
|
|
-- Autojumping is not intuitive when running bi-directional leaps
|
|
leap.opts.safe_labels = {}
|
|
-- Adding more labels since we're not using autojumping. These are sorted by priority
|
|
-- focusing on the home row and the strongest fingers for Colemak-DH
|
|
leap.opts.labels = "tsragneiomdch,pfluxzv./kwqby;j1234567890{}()[]<>J!@#$%^&*TSRAGNEIOMDCHPFLUXZV?KWQBY:"
|
|
|
|
local autocmds = {
|
|
{
|
|
event_name = "LeapEnter",
|
|
cb = function()
|
|
local open_buffers = get_open_buffers_with_inlay_hints()
|
|
set_inlay_hints_active(open_buffers, false)
|
|
buffers_without_inlay_hints = open_buffers
|
|
saved_hlsearch = vim.o.hlsearch
|
|
vim.o.hlsearch = false
|
|
end
|
|
},
|
|
{
|
|
event_name = "LeapLeave",
|
|
cb = function()
|
|
set_inlay_hints_active(buffers_without_inlay_hints, true)
|
|
vim.o.hlsearch = saved_hlsearch
|
|
end
|
|
},
|
|
}
|
|
|
|
local utils = require("utils")
|
|
local leap_augroup_name = "LeapEvents"
|
|
vim.api.nvim_create_augroup(leap_augroup_name, { clear = true })
|
|
for _, cmd in ipairs(autocmds) do
|
|
utils.create_user_event_cb(cmd.event_name, cmd.cb, leap_augroup_name)
|
|
end
|
|
|
|
local leap_user = require("leap.user")
|
|
local leap_remote = require("leap.remote")
|
|
local function leap_across_windows()
|
|
leap.leap({
|
|
target_windows = leap_user.get_focusable_windows()
|
|
})
|
|
end
|
|
|
|
local function leap_in_current_buffer()
|
|
leap.leap({
|
|
target_windows = { vim.api.nvim_get_current_win() }
|
|
})
|
|
end
|
|
|
|
local function leap_remote_action()
|
|
leap_remote.action()
|
|
end
|
|
|
|
utils.add_keymaps({
|
|
n = {
|
|
["l"] = {
|
|
cmd = function()
|
|
leap_across_windows()
|
|
end,
|
|
},
|
|
["gl"] = {
|
|
cmd = function()
|
|
leap_remote_action()
|
|
end
|
|
}
|
|
},
|
|
v = {
|
|
["l"] = {
|
|
cmd = function()
|
|
leap_in_current_buffer()
|
|
end,
|
|
}
|
|
},
|
|
o = {
|
|
["l"] = {
|
|
cmd = function()
|
|
leap_in_current_buffer()
|
|
end,
|
|
}
|
|
}
|
|
})
|
|
end,
|
|
}
|