mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
This commit adds rudimentary types for the internal lua code. This does not have a big effect on its own, but it can be a part of a bigger effort to add types to the codebase. The types are only usable within yazi itself and are not published for plugin developers to use (yet). I only added types for the things that are defined in the lua side of the codebase. This means most of the useful typing is still missing. I want to add that separately, as it would be difficult to keep the types in sync with the actual codebase.
65 lines
1.3 KiB
Lua
65 lines
1.3 KiB
Lua
local M = {}
|
|
|
|
---@return nil
|
|
function M:peek()
|
|
local child = Command("jq")
|
|
:args({
|
|
"-C",
|
|
"--tab",
|
|
".",
|
|
tostring(self.file.url),
|
|
})
|
|
:stdout(Command.PIPED)
|
|
:stderr(Command.PIPED)
|
|
:spawn()
|
|
|
|
if not child then
|
|
return self:fallback_to_builtin()
|
|
end
|
|
|
|
local limit = self.area.h
|
|
local i, lines = 0, ""
|
|
repeat
|
|
local next, event = child:read_line()
|
|
if event == 1 then
|
|
return self:fallback_to_builtin()
|
|
elseif event ~= 0 then
|
|
break
|
|
end
|
|
|
|
i = i + 1
|
|
if i > self.skip then
|
|
lines = lines .. next
|
|
end
|
|
until i >= self.skip + limit
|
|
|
|
child:start_kill()
|
|
if self.skip > 0 and i < self.skip + limit then
|
|
ya.manager_emit("peek", { math.max(0, i - limit), only_if = self.file.url, upper_bound = true })
|
|
else
|
|
lines = lines:gsub("\t", string.rep(" ", PREVIEW.tab_size))
|
|
ya.preview_widgets(self, { ui.Paragraph.parse(self.area, lines) })
|
|
end
|
|
end
|
|
|
|
---@return nil
|
|
function M:seek(units)
|
|
local h = cx.active.current.hovered
|
|
if h and h.url == self.file.url then
|
|
local step = math.floor(units * self.area.h / 10)
|
|
ya.manager_emit("peek", {
|
|
math.max(0, cx.active.preview.skip + step),
|
|
only_if = self.file.url,
|
|
})
|
|
end
|
|
end
|
|
|
|
---@return nil
|
|
function M:fallback_to_builtin()
|
|
local _, bound = ya.preview_code(self)
|
|
if bound then
|
|
ya.manager_emit("peek", { bound, only_if = self.file.url, upper_bound = true })
|
|
end
|
|
end
|
|
|
|
return M
|