diff --git a/README.md b/README.md index 6bf02823..79b96362 100644 --- a/README.md +++ b/README.md @@ -271,6 +271,8 @@ require("oil").setup({ preview_win = { -- Whether the preview window is automatically updated when the cursor is moved update_on_cursor_moved = true, + -- Maximum file size in megabytes to preview + max_file_size_mb = 100, }, -- Configuration for the floating action confirmation window confirmation = { diff --git a/doc/oil.txt b/doc/oil.txt index b4ebf1fd..32830365 100644 --- a/doc/oil.txt +++ b/doc/oil.txt @@ -156,6 +156,8 @@ CONFIG *oil-confi preview_win = { -- Whether the preview window is automatically updated when the cursor is moved update_on_cursor_moved = true, + -- Maximum file size in megabytes to preview + max_file_size_mb = 100, }, -- Configuration for the floating action confirmation window confirmation = { diff --git a/lua/oil/config.lua b/lua/oil/config.lua index 31e25f2a..17874b7c 100644 --- a/lua/oil/config.lua +++ b/lua/oil/config.lua @@ -141,6 +141,8 @@ local default_config = { preview_win = { -- Whether the preview window is automatically updated when the cursor is moved update_on_cursor_moved = true, + -- Maximum file size in megabytes to preview + max_file_size_mb = 100, }, -- Configuration for the floating action confirmation window confirmation = { @@ -323,11 +325,13 @@ local M = {} ---@class (exact) oil.PreviewWindowConfig ---@field update_on_cursor_moved boolean +---@field max_file_size_mb number ---@class (exact) oil.ConfirmationWindowConfig : oil.WindowConfig ---@class (exact) oil.SetupPreviewWindowConfig ---@field update_on_cursor_moved? boolean Whether the preview window is automatically updated when the cursor is moved +---@field max_file_size_mb? number Maximum file size in megabytes to preview ---@class (exact) oil.SetupConfirmationWindowConfig : oil.SetupWindowConfig diff --git a/lua/oil/init.lua b/lua/oil/init.lua index 600ccc5e..69f97802 100644 --- a/lua/oil/init.lua +++ b/lua/oil/init.lua @@ -452,6 +452,13 @@ M.open_preview = function(opts, callback) if not entry then return finish("Could not find entry under cursor") end + if entry.meta ~= nil and entry.meta.stat ~= nil then + if entry.meta.stat.size >= config.preview_win.max_file_size_mb * 1e6 then + return finish( + "File over " .. config.preview_win.max_file_size_mb .. "MB is too large to preview" + ) + end + end local entry_title = entry.name if entry.type == "directory" then entry_title = entry_title .. "/"