nvim: better lualine custom components
This commit is contained in:
parent
de3e6518e8
commit
d6a489b221
10 changed files with 117 additions and 88 deletions
|
@ -4,53 +4,35 @@ return {
|
||||||
dependencies = "nvim-tree/nvim-web-devicons",
|
dependencies = "nvim-tree/nvim-web-devicons",
|
||||||
|
|
||||||
opts = function()
|
opts = function()
|
||||||
local icons = require("fschauen.util.icons")
|
local dynamic_color = require("fschauen.util.lualine").dynamic_color
|
||||||
local window = require("fschauen.window")
|
local window = require("fschauen.window")
|
||||||
|
|
||||||
local autoformat = require("fschauen.util.autoformat").lualine()
|
local autoformat = require("fschauen.util.autoformat").lualine()
|
||||||
local component = require("lualine.fschauen.component")
|
local branch = {
|
||||||
local diagnostics = component.colored_if_focused("diagnostics")
|
"branch",
|
||||||
local filetype = component.colored_if_focused("filetype")
|
icon = require("fschauen.util.icons").git.Branch,
|
||||||
local status = component.colored_if_focused("fschauen.status")
|
cond = window.is_medium,
|
||||||
local whitespace = component.colored_if_focused("fschauen.whitespace")
|
|
||||||
|
|
||||||
local spell = {
|
|
||||||
function() return "" end,
|
|
||||||
cond = function() return vim.o.spell end,
|
|
||||||
}
|
|
||||||
|
|
||||||
local wrap = {
|
|
||||||
function() return "" end,
|
|
||||||
cond = function() return vim.o.wrap end,
|
|
||||||
}
|
}
|
||||||
|
local diagnostics = dynamic_color("diagnostics")
|
||||||
|
local fileformat = { "fileformat", cond = window.is_medium }
|
||||||
|
local filename = "fschauen.filename"
|
||||||
|
local filetype = { dynamic_color("filetype"), cond = window.is_medium }
|
||||||
|
local mode = "fschauen.mode"
|
||||||
|
local searchcount = "fschauen.searchcount"
|
||||||
|
local spell = "fschauen.spell"
|
||||||
|
local status =
|
||||||
|
{ dynamic_color("fschauen.status"), color = { fg = "#fe8019" }, padding = 0 }
|
||||||
|
local whitespace =
|
||||||
|
{ dynamic_color("fschauen.whitespace"), color = { bg = "#d65d0e" } }
|
||||||
|
local wrap = "fschauen.wrap"
|
||||||
|
|
||||||
local sections = {
|
local sections = {
|
||||||
lualine_a = {
|
lualine_a = { mode },
|
||||||
"fschauen.mode",
|
lualine_b = { branch },
|
||||||
},
|
lualine_c = { filename, status },
|
||||||
lualine_b = {
|
lualine_x = { diagnostics, searchcount, filetype },
|
||||||
{ "branch", icon = icons.git.Branch, cond = window.is_medium },
|
lualine_y = { spell, wrap, autoformat, fileformat, "progress" },
|
||||||
},
|
lualine_z = { "location", whitespace },
|
||||||
lualine_c = {
|
|
||||||
"fschauen.filename",
|
|
||||||
status,
|
|
||||||
},
|
|
||||||
lualine_x = {
|
|
||||||
diagnostics,
|
|
||||||
"fschauen.searchcount",
|
|
||||||
{ filetype, cond = window.is_medium },
|
|
||||||
},
|
|
||||||
lualine_y = {
|
|
||||||
spell,
|
|
||||||
wrap,
|
|
||||||
autoformat,
|
|
||||||
{ "fileformat", cond = window.is_medium },
|
|
||||||
"progress",
|
|
||||||
},
|
|
||||||
lualine_z = {
|
|
||||||
"location",
|
|
||||||
whitespace,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
41
config/nvim/lua/fschauen/util/lualine.lua
Normal file
41
config/nvim/lua/fschauen/util/lualine.lua
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
---Make a lualine component that is colored only when focused.
|
||||||
|
---@param base table|string Either a lualine component or a component name.
|
||||||
|
---@return table component
|
||||||
|
M.dynamic_color = function(base)
|
||||||
|
local component = {}
|
||||||
|
|
||||||
|
if type(base) == "string" then
|
||||||
|
component = require("lualine.components." .. base):extend()
|
||||||
|
elseif type(base) == "table" then
|
||||||
|
component = base:extend()
|
||||||
|
else
|
||||||
|
return component
|
||||||
|
end
|
||||||
|
|
||||||
|
function component:init(options)
|
||||||
|
component.super.init(
|
||||||
|
self,
|
||||||
|
vim.tbl_deep_extend("keep", options or {}, {
|
||||||
|
colored = true,
|
||||||
|
dynamic_color = true,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
self.saved_highlight = self.options.color_highlight
|
||||||
|
end
|
||||||
|
|
||||||
|
function component:update_status(is_focused)
|
||||||
|
if self.options.dynamic_color then self.options.colored = is_focused end
|
||||||
|
return component.super.update_status(self, is_focused)
|
||||||
|
end
|
||||||
|
|
||||||
|
function component:draw(default_highlight, is_focused)
|
||||||
|
self.options.color_highlight = self.options.colored and self.saved_highlight or nil
|
||||||
|
return component.super.draw(self, default_highlight, is_focused)
|
||||||
|
end
|
||||||
|
|
||||||
|
return component
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
|
@ -1,9 +1,9 @@
|
||||||
local M = require("lualine.component"):extend()
|
local M = require("lualine.component"):extend()
|
||||||
|
|
||||||
function M:init(opts)
|
function M:init(options)
|
||||||
M.super.init(self, opts)
|
M.super.init(self, options)
|
||||||
|
|
||||||
local color = opts.color or {}
|
local color = self.options.color or {}
|
||||||
local modified = { gui = "italic" }
|
local modified = { gui = "italic" }
|
||||||
|
|
||||||
self.custom_highlights = { -- [is_focused, modified]
|
self.custom_highlights = { -- [is_focused, modified]
|
||||||
|
@ -18,13 +18,12 @@ function M:init(opts)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
local window = require("fschauen.window")
|
|
||||||
|
|
||||||
function M:update_status(is_focused)
|
function M:update_status(is_focused)
|
||||||
self.options.color_highlight = self.custom_highlights[is_focused][vim.bo.modified]
|
self.options.color_highlight = self.custom_highlights[is_focused][vim.bo.modified]
|
||||||
|
|
||||||
local path = vim.fn.expand("%:~:.")
|
local path = vim.fn.expand("%:~:.")
|
||||||
|
|
||||||
|
local window = require("fschauen.window")
|
||||||
if window.is_wide() then
|
if window.is_wide() then
|
||||||
return path
|
return path
|
||||||
elseif window.is_medium() then
|
elseif window.is_medium() then
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
local M = require("lualine.component"):extend()
|
local M = require("lualine.component"):extend()
|
||||||
|
|
||||||
-- stylua: ignore start
|
-- stylua: ignore start
|
||||||
M.map = {
|
local map = {
|
||||||
["n"] = "", -- "Normal "
|
["n"] = "", -- "Normal "
|
||||||
["no"] = "", -- "O-Pend "
|
["no"] = "", -- "O-Pend "
|
||||||
["ni"] = "", -- "Normal " (normal via i_CTRL-O)
|
["ni"] = "", -- "Normal " (normal via i_CTRL-O)
|
||||||
|
@ -25,7 +25,7 @@ function M:update_status(is_focused)
|
||||||
if not is_focused then return " " end
|
if not is_focused then return " " end
|
||||||
|
|
||||||
local code = vim.api.nvim_get_mode().mode:lower()
|
local code = vim.api.nvim_get_mode().mode:lower()
|
||||||
local symbol = M.map[code:sub(1, 2)] or M.map[code:sub(1, 1)] or code
|
local symbol = map[code:sub(1, 2)] or map[code:sub(1, 1)] or code
|
||||||
return " " .. symbol .. " "
|
return " " .. symbol .. " "
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,13 @@
|
||||||
local M = require("lualine.component"):extend()
|
local M = require("lualine.component"):extend()
|
||||||
|
|
||||||
function M:init(opts)
|
function M:init(options)
|
||||||
local default_opts = { maxcount = 999, timeout = 250 }
|
M.super.init(
|
||||||
M.super.init(self, vim.tbl_extend("keep", opts or {}, default_opts))
|
self,
|
||||||
|
vim.tbl_extend("keep", options or {}, {
|
||||||
|
maxcount = 999,
|
||||||
|
timeout = 250,
|
||||||
|
})
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
function M:update_status()
|
function M:update_status()
|
||||||
|
|
14
config/nvim/lua/lualine/components/fschauen/spell.lua
Normal file
14
config/nvim/lua/lualine/components/fschauen/spell.lua
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
local M = require("lualine.component"):extend()
|
||||||
|
|
||||||
|
function M:init(options)
|
||||||
|
M.super.init(
|
||||||
|
self,
|
||||||
|
vim.tbl_deep_extend("keep", options or {}, {
|
||||||
|
cond = function() return vim.o.spell end,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function M:update_status(--[[is_focused]]_) return "" end
|
||||||
|
|
||||||
|
return M
|
|
@ -1,13 +1,8 @@
|
||||||
local M = require("lualine.fschauen.component"):extend()
|
local M = require("lualine.component"):extend()
|
||||||
|
|
||||||
function M:init(opts)
|
|
||||||
opts.color = opts.color or { fg = "#ffffff" } -- alternative: '#f9f5d7'
|
|
||||||
M.super.init(self, opts)
|
|
||||||
end
|
|
||||||
|
|
||||||
function M:update_status(--[[is_focused]]_)
|
function M:update_status(--[[is_focused]]_)
|
||||||
local status = ""
|
local status = ""
|
||||||
if vim.bo.modified then status = status .. "" end
|
if vim.bo.modified then status = status .. " " end
|
||||||
if vim.bo.readonly or not vim.bo.modifiable then status = status .. "" end
|
if vim.bo.readonly or not vim.bo.modifiable then status = status .. "" end
|
||||||
return status
|
return status
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
local M = require("lualine.fschauen.component"):extend()
|
local M = require("lualine.component"):extend()
|
||||||
|
|
||||||
function M:init(opts)
|
function M:init(options)
|
||||||
opts.color = opts.color or { bg = "#d65d0e" }
|
M.super.init(
|
||||||
opts.cond = opts.cond or function() return vim.bo.filetype ~= "help" end
|
self,
|
||||||
M.super.init(self, opts)
|
vim.tbl_deep_extend("keep", options or {}, {
|
||||||
|
color = { bg = "#d65d0e" },
|
||||||
|
cond = function() return vim.bo.filetype ~= "help" end,
|
||||||
|
})
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
function M:update_status(--[[is_focused]]_)
|
function M:update_status(--[[is_focused]]_)
|
||||||
|
|
14
config/nvim/lua/lualine/components/fschauen/wrap.lua
Normal file
14
config/nvim/lua/lualine/components/fschauen/wrap.lua
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
local M = require("lualine.component"):extend()
|
||||||
|
|
||||||
|
function M:init(options)
|
||||||
|
M.super.init(
|
||||||
|
self,
|
||||||
|
vim.tbl_deep_extend("keep", options or {}, {
|
||||||
|
cond = function() return vim.o.wrap end,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function M:update_status(--[[is_focused]]_) return "" end
|
||||||
|
|
||||||
|
return M
|
|
@ -1,25 +0,0 @@
|
||||||
local M = require("lualine.component"):extend()
|
|
||||||
|
|
||||||
function M:init(opts)
|
|
||||||
opts.colored = opts.colored ~= false -- colored by default
|
|
||||||
M.super.init(self, opts)
|
|
||||||
self.saved_hl = self.options.color_highlight
|
|
||||||
end
|
|
||||||
|
|
||||||
function M:draw(default_highlight, is_focused)
|
|
||||||
self.options.color_highlight = self.options.colored and self.saved_hl or nil
|
|
||||||
return M.super.draw(self, default_highlight, is_focused)
|
|
||||||
end
|
|
||||||
|
|
||||||
M.colored_if_focused = function(component)
|
|
||||||
local C = require("lualine.components." .. component):extend()
|
|
||||||
|
|
||||||
function C:update_status(is_focused)
|
|
||||||
self.options.colored = is_focused
|
|
||||||
return C.super.update_status(self, is_focused)
|
|
||||||
end
|
|
||||||
|
|
||||||
return C
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
Loading…
Add table
Reference in a new issue