local mp = require 'mp' require 'mp.msg' -- Copy the current time of the video to clipboard. WINDOWS = 2 UNIX = 3 KEY_BIND = "y" local function platform_type() local utils = require 'mp.utils' local workdir = utils.to_string(mp.get_property_native("working-directory")) if string.find(workdir, "\\") then return WINDOWS else return UNIX end end local function command_exists(cmd) local pipe = io.popen("type " .. cmd .. " > /dev/null 2> /dev/null; printf \"$?\"", "r") if not pipe then return end local exists = pipe:read() == "0" pipe:close() return exists end local function get_clipboard_cmd() if command_exists("xclip") then return "xclip -silent -in -selection clipboard" elseif command_exists("wl-copy") then return "wl-copy" elseif command_exists("pbcopy") then return "pbcopy" else mp.msg.error("No supported clipboard command found") return false end end local function divmod(a, b) return a / b, a % b end local function set_clipboard(text) if platform == WINDOWS then mp.commandv("run", "powershell", "set-clipboard", text) return true elseif (platform == UNIX and clipboard_cmd) then local pipe = io.popen(clipboard_cmd, "w") if not pipe then return end pipe:write(text) pipe:close() return true else mp.msg.error("Set_clipboard error") return false end end local function copyTime() local time_pos = mp.get_property_number("time-pos") local minutes, remainder = divmod(time_pos, 60) local hours, minutes = divmod(minutes, 60) local seconds = math.floor(remainder) local milliseconds = math.floor((remainder - seconds) * 1000) local time = string.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, milliseconds) if set_clipboard(time) then mp.osd_message(string.format("[copytime] %s", time)) else mp.osd_message("[copytime] failed") end end platform = platform_type() if platform == UNIX then clipboard_cmd = get_clipboard_cmd() end mp.add_key_binding(KEY_BIND, "copyTime", copyTime)