shadmansaleh aeeefcef98 fix: don't show notification for empty LualineNotice
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.
2022-07-28 13:07:44 +06:00

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