previewer: Add title_align option

change alignment of the preview title

default is left
main
Akianonymus 2 years ago
parent 054c312b1c
commit d7b1ee7a84

@ -370,6 +370,7 @@ require'fzf-lua'.setup {
flip_columns = 120, -- #cols to switch to horizontal on flex
-- Only used with the builtin previewer:
title = true, -- preview border title (file/buf)?
title_align = "left", -- left|center|right, preview title alignment (file/buf)?
scrollbar = 'float', -- `false` or string:'float|border'
-- float: in-window floating border
-- border: in-border chars (see below)

@ -61,6 +61,7 @@ M.globals = {
layout = 'flex',
flip_columns = 120,
title = true,
title_align = "left",
scrollbar = 'border',
scrolloff = '-2',
scrollchar = '',
@ -838,6 +839,7 @@ function M.normalize_opts(opts, defaults)
['winopts.hl.cursorline'] = 'previewers.builtin.hl_cursorline',
['winopts.preview.delay'] = 'previewers.builtin.delay',
['winopts.preview.title'] = 'previewers.builtin.title',
['winopts.preview.title_align'] = 'previewers.builtin.title_align',
['winopts.preview.scrollbar'] = 'previewers.builtin.scrollbar',
['winopts.preview.scrollchar'] = 'previewers.builtin.scrollchar',
-- Diagnostics & LSP symbols separation options

@ -24,6 +24,7 @@ function Previewer.base:new(o, opts, fzf_win)
self.win = fzf_win
self.delay = self.win.winopts.preview.delay or 100
self.title = self.win.winopts.preview.title
self.title_align = self.win.winopts.preview.title_align
self.winopts = self.win.winopts.preview.winopts
self.syntax = default(o.syntax, true)
self.syntax_delay = default(o.syntax_delay, 0)

@ -884,7 +884,7 @@ end
function FzfWin:set_title_hl()
if self.winopts.__hl.title and self._title_len and self._title_len>0 then
pcall(vim.api.nvim_win_call, self.border_winid, function()
fn.matchaddpos(self.winopts.__hl.title, {{1, 9, self._title_len+1}}, 11)
fn.matchaddpos(self.winopts.__hl.title, {{1, self._title_position, self._title_len+1}}, 11)
end)
end
end
@ -1056,10 +1056,19 @@ function FzfWin:update_title(title)
end
-- save for set_title_hl
self._title_len = #title
local width_title = fn.strwidth(title)
local prefix = fn.strcharpart(top, 0, 3)
local suffix = fn.strcharpart(top, fn.strwidth(title) + 3, fn.strwidth(top))
if self.winopts.preview.title_align == "center" then
prefix = fn.strcharpart(top, 0, utils.round((width - width_title)/2))
elseif self.winopts.preview.title_align == "right" then
prefix = fn.strcharpart(top, 0, width - (width_title + 3))
end
local suffix = fn.strcharpart(top, width_title + fn.strwidth(prefix), width)
title = ('%s%s%s'):format(prefix, title, suffix)
api.nvim_buf_set_lines(border_buf, 0, 1, 1, {title})
-- will be used later in set_title_hl()
self._title_position = #prefix
self:set_title_hl()
end

Loading…
Cancel
Save