feat: fuck pretty paths
This commit is contained in:
parent
fe4f513852
commit
fd62e8aa32
2 changed files with 17 additions and 160 deletions
|
@ -1,155 +0,0 @@
|
||||||
-- https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/util/lualine.lua
|
|
||||||
|
|
||||||
local lazy_util = require('lib.lazy.util')
|
|
||||||
local lazyvim_root = require('lib.lazyvim.root')
|
|
||||||
local lazyvim_ui = require('lib.lazyvim.ui')
|
|
||||||
|
|
||||||
---@class lib.lazyvim.lualine
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
---@param component any
|
|
||||||
---@param text string
|
|
||||||
---@param hl_group? string
|
|
||||||
---@return string
|
|
||||||
function M.format(component, text, hl_group)
|
|
||||||
text = text:gsub('%%', '%%%%')
|
|
||||||
|
|
||||||
if not hl_group or hl_group == '' then
|
|
||||||
return text
|
|
||||||
end
|
|
||||||
|
|
||||||
---@type table<string, string>
|
|
||||||
component.hl_cache = component.hl_cache or {}
|
|
||||||
local lualine_hl_group = component.hl_cache[hl_group]
|
|
||||||
|
|
||||||
if not lualine_hl_group then
|
|
||||||
local utils = require('lualine.utils.utils')
|
|
||||||
|
|
||||||
---@type string[]
|
|
||||||
local gui = vim.tbl_filter(function(x)
|
|
||||||
return x
|
|
||||||
end, {
|
|
||||||
utils.extract_highlight_colors(hl_group, 'bold') and 'bold',
|
|
||||||
utils.extract_highlight_colors(hl_group, 'italic') and 'italic',
|
|
||||||
})
|
|
||||||
|
|
||||||
lualine_hl_group = component:create_hl({
|
|
||||||
fg = utils.extract_highlight_colors(hl_group, 'fg'),
|
|
||||||
gui = #gui > 0 and table.concat(gui, ',') or nil,
|
|
||||||
}, 'LV_' .. hl_group) --[[@as string]]
|
|
||||||
|
|
||||||
component.hl_cache[hl_group] = lualine_hl_group
|
|
||||||
end
|
|
||||||
|
|
||||||
return component:format_hl(lualine_hl_group)
|
|
||||||
.. text
|
|
||||||
.. component:get_default_hl()
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param opts? {relative: "cwd"|"root", modified_hl: string?, directory_hl: string?, filename_hl: string?, modified_sign: string?, readonly_icon: string?, length: number?}
|
|
||||||
function M.pretty_path(opts)
|
|
||||||
opts = vim.tbl_extend('force', {
|
|
||||||
relative = 'cwd',
|
|
||||||
modified_hl = 'MatchParen',
|
|
||||||
directory_hl = '',
|
|
||||||
filename_hl = 'Bold',
|
|
||||||
modified_sign = '',
|
|
||||||
readonly_icon = ' ',
|
|
||||||
length = 3,
|
|
||||||
}, opts or {})
|
|
||||||
|
|
||||||
return function(self)
|
|
||||||
local path = vim.fn.expand('%:p') --[[@as string]]
|
|
||||||
|
|
||||||
if path == '' then
|
|
||||||
return ''
|
|
||||||
end
|
|
||||||
|
|
||||||
path = lazy_util.norm(path)
|
|
||||||
local root = lazyvim_root.get({ normalize = true })
|
|
||||||
local cwd = lazyvim_root.cwd()
|
|
||||||
|
|
||||||
if opts.relative == 'cwd' and path:find(cwd, 1, true) == 1 then
|
|
||||||
path = path:sub(#cwd + 2)
|
|
||||||
elseif path:find(root, 1, true) == 1 then
|
|
||||||
path = path:sub(#root + 2)
|
|
||||||
end
|
|
||||||
|
|
||||||
local sep = package.config:sub(1, 1)
|
|
||||||
local parts = vim.split(path, '[\\/]')
|
|
||||||
|
|
||||||
if opts.length == 0 then
|
|
||||||
parts = parts
|
|
||||||
elseif #parts > opts.length then
|
|
||||||
parts =
|
|
||||||
{ parts[1], '…', unpack(parts, #parts - opts.length + 2, #parts) }
|
|
||||||
end
|
|
||||||
|
|
||||||
if opts.modified_hl and vim.bo.modified then
|
|
||||||
parts[#parts] = parts[#parts] .. opts.modified_sign
|
|
||||||
parts[#parts] = M.format(self, parts[#parts], opts.modified_h1)
|
|
||||||
else
|
|
||||||
parts[#parts] = M.format(self, parts[#parts], opts.filename_hl)
|
|
||||||
end
|
|
||||||
|
|
||||||
local dir = ''
|
|
||||||
|
|
||||||
if #parts > 1 then
|
|
||||||
dir = table.concat({ unpack(parts, 1, #parts - 1) }, sep)
|
|
||||||
dir = M.format(self, dir .. sep, opts.directory_hl)
|
|
||||||
end
|
|
||||||
|
|
||||||
local readonly = ''
|
|
||||||
|
|
||||||
if vim.bo.readonly then
|
|
||||||
readonly = M.format(self, opts.readonly_icon, opts.modified_hl)
|
|
||||||
end
|
|
||||||
|
|
||||||
return dir .. parts[#parts] .. readonly
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param opts? {cwd:false, subdirectory:true, parent:true, other:true, icon?:string}
|
|
||||||
function M.root_dir(opts)
|
|
||||||
opts = vim.tbl_extend('force', {
|
|
||||||
cwd = false,
|
|
||||||
subdirectory = true,
|
|
||||||
parent = true,
|
|
||||||
other = true,
|
|
||||||
icon = ' ',
|
|
||||||
color = function()
|
|
||||||
return lazyvim_ui.fg('Special')
|
|
||||||
end,
|
|
||||||
}, opts or {})
|
|
||||||
|
|
||||||
local function get()
|
|
||||||
local cwd = lazyvim_root.cwd()
|
|
||||||
local root = lazyvim_root.get({ normalize = true })
|
|
||||||
local name = vim.fs.basename(root)
|
|
||||||
|
|
||||||
if root == cwd then
|
|
||||||
return opts.cwd and name
|
|
||||||
elseif root:find(cwd, 1, true) == 1 then
|
|
||||||
-- Root is subdirectory or cwd.
|
|
||||||
return opts.subdirectory and name
|
|
||||||
elseif cwd:find(root, 1, true) == 1 then
|
|
||||||
-- Root is parent directory of cwd.
|
|
||||||
return opts.parent and name
|
|
||||||
else
|
|
||||||
-- Root and cwd are not related.
|
|
||||||
return opts.other and name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
|
||||||
function()
|
|
||||||
return (opts.icon and opts.icon .. ' ') .. get()
|
|
||||||
end,
|
|
||||||
cond = function()
|
|
||||||
return type(get()) == 'string'
|
|
||||||
end,
|
|
||||||
color = opts.color,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
|
@ -20,7 +20,6 @@ return {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
after = function()
|
after = function()
|
||||||
local lazyvim_lualine = require('lib.lazyvim.lualine')
|
|
||||||
local lazyvim_ui = require('lib.lazyvim.ui')
|
local lazyvim_ui = require('lib.lazyvim.ui')
|
||||||
local icons = require('icons')
|
local icons = require('icons')
|
||||||
|
|
||||||
|
@ -43,7 +42,6 @@ return {
|
||||||
lualine_b = { 'branch' },
|
lualine_b = { 'branch' },
|
||||||
|
|
||||||
lualine_c = {
|
lualine_c = {
|
||||||
lazyvim_lualine.root_dir(),
|
|
||||||
{
|
{
|
||||||
'diagnostics',
|
'diagnostics',
|
||||||
symbols = {
|
symbols = {
|
||||||
|
@ -59,17 +57,31 @@ return {
|
||||||
separator = '',
|
separator = '',
|
||||||
padding = { left = 1, right = 0 },
|
padding = { left = 1, right = 0 },
|
||||||
},
|
},
|
||||||
{ lazyvim_lualine.pretty_path() },
|
{
|
||||||
|
'filename',
|
||||||
|
path = 4,
|
||||||
|
symbols = { readonly = ' ', modified = '' },
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
lualine_x = {
|
lualine_x = {
|
||||||
{
|
{
|
||||||
function()
|
function()
|
||||||
return require('noice').api.status.command.get()
|
---@alias NoiceStatusOv {has:(fun():boolean), get:(fun():string), get_hl:(fun():string)}
|
||||||
|
|
||||||
|
return require('noice')
|
||||||
|
.api
|
||||||
|
.status
|
||||||
|
.command --[[@as NoiceStatusOv]]
|
||||||
|
.get()
|
||||||
end,
|
end,
|
||||||
cond = function()
|
cond = function()
|
||||||
return package.loaded['noice']
|
return package.loaded['noice']
|
||||||
and require('noice').api.status.command.has()
|
and require('noice')
|
||||||
|
.api
|
||||||
|
.status
|
||||||
|
.command --[[@as NoiceStatusOv]]
|
||||||
|
.has()
|
||||||
end,
|
end,
|
||||||
color = function()
|
color = function()
|
||||||
return lazyvim_ui.fg('Statement')
|
return lazyvim_ui.fg('Statement')
|
||||||
|
|
Loading…
Reference in a new issue