Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,15 @@ 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' },
})
```

> [!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.

17 changes: 16 additions & 1 deletion lua/scrollEOF.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -46,6 +54,7 @@ local default_opts = {
insert_mode = false,
floating = true,
disabled_filetypes = { 'terminal' },
enabled_filetypes = {},
disabled_modes = { 't', 'nt' },
}

Expand Down Expand Up @@ -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
Expand Down