summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/statusline.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/statusline.lua')
-rw-r--r--.config/nvim/lua/statusline.lua178
1 files changed, 49 insertions, 129 deletions
diff --git a/.config/nvim/lua/statusline.lua b/.config/nvim/lua/statusline.lua
index b7b6ed9..e91ac49 100644
--- a/.config/nvim/lua/statusline.lua
+++ b/.config/nvim/lua/statusline.lua
@@ -1,14 +1,8 @@
-local fn = vim.fn
local api = vim.api
--- possible values are 'arrow' | 'rounded' | 'blank'
-local active_sep = 'blank'
-
--- change them if you want to different separator
-local separators = {
- arrow = { '', '' },
- rounded = { '', '' },
- blank = { '', '' },
+Statusline = {
+ active = '',
+ inactive = '',
}
-- highlight groups
@@ -25,74 +19,7 @@ local colors = {
line_col_alt = '%#LineColAlt#',
}
-local trunc_width = setmetatable({
- mode = 80,
- git_status = 90,
- filename = 140,
- line_col = 60,
-}, {
- __index = function()
- return 80
- end
-})
-
-local is_truncated = function(_, width)
- local current_width = api.nvim_win_get_width(0)
- return current_width < width
-end
-
---local modes = setmetatable({
- --['n'] = {'Normal', 'N'};
- --['no'] = {'N·Pending', 'N·P'} ;
- --['v'] = {'Visual', 'V' };
- --['V'] = {'V·Line', 'V·L' };
- --[''] = {'V·Block', 'V·B'}; -- this is not ^V, but it's , they're different
- --['s'] = {'Select', 'S'};
- --['S'] = {'S·Line', 'S·L'};
- --[''] = {'S·Block', 'S·B'}; -- same with this one, it's not ^S but it's 
- --['i'] = {'Insert', 'I'};
- --['ic'] = {'Insert', 'I'};
- --['R'] = {'Replace', 'R'};
- --['Rv'] = {'V·Replace', 'V·R'};
- --['c'] = {'Command', 'C'};
- --['cv'] = {'Vim·Ex ', 'V·E'};
- --['ce'] = {'Ex ', 'E'};
- --['r'] = {'Prompt ', 'P'};
- --['rm'] = {'More ', 'M'};
- --['r?'] = {'Confirm ', 'C'};
- --['!'] = {'Shell ', 'S'};
- --['t'] = {'Terminal ', 'T'};
---}, {
- --__index = function()
- --return {'Unknown', 'U'} -- handle edge cases
- --end
---})
-
-local get_current_mode = function()
- return string.format('[%s]', api.nvim_get_mode().mode )
-end
-
-local get_git_status = function()
- -- use fallback because it doesn't set this variable on the initial `BufEnter`
- local signs = vim.b.gitsigns_status_dict or {head = '', added = 0, changed = 0, removed = 0}
- local is_head_empty = signs.head ~= ''
-
- if is_truncated(trunc_width.git_status) then
- return is_head_empty and string.format('  %s ', signs.head or '') or ''
- end
-
- return is_head_empty and string.format(
- ' +%s ~%s -%s |  %s ',
- signs.added, signs.changed, signs.removed, signs.head
- ) or ''
-end
-
-local get_filename = function()
- --if is_truncated(trunc_width.filename) then return "%<%f" end
- return "%<%F"
-end
-
-local get_filetype = function()
+Statusline.get_filetype = function()
local filetype = vim.bo.filetype
if filetype == '' then
return ''
@@ -100,72 +27,50 @@ local get_filetype = function()
return string.format('%s', filetype):lower()
end
-local get_line_col = function()
- return '%l:%c'
+local add_active = function(text)
+ Statusline.active = Statusline.active .. text
end
-Statusline = {}
-
-Statusline.active = function()
- local navic = require('nvim-navic')
-
- --local mode = colors.mode .. self:get_current_mode()
- --local mode_alt = colors.mode_alt .. self.separators[active_sep][1]
- --local git = colors.git .. self:get_git_status()
- --local git_alt = colors.git_alt .. self.separators[active_sep][1]
- --local filename = colors.inactive .. self:get_filename() .. colors.git_alt
- --local location = ""
- --if navic.is_available() then
- --location = navic.get_location()
- --end
- --local filetype_alt = colors.filetype_alt .. self.separators[active_sep][2]
- --local filetype = colors.filetype .. self:get_filetype()
- --local line_col = colors.line_col .. self:get_line_col()
- --local line_col_alt = colors.line_col_alt .. self.separators[active_sep][2]
-
- local mode = get_current_mode()
- --local git = get_git_status()
- local filename = get_filename() .. colors.git_alt
- local location = ""
- if navic.is_available() then
- location = navic.get_location()
- end
- local filetype = get_filetype()
- local line_col = get_line_col()
-
- return table.concat({
- mode, " ", filename, " ", "%m%r%q", " ", filetype,
- "%=",
- location, " ", line_col, " "
- })
+local add_inactive = function(text)
+ Statusline.inactive = Statusline.inactive .. text
end
-Statusline.inactive = function()
- return colors.inactive .. '%F'
+local addl_active = function(func)
+ Statusline.active = Statusline.active .. '%{v:lua.' .. func .. '}'
end
-Statusline.set_explorer = function()
- local title = colors.mode .. '  '
- local title_alt = colors.mode_alt .. Statusline.separators[active_sep][2]
-
- return table.concat({ colors.active, title, title_alt })
+local addl_inactive = function(func)
+ Statusline.inactive = Statusline.inactive .. '%{v:lua.' .. func .. '}'
end
---Statusline = setmetatable(M, {
- --__call = function(statusline, mode)
- --if mode == "active" then return statusline:set_active() end
- --if mode == "inactive" then return statusline:set_inactive() end
- --if mode == "explorer" then return statusline:set_explorer() end
- --end
---})
+add_active('[')
+addl_active('vim.api.nvim_get_mode().mode')
+add_active(']')
+add_active(' ')
+add_active('%<%f')
+add_active(' ')
+add_active('%m%r%q')
+add_active(' ')
+addl_active('Statusline.get_filetype()')
+add_active('%=')
+addl_active('require("nvim-navic").get_location()')
+add_active(' ')
+add_active('%l:%c')
+add_active(' ')
+
+add_inactive(colors.inactive .. '%F')
local augroup = api.nvim_create_augroup('Statusline', { clear = true})
api.nvim_create_autocmd({"WinEnter", "BufEnter"}, {
- command = "setlocal statusline=%!v:lua.Statusline.active()",
+ callback = function()
+ vim.wo.statusline = Statusline.active
+ end,
group = augroup
})
api.nvim_create_autocmd({"WinLeave", "BufLeave"}, {
- command = "setlocal statusline=%!v:lua.Statusline.inactive()",
+ callback = function()
+ vim.wo.statusline = Statusline.inactive
+ end,
group = augroup
})
@@ -200,3 +105,18 @@ api.nvim_create_autocmd({"WinLeave", "BufLeave"}, {
-- )
-- end
-- end
+--
+--local get_git_status = function()
+ ---- use fallback because it doesn't set this variable on the initial `BufEnter`
+ --local signs = vim.b.gitsigns_status_dict or {head = '', added = 0, changed = 0, removed = 0}
+ --local is_head_empty = signs.head ~= ''
+--
+ --if is_truncated(trunc_width.git_status) then
+ --return is_head_empty and string.format('  %s ', signs.head or '') or ''
+ --end
+--
+ --return is_head_empty and string.format(
+ --' +%s ~%s -%s |  %s ',
+ --signs.added, signs.changed, signs.removed, signs.head
+ --) or ''
+--end