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
					
				
					 7 changed files with 78 additions and 77 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue