diff --git a/lazy-lock.json b/lazy-lock.json index d583fb47..84ac23e7 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -13,6 +13,7 @@ "mason-lspconfig.nvim": { "branch": "main", "commit": "56e435e09f8729af2d41973e81a0db440f8fe9c9" }, "mason.nvim": { "branch": "main", "commit": "41e75af1f578e55ba050c863587cffde3556ffa6" }, "neodev.nvim": { "branch": "main", "commit": "029899ea32d3dc8ed8c910ceca2ee5d16e566c11" }, + "neoscroll.nvim": { "branch": "master", "commit": "be4ebf855a52f71ca4338694a5696675d807eff9" }, "nvim-blame-line": { "branch": "master", "commit": "b3d94f0ed5882d3d1c843c69788b9670476e1f42" }, "nvim-cmp": { "branch": "main", "commit": "538e37ba87284942c1d76ed38dd497e54e65b891" }, "nvim-lspconfig": { "branch": "master", "commit": "9099871a7c7e1c16122e00d70208a2cd02078d80" }, @@ -22,6 +23,7 @@ "plenary.nvim": { "branch": "master", "commit": "55d9fe89e33efd26f532ef20223e5f9430c8b0c0" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "6c921ca12321edaa773e324ef64ea301a1d0da62" }, "telescope.nvim": { "branch": "0.1.x", "commit": "d90956833d7c27e73c621a61f20b29fdb7122709" }, + "typescript-tools.nvim": { "branch": "master", "commit": "829b5dc4f6704b249624e5157ad094dcb20cdc6b" }, "vim-fugitive": { "branch": "master", "commit": "59659093581aad2afacedc81f009ed6a4bfad275" }, "vim-rhubarb": { "branch": "master", "commit": "ee69335de176d9325267b0fd2597a22901d927b1" }, "vim-sleuth": { "branch": "master", "commit": "1cc4557420f215d02c4d2645a748a816c220e99b" }, diff --git a/lua/custom/plugins/scroll.lua b/lua/custom/plugins/scroll.lua new file mode 100644 index 00000000..5765898c --- /dev/null +++ b/lua/custom/plugins/scroll.lua @@ -0,0 +1,48 @@ +return { + 'karb94/neoscroll.nvim', + config = function() + local neoscroll = require("neoscroll") + + local easing = "sine" + local zz_time_ms = 100 + local jump_time_ms = 200 + + local centering_function = function() + local defer_time_ms = 10 + -- The `defer_fn` is a bit of a hack. + -- We use it so that `neoscroll.init.scroll` will be false when we call `neoscroll.zz` + -- As long as we don't input another neoscroll mapping in the timeout, + -- we should be able to center the cursor. + vim.defer_fn(function() + neoscroll.zz(zz_time_ms, easing) + end, defer_time_ms) + end + + neoscroll.setup({ + pre_hook = function() + vim.opt.eventignore:append({ + 'WinScrolled', + 'CursorMoved', + }) + end, + post_hook = function(info) + vim.opt.eventignore:remove({ + 'WinScrolled', + 'CursorMoved', + }) + if info ~= "center" then + return + end + + centering_function() + end, + }) + + local mappings = {} + + mappings[""] = { "scroll", { "-vim.wo.scroll", "true", jump_time_ms, easing, "'center'" } } + mappings[""] = { "scroll", { "vim.wo.scroll", "true", jump_time_ms, easing, "'center'" } } + + require("neoscroll.config").set_mappings(mappings) + end, +}