From 4f1ee6ec8ffa9ea1773b148c3cc90b854cf355a3 Mon Sep 17 00:00:00 2001 From: siduck Date: Sun, 19 Jun 2022 13:43:11 +0530 Subject: [PATCH] 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 --- lua/core/default_config.lua | 11 +++-- lua/core/lazy_load.lua | 25 ++++++++++ lua/core/mappings.lua | 2 +- lua/core/options.lua | 2 +- lua/plugins/init.lua | 2 + lua/ui/icons.lua | 22 +++++++++ lua/ui/statusline.lua | 91 +++++++++---------------------------- 7 files changed, 78 insertions(+), 77 deletions(-) diff --git a/lua/core/default_config.lua b/lua/core/default_config.lua index a2ef345023..cf92e3b56a 100644 --- a/lua/core/default_config.lua +++ b/lua/core/default_config.lua @@ -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()", - }, }, } diff --git a/lua/core/lazy_load.lua b/lua/core/lazy_load.lua index 1be8d0f335..edb32be953 100644 --- a/lua/core/lazy_load.lua +++ b/lua/core/lazy_load.lua @@ -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" }, { diff --git a/lua/core/mappings.lua b/lua/core/mappings.lua index b9fd81d919..9b08bc44a2 100644 --- a/lua/core/mappings.lua +++ b/lua/core/mappings.lua @@ -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) diff --git a/lua/core/options.lua b/lua/core/options.lua index e171a8df52..3b12fecba4 100644 --- a/lua/core/options.lua +++ b/lua/core/options.lua @@ -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 diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index ea9142bcf0..68661b6411 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -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, diff --git a/lua/ui/icons.lua b/lua/ui/icons.lua index 7686a8fdb5..ee0b09cf26 100644 --- a/lua/ui/icons.lua +++ b/lua/ui/icons.lua @@ -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 = "", diff --git a/lua/ui/statusline.lua b/lua/ui/statusline.lua index ddeb2c1a4a..da2d2c4763 100644 --- a/lua/ui/statusline.lua +++ b/lua/ui/statusline.lua @@ -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