From 8b87c1bb6a00ce7b0a23a31132715f6622f2a92b Mon Sep 17 00:00:00 2001 From: Davey Hughes Date: Fri, 17 Oct 2025 17:28:18 -0700 Subject: [PATCH] Add enabled filetypes option --- README.md | 5 +++++ lua/scrollEOF.lua | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index afcc1c4..82660e8 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,10 @@ require('scrollEOF').setup({ floating = true, -- List of filetypes to disable scrollEOF for. disabled_filetypes = { 'terminal' }, + -- List of filetypes to enable scrollEOF for. + -- When empty, scrollEOF is enabled for all filetypes except the disabled_filetypes. + -- When specified, scrollEOF is only enabled for the listed filetypes. + enabled_filetyles = {}, -- List of modes to disable scrollEOF for. see https://neovim.io/doc/user/builtin.html#mode() disabled_modes = { 't', 'nt' }, }) @@ -60,3 +64,4 @@ require('scrollEOF').setup({ > [!NOTE] > When using large `scrolloff` values i.e. larger than half of the number of lines on the screen, this plugin will override the `scrolloff` value to be half of the screen lines to avoid conflict from vim trying to prevent scrolloff when reaching end of file. + diff --git a/lua/scrollEOF.lua b/lua/scrollEOF.lua index 1a5f2f3..7696efa 100644 --- a/lua/scrollEOF.lua +++ b/lua/scrollEOF.lua @@ -4,8 +4,16 @@ local mode_disabled = false local initial_scrolloff = vim.o.scrolloff local scrolloff = vim.o.scrolloff +local function filetype_disabled() + if next(M.opts.enabled_filetypes) == nil then + return M.opts.disabled_filetypes[vim.o.filetype] == true + else + return M.opts.enabled_filetypes[vim.o.filetype] == nil + end +end + local function is_disabled() - return mode_disabled or M.opts.disabled_filetypes[vim.o.filetype] == true + return mode_disabled or filetype_disabled() end local function check_eof_scrolloff(ev) @@ -46,6 +54,7 @@ local default_opts = { insert_mode = false, floating = true, disabled_filetypes = { 'terminal' }, + enabled_filetypes = {}, disabled_modes = { 't', 'nt' }, } @@ -89,6 +98,12 @@ M.setup = function(opts) end M.opts.disabled_filetypes = disabled_filetypes_hashmap + local enabled_filetypes_hashmap = {} + for _, val in pairs(M.opts.enabled_filetypes) do + enabled_filetypes_hashmap[val] = true + end + M.opts.enabled_filetypes = enabled_filetypes_hashmap + local disabled_modes_hashmap = {} for _, val in pairs(M.opts.disabled_modes) do disabled_modes_hashmap[val] = true