CodeSnips

Add key binding to delete currently-playing file in mpv

Config to bind Ctrl+DEL to mark a video for deletion while watching it. Press again to unmark it. Deletion is performed when mpv exits.

This is useful for sorting through e.g. videos and photos taken on a phone where you want to clear out things you don’t want to keep but do so while playing/viewing them.

Save as e.g. $HOME/.config/mpv/scripts/delete_file.lua

local utils = require "mp.utils"

del_list = {}

function contains_item(l, i)
   for k, v in pairs(l) do
      if v == i then
         mp.osd_message("undeleting current file")
         l[k] = nil
         return true
      end
   end
   mp.osd_message("deleting current file")
   return false
end

function mark_delete()
   local work_dir = mp.get_property_native("working-directory")
   local file_path = mp.get_property_native("path")
   local s = file_path:find(work_dir, 0, true)
   local final_path
   if s and s == 0 then
      final_path = file_path
   else
      final_path = utils.join_path(work_dir, file_path)
   end
   if not contains_item(del_list, final_path) then
      table.insert(del_list, final_path)
   end
end

function delete()
   for i, v in pairs(del_list) do
      print("deleting: "..v)
      os.remove(v)
   end
end

mp.add_key_binding("ctrl+DEL", "delete_file", mark_delete)
mp.register_event("shutdown", delete)