summaryrefslogtreecommitdiff
path: root/yazi/plugins/glow.yazi/main.lua
diff options
context:
space:
mode:
Diffstat (limited to 'yazi/plugins/glow.yazi/main.lua')
-rw-r--r--yazi/plugins/glow.yazi/main.lua64
1 files changed, 64 insertions, 0 deletions
diff --git a/yazi/plugins/glow.yazi/main.lua b/yazi/plugins/glow.yazi/main.lua
new file mode 100644
index 0000000..8883feb
--- /dev/null
+++ b/yazi/plugins/glow.yazi/main.lua
@@ -0,0 +1,64 @@
+local M = {}
+
+function M:peek(job)
+ -- Set a fixed width of 50 characters for the preview
+ local preview_width = 55
+
+ local child = Command("glow")
+ :args({
+ "--style",
+ "dark",
+ "--width",
+ tostring(preview_width), -- Use fixed width instead of job.area.w
+ tostring(job.file.url),
+ })
+ :env("CLICOLOR_FORCE", "1")
+ :stdout(Command.PIPED)
+ :stderr(Command.PIPED)
+ :spawn()
+
+ if not child then
+ return require("code").peek(job)
+ end
+
+ local limit = job.area.h
+ local i, lines = 0, ""
+ repeat
+ local next, event = child:read_line()
+ if event == 1 then
+ return require("code").peek(job)
+ elseif event ~= 0 then
+ break
+ end
+
+ i = i + 1
+ if i > job.skip then
+ lines = lines .. next
+ end
+ until i >= job.skip + limit
+
+ child:start_kill()
+ if job.skip > 0 and i < job.skip + limit then
+ ya.mgr_emit("peek", {
+ tostring(math.max(0, i - limit)),
+ only_if = job.file.url,
+ upper_bound = true
+ })
+ else
+ lines = lines:gsub("\t", string.rep(" ", rt.preview.tab_size))
+ ya.preview_widgets(job, { ui.Text.parse(lines):area(job.area) })
+ end
+end
+
+function M:seek(job)
+ local h = cx.active.current.hovered
+ if not h or h.url ~= job.file.url then
+ return
+ end
+ ya.mgr_emit('peek', {
+ math.max(0, cx.active.preview.skip + job.units),
+ only_if = job.file.url,
+ })
+end
+
+return M