Breaking change for statusline_separator field users | optimize statusline & make it overridable
added cmd fields for various plugins for example lspinstaller+lspconfig gets loaded only when a file opened but their commands can be run before a file is opened so I additionally lazy loaded them on their cmds too
This commit is contained in:
parent
099e075a01
commit
4f1ee6ec8f
@ -22,21 +22,22 @@ M.ui = {
|
||||
theme_toggle = { "onedark", "one_light" },
|
||||
theme = "onedark", -- default theme
|
||||
transparency = false,
|
||||
|
||||
statusline = {
|
||||
separator_style = "default", -- default/round/block/arrow
|
||||
config = "%!v:lua.require'ui.statusline'.run()",
|
||||
override = {},
|
||||
},
|
||||
}
|
||||
|
||||
M.plugins = {
|
||||
override = {},
|
||||
remove = {},
|
||||
user = {},
|
||||
|
||||
options = {
|
||||
lspconfig = {
|
||||
setup_lspconf = "", -- path of lspconfig file
|
||||
},
|
||||
statusline = {
|
||||
separator_style = "default", -- default/round/block/arrow
|
||||
config = "%!v:lua.require'ui.statusline'.run()",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -69,6 +69,31 @@ M.on_file_open = function(plugin_name)
|
||||
}
|
||||
end
|
||||
|
||||
-- lspinstaller & lspconfig cmds for lazyloading
|
||||
M.lsp_cmds = {
|
||||
"LspInfo",
|
||||
"LspStart",
|
||||
"LspRestart",
|
||||
"LspStop",
|
||||
"LspInstall",
|
||||
"LspUnInstall",
|
||||
"LspUnInstallAll",
|
||||
"LspInstall",
|
||||
"LspInstallInfo",
|
||||
"LspInstallLog",
|
||||
"LspLog",
|
||||
"LspPrintInstalled",
|
||||
}
|
||||
|
||||
M.treesitter_cmds = {
|
||||
"TSInstall",
|
||||
"TSBufEnable",
|
||||
"TSBufDisable",
|
||||
"TSEnable",
|
||||
"TSDisable",
|
||||
"TSModuleInhfo",
|
||||
}
|
||||
|
||||
M.gitsigns = function()
|
||||
-- taken from https://github.com/max397574
|
||||
vim.api.nvim_create_autocmd({ "BufRead" }, {
|
||||
|
@ -1,4 +1,4 @@
|
||||
-- n, v, i, tare mode names
|
||||
-- n, v, i, t = mode names
|
||||
|
||||
local function termcodes(str)
|
||||
return vim.api.nvim_replace_termcodes(str, true, true, true)
|
||||
|
@ -12,7 +12,7 @@ g.did_load_filetypes = 0
|
||||
g.do_filetype_lua = 1
|
||||
|
||||
opt.laststatus = 3 -- global statusline
|
||||
opt.statusline = config.plugins.options.statusline.config
|
||||
opt.statusline = config.ui.statusline.config
|
||||
opt.showmode = false
|
||||
|
||||
opt.title = true
|
||||
|
@ -66,6 +66,7 @@ local plugins = {
|
||||
setup = function()
|
||||
require("core.lazy_load").on_file_open "nvim-treesitter"
|
||||
end,
|
||||
cmd = require("core.lazy_load").treesitter_cmds,
|
||||
run = ":TSUpdate",
|
||||
config = function()
|
||||
require "plugins.configs.treesitter"
|
||||
@ -87,6 +88,7 @@ local plugins = {
|
||||
|
||||
["williamboman/nvim-lsp-installer"] = {
|
||||
opt = true,
|
||||
cmd = require("core.lazy_load").lsp_cmds,
|
||||
setup = function()
|
||||
require("core.lazy_load").on_file_open "nvim-lsp-installer"
|
||||
end,
|
||||
|
@ -40,6 +40,28 @@ M.lspkind = {
|
||||
Package = "",
|
||||
}
|
||||
|
||||
M.statusline_separators = {
|
||||
default = {
|
||||
left = "",
|
||||
right = " ",
|
||||
},
|
||||
|
||||
round = {
|
||||
left = "",
|
||||
right = "",
|
||||
},
|
||||
|
||||
block = {
|
||||
left = "█",
|
||||
right = "█",
|
||||
},
|
||||
|
||||
arrow = {
|
||||
left = "",
|
||||
right = "",
|
||||
},
|
||||
}
|
||||
|
||||
M.devicons = {
|
||||
default_icon = {
|
||||
icon = "",
|
||||
|
@ -1,30 +1,8 @@
|
||||
local fn = vim.fn
|
||||
|
||||
local sep_style = {
|
||||
default = {
|
||||
left = "",
|
||||
right = " ",
|
||||
},
|
||||
|
||||
round = {
|
||||
left = "",
|
||||
right = "",
|
||||
},
|
||||
|
||||
block = {
|
||||
left = "█",
|
||||
right = "█",
|
||||
},
|
||||
|
||||
arrow = {
|
||||
left = "",
|
||||
right = "",
|
||||
},
|
||||
}
|
||||
|
||||
local user_sep_style = require("core.utils").load_config().plugins.options.statusline.separator_style
|
||||
local sep_l = sep_style[user_sep_style]["left"]
|
||||
local sep_r = sep_style[user_sep_style]["right"]
|
||||
local sep_style = require("ui.icons").statusline_separators
|
||||
local user_sep = require("core.utils").load_config().ui.statusline.separator_style
|
||||
local sep_l = sep_style[user_sep]["left"]
|
||||
local sep_r = sep_style[user_sep]["right"]
|
||||
|
||||
local modes = {
|
||||
["n"] = { "NORMAL", "St_NormalMode" },
|
||||
@ -64,34 +42,22 @@ M.mode = function()
|
||||
return current_mode .. mode_sep1 .. "%#ST_EmptySpace#" .. sep_r
|
||||
end
|
||||
|
||||
M.fileicon = function()
|
||||
M.fileInfo = function()
|
||||
local icon = " "
|
||||
local filename = (fn.expand "%" == "" and "Empty ") or fn.expand "%:t"
|
||||
|
||||
local filename = fn.fnamemodify(fn.expand "%:t", ":r")
|
||||
local extension = fn.expand "%:e"
|
||||
|
||||
if filename ~= "" then
|
||||
if filename ~= "Empty " then
|
||||
local devicons_present, devicons = pcall(require, "nvim-web-devicons")
|
||||
|
||||
if devicons_present then
|
||||
local ft_icon = devicons.get_icon(filename, extension)
|
||||
local ft_icon = devicons.get_icon(filename, fn.expand "%:e")
|
||||
icon = (ft_icon ~= nil and " " .. ft_icon) or ""
|
||||
end
|
||||
end
|
||||
|
||||
return "%#St_file_info#" .. icon
|
||||
end
|
||||
|
||||
M.filename = function()
|
||||
local filename = fn.fnamemodify(fn.expand "%:t", ":r")
|
||||
|
||||
if filename == "" then
|
||||
filename = "Empty "
|
||||
else
|
||||
filename = " " .. filename .. " "
|
||||
end
|
||||
|
||||
return "%#St_file_info#" .. filename .. "%#St_file_sep#" .. sep_r
|
||||
return "%#St_file_info#" .. icon .. filename .. "%#St_file_sep#" .. sep_r
|
||||
end
|
||||
|
||||
M.git = function()
|
||||
@ -105,9 +71,8 @@ M.git = function()
|
||||
local changed = (git_status.changed and git_status.changed ~= 0) and (" " .. git_status.changed) or ""
|
||||
local removed = (git_status.removed and git_status.removed ~= 0) and (" " .. git_status.removed) or ""
|
||||
local branch_name = " " .. git_status.head .. " "
|
||||
local git_info = branch_name .. added .. changed .. removed
|
||||
|
||||
return "%#St_gitIcons#" .. git_info
|
||||
return "%#St_gitIcons#" .. branch_name .. added .. changed .. removed
|
||||
end
|
||||
|
||||
-- LSP STUFF
|
||||
@ -130,10 +95,6 @@ M.LSP_progress = function()
|
||||
end
|
||||
|
||||
M.LSP_Diagnostics = function()
|
||||
if not #vim.diagnostic.get(0) then
|
||||
return ""
|
||||
end
|
||||
|
||||
local errors = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.ERROR })
|
||||
local warnings = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.WARN })
|
||||
local hints = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.HINT })
|
||||
@ -148,48 +109,36 @@ M.LSP_Diagnostics = function()
|
||||
end
|
||||
|
||||
M.LSP_status = function()
|
||||
local clients = vim.lsp.get_active_clients()
|
||||
local name = false
|
||||
for _, client in ipairs(clients) do
|
||||
for _, client in ipairs(vim.lsp.get_active_clients()) do
|
||||
if client.attached_buffers[vim.api.nvim_get_current_buf()] then
|
||||
name = client.name
|
||||
break
|
||||
return (vim.o.columns > 70 and "%#St_LspStatus#" .. " LSP ~ " .. client.name .. " ") or " LSP "
|
||||
end
|
||||
end
|
||||
|
||||
local content = name and " LSP ~ " .. name .. " " or false
|
||||
return content and ("%#St_LspStatus#" .. content) or ""
|
||||
end
|
||||
|
||||
M.cwd = function()
|
||||
local left_sep = "%#St_cwd_sep#" .. sep_l
|
||||
local dir_icon = "%#St_cwd_icon#" .. " "
|
||||
local dir_name = "%#St_cwd_text#" .. " " .. fn.fnamemodify(fn.getcwd(), ":t") .. " "
|
||||
return (vim.o.columns > 120 and left_sep .. dir_icon .. dir_name) or ""
|
||||
return (vim.o.columns > 120 and ("%#St_cwd_sep#" .. sep_l .. dir_icon .. dir_name))
|
||||
end
|
||||
|
||||
M.cursor_position = function()
|
||||
local left_sep = "%#St_pos_sep#" .. sep_l
|
||||
local icon = "%#St_pos_icon#" .. " "
|
||||
local left_sep = "%#St_pos_sep#" .. sep_l .. "%#St_pos_icon#" .. " "
|
||||
|
||||
local current_line = fn.line "."
|
||||
local total_line = fn.line "$"
|
||||
local text = math.modf((current_line / total_line) * 100) .. tostring "%%"
|
||||
|
||||
if current_line == 1 then
|
||||
text = "Top"
|
||||
elseif current_line == total_line then
|
||||
text = "Bot"
|
||||
end
|
||||
text = (current_line == 1 and "Top") or text
|
||||
text = (current_line == total_line and "Bot") or text
|
||||
|
||||
return left_sep .. icon .. "%#St_pos_text#" .. " " .. text .. " "
|
||||
return left_sep .. "%#St_pos_text#" .. " " .. text .. " "
|
||||
end
|
||||
|
||||
M.run = function()
|
||||
return table.concat {
|
||||
M.mode(),
|
||||
M.fileicon(),
|
||||
M.filename(),
|
||||
M.fileInfo(),
|
||||
M.git(),
|
||||
|
||||
"%=",
|
||||
@ -197,10 +146,12 @@ M.run = function()
|
||||
"%=",
|
||||
|
||||
M.LSP_Diagnostics(),
|
||||
M.LSP_status(),
|
||||
M.LSP_status() or "",
|
||||
M.cwd(),
|
||||
M.cursor_position(),
|
||||
}
|
||||
end
|
||||
|
||||
M = vim.tbl_deep_extend("force", M, require("core.utils").load_config().ui.statusline.override)
|
||||
|
||||
return M
|
||||
|
Loading…
Reference in New Issue
Block a user