Eisa01 / mpv-scripts

This repository contain scripts I have made for mpv media player...

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SmartCopyPaste Copy Folder Name?

AziRizvi opened this issue · comments

Is there some way to configure SmartCopyPaste to copy the folder name from which the current file is playing out of?
If it's not possible then can I please request this feature?

Since it's possible to copy the full path

H:\Anime[SubsPlease] One Piece - 1075 (720p) [C7C4531E].mkv

It should be possible to trim everything else out and you'd be just left with final output of Anime

I'm using Script Version: SmartCopyPaste_II 3.1.

Thankyou very much for all of your scripts, I've started using SmartSkip and it's amazing!

Glad you like it.
For SmartCopyPaste, I will do a code review, in the near future hopefully.
Since there are multiple features needed. Once I do that, I'll be sure to include this as well.

I am thinking there should be a way to select which parameters to copy and the option to put any parameter you want to copy, to any keybind.
Just the idea, stuff like the below:
copy_keybind=[ ["ctrl+c", "${path}+${filename}+${timepos}"], ["ctrl+x,", "${dirname}"] ]

Also another idea is selective copy, in which a GUI is presented to select the parameter you want to copy. (Looks like too much work, it is only an idea for now)
selective_copy_parameters=["${path}/n${dirname}/n${timepos}/n${filename}\n${path}+${dirname}"]

I will keep the issue open, so I look at this later when conducting the review.

I wrote a small Lua Script for copying the Parent Directory Name from which the current file is playing out of and I thought I should share this so maybe it helps you when you ultimately want to incorporate this functionality in your script and also if anyone needs to use this for now..

I created the code with the help of ChatGPT and I've tested it on various folder names and its working absolutely fine..
The Keybind to trigger the script is MBTN_MID_DBL which people can change..

local mp = require 'mp'
local utils = require 'mp.utils'

local o = {
    copy_parent_directory_keybind = 'MBTN_MID_DBL',
}

function bind_keys(keys, name, func, opts)
    if not keys or keys == '' then
        mp.add_key_binding(nil, name, func, opts)
        return
    end

    for key in string.gmatch(keys, "[^%s]+") do
        mp.add_key_binding(key, name, func, opts)
    end
end

function is_local_file(path)
    return path ~= nil and string.find(path, '://') == nil
end

function copy_parent_directory()
    local path = mp.get_property_native('path')

    if is_local_file(path) then
        local _, _, parent_directory = string.find(path, "([^\\/]+)[\\/][^\\/]+$")
        mp.command(string.format('run powershell -command "Add-Type -AssemblyName PresentationCore; [Windows.Clipboard]::SetText(\'%s\')"', parent_directory))
        mp.osd_message('Parent Directory Name Copied To Clipboard')
    end
end

bind_keys(o.copy_parent_directory_keybind, 'copy-parent-directory', copy_parent_directory)

In case anyone who's reading this doesn't want to use the Lua Script I posted above for whatever reason, here's an alternative approach that I personally find better to use.

I have the following entry in my input.conf
Shift+Ins run "R:\MPV\CopyParentDirectoryName.bat" "${path}"

The Shift+Ins command launches a batch file that I have saved in my computer and it passes the $path argument when starting the batch file, this $path argument passes on the path of the currently playing/open file to the batch file and the batch file then extracts the name of the parent directory from the path.

This is the code of said batch file.
Save it as whatever name you want to in whatever directory you want to and then just call it with a keybind and you will be able to get the name of the Parent Directory directly copied into your clipboard. Hope this helps someone.

  @echo off
    
    REM Extract the last folder name and redirect it directly to a Temp File
    for %%I in ("%~dp1.") do echo %%~nxI > Temp.txt
    
    REM Run PowerShell to trim spaces and copy the content to the clipboard
    powershell -command "& {(Get-Content Temp.txt).Trim()} | Set-Clipboard"