added fullscreen option (closes issue #150), minor keymap breaking changes

'fzf_binds' and 'previewers.builtin.keymap' were merged and moved under
'keymap.fzf' and 'keymap.builtin' respectively.
See ':help fzf-lua-customization' how to reconfigure.
main
bhagwan 3 years ago
parent 9a24d8e466
commit 7a554bb2b2

@ -214,6 +214,8 @@ require'fzf-lua'.setup {
-- "aboveleft new" : split above
-- "belowright vnew" : split right
-- "aboveleft vnew : split left
-- Only valid when using a float window
-- (i.e. when 'split' is not defined)
win_height = 0.85, -- window height
win_width = 0.80, -- window width
win_row = 0.30, -- window row position (0=top, 1=bottom)
@ -222,8 +224,40 @@ require'fzf-lua'.setup {
win_border = { '╭', '─', '╮', '│', '╯', '─', '╰', '│' },
hl_normal = 'Normal', -- window normal color
hl_border = 'Normal', -- change to 'FloatBorder' if exists
fullscreen = false, -- start fullscreen?
},
-- fzf_bin = 'sk', -- use skim instead of fzf?
keymap = {
-- These override the default tables completely
-- no need to set to `false` to disable a bind
-- delete or modify is sufficient
builtin = {
-- neovim `:tmap` mappings for the fzf win
["<F2>"] = "toggle-fullscreen",
-- Only valid with the 'builtin' previewer
["<F3>"] = "toggle-preview-wrap",
["<F4>"] = "toggle-preview",
["<S-down>"] = "preview-page-down",
["<S-up>"] = "preview-page-up",
["<S-left>"] = "preview-page-reset",
},
fzf = {
-- fzf '--bind=' options
["ctrl-u"] = "unix-line-discard",
["ctrl-f"] = "half-page-down",
["ctrl-b"] = "half-page-up",
["ctrl-a"] = "beginning-of-line",
["ctrl-e"] = "end-of-line",
["alt-a"] = "toggle-all",
-- Only valid with fzf previewers (bat/cat/git/etc)
["f3"] = "toggle-preview-wrap",
["f4"] = "toggle-preview",
["shift-down"] = "preview-page-down",
["shift-up"] = "preview-page-up",
},
}
-- use skim instead of fzf?
-- https://github.com/lotabout/skim
-- fzf_bin = 'sk',
fzf_opts = {
-- options are sent as `<left>=<right>`
-- set to `false` to remove a flag
@ -235,19 +269,8 @@ require'fzf-lua'.setup {
['--height'] = '100%',
['--layout'] = 'reverse',
},
fzf_binds = { -- fzf '--bind=' options
["f2"] = "toggle-preview",
["f3"] = "toggle-preview-wrap",
["shift-down"] = "preview-page-down",
["shift-up"] = "preview-page-up",
["ctrl-u"] = "unix-line-discard",
["ctrl-f"] = "half-page-down",
["ctrl-b"] = "half-page-up",
["ctrl-a"] = "beginning-of-line",
["ctrl-e"] = "end-of-line",
["alt-a"] = "toggle-all",
},
--[[ fzf_colors = { -- fzf '--color=' options
-- fzf '--color=' options (optional)
--[[ fzf_colors = {
["fg"] = { "fg", "CursorLine" },
["bg"] = { "bg", "Normal" },
["hl"] = { "fg", "Comment" },
@ -294,22 +317,11 @@ require'fzf-lua'.setup {
title = true, -- preview title?
scrollbar = true, -- scrollbar?
scrollchar = '█', -- scrollbar character
wrap = false, -- wrap lines?
syntax = true, -- preview syntax highlight?
syntax_limit_l = 0, -- syntax limit (lines), 0=nolimit
syntax_limit_b = 1024*1024, -- syntax limit (bytes), 0=nolimit
expand = false, -- preview max size?
hl_cursor = 'Cursor', -- cursor highlight
hl_cursorline = 'CursorLine', -- cursor line highlight
hl_range = 'IncSearch', -- ranger highlight (not yet in use)
keymap = {
toggle_full = '<F2>', -- toggle full screen
toggle_wrap = '<F3>', -- toggle line wrap
toggle_hide = '<F4>', -- toggle on/off (not yet in use)
page_up = '<S-up>', -- preview scroll up
page_down = '<S-down>', -- preview scroll down
page_reset = '<S-left>', -- reset scroll to orig pos
},
},
},
-- provider setup

@ -249,6 +249,8 @@ Consult the list below for available settings:
-- "aboveleft new" : split above
-- "belowright vnew" : split right
-- "aboveleft vnew : split left
-- Only valid when using a float window
-- (i.e. when 'split' is not defined)
win_height = 0.85, -- window height
win_width = 0.80, -- window width
win_row = 0.30, -- window row position (0=top, 1=bottom)
@ -257,8 +259,40 @@ Consult the list below for available settings:
win_border = { '╭', '─', '╮', '│', '╯', '─', '╰', '│' },
hl_normal = 'Normal', -- window normal color
hl_border = 'Normal', -- change to 'FloatBorder' if exists
fullscreen = false, -- start fullscreen?
},
-- fzf_bin = 'sk', -- use skim instead of fzf?
keymap = {
-- These override the default tables completely
-- no need to set to `false` to disable a bind
-- delete or modify is sufficient
builtin = {
-- neovim `:tmap` mappings for the fzf win
["<F2>"] = "toggle-fullscreen",
-- Only valid with the 'builtin' previewer
["<F3>"] = "toggle-preview-wrap",
["<F4>"] = "toggle-preview",
["<S-down>"] = "preview-page-down",
["<S-up>"] = "preview-page-up",
["<S-left>"] = "preview-page-reset",
},
fzf = {
-- fzf '--bind=' options
["ctrl-u"] = "unix-line-discard",
["ctrl-f"] = "half-page-down",
["ctrl-b"] = "half-page-up",
["ctrl-a"] = "beginning-of-line",
["ctrl-e"] = "end-of-line",
["alt-a"] = "toggle-all",
-- Only valid with fzf previewers (bat/cat/git/etc)
["f3"] = "toggle-preview-wrap",
["f4"] = "toggle-preview",
["shift-down"] = "preview-page-down",
["shift-up"] = "preview-page-up",
},
}
-- use skim instead of fzf?
-- https://github.com/lotabout/skim
-- fzf_bin = 'sk',
fzf_opts = {
-- options are sent as `<left>=<right>`
-- set to `false` to remove a flag
@ -270,19 +304,8 @@ Consult the list below for available settings:
['--height'] = '100%',
['--layout'] = 'reverse',
},
fzf_binds = { -- fzf '--bind=' options
["f2"] = "toggle-preview",
["f3"] = "toggle-preview-wrap",
["shift-down"] = "preview-page-down",
["shift-up"] = "preview-page-up",
["ctrl-u"] = "unix-line-discard",
["ctrl-f"] = "half-page-down",
["ctrl-b"] = "half-page-up",
["ctrl-a"] = "beginning-of-line",
["ctrl-e"] = "end-of-line",
["alt-a"] = "toggle-all",
},
--[[ fzf_colors = { -- fzf '--color=' options
-- fzf '--color=' options (optional)
--[[ fzf_colors = {
["fg"] = { "fg", "CursorLine" },
["bg"] = { "bg", "Normal" },
["hl"] = { "fg", "Comment" },
@ -329,22 +352,11 @@ Consult the list below for available settings:
title = true, -- preview title?
scrollbar = true, -- scrollbar?
scrollchar = '█', -- scrollbar character
wrap = false, -- wrap lines?
syntax = true, -- preview syntax highlight?
syntax_limit_l = 0, -- syntax limit (lines), 0=nolimit
syntax_limit_b = 1024*1024, -- syntax limit (bytes), 0=nolimit
expand = false, -- preview max size?
hl_cursor = 'Cursor', -- cursor highlight
hl_cursorline = 'CursorLine', -- cursor line highlight
hl_range = 'IncSearch', -- ranger highlight (not yet in use)
keymap = {
toggle_full = '<F2>', -- toggle full screen
toggle_wrap = '<F3>', -- toggle line wrap
toggle_hide = '<F4>', -- toggle on/off (not yet in use)
page_up = '<S-up>', -- preview scroll up
page_down = '<S-down>', -- preview scroll down
page_reset = '<S-left>', -- reset scroll to orig pos
},
},
},
-- provider setup

@ -29,10 +29,34 @@ M.globals = {
borderchars = { '', '', '', '', '', '', '', '' },
hl_normal = 'Normal',
hl_border = 'Normal',
--[[ window_on_create = function()
-- Set popup background same as normal windows
vim.cmd("set winhl=Normal:Normal,FloatBorder:FloatBorder")
end, ]]
fullscreen = false,
window_on_create = function()
-- vim.cmd("set winhl=Normal:Normal,FloatBorder:Normal")
end,
},
keymap = {
builtin = {
["<F2>"] = "toggle-fullscreen",
-- Only valid with the 'builtin' previewer
["<F3>"] = "toggle-preview-wrap",
["<F4>"] = "toggle-preview",
["<S-down>"] = "preview-page-down",
["<S-up>"] = "preview-page-up",
["<S-left>"] = "preview-page-reset",
},
fzf = {
["ctrl-u"] = "unix-line-discard",
["ctrl-f"] = "half-page-down",
["ctrl-b"] = "half-page-up",
["ctrl-a"] = "beginning-of-line",
["ctrl-e"] = "end-of-line",
["alt-a"] = "toggle-all",
-- Only valid with fzf previewers (bat/cat/git/etc)
["f3"] = "toggle-preview-wrap",
["f4"] = "toggle-preview",
["shift-down"] = "preview-page-down",
["shift-up"] = "preview-page-up",
},
},
fzf_bin = nil,
fzf_opts = {
@ -42,25 +66,6 @@ M.globals = {
['--height'] = '100%',
['--layout'] = 'reverse',
},
fzf_binds = {
-- <F2> toggle preview
-- <F3> toggle preview text wrap
-- <C-f>|<C-b> half page down|up
-- <S-d>|<S-u> preview page down|up
-- <C-u> clear query
-- <A-a> toggle select-all
-- <A-q> send selected to quickfix
["f2"] = "toggle-preview",
["f3"] = "toggle-preview-wrap",
["shift-down"] = "preview-page-down",
["shift-up"] = "preview-page-up",
["ctrl-u"] = "unix-line-discard",
["ctrl-f"] = "half-page-down",
["ctrl-b"] = "half-page-up",
["ctrl-a"] = "beginning-of-line",
["ctrl-e"] = "end-of-line",
["alt-a"] = "toggle-all",
},
preview_border = 'border',
preview_wrap = 'nowrap',
preview_opts = 'nohidden',
@ -101,24 +106,12 @@ M.globals = {
title = true,
scrollbar = true,
scrollchar = '',
wrap = false,
syntax = true,
syntax_delay = 0,
syntax_limit_l = 0,
syntax_limit_b = 1024*1024,
expand = false,
hidden = false,
hl_cursor = 'Cursor',
hl_cursorline = 'CursorLine',
hl_range = 'IncSearch',
keymap = {
toggle_full = '<F2>', -- toggle full screen
toggle_wrap = '<F3>', -- toggle line wrap
toggle_hide = '<F4>', -- toggle on/off (not yet in use)
page_up = '<S-up>', -- preview scroll up
page_down = '<S-down>', -- preview scroll down
page_reset = '<S-left>', -- reset scroll to orig pos
},
_ctor = previewers.builtin.buffer_or_file,
},
},
@ -508,6 +501,7 @@ function M.normalize_opts(opts, defaults)
if not opts then opts = {} end
if not opts.fzf_opts then opts.fzf_opts = {} end
opts = vim.tbl_deep_extend("keep", opts, defaults)
opts.keymap = vim.tbl_deep_extend("keep", opts.keymap or {}, M.globals.keymap)
if defaults.winopts then
if not opts.winopts then opts.winopts = {} end
opts.winopts = vim.tbl_deep_extend("keep", opts.winopts, defaults.winopts)

@ -127,16 +127,16 @@ M.build_fzf_cli = function(opts)
for _, o in ipairs({
'fzf_info',
'fzf_ansi',
'fzf_binds',
'fzf_colors',
'fzf_layout',
'fzf_args',
'fzf_raw_args',
'fzf_cli_args',
'keymap',
}) do
opts[o] = opts[o] or config.globals[o]
end
opts.fzf_opts["--bind"] = M.create_fzf_binds(opts.fzf_binds)
opts.fzf_opts["--bind"] = M.create_fzf_binds(opts.keymap.fzf)
if opts.fzf_colors then
opts.fzf_opts["--color"] = M.create_fzf_colors(opts.fzf_colors)
end

@ -2,7 +2,6 @@ if not pcall(require, "fzf") then
return
end
local fzf = require "fzf"
local utils = require "fzf-lua.utils"
local config = require "fzf-lua.config"
@ -15,11 +14,27 @@ function M.setup(opts)
for k, _ in pairs(globals.winopts) do
if opts[k] ~= nil then globals.winopts[k] = opts[k] end
end
-- deprecate message for window_on_create
if globals.winopts.window_on_create then
utils.warn(
"setting highlights using 'window_on_create' is " ..
"deprecated, use 'winopts.hl_xxx' instead.")
-- backward compatibility for 'fzf_binds'
if opts.fzf_binds then
utils.warn("'fzf_binds' is deprecated, moved under 'keymap.fzf', see ':help fzf-lua-customization'")
globals.keymap.fzf = opts.fzf_binds
end
-- do not merge, override the bind tables
if opts.keymap and opts.keymap.fzf then
globals.keymap.fzf = opts.keymap.fzf
end
if opts.keymap and opts.keymap.builtin then
globals.keymap.builtin = opts.keymap.builtin
end
-- deprecated options
if globals.previewers.builtin.keymap then
utils.warn("'previewers.builtin.keymap' moved under 'keymap.builtin', see ':help fzf-lua-customization'")
end
if globals.previewers.builtin.wrap ~= nil then
utils.warn("'previewers.builtin.wrap' is not longer in use, set 'preview_wrap' to 'wrap' or 'nowrap' instead")
end
if globals.previewers.builtin.hidden ~= nil then
utils.warn("'previewers.builtin.hidden' is not longer in use, set 'preview_opts' to 'hidden' or 'nohidden' instead")
end
-- override BAT_CONFIG_PATH to prevent a
-- conflct with '$XDG_DATA_HOME/bat/config'

@ -13,9 +13,6 @@ Previewer.help_tags = {}
Previewer.man_pages = {}
Previewer.marks = {}
-- signgleton instance used for our keymappings
local _self = nil
-- Constructors call on Previewer.base.<o>()
for c, _ in pairs(Previewer) do
setmetatable(Previewer[c], {
@ -25,27 +22,6 @@ for c, _ in pairs(Previewer) do
})
end
function Previewer.base:setup_keybinds()
if not self.win or not self.win.fzf_bufnr then return end
local keymap_tbl = {
toggle_full = { module = 'previewer.builtin', fnc = 'base.toggle_full()' },
toggle_wrap = { module = 'previewer.builtin', fnc = 'base.toggle_wrap()' },
toggle_hide = { module = 'previewer.builtin', fnc = 'base.toggle_hide()' },
page_up = { module = 'previewer.builtin', fnc = 'base.scroll(-1)' },
page_down = { module = 'previewer.builtin', fnc = 'base.scroll(1)' },
page_reset = { module = 'previewer.builtin', fnc = 'base.scroll(0)' },
}
local function funcref_str(keymap)
return ([[<Cmd>lua require('fzf-lua.%s').%s<CR>]]):format(keymap.module, keymap.fnc)
end
for action, key in pairs(self.keymap) do
local keymap = keymap_tbl[action]
if keymap and not vim.tbl_isempty(keymap) and key ~= false then
api.nvim_buf_set_keymap(self.win.fzf_bufnr, 't', key,
funcref_str(keymap), {nowait = true, noremap = true})
end
end
end
function Previewer.base:new(o, opts, fzf_win)
self = setmetatable(previewer_base(o, opts), {
@ -54,14 +30,11 @@ function Previewer.base:new(o, opts, fzf_win)
)})
self.type = "builtin"
self.win = fzf_win
self.wrap = o.wrap
self.title = o.title
self.scrollbar = o.scrollbar
if o.scrollchar and type(o.scrollchar) == 'string' then
self.win.winopts.scrollchar = o.scrollchar
end
self.expand = o.expand or o.fullscreen
self.hidden = o.hidden
self.syntax = o.syntax
self.syntax_delay = o.syntax_delay
self.syntax_limit_b = o.syntax_limit_b
@ -69,9 +42,7 @@ function Previewer.base:new(o, opts, fzf_win)
self.hl_cursor = o.hl_cursor
self.hl_cursorline = o.hl_cursorline
self.hl_range = o.hl_range
self.keymap = o.keymap
self.backups = {}
_self = self
return self
end
@ -79,12 +50,11 @@ function Previewer.base:close()
self:restore_winopts(self.win.preview_winid)
self:clear_preview_buf()
self.backups = {}
_self = nil
end
function Previewer.base:gen_winopts()
return {
wrap = self.wrap,
wrap = self.win.preview_wrap,
number = true,
relativenumber = false,
cursorline = true,
@ -209,9 +179,7 @@ function Previewer.base:preview_window(_)
end
end
function Previewer.base.scroll(direction)
if not _self then return end
local self = _self
function Previewer.base:scroll(direction)
local preview_winid = self.win.preview_winid
if preview_winid < 0 or not direction then return end
@ -251,43 +219,6 @@ function Previewer.base.scroll(direction)
end
end
function Previewer.base.toggle_wrap()
if not _self then return end
local self = _self
self.wrap = not self.wrap
if self.win and self.win:validate_preview() then
api.nvim_win_set_option(self.win.preview_winid, 'wrap', self.wrap)
end
end
function Previewer.base.toggle_full()
if not _self then return end
local self = _self
self.expand = not self.expand
if self.win and self.win:validate_preview() then
self.win:redraw_preview()
end
end
function Previewer.base.toggle_hide()
if not _self then return end
local self = _self
self.hidden = not self.hidden
if self.win then
if self.win:validate_preview() then
self.win:close_preview()
self.win:redraw()
else
self.win:redraw()
self.win:redraw_preview()
self:display_last_entry()
end
end
-- close_preview() calls Previewer.base:close()
-- which will clear out our singleton so
-- we must save it again to call redraw
_self = self
end
function Previewer.buffer_or_file:new(o, opts, fzf_win)
self = setmetatable(Previewer.base(o, opts, fzf_win), {

@ -15,6 +15,34 @@ setmetatable(FzfWin, {
end,
})
function FzfWin:setup_keybinds()
if not self:validate() then return end
if not self.keymap or not self.keymap.builtin then return end
local keymap_tbl = {
['toggle-fullscreen'] = { module = 'win', fnc = 'toggle_fullscreen()' },
}
if self.previewer_is_builtin then
-- These maps are only valid for the builtin previewer
keymap_tbl = vim.tbl_deep_extend("keep", keymap_tbl, {
['toggle-preview'] = { module = 'win', fnc = 'toggle_preview()' },
['toggle-preview-wrap'] = { module = 'win', fnc = 'toggle_preview_wrap()' },
['preview-page-up'] = { module = 'win', fnc = 'preview_scroll(-1)' },
['preview-page-down'] = { module = 'win', fnc = 'preview_scroll(1)' },
['preview-page-reset'] = { module = 'win', fnc = 'preview_scroll(0)' },
})
end
local function funcref_str(keymap)
return ([[<Cmd>lua require('fzf-lua.%s').%s<CR>]]):format(keymap.module, keymap.fnc)
end
for key, action in pairs(self.keymap.builtin) do
local keymap = keymap_tbl[action]
if keymap and not vim.tbl_isempty(keymap) and action ~= false then
api.nvim_buf_set_keymap(self.fzf_bufnr, 't', key,
funcref_str(keymap), {nowait = true, noremap = true})
end
end
end
local generate_layout = function(winopts)
local row, col = winopts.row, winopts.col
local height, width = winopts.height, winopts.width
@ -123,6 +151,7 @@ local normalize_winopts = function(opts)
local scrollchar = raw.scrollchar or winopts.scrollchar
local hl_normal = raw.hl_normal or winopts.hl_normal
local hl_border = raw.hl_border or winopts.hl_border
local fullscreen = raw.fullscreen or winopts.fullscreen
-- normalize border option for nvim_open_win()
if border == false then
@ -153,6 +182,7 @@ local normalize_winopts = function(opts)
-- builtin previewer params
scrollchar = scrollchar,
preview_pos = prev_pos, preview_size = prev_size,
fullscreen = fullscreen
}
end
@ -197,6 +227,11 @@ function FzfWin.autoclose()
return _self._autoclose
end
local function opt_matches(opts, key, str)
local opt = opts[key] or config.globals[key]
return opt and opt:match(str)
end
function FzfWin:new(o)
if _self then
-- utils.warn("Please close fzf-lua before starting a new instance")
@ -206,6 +241,10 @@ function FzfWin:new(o)
o = o or {}
self = setmetatable({}, { __index = self })
self.winopts = normalize_winopts(o)
self.fullscreen = self.winopts.fullscreen
self.preview_wrap = not opt_matches(o, 'preview_wrap', 'nowrap')
self.preview_hidden = not opt_matches(o, 'preview_opts', 'nohidden')
self.keymap = o.keymap
self.previewer = o.previewer
self.previewer_type = o.previewer_type
self._orphaned_bufs = {}
@ -236,16 +275,16 @@ function FzfWin:fs_preview_layout(fs)
local preview_pos = self.winopts.preview_pos
local height_diff = 0
local width_diff = 0
if preview_pos == 'down' or preview_pos == 'up'then
if preview_pos == 'down' or preview_pos == 'up' then
width_diff = vim.o.columns - border_winopts.width
if preview_pos == 'down' then
height_diff = vim.o.lines - border_winopts.row - border_winopts.height - 3
height_diff = vim.o.lines - border_winopts.row - border_winopts.height - 2
elseif preview_pos == 'up' then
height_diff = border_winopts.row - border_winopts.height
end
prev_winopts.col = prev_winopts.col - width_diff/2
border_winopts.col = border_winopts.col - width_diff/2
elseif preview_pos == 'left' or preview_pos == 'right'then
elseif preview_pos == 'left' or preview_pos == 'right' then
height_diff = vim.o.lines - border_winopts.height - 2
if preview_pos == 'left' then
width_diff = border_winopts.col - border_winopts.width
@ -372,10 +411,9 @@ function FzfWin:redraw_preview()
return -1, -1
end
-- expand preview only if set by the previewer
if self._previewer and self._previewer.expand then
if not self.preview_hidden and self.fullscreen then
self.prev_winopts, self.border_winopts =
self:fs_preview_layout(self._previewer.expand)
self:fs_preview_layout(self.fullscreen)
end
if self:validate_preview() then
@ -406,17 +444,59 @@ function FzfWin:validate()
and api.nvim_win_is_valid(self.fzf_winid)
end
function FzfWin:fs_fzf_layout(fs, winopts)
if not fs or self.winopts.split then
return winopts
end
if not self.previewer_is_builtin or self.preview_hidden then
-- fzf previewer, expand to fullscreen
winopts.col = 0
winopts.row = 0
winopts.width = vim.o.columns
winopts.height = vim.o.lines - 4
else
local preview_pos = self.winopts.preview_pos
if preview_pos == 'down' or preview_pos == 'up' then
winopts.col = 0
winopts.width = vim.o.columns
if preview_pos == 'down' then
winopts.height = winopts.height + winopts.row
winopts.row = 0
elseif preview_pos == 'up' then
winopts.height = winopts.height + (vim.o.lines-winopts.row-winopts.height-4)
end
elseif preview_pos == 'left' or preview_pos == 'right'then
winopts.row = 0
winopts.height = vim.o.lines - 4
if preview_pos == 'right' then
winopts.width = winopts.width + winopts.col
winopts.col = 0
elseif preview_pos == 'left' then
winopts.width = winopts.width + (vim.o.columns-winopts.col-winopts.width-1)
end
end
end
return winopts
end
function FzfWin:redraw()
if self.winopts.split then return end
local hidden = self._previewer and self._previewer.hidden
local hidden = self._previewer and self.preview_hidden
local relative = self.winopts.relative or 'editor'
local columns, lines = vim.o.columns, vim.o.lines
if relative == 'win' then
columns, lines = vim.api.nvim_win_get_width(0), vim.api.nvim_win_get_height(0)
end
local winopts = self.winopts
if self.layout and not hidden then winopts = self.layout.fzf end
-- must use clone or fullscreen overrides our values
local winopts = utils.tbl_deep_clone(self.winopts)
if self.layout and not hidden then
winopts = utils.tbl_deep_clone(self.layout.fzf)
end
if self.fullscreen then winopts = self:fs_fzf_layout(self.fullscreen, winopts) end
local win_opts = {
width = winopts.width or math.min(columns - 4, math.max(80, columns - 20)),
height = winopts.height or math.min(lines - 4, math.max(20, lines - 10)),
@ -497,10 +577,8 @@ function FzfWin:create()
local hidden = self._previewer and self._previewer.hidden
if not hidden then self:redraw_preview() end
-- setup the keybinds for the builtin previewer
if self._previewer and self._previewer.setup_keybinds then
self._previewer:setup_keybinds()
end
-- setup the keybinds
self:setup_keybinds()
return {
src_bufnr = self.src_bufnr,
@ -616,4 +694,56 @@ function FzfWin:update_title(title)
api.nvim_buf_set_lines(border_buf, 0, 1, 1, {title})
end
-- keybind methods below
function FzfWin.toggle_fullscreen()
if not _self then return end
local self = _self
self.fullscreen = not self.fullscreen
if self and self:validate() then
self:redraw()
end
if self and self:validate_preview() then
self:redraw_preview()
end
end
function FzfWin.toggle_preview()
if not _self then return end
local self = _self
self.preview_hidden = not self.preview_hidden
if self.preview_hidden and self:validate_preview() then
self:close_preview()
self:redraw()
elseif not self.preview_hidden then
self:redraw()
self:redraw_preview()
if self._previewer and self._previewer.display_last_entry then
self._previewer:display_last_entry()
end
end
-- close_preview() calls FzfWin:close()
-- which will clear out our singleton so
-- we must save it again to call redraw
_self = self
end
function FzfWin.toggle_preview_wrap()
if not _self then return end
local self = _self
self.preview_wrap = not self.preview_wrap
if self and self:validate_preview() then
api.nvim_win_set_option(self.preview_winid, 'wrap', self.preview_wrap)
end
end
function FzfWin.preview_scroll(direction)
if not _self then return end
local self = _self
if self:validate_preview()
and self._previewer
and self._previewer.scroll then
self._previewer:scroll(direction)
end
end
return FzfWin

Loading…
Cancel
Save