1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-02 23:50:04 +08:00

perf(guide): use timer to display win

This commit is contained in:
Eric Wong 2024-06-03 22:11:58 +08:00
parent ee5cc484d1
commit bdc177e320
2 changed files with 71 additions and 36 deletions

View File

@ -1,43 +1,55 @@
local M = {} local M = {}
function M.support_float() function M.support_float()
return vim.fn.exists('*nvim_open_win') == 1 return vim.fn.exists('*nvim_open_win') == 1
end end
function M.opened() function M.opened()
return vim.fn.win_id2tabwin(M.__winid)[1] == vim.fn.tabpagenr() return vim.fn.win_id2tabwin(M.__winid)[1] == vim.fn.tabpagenr()
end end
function M.open_float(sl) function M.show()
if M.__bufnr == nil or vim.fn.bufexists(M.__bufnr) == 0 then if vim.api.nvim_win_is_valid(M.__winid) then
M.__bufnr = vim.api.nvim_create_buf(false, true) vim.api.nvim_win_set_config(M.__winid, { hide = false })
end end
if M.__winid == nil or not M.opened() then end
M.__winid = vim.api.nvim_open_win(M.__bufnr, false, {
relative = 'editor', function M.open_float(sl, ...)
width = vim.o.columns, local hide = select(1, ...)
height = 1, if hide == true or hide == false then
-- highlight = 'SpaceVim_statusline_a_bold', else
row = vim.o.lines - 2, hide = false
col = 0 end
}) if M.__bufnr == nil or vim.fn.bufexists(M.__bufnr) == 0 then
end M.__bufnr = vim.api.nvim_create_buf(false, true)
vim.fn.setwinvar(M.__winid, '&winhighlight', 'Normal:SpaceVim_statusline_a_bold') end
vim.fn.setbufvar(M.__bufnr, '&relativenumber', 0) if M.__winid == nil or not M.opened() then
vim.fn.setbufvar(M.__bufnr, '&number', 0) M.__winid = vim.api.nvim_open_win(M.__bufnr, false, {
vim.fn.setbufvar(M.__bufnr, '&bufhidden', 'wipe') relative = 'editor',
vim.fn.setbufvar(M.__bufnr, '&cursorline', 0) width = vim.o.columns,
vim.fn.setbufvar(M.__bufnr, '&modifiable', 1) height = 1,
vim.fn.setwinvar(vim.fn.win_id2win(M.__winid), '&cursorline', 0) -- highlight = 'SpaceVim_statusline_a_bold',
vim.api.nvim_buf_set_virtual_text( M.__bufnr, -1, 0, sl, {}) row = vim.o.lines - 2,
vim.fn.setbufvar(M.__bufnr, '&modifiable', 0) col = 0,
return M.__winid hide = hide,
})
end
vim.fn.setwinvar(M.__winid, '&winhighlight', 'Normal:SpaceVim_statusline_a_bold')
vim.fn.setbufvar(M.__bufnr, '&relativenumber', 0)
vim.fn.setbufvar(M.__bufnr, '&number', 0)
vim.fn.setbufvar(M.__bufnr, '&bufhidden', 'wipe')
vim.fn.setbufvar(M.__bufnr, '&cursorline', 0)
vim.fn.setbufvar(M.__bufnr, '&modifiable', 1)
vim.fn.setwinvar(vim.fn.win_id2win(M.__winid), '&cursorline', 0)
vim.api.nvim_buf_set_virtual_text(M.__bufnr, -1, 0, sl, {})
vim.fn.setbufvar(M.__bufnr, '&modifiable', 0)
return M.__winid
end end
function M.close_float() function M.close_float()
if M.__winid ~= nil then if M.__winid ~= nil then
vim.api.nvim_win_close(M.__winid, true) vim.api.nvim_win_close(M.__winid, true)
end end
end end
return M return M

View File

@ -469,7 +469,7 @@ end
local cursor_highlight_info local cursor_highlight_info
local function highlight_cursor() local function highlight_cursor()
cursor_highlight_info = hl.group2dict('Cursor') cursor_highlight_info = hl.group2dict('Cursor')
local hlinfo = { local hlinfo = {
name = 'SpaceVimGuideCursor', name = 'SpaceVimGuideCursor',
guibg = cursor_highlight_info.guibg, guibg = cursor_highlight_info.guibg,
@ -545,7 +545,7 @@ local function updateStatusline()
{ sep .. ' ', 'LeaderGuiderSep2' }, { sep .. ' ', 'LeaderGuiderSep2' },
{ guide_help_msg(false), 'LeaderGuiderFill' }, { guide_help_msg(false), 'LeaderGuiderFill' },
{ string.rep(' ', 999), 'LeaderGuiderFill' }, { string.rep(' ', 999), 'LeaderGuiderFill' },
}) }, true)
end end
local function setlocalopt(buf, win, opts) local function setlocalopt(buf, win, opts)
@ -567,12 +567,13 @@ local function winopen()
if not vim.api.nvim_buf_is_valid(bufnr) then if not vim.api.nvim_buf_is_valid(bufnr) then
bufnr = buffer.create_buf(false, true) bufnr = buffer.create_buf(false, true)
end end
winid = vim.api.nvim_open_win(bufnr, true, { winid = vim.api.nvim_open_win(bufnr, false, {
relative = 'editor', relative = 'editor',
width = vim.o.columns, width = vim.o.columns,
height = 12, height = 12,
row = vim.o.lines - 14, row = vim.o.lines - 14,
col = 0, col = 0,
hide = true,
}) })
guide_help_mode = false guide_help_mode = false
setlocalopt(bufnr, winid, { setlocalopt(bufnr, winid, {
@ -653,8 +654,15 @@ local function handle_input(input)
end end
local function page_down() local function page_down()
-- vim.api.nvim_feedkeys(Key.t('<C-c>'), 'n', false) if vim.api.nvim_win_is_valid(winid) then
vim.api.nvim_feedkeys(Key.t('<C-d>'), 'x', false) local cursor = vim.api.nvim_win_get_cursor(winid)[1]
local height = vim.api.nvim_win_get_config(winid).height
if cursor + height < vim.api.nvim_buf_line_count(bufnr) then
vim.api.nvim_win_set_cursor(winid, {cursor + height, 1})
else
vim.api.nvim_win_set_cursor(winid, {vim.api.nvim_buf_line_count(bufnr), 1})
end
end
vim.cmd('redraw!') vim.cmd('redraw!')
wait_for_input() wait_for_input()
end end
@ -670,8 +678,15 @@ local function page_undo()
end end
local function page_up() local function page_up()
-- vim.api.nvim_feedkeys(Key.t('<C-c>'), 'n', false) if vim.api.nvim_win_is_valid(winid) then
vim.api.nvim_feedkeys(Key.t('<C-u>'), 'x', false) local cursor = vim.api.nvim_win_get_cursor(winid)[1]
local height = vim.api.nvim_win_get_config(winid).height
if cursor - height > 1 then
vim.api.nvim_win_set_cursor(winid, {cursor - height, 1})
else
vim.api.nvim_win_set_cursor(winid, {1, 1})
end
end
vim.cmd('redraw!') vim.cmd('redraw!')
wait_for_input() wait_for_input()
end end
@ -704,9 +719,17 @@ local function warn_not_defined(mpt)
}, false, {}) }, false, {})
end end
local function show_win(_)
if vim.api.nvim_win_is_valid(winid) then
vim.api.nvim_win_set_config(winid, { hide = false })
end
SL.show()
end
wait_for_input = function() wait_for_input = function()
log.debug('wait for input:') log.debug('wait for input:')
local t = Key.t local t = Key.t
vim.fn.timer_start(10, show_win)
local inp = VIM.getchar() local inp = VIM.getchar()
log.debug('inp is:' .. inp) log.debug('inp is:' .. inp)
if inp == t('<Esc>') then if inp == t('<Esc>') then