From e094a03d8cd2dc1a96acefc7a861c9ebb0ff02cf Mon Sep 17 00:00:00 2001 From: Olivier Roques Date: Mon, 28 Dec 2020 11:19:05 +0100 Subject: [PATCH] Add unique_tail formatter --- lua/hardline.lua | 3 ++- lua/hardline/bufferline.lua | 28 +++++++++++++++++++++++++++- plugin/hardline.vim | 2 -- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/lua/hardline.lua b/lua/hardline.lua index b063e1c..72ca03e 100644 --- a/lua/hardline.lua +++ b/lua/hardline.lua @@ -65,12 +65,13 @@ end local function set_hlgroups() for class, attr in pairs(M.options.theme) do for state, args in pairs(attr) do + local hlgroup = string.format('Hardline_%s_%s', class, state) local a = {} for k, v in pairs(args) do table.insert(a, string.format('%s=%s', k, v)) end a = table.concat(a, ' ') - cmd(string.format('hi Hardline_%s_%s %s', class, state, a)) + cmd(string.format('autocmd ColorScheme * hi %s %s', hlgroup, a)) end end end diff --git a/lua/hardline/bufferline.lua b/lua/hardline/bufferline.lua index 635a647..85b7437 100644 --- a/lua/hardline/bufferline.lua +++ b/lua/hardline/bufferline.lua @@ -1,9 +1,34 @@ -local fn = vim.fn +local fn, vim = vim.fn, vim local function exclude(bufnr) return (fn.buflisted(bufnr) == 0 or fn.getbufvar(bufnr, '&filetype') == 'qf') end +local function get_head(path, tail) + local result = path + for i = 1, #vim.split(tail, '/', true) do + result = fn.fnamemodify(result, ':~:h') + end + return fn.fnamemodify(result, ':t') +end + +local function unique_tail(buffers) + local hist = {} + local duplicate = false + for _, buffer in ipairs(buffers) do + hist[buffer.name] = not hist[buffer.name] and 1 or hist[buffer.name] + 1 + duplicate = duplicate or hist[buffer.name] > 1 + end + if not duplicate then return end + for _, buffer in ipairs(buffers) do + if hist[buffer.name] > 1 then + local parent = get_head(fn.bufname(buffer.bufnr), buffer.name) + buffer.name = string.format('%s/%s', parent, buffer.name) + end + end + unique_tail(buffers) +end + local function to_section(buffer) local flags = {} local item = buffer.name == '' and '[No Name]' or buffer.name @@ -37,6 +62,7 @@ local function get_buffers() }) end end + unique_tail(buffers) return buffers end diff --git a/plugin/hardline.vim b/plugin/hardline.vim index 3bc8786..c24cddc 100644 --- a/plugin/hardline.vim +++ b/plugin/hardline.vim @@ -6,6 +6,4 @@ if exists('g:loaded_hardline') finish endif -lua require('hardline').setup {} - let g:loaded_hardline = 1