Skip to content

Commit

Permalink
Breaking change for statusline_separator field users | optimize statu…
Browse files Browse the repository at this point in the history
…sline & 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
  • Loading branch information
siduck committed Jun 19, 2022
1 parent 099e075 commit 4f1ee6e
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 77 deletions.
11 changes: 6 additions & 5 deletions lua/core/default_config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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()",
},
},
}

Expand Down
25 changes: 25 additions & 0 deletions lua/core/lazy_load.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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" }, {
Expand Down
2 changes: 1 addition & 1 deletion lua/core/mappings.lua
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
2 changes: 1 addition & 1 deletion lua/core/options.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions lua/plugins/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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,
Expand Down
22 changes: 22 additions & 0 deletions lua/ui/icons.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "",
Expand Down
91 changes: 21 additions & 70 deletions lua/ui/statusline.lua
Original file line number Diff line number Diff line change
@@ -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" },
Expand Down Expand Up @@ -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()
Expand All @@ -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
Expand All @@ -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 })
Expand All @@ -148,59 +109,49 @@ 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(),

"%=",
M.LSP_progress(),
"%=",

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

4 comments on commit 4f1ee6e

@siduck
Copy link
Member Author

@siduck siduck commented on 4f1ee6e Jun 19, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As the statusline isnt a plugin so I moved it to the "ui" table

Migration

Before

M.plugins = {
   options = {
      statusline = {
         separator_style = "default",
      },
   },
}

After

M.ui = {
   statusline = {
      separator_style = "default",  
   },
}

@siduck
Copy link
Member Author

@siduck siduck commented on 4f1ee6e Jun 19, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Override default statusline components

  • First check the override field in (ui.statusline table)
  • Here's an example

image

@lll9p
Copy link
Contributor

@lll9p lll9p commented on 4f1ee6e Jun 19, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After migration:

M.ui = {
   statusline = {
      separator_style = "arrow",
   },
}

I got error:

E5108: Error executing lua invalid value (boolean) at index 9 in table for 'concat'
stack traceback:
	[builtin#92]: at 0x7ffa55add880

Seems its a statusline bug, the statusline restore to default.

@siduck
Copy link
Member Author

@siduck siduck commented on 4f1ee6e Jun 19, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lll9p should be fixed now ig

Please sign in to comment.