neovim/.config/nvim/lua/ui.lua
-- ██
-- ░░
-- ██ ██ ██ ██████████ ██████ █████
-- ░██ ░██░██░░██░░██░░██░░██░░█ ██░░░██
-- ░░██ ░██ ░██ ░██ ░██ ░██ ░██ ░ ░██ ░░
-- ░░████ ░██ ░██ ░██ ░██ ░██ ░██ ██
-- ░░██ ░██ ███ ░██ ░██░███ ░░█████
-- ░░ ░░ ░░░ ░░ ░░ ░░░ ░░░░░
--
-- ▓▓▓▓▓▓▓▓▓▓
-- ░▓ author ▓ xero <x@xero.style>
-- ░▓ code ▓ https://code.x-e.ro/dotfiles
-- ░▓ mirror ▓ https://git.io/.files
-- ░▓▓▓▓▓▓▓▓▓▓
-- ░░░░░░░░░░
--
-- show matching brackets/parenthesis
vim.opt.showmatch = true
-- disable startup message
vim.opt.shortmess:append("sI")
-- cmd display (set to zero to autohide)
vim.opt.cmdheight = 1
-- gutter sizing
vim.opt.signcolumn = "auto:2"
-- syntax highlighting
vim.opt.termguicolors = true
vim.opt.synmaxcol = 512
-- show line numbers
vim.opt.number = true
-- default no line wrapping
vim.opt.wrap = false
-- set indents when wrapped
vim.opt.breakindent = true
-- highlight cursor
vim.opt.cursorline = true
-- set cursorcolumn = true
-- show invisibles
vim.opt.listchars = { tab = " ", trail = "·", extends = "»", precedes = "«", nbsp = "░" }
vim.opt.list = true
-- split style
vim.opt.fillchars = { vert = "▒" }
vim.opt.splitbelow = true
vim.opt.splitright = true
-- custom tabline
local noname = "[unnamed]"
local function extract_filename(win)
local b = vim.api.nvim_win_get_buf(win)
local fullname = vim.api.nvim_buf_get_name(b)
local mod = vim.api.nvim_buf_get_option(b, 'modified') and "◈ " or ""
if fullname ~= "" then
local shortname = vim.fn.fnamemodify(fullname, ":~:.:gs%(.?[^/])[^/]*/%/%")
if #shortname > 30 then shortname = vim.fn.fnamemodify(fullname, ":t") end
return mod..shortname
end
end
local function get_best_window_filename(tabpage, window)
local filename = extract_filename(window)
if filename == nil then
local wins = vim.api.nvim_tabpage_list_wins(tabpage)
if #wins > 1 then
for _, win in ipairs(wins) do
filename = extract_filename(win)
break
end
end
end
if filename == nil then
return noname
end
return filename
end
local function is_float_win(win)
local config = vim.api.nvim_win_get_config(win)
return config.zindex and config.zindex > 0
end
local function getname(tabpage)
-- vim.F.npcall(vim.api.nvim_tabpage_get_var, tabpage, "tab_title")
local title = vim.t[tabpage].tab_title
if title ~= nil then
return title
end
local window = vim.api.nvim_tabpage_get_win(tabpage)
-- don't replace the last filename-buffer w/ floating windows
if is_float_win(window) then
return vim.t[tabpage].last_buffer_filename
end
local filename = get_best_window_filename(tabpage, window)
vim.t[tabpage].last_buffer_filename = filename
return filename
end
function Tabline()
local tl = {}
local current = vim.api.nvim_get_current_tabpage()
for i, tabpage in ipairs(vim.api.nvim_list_tabpages()) do
local hi = tabpage == current and "%#TabLineSel#" or "%#TabLine#"
local hiSep = tabpage == current and "%#TabLineSelSep#" or "%#TabLineSep#"
table.insert(tl, "%" .. i .. "T") -- mouse click target region
table.insert(tl, hi .. " " .. getname(tabpage) .. " ")
table.insert(tl, hiSep .. "▓▒░ " .. hi)
end
table.insert(tl, "%T") -- end mouse click region(s).
table.insert(tl, "%#TabLineFill#")
return table.concat(tl, '')
end
vim.opt.tabline = [[%!v:lua.Tabline()]]