feat: show shortcut key hint (#193)
This commit is contained in:
parent
0e07128b56
commit
9ac9f827ba
@ -11,9 +11,12 @@ local M = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
M.input_ns = api.nvim_create_namespace("avante_input")
|
M.input_ns = api.nvim_create_namespace("avante_input")
|
||||||
|
M.hint_ns = api.nvim_create_namespace("avante_hint")
|
||||||
|
|
||||||
M.setup = function()
|
M.setup = function()
|
||||||
local normal = api.nvim_get_hl(0, { name = "Normal" })
|
local normal = api.nvim_get_hl(0, { name = "Normal" })
|
||||||
|
local normal_float = api.nvim_get_hl(0, { name = "NormalFloat" })
|
||||||
|
|
||||||
api.nvim_set_hl(0, M.REVERSED_NORMAL, { fg = normal.bg })
|
api.nvim_set_hl(0, M.REVERSED_NORMAL, { fg = normal.bg })
|
||||||
api.nvim_set_hl(0, M.TITLE, { fg = "#1e222a", bg = "#98c379" })
|
api.nvim_set_hl(0, M.TITLE, { fg = "#1e222a", bg = "#98c379" })
|
||||||
api.nvim_set_hl(0, M.REVERSED_TITLE, { fg = "#98c379" })
|
api.nvim_set_hl(0, M.REVERSED_TITLE, { fg = "#98c379" })
|
||||||
@ -22,7 +25,8 @@ M.setup = function()
|
|||||||
api.nvim_set_hl(0, M.THRIDTITLE, { fg = "#ABB2BF", bg = "#353B45" })
|
api.nvim_set_hl(0, M.THRIDTITLE, { fg = "#ABB2BF", bg = "#353B45" })
|
||||||
api.nvim_set_hl(0, M.REVERSED_THRIDTITLE, { fg = "#353B45" })
|
api.nvim_set_hl(0, M.REVERSED_THRIDTITLE, { fg = "#353B45" })
|
||||||
|
|
||||||
local normal_float = api.nvim_get_hl(0, { name = "NormalFloat" })
|
api.nvim_set_hl(M.hint_ns, "NormalFloat", { fg = normal_float.fg, bg = normal_float.bg })
|
||||||
|
|
||||||
api.nvim_set_hl(M.input_ns, "NormalFloat", { fg = normal_float.fg, bg = normal_float.bg })
|
api.nvim_set_hl(M.input_ns, "NormalFloat", { fg = normal_float.fg, bg = normal_float.bg })
|
||||||
api.nvim_set_hl(M.input_ns, "FloatBorder", { fg = normal.fg, bg = normal.bg })
|
api.nvim_set_hl(M.input_ns, "FloatBorder", { fg = normal.fg, bg = normal.bg })
|
||||||
end
|
end
|
||||||
|
@ -1344,6 +1344,93 @@ function Sidebar:create_input()
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local hint_window = nil
|
||||||
|
|
||||||
|
-- Close the floating window
|
||||||
|
local function close_hint()
|
||||||
|
if hint_window and api.nvim_win_is_valid(hint_window) then
|
||||||
|
api.nvim_win_close(hint_window, true)
|
||||||
|
hint_window = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Create a floating window as a hint
|
||||||
|
local function show_hint()
|
||||||
|
close_hint() -- Close the existing hint window
|
||||||
|
|
||||||
|
local hint_text = "Press <C-s> to submit"
|
||||||
|
if vim.fn.mode() ~= "i" then
|
||||||
|
hint_text = "Press <CR> to submit"
|
||||||
|
end
|
||||||
|
|
||||||
|
local buf = api.nvim_create_buf(false, true)
|
||||||
|
api.nvim_buf_set_lines(buf, 0, -1, false, { hint_text })
|
||||||
|
|
||||||
|
-- Get the current window size
|
||||||
|
local win_width = api.nvim_win_get_width(self.input.winid)
|
||||||
|
local width = #hint_text + 2
|
||||||
|
|
||||||
|
-- Set the floating window options
|
||||||
|
local opts = {
|
||||||
|
relative = "win",
|
||||||
|
win = self.input.winid,
|
||||||
|
width = width,
|
||||||
|
height = 1,
|
||||||
|
row = -1,
|
||||||
|
col = math.max(win_width - width, 0), -- Display in the top right corner
|
||||||
|
style = "minimal",
|
||||||
|
border = "none",
|
||||||
|
focusable = false,
|
||||||
|
zindex = 100,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Create the floating window
|
||||||
|
hint_window = api.nvim_open_win(buf, false, opts)
|
||||||
|
|
||||||
|
api.nvim_win_set_hl_ns(hint_window, Highlights.hint_ns)
|
||||||
|
end
|
||||||
|
|
||||||
|
show_hint()
|
||||||
|
|
||||||
|
self.input:on_unmount(function()
|
||||||
|
close_hint()
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Show hint in insert mode
|
||||||
|
api.nvim_create_autocmd("ModeChanged", {
|
||||||
|
group = self.augroup,
|
||||||
|
pattern = "*:i",
|
||||||
|
callback = function()
|
||||||
|
local cur_buf = api.nvim_get_current_buf()
|
||||||
|
if self.input and cur_buf == self.input.bufnr then
|
||||||
|
show_hint()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Close hint when exiting insert mode
|
||||||
|
api.nvim_create_autocmd("ModeChanged", {
|
||||||
|
group = self.augroup,
|
||||||
|
pattern = "i:*",
|
||||||
|
callback = function()
|
||||||
|
local cur_buf = api.nvim_get_current_buf()
|
||||||
|
if self.input and cur_buf == self.input.bufnr then
|
||||||
|
show_hint()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
api.nvim_create_autocmd("WinEnter", {
|
||||||
|
callback = function()
|
||||||
|
local cur_win = api.nvim_get_current_win()
|
||||||
|
if self.input and cur_win == self.input.winid then
|
||||||
|
show_hint()
|
||||||
|
else
|
||||||
|
close_hint()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
self:refresh_winids()
|
self:refresh_winids()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user