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:
parent
ee5cc484d1
commit
bdc177e320
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user