aeeefcef98
Previously even if config error was resolved in following setup call notification for LualineNotice was displayed and when user opened LualineNotice it'll be empty leaving users confused. Now we'll wait for 2s before sending notification for LualineNotice so if successive calls to setup fixed the config error the notification will not be shown.
89 lines
2.5 KiB
Lua
89 lines
2.5 KiB
Lua
-- Copyright (c) 2020-2021 shadmansaleh
|
|
-- MIT license, see LICENSE for more details.
|
|
|
|
-- To provide notices for user
|
|
local M = {}
|
|
local notices = {}
|
|
local persistent_notices = {}
|
|
|
|
---append new notice
|
|
---@param notice string|table table is a list of strings
|
|
function M.add_notice(notice)
|
|
if type(notice) == 'string' then
|
|
notice = vim.split(notice, '\n')
|
|
end
|
|
table.insert(notices, notice)
|
|
end
|
|
|
|
---appends persistent notice. These don't get cleared on setup
|
|
---@param notice string|table table is a list of strings
|
|
function M.add_persistent_notice(notice)
|
|
if type(notice) == 'string' then
|
|
notice = vim.split(notice, '\n')
|
|
end
|
|
if not vim.tbl_contains(persistent_notices, notice) then
|
|
table.insert(persistent_notices, notice)
|
|
end
|
|
end
|
|
|
|
---show setup :LuaLineNotices and show notification about error when there
|
|
---are notices available
|
|
local notify_done = false
|
|
function M.notice_message_startup()
|
|
notify_done = false
|
|
vim.defer_fn(function()
|
|
if notify_done then
|
|
return
|
|
end
|
|
if #notices > 0 or #persistent_notices > 0 then
|
|
vim.cmd('command! -nargs=0 LualineNotices lua require"lualine.utils.notices".show_notices()')
|
|
vim.notify(
|
|
'lualine: There are some issues with your config. Run :LualineNotices for details',
|
|
vim.log.levels.WARN,
|
|
{}
|
|
)
|
|
end
|
|
notify_done = true
|
|
end, 2000)
|
|
end
|
|
|
|
---create notice view
|
|
function M.show_notices()
|
|
vim.cmd('silent! keepalt split')
|
|
|
|
local winid = vim.api.nvim_get_current_win()
|
|
local bufnr = vim.api.nvim_create_buf(false, true)
|
|
vim.api.nvim_win_set_buf(winid, bufnr)
|
|
|
|
vim.wo[winid].winfixheight = true
|
|
vim.wo[winid].winfixwidth = true
|
|
vim.wo[winid].number = false
|
|
vim.wo[winid].foldcolumn = '0'
|
|
vim.wo[winid].relativenumber = false
|
|
vim.wo[winid].signcolumn = 'no'
|
|
vim.bo[bufnr].filetype = 'markdown'
|
|
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'q', '<Cmd>bd<CR>', { noremap = true, silent = true })
|
|
|
|
local ok, _ = pcall(vim.api.nvim_buf_set_name, 0, 'Lualine Notices')
|
|
if not ok then
|
|
vim.notify('Lualine Notices is already open in another buffer', vim.log.levels.ERROR, {})
|
|
vim.cmd('normal q')
|
|
return
|
|
end
|
|
local notice = vim.tbl_flatten(persistent_notices)
|
|
notice = vim.list_extend(notice, vim.tbl_flatten(notices))
|
|
vim.fn.appendbufline(bufnr, 0, notice)
|
|
|
|
vim.fn.deletebufline(bufnr, #notice, vim.fn.line('$'))
|
|
vim.api.nvim_win_set_cursor(winid, { 1, 0 })
|
|
vim.bo[bufnr].modified = false
|
|
vim.bo[bufnr].modifiable = false
|
|
end
|
|
|
|
function M.clear_notices()
|
|
notices = {}
|
|
end
|
|
|
|
return M
|