Files
u.nvim/lua/u/repeat.lua
Jonathan Apodaca b00d8d2fa7
Some checks failed
ci / ci (push) Failing after 3m9s
pass 1: get rid of obsolete modules
2026-04-04 10:19:23 -06:00

41 lines
1.1 KiB
Lua

local M = {}
local IS_REPEATING = false
--- @type function|nil
local REPEAT_ACTION = nil
local function is_repeatable_last_mutator() return vim.b.changedtick <= (vim.b.my_changedtick or 0) end
--- @param f fun()
function M.run_repeatable(f)
REPEAT_ACTION = f
---@diagnostic disable-next-line: need-check-nil
REPEAT_ACTION()
vim.b.my_changedtick = vim.b.changedtick
end
function M.is_repeating() return IS_REPEATING end
function M.setup()
vim.keymap.set('n', '.', function()
IS_REPEATING = true
for _ = 1, vim.v.count1 do
if is_repeatable_last_mutator() and type(REPEAT_ACTION) == 'function' then
M.run_repeatable(REPEAT_ACTION)
else
vim.cmd { cmd = 'normal', args = { '.' }, bang = true }
end
end
IS_REPEATING = false
end)
vim.keymap.set('n', 'u', function()
local was_repeatable_last_mutator = is_repeatable_last_mutator()
for _ = 1, vim.v.count1 do
vim.cmd { cmd = 'normal', args = { 'u' }, bang = true }
end
if was_repeatable_last_mutator then vim.b.my_changedtick = vim.b.changedtick end
end)
end
return M