Skip to main content

nvrim/plugins/
scrolloff.rs

1//! Scrolloff configuration utilities.
2
3use nvim_oxi::api::Window;
4use nvim_oxi::api::opts::CreateAutocmdOptsBuilder;
5use nvim_oxi::api::types::AutocmdCallbackArgs;
6
7/// Creates an autocmd to update scrolloff on window events.
8pub fn create_autocmd() {
9    crate::cmds::create_autocmd(
10        ["BufEnter", "WinEnter", "WinNew", "VimResized"],
11        "ScrolloffFraction",
12        CreateAutocmdOptsBuilder::default().patterns(["*"]).callback(callback),
13    );
14}
15
16/// Callback for scrolloff autocmd.
17fn callback(_: AutocmdCallbackArgs) -> bool {
18    let Ok(height) = Window::current().get_height().inspect_err(|err| {
19        ytil_noxi::notify::error(format!("error getting Neovim window height | error={err:#?}"));
20    }) else {
21        return false;
22    };
23    let scrolloff = height / 2;
24    crate::vim_opts::set("scrolloff", scrolloff, &crate::vim_opts::global_scope());
25    false
26}