local notify = function(text) ya.notify({ title = "Rip", content = text, timeout = 2, }) end local selected_or_hovered = ya.sync(function() local tab, urls = cx.active, {} if #tab.selected > 0 then for _, u in pairs(tab.selected) do urls[#urls + 1] = tostring(u) end end if #urls == 0 and tab.current.hovered then urls[1] = tostring(tab.current.hovered.url) end return urls end) local confirm_remove = function(file) local title = "Remove " .. file .. "? y/n/a/c " local w = #title local input, event = ya.input({ title = title, value = "y", position = { "center", w = w }, }) if event ~= 1 then return "c" end if input == "y" then return "y" elseif input == "a" then return "a" elseif input == "n" then return "n" else return "c" end end local remove_file = function(file) local notify_success = function(name) ya.notify({ title = "Rip File", content = "Burried " .. name, timeout = 2, }) end local notify_error = function(name) ya.notify({ title = "Rip File", content = "Error removing " .. name, timeout = 2, }) end local status, err = Command("rip"):arg(file):status() if not status or status.code ~= 0 then notify_error(file) else notify_success(file) end end --- @sync entry return { entry = function() ya.mgr_emit("escape", { visual = true }) local files = selected_or_hovered() local confirm_all = false for _, file in ipairs(files) do if not confirm_all then local should_remove = confirm_remove(file) if should_remove == "n" then goto continue elseif should_remove ~= "y" and should_remove ~= "a" then return elseif should_remove == "a" then confirm_all = true end end remove_file(file) ::continue:: end end, }