feat: feat: add comprehensive documentation for Neovim configuration project
Signed-off-by: juliano.barbosa <julianomb@gmail.com>
This commit is contained in:
parent
57f551ebd9
commit
f8b3501df1
8 changed files with 727 additions and 0 deletions
128
lua/custom/plugins/custom_statusline.lua
Normal file
128
lua/custom/plugins/custom_statusline.lua
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
-- Custom Statusline Configuration
|
||||
local M = {}
|
||||
|
||||
function M.setup()
|
||||
-- Get reference to mini.statusline
|
||||
local statusline = require('mini.statusline')
|
||||
local mode_manager = require('custom.plugins.mode_manager')
|
||||
|
||||
-- Store the original section_location function
|
||||
local original_location = statusline.section_location
|
||||
|
||||
-- Create function to get mode-specific content
|
||||
local function get_mode_content()
|
||||
local mode = mode_manager.get_mode()
|
||||
local settings = mode_manager.setting(mode:lower(), 'status_info') or {}
|
||||
|
||||
local parts = {
|
||||
mode = string.format('[%s]', mode),
|
||||
info = settings.text or '',
|
||||
icon = settings.icon or ''
|
||||
}
|
||||
|
||||
if parts.icon ~= '' and parts.info ~= '' then
|
||||
return string.format('%s %s %s', parts.mode, parts.icon, parts.info)
|
||||
elseif parts.info ~= '' then
|
||||
return string.format('%s %s', parts.mode, parts.info)
|
||||
else
|
||||
return parts.mode
|
||||
end
|
||||
end
|
||||
|
||||
-- Override section_location to include enhanced mode indicator
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
statusline.section_location = function()
|
||||
local color = mode_manager.get_mode_highlight()
|
||||
|
||||
-- Create highlight groups for mode indicator
|
||||
vim.api.nvim_set_hl(0, 'ModeIndicator', {
|
||||
fg = color,
|
||||
bold = true
|
||||
})
|
||||
vim.api.nvim_set_hl(0, 'ModeIndicatorBg', {
|
||||
bg = color,
|
||||
fg = '#000000',
|
||||
bold = true
|
||||
})
|
||||
|
||||
-- Get mode-specific content
|
||||
local mode_content = get_mode_content()
|
||||
|
||||
-- Format: MODE LINE:COL with custom highlighting
|
||||
return string.format(
|
||||
'%%#ModeIndicator#%s%%#StatusLine# %s',
|
||||
mode_content,
|
||||
original_location()
|
||||
)
|
||||
end
|
||||
|
||||
-- Helper function to update mode-specific status info
|
||||
local function update_mode_status(mode, info)
|
||||
if type(info) == 'string' then
|
||||
info = { text = info }
|
||||
end
|
||||
mode_manager.setting(mode:lower(), 'status_info', info)
|
||||
end
|
||||
|
||||
-- Register callback for mode changes to update statusline
|
||||
mode_manager.register_post_hook(function(new_mode)
|
||||
-- Example of setting mode-specific status info
|
||||
if new_mode == 'plan' then
|
||||
update_mode_status('plan', {
|
||||
text = 'Planning Mode',
|
||||
icon = '' -- Requires Nerd Font
|
||||
})
|
||||
else
|
||||
update_mode_status('act', {
|
||||
text = 'Action Mode',
|
||||
icon = '' -- Requires Nerd Font
|
||||
})
|
||||
end
|
||||
|
||||
vim.cmd('redrawstatus')
|
||||
end)
|
||||
|
||||
-- Set up status line with icons if using nerd font
|
||||
statusline.setup({
|
||||
use_icons = vim.g.have_nerd_font,
|
||||
content = {
|
||||
active = function()
|
||||
local mode = mode_manager.get_mode()
|
||||
local mode_info = mode_manager.setting(mode:lower(), 'status_info') or {}
|
||||
|
||||
-- Add mode-specific content to status line sections
|
||||
return {
|
||||
'%#ModeIndicator#' .. get_mode_content() .. '%#StatusLine#',
|
||||
statusline.section_filename(),
|
||||
statusline.section_modified(),
|
||||
'%=', -- Right align
|
||||
mode_info.extra or '',
|
||||
statusline.section_searchcount(),
|
||||
statusline.section_location(),
|
||||
}
|
||||
end
|
||||
}
|
||||
})
|
||||
|
||||
-- Create autocommand for ModeChanged event
|
||||
vim.api.nvim_create_autocmd('User', {
|
||||
pattern = 'ModeChanged',
|
||||
callback = function(args)
|
||||
if args.data then
|
||||
local old_mode = args.data.old_mode
|
||||
local new_mode = args.data.new_mode
|
||||
|
||||
-- Trigger any mode-specific status line updates
|
||||
vim.schedule(function()
|
||||
-- Allow for async status updates
|
||||
vim.cmd('redrawstatus')
|
||||
end)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Expose update_mode_status function
|
||||
M.update_mode_status = update_mode_status
|
||||
end
|
||||
|
||||
return M
|
||||
Loading…
Add table
Add a link
Reference in a new issue