dotfiles/config/nvim/lua/fschauen/lualine.lua

124 lines
3.2 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local M = {}
local window = require('fschauen.window')
local colored_when_focused = function(component)
local new = require(component):extend()
function new:update_status(is_focused)
self.options.colored = is_focused
return self.super.update_status(self, is_focused)
end
return new
end
local diff = colored_when_focused('lualine.components.diff')
local branch = {
'branch',
icon = '',
cond = window.is_medium,
}
local fileformat = {
'fileformat',
cond = window.is_medium,
}
local filename = {
function()
local shorten_path = function(path)
if window.is_wide() then
return path
elseif window.is_medium() then
return vim.fn.pathshorten(path) -- only first letter of directories
else
return vim.fn.fnamemodify(path, ':t') -- only tail
end
end
return shorten_path(vim.fn.expand('%:~:.'))
end,
padding = { left = 1, right = 0 },
}
local filetype = {
colored_when_focused('lualine.components.filetype'),
cond = window.is_medium,
}
local mode = {
(function()
local MODES = {
['n'] = '', -- 'Normal ', -- Normal
['no'] = '', -- 'O-Pend ', -- Operator-pending
['ni'] = '', -- 'Normal ', -- Normal via i_CTRL-O
['v'] = ' 󰒉 ', -- 'Visual ', -- Visual by character
[''] = ' 󰩭 ', -- 'V-Block', -- Visual blockwise
['s'] = ' 󰒉 ', -- 'Select ', -- Select by character
[''] = ' 󰩭 ', -- 'S-Block', -- Select blockwise
['i'] = '', -- 'Insert ', -- Insert
['r'] = ' 󰄾 ', -- 'Replace', -- Replace
['rv'] = ' 󰶻 ', -- 'V-Repl ', -- Virtual Replace
['c'] = '', -- 'Command', -- Command-line
['cv'] = '', -- ' Ex ', -- Ex mode
['rm'] = '', -- ' More ', -- -- MORE --
['r?'] = ' 󰭚 ', -- 'Confirm', -- :confirm
['!'] = '', -- ' Shell ', -- External command executing
['t'] = '', -- ' Term ', -- Terminal
}
return function()
local code = vim.api.nvim_get_mode().mode
return MODES[code:sub(1, 2):lower()] or MODES[code:sub(1, 1):lower()] or code
end
end)()
}
local paste = {
function() return '' end,
color = { bg = '#fe8019' },
cond = function() return vim.opt.paste:get() end
}
local status = {
function()
local flags = vim.list_extend(
vim.bo.modified and { '+' } or {},
(vim.bo.readonly or not vim.bo.modifiable) and { 'RO' } or {})
return vim.fn.join(flags, ' ')
end,
color = {
fg = '#eee8d5',
gui = 'bold'
},
}
local visual_multi = function()
local info = vim.F.npcall(vim.fn.VMInfos)
if info and info.status then
return info.current .. '/' .. info.total .. ' ' .. info.status
else
return ''
end
end
local default = {
lualine_a = {},
lualine_b = { visual_multi, branch },
lualine_c = { diff, filename, status },
lualine_x = { filetype },
lualine_y = { fileformat, 'progress' },
lualine_z = { 'location' },
}
M.sections = {
inactive = default,
active = vim.tbl_extend('force', default, {
lualine_a = vim.list_extend({ paste, mode }, default.lualine_a),
lualine_x = vim.list_extend({ 'diagnostics' }, default.lualine_x),
})
}
return M