local M = {}
local function hl(name, spec)
vim.api.nvim_set_hl(0, name, spec)
end
function M.InitialStatuslineColors()
hl("StatusLine", { bg = "lightgrey", fg = "grey", ctermbg = 8, ctermfg = 0 })
hl("StatusLineNC", { bg = "grey", fg = "grey", ctermbg = 8, ctermfg = 0 })
hl("User1", { bg = "grey", fg = "lightblue", ctermbg = 8, ctermfg = 4 })
hl("User2", { bg = "lightblue", fg = "black", ctermbg = 4, ctermfg = 0 })
hl("User3", { bg = "#e78f00", fg = "lightblue", ctermbg = 11, ctermfg = 4 })
hl("User4", { bg = "#e78f00", fg = "lightyellow", ctermbg = 11, ctermfg = 11 })
hl("User5", { bg = "darkmagenta", fg = "#e78f00", ctermbg = 5, ctermfg = 11 })
hl("User6", { bg = "grey", fg = "#e78f00", ctermbg = 8, ctermfg = 11 })
end
function M.InsertStatuslineColor(insertmode)
if insertmode == "i" then
hl("User1", { bg = "grey", fg = "lightgreen", ctermbg = 8, ctermfg = 10 })
hl("User2", { bg = "lightgreen", fg = "black", ctermbg = 10, ctermfg = 0 })
hl("User3", { bg = "#e78f00", fg = "lightgreen", ctermbg = 11, ctermfg = 10 })
else
hl("User1", { bg = "grey", fg = "red", ctermbg = 8, ctermfg = 1 })
hl("User2", { bg = "red", fg = "black", ctermbg = 1, ctermfg = 0 })
hl("User3", { bg = "#e78f00", fg = "red", ctermbg = 11, ctermfg = 1 })
end
end
function _G.Statusline(mode)
local cEdgeSlant = "%1*"
local cEdgeContent = "%2*"
local cMidSlant = "%3*"
local cMidContent = "%4*"
local cCenterBarSlant
if mode == "active" then
cCenterBarSlant = "%5*"
else
cCenterBarSlant = "%6*"
end
local line = ""
line = line .. "%6*" .. cMidContent .. cMidSlant .. ""
line = line .. cEdgeContent .. " %t%m%r "
line = line .. cMidSlant .. "" .. cMidContent .. cCenterBarSlant .. ""
line = line .. "%="
line = line .. "" .. cMidContent .. cMidSlant .. "" .. cEdgeContent
line = line .. " %c#%l/%L " .. cMidSlant .. "" .. cMidContent .. "%6*%*"
return line
end
-- Autocmds
local grp = vim.api.nvim_create_augroup("statusline", { clear = true })
vim.api.nvim_create_autocmd({ "InsertEnter", "InsertChange" }, {
group = grp,
callback = function()
M.InsertStatuslineColor(vim.v.insertmode)
end,
})
vim.api.nvim_create_autocmd("InsertLeave", {
group = grp,
callback = function()
M.InitialStatuslineColors()
end,
})
vim.api.nvim_create_autocmd({ "WinEnter", "BufEnter" }, {
group = grp,
callback = function()
vim.opt_local.statusline = "%!v:lua.Statusline('active')"
end,
})
vim.api.nvim_create_autocmd({ "WinLeave", "BufLeave" }, {
group = grp,
callback = function()
vim.opt_local.statusline = "%!v:lua.Statusline('inactive')"
end,
})
vim.api.nvim_create_autocmd("ColorScheme", {
group = grp,
callback = function()
M.InitialStatuslineColors()
if vim.fn.mode():match("^i") then
M.InsertStatuslineColor("i")
end
end,
})
M.InitialStatuslineColors()
return M