diff --git a/README.md b/README.md index 33e301d..fadaf14 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/lua/fzf-lua/config.lua b/lua/fzf-lua/config.lua index 01ac288..812f6df 100644 --- a/lua/fzf-lua/config.lua +++ b/lua/fzf-lua/config.lua @@ -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 diff --git a/lua/fzf-lua/previewer/builtin.lua b/lua/fzf-lua/previewer/builtin.lua index fa158de..3da2fe1 100644 --- a/lua/fzf-lua/previewer/builtin.lua +++ b/lua/fzf-lua/previewer/builtin.lua @@ -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) diff --git a/lua/fzf-lua/win.lua b/lua/fzf-lua/win.lua index d9e3f01..980b3cd 100644 --- a/lua/fzf-lua/win.lua +++ b/lua/fzf-lua/win.lua @@ -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