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