diff --git a/.config/yazi/plugins/7z.yazi/init.lua b/.config/yazi/plugins/7z.yazi/init.lua index 128bdc4..c9165a7 100644 --- a/.config/yazi/plugins/7z.yazi/init.lua +++ b/.config/yazi/plugins/7z.yazi/init.lua @@ -4,6 +4,7 @@ function M:peek() local child = Command("7z") :args({ "l", + "-ba", tostring(self.file.url), }) :stdout(Command.PIPED) diff --git a/.config/yazi/plugins/imdl.yazi/init.lua b/.config/yazi/plugins/imdl.yazi/init.lua index c81a64c..2fbb443 100644 --- a/.config/yazi/plugins/imdl.yazi/init.lua +++ b/.config/yazi/plugins/imdl.yazi/init.lua @@ -3,6 +3,7 @@ local M = {} function M:peek() local child = Command("imdl") :args({ + "-t", "torrent", "show", tostring(self.file.url), diff --git a/.config/yazi/plugins/pdf2text.yazi/init.lua b/.config/yazi/plugins/pdf2text.yazi/init.lua new file mode 100644 index 0000000..1e2f9aa --- /dev/null +++ b/.config/yazi/plugins/pdf2text.yazi/init.lua @@ -0,0 +1,63 @@ +local M = {} + +function M:peek() + local child = Command("pdftotext") + :args({ + 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", + { tostring(math.max(0, i - limit)), only_if = tostring(self.file.url), upper_bound = "" } + ) + else + lines = lines:gsub("\t", string.rep(" ", PREVIEW.tab_size)) + ya.preview_widgets(self, { ui.Paragraph.parse(self.area, lines) }) + end +end + +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", { + tostring(math.max(0, cx.active.preview.skip + step)), + only_if = tostring(self.file.url), + }) + end +end + +function M:fallback_to_builtin() + local _, bound = ya.preview_code(self) + if bound then + ya.manager_emit("peek", { tostring(bound), only_if = tostring(self.file.url), upper_bound = "" }) + end +end + +return M \ No newline at end of file diff --git a/.config/yazi/yazi.toml b/.config/yazi/yazi.toml index 0b23632..654ac03 100644 --- a/.config/yazi/yazi.toml +++ b/.config/yazi/yazi.toml @@ -30,7 +30,7 @@ play = [ ] info = [ { exec = '''ffprobe -hide_banner "$1"; echo "Press enter to exit"; read''', block = true, desc = "Show ffprobe info", for = "unix" }, - { exec = '''ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$1"; echo "Press enter to exit"; read''', block = true, desc = "Show duration", for = "unix"} + { exec = '''printf "'${1##*/}' Duration: ";ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$1"; echo "Press enter to exit"; read''', block = true, desc = "Show duration", for = "unix"} ] [open] @@ -96,7 +96,7 @@ previewers = [ # Video { mime = "video/*", exec = "video" }, # PDF - { mime = "application/pdf", exec = "pdf" }, + { mime = "application/pdf", exec = "pdf2text" }, # Archive { mime = "application/zip", exec = "7z" }, { mime = "application/gzip", exec = "7z" }, @@ -109,8 +109,12 @@ previewers = [ { mime = "application/x-bittorrent;", exec = "imdl" }, { name = "*.torrent", exec = "imdl" }, - { mime = "application/octet-stream", exec = "hexyl" }, + # File Ext + # Switch ROM + { name = "*.nsp", exec = "file" }, + # Fallback + { mime = "application/octet-stream", exec = "hexyl" }, { name = "*", exec = "file" }, ]