diff options
| author | Ariel D'Alessandro <dalessandro.ariel@gmail.com> | 2023-05-03 21:17:29 +0200 |
|---|---|---|
| committer | Ariel D'Alessandro <dalessandro.ariel@gmail.com> | 2023-05-04 09:08:30 +0200 |
| commit | 3b9945061ce45d856ae4cc1a905c85d3db948b6c (patch) | |
| tree | c369c9d712751380cbba78ff62edc94cf7a651ea /lua/alpha/animations.lua | |
| parent | 6267e5222d80aa0beb3a933676d3157c27a9d03f (diff) | |
| download | nvim-conf-3b9945061ce45d856ae4cc1a905c85d3db948b6c.tar.gz nvim-conf-3b9945061ce45d856ae4cc1a905c85d3db948b6c.zip | |
add animation
Diffstat (limited to 'lua/alpha/animations.lua')
| -rw-r--r-- | lua/alpha/animations.lua | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lua/alpha/animations.lua b/lua/alpha/animations.lua new file mode 100644 index 0000000..c0b7a6c --- /dev/null +++ b/lua/alpha/animations.lua @@ -0,0 +1,50 @@ +local redraw_buffer = function() + local Animation = require "animation" + local fps = 45 -- frames per second + local easing = require "animation.easing" + + local buffer = 0 + local len = 0 + local place_holder = {} + + local lines = vim.api.nvim_buf_get_lines(buffer, 0, -1, true) + + for _, line in ipairs(lines) do + len = len + string.len(line) + table.insert(place_holder, "") + end + + vim.api.nvim_buf_set_lines(buffer, 0, #lines, true, place_holder) + + local duration = math.ceil(len / fps * 1000) + + local i = 1 + local line_nr = 1 + local insertLine = "" + + local function callback() + if lines[line_nr] == nil then + return true + end + local char = string.sub(lines[line_nr], i, i) + if char == nil then + return true + end + insertLine = insertLine .. char + i = i + 1 + vim.api.nvim_buf_set_lines(buffer, line_nr - 1, line_nr, true, { insertLine }) + + if insertLine == lines[line_nr] then + i = 1 + line_nr = line_nr + 1 + insertLine = "" + end + end + + local animation = Animation(duration, fps, easing.line, callback) + animation:run() +end + +return { + redraw_buffer = redraw_buffer, +} |