From c8973d5a17af6e3e85fa5dccb74a9c360acb0c5b Mon Sep 17 00:00:00 2001 From: bhagwan Date: Sun, 13 Mar 2022 12:57:12 -0700 Subject: [PATCH] builtin previewer ext map to lowercase, validate ueberzug scaler --- lua/fzf-lua/previewer/builtin.lua | 31 ++++++++++++++++++++++++++----- lua/fzf-lua/win.lua | 5 +++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/lua/fzf-lua/previewer/builtin.lua b/lua/fzf-lua/previewer/builtin.lua index 39915b7..ed3c4e0 100644 --- a/lua/fzf-lua/previewer/builtin.lua +++ b/lua/fzf-lua/previewer/builtin.lua @@ -24,9 +24,28 @@ function Previewer.base:new(o, opts, fzf_win) self.syntax_limit_b = o.syntax_limit_b self.syntax_limit_l = o.syntax_limit_l self.limit_b = o.limit_b - self.extensions = o.extensions - self.ueberzug_scaler = o.ueberzug_scaler self.backups = {} + -- convert extension map to lower case + if o.extensions then + self.extensions = {} + for k, v in pairs(o.extensions) do + self.extensions[k:lower()] = v + end + end + -- validatee the ueberzug image scaler + local uz_scalers = { + ["crop"] = "crop", + ["distort"] = "distort", + ["contain"] = "contain", + ["fit_contain"] = "fit_contain", + ["cover"] = "cover", + ["forced_cover"] = "forced_cover", + } + self.ueberzug_scaler = uz_scalers[o.ueberzug_scaler] + if o.ueberzug_scaler and not self.ueberzug_scaler then + utils.warn(("Invalid ueberzug image scaler '%s', option will be omitted.") + :format(o.ueberzug_scaler)) + end return self end @@ -266,8 +285,6 @@ function Previewer.buffer_or_file:parse_entry(entry_str) end function Previewer.buffer_or_file:should_clear_preview(_) - -- must redraw when using ueberzug - if self._ueberzug_fifo then return true end return false end @@ -325,6 +342,9 @@ function Previewer.buffer_or_file:populate_terminal_cmd(tmpbuf, cmd, entry) -- correct size self.loaded_entry = nil self.do_not_set_winopts = true + -- both ueberzug and terminal cmds need a clear + -- on redraw to fit the new window dimentions + self.clear_on_redraw = true self:set_preview_buf(tmpbuf) if cmd[1]:match("ueberzug") then local fifo = self:start_ueberzug() @@ -390,6 +410,7 @@ function Previewer.buffer_or_file:populate_preview_buf(entry_str) end -- mark terminal buffers so we don't call 'set_winopts' -- mark uri entries so we do not delete the preview buffer + self.clear_on_redraw = false self.do_not_unload = (entry.uri ~= nil) self.do_not_set_winopts = entry.terminal if entry.bufnr and api.nvim_buf_is_loaded(entry.bufnr) then @@ -423,7 +444,7 @@ function Previewer.buffer_or_file:populate_preview_buf(entry_str) local tmpbuf = self:get_tmp_buffer() if self.extensions and not vim.tbl_isempty(self.extensions) then local ext = path.extension(entry.path) - local cmd = ext and self.extensions[ext] + local cmd = ext and self.extensions[ext:lower()] if cmd and self:populate_terminal_cmd(tmpbuf, cmd, entry) then -- will return 'false' when cmd isn't executable -- if we get here it means preview was successful diff --git a/lua/fzf-lua/win.lua b/lua/fzf-lua/win.lua index 7c2ad8a..3cc0626 100644 --- a/lua/fzf-lua/win.lua +++ b/lua/fzf-lua/win.lua @@ -596,6 +596,11 @@ function FzfWin:redraw() win_opts.col = winopts.col or math.floor((columns - win_opts.width) / 2) if self:validate() then + if self._previewer + and self._previewer.clear_on_redraw + and self._previewer.clear_preview_buf then + self._previewer:clear_preview_buf() + end api.nvim_win_set_config(self.fzf_winid, win_opts) else -- save 'cursorline' setting prior to opening the popup