summaryrefslogtreecommitdiff
path: root/fedora/.config/yazi/plugins/jump-to-char.yazi/main.lua
blob: 8a434f192a76df6bf4baa562bb8d226e32b9c7cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
--- @since 25.5.31

local AVAILABLE_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789."

local changed = ya.sync(function(st, new)
	local b = st.last ~= new
	st.last = new
	return b or not cx.active.finder
end)

local escape = function(s) return s == "." and "\\." or s end

return {
	entry = function()
		local cands = {}
		for i = 1, #AVAILABLE_CHARS do
			cands[#cands + 1] = { on = AVAILABLE_CHARS:sub(i, i) }
		end

		local idx = ya.which { cands = cands, silent = true }
		if not idx then
			return
		end

		local kw = escape(cands[idx].on)
		if changed(kw) then
			ya.emit("find_do", { "^" .. kw })
		else
			ya.emit("find_arrow", {})
		end
	end,
}