Velvet Star Monitor

Standout celebrity highlights with iconic style.

updates

VLC: How to delete file on disk

Writer Matthew Barrera

I download videos from Youtube to watch later. I use VLC to watch the videos and when I am done watching a video I would like to remove the file on disk directly from VLC.

I have found several guides on how to implement this, but none of them work for me:

If I follow those nothing happens: No buttons and if there is a keyboard shortcut I am not being told.

So how do I get a button/keyboard shortcut in VLC to delete the video file currently playing from disk?

I use VLC 2.0.8 on GNU/Linux Mint.

1

3 Answers

So put the file in ~/.local/share/vlc/lua/extensions. I call it DeleteFile.lua.

When you start VLC you get a new menu item: View > Detetefile. It is this last step I was missing.

Edit 20200306

The code did not work very well. I changed it:

It now searches for a dir called .waste in the dir of the file and any (grand*)parent dirs, and moves the file there. So you need to create a dir called .waste.

When you start VLC you get a new menu item: View > Move currently playing file into wastebasket.

7
--[[ Copyright 2015-2016 surrim This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <
]]--
function descriptor() return { title = "VLC Delete"; version = "0.1"; author = "surrim"; url = ""; shortdesc = "Remove current file from playlist and disk"; description = [[
<h1>vlc-delete</h1>"
When you're playing a file, use VLC Delete to
delete the current file from your playlist and <b>disk</b> with one click.<br>
This extension has been tested on GNU Linux with VLC 2.1.5.<br>
The author is not responsible for damage caused by this extension. ]]; }
end
-- Windows - Check if file exists
function fileExists(file) return io.popen("if exist "..file.." (echo 1)"):read'*l'=='1'
end
function sleep(n) -- seconds local t0 = os.clock() local tOriginal=t0 while os.clock() - t0 <= n and os.clock()>=tOriginal do end
end
-- Windows - try and delete a file with multiple attempts and a pause between each try - waiting for the file to unlock
function windowsDelete(file,trys,pause) if not fileExists('"'..file..'"') then return nil,'File does not exist' end for i = trys,1,-1 do retval, err = os.remove(file) --retval, err = os.execute('del ' .. file ) if retval==true then return true end sleep(pause) -- wish i had a better timer than one second, want misc.mdate..could just bash it but you shouldnt ever wait more than one second so meh end return {nil,'Unable to delete file'}
end
function removeItem() local id = vlc.playlist.current() vlc.playlist.delete(id) vlc.playlist.gotoitem(id + 1) vlc.deactivate()
end
function activate() local item = vlc.input.item() local uri = item:uri() uri = string.gsub(uri, '^file:///', '') uri = vlc.strings.decode_uri(uri) vlc.msg.info("[vlc-delete] removing: " .. uri) -- check for non windows if (package.config:sub(1,1) == "/") then retval, err = os.execute("trash-put --help > /dev/null") if (retval ~= nil) then uri = "/" .. uri retval, err = os.execute("trash-put \"" .. uri .. "\"") else retval, err = os.execute("rm --help > /dev/null") if (retval ~= nil) then uri = "/" .. uri retval, err = os.execute("rm \"" .. uri .. "\"") end end if (retval ~= nil) then removeItem() end else --windows, remove from playlist first so the file isnt locked by vlc removeItem() uri = string.gsub(uri, "/", "\\") retval, err = windowsDelete(uri,3,1) end if (retval == nil) then vlc.msg.info("[vlc-delete] error: " .. err) d = vlc.dialog("VLC Delete") d:add_label("Could not remove \"" .. uri .. "\"", 1, 1, 1, 1) d:add_label(err, 1, 2, 1, 1) d:add_button("OK", click_ok, 1, 3, 1, 1) d:show() end
end
function click_ok() d:delete() vlc.deactivate()
end
function deactivate() vlc.deactivate()
end
function close() deactivate()
end
function meta_changed()
end

--[[
INSTALLATION (create directories if they donot exist):
- put the file in the VLC subdir /lua/extensions, by default:
* Windows (all users): %ProgramFiles%\VideoLAN\VLC\lua\extensions\
* Windows (current user): %APPDATA%\VLC\lua\extensions\
* Linux (all users): /usr/share/vlc/lua/extensions/
* Linux (current user): ~/.local/share/vlc/lua/extensions/
* Mac OS X (all users): /Applications/
- Restart VLC.
- The extension can then be found in the menu: View > Move current playing file into wastebasket
]]--
--[[ Extension description ]]
function descriptor() return { title = "Wastebasket" ; version = "0.9" ; author = "Mark Morschhäuser/Ole Tange" ; shortdesc = "Move current playing file into wastebasket"; description = "<h1>Wastebasket</h1>" .. "When you're playing a file, use Wastebasket to " .. "easily move this file to a .waste-dir with one click. " .. "<br>This will NOT change your playlist, it will move the file itself. " .. "<br>Wastebasket will search for a dir called .waste " .. "in the dir of the file and all parent dirs of that."; url = "" }
end
--[[ Hooks ]]
-- Activation hook
function activate() local filename,dst,wdir = filename_dst_wastedir() if(directory_exists(wdir)) then d = vlc.dialog("Wastebasket") d:add_label("Move <b>".. filename .. "</b> to <b>" .. wdir .. "</b>?") d:add_button("Move", delete) d:add_button("Cancel", close) d:show() else d = vlc.dialog("Wastebasket - no dir found") d:add_label(".waste is not found anywhere in parent dirs") d:add_button("Cancel", close) d:show() end vlc.msg.dbg("[Wastebasket] Activated")
end
function filename_dst_wastedir() -- get the current playing file local item = vlc.input.item() -- extract its URI local uri = item:uri() -- decode %foo stuff from the URI local filename = vlc.strings.decode_uri(uri) -- remove 'file://' prefix which is 7 chars long filename = string.sub(filename,8) -- find .waste in parent dirs local wdir = wastedir(dirname(filename)) return filename,wdir .. "/" .. basename(filename),wdir
end
function wastedir(dir) -- recursively search for .waste in parent dir vlc.msg.dbg("[Wastebasket/wastedir] Looking at " .. dir) local wdir = dir .. "/" .. ".waste" if directory_exists(wdir) then vlc.msg.dbg("[Wastebasket/wastedir] Found wastedir: " .. wdir) return wdir end -- try the parent dir local parent = dirname(dir) if(parent == dir) then -- we have reached root (/) -- return wdir (which does not exist) return wdir end vlc.msg.dbg("[Wastebasket/wastedir] parent " .. parent) if directory_exists(parent) then return wastedir(parent) else return parent end
end
function directory_exists(dir) -- Simple checker if dir exists -- shell quote the dirname dir, _ = dir:gsub("([\002-\009\011-\026\\#?`(){}%[%]^*<>=~|; \"!$&'\130-\255])", "\\%1") dir, _ = dir:gsub("\n", "'\n'") return os.execute("cd " .. dir)
end
function deactivate() -- Deactivation hook vlc.msg.dbg("[Wastebasket] Deactivated") vlc.deactivate()
end
function close() deactivate()
end
--- Function equivalent to basename in POSIX systems
--@param str the path string
function basename(str) local name = string.gsub(str, "(.*/)(.*)", "%2") return name
end
function dirname(str) local name = string.gsub(str, "(.*)/(.*)", "%1") return name
end
function delete() local filename,dst,wdir = filename_dst_wastedir() if(directory_exists(wdir)) then vlc.msg.dbg("[Wastebasket]: Move to " .. dst) local retval, err = os.rename(filename,dst) if(retval == nil) then -- error handling; if moving failed, print why vlc.msg.dbg("[Wastebasket] error: " .. err) end else d = vlc.dialog("Wastebasket - no dir found") d:add_label(".waste is not found anywhere in parent dirs") d:add_button("Cancel", close) d:show() end close()
end
-- This empty function is there, because vlc pested me otherwise
function meta_changed()
end
1

None of those worked for me so I modified to : . Note, this is OSX only and doesn't have any warnings etc before deleting. To make it a shortcut:

OSX System Preference->Keyboard->Apps Shortcuts > + (Click the plus button and select the VLC app)

The menu title in case was "VLC Delete OSX" (minus the quotes) and use the shortcuts desired. (In my case I choose Ctrl+D)

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy