有没有一种方法可以确认从树(左边)中删除文件或从上下文菜单中删除选项?
这太容易被忽视了,例如将重命名
和点击删除文件
混淆。然后文件就不存在了。
我搜索了谷歌并发现应该将其移动到回收站文件夹,但是它不适用于Win7或使用网络驱动器。结果文件实际上已经被删除或移动到某个我迄今未能找到的地方。
使用Sublime Text(build 3083)
有没有一种方法可以确认从树(左边)中删除文件或从上下文菜单中删除选项?
这太容易被忽视了,例如将重命名
和点击删除文件
混淆。然后文件就不存在了。
我搜索了谷歌并发现应该将其移动到回收站文件夹,但是它不适用于Win7或使用网络驱动器。结果文件实际上已经被删除或移动到某个我迄今未能找到的地方。
使用Sublime Text(build 3083)
重要提示: 请查看iron77的回答。他说如果您修改Default.sublime-package (选项1和3),则这些更改可能会在Sublime Text更新后被覆盖。
您可以使用Sublime API来显示确认/取消对话框。您需要的代码在名为side_bar.py的文件中。此文件位于zip文件Default.sublime-package内。在Windows中,它通常位于C:\Program Files\Sublime Text 3\Packages\Default.sublime-package中,并可使用诸如WinRar之类的程序进行探索。
在该文件中,找到DeleteFileCommand
并添加以下3行代码,以便将其从此更改为:
class DeleteFileCommand(sublime_plugin.WindowCommand):
def run(self, files):
# Import send2trash on demand, to avoid initialising ctypes for as long as possible
import Default.send2trash as send2trash
对于这个问题
class DeleteFileCommand(sublime_plugin.WindowCommand):
def run(self, files):
isSure = sublime.ok_cancel_dialog('Are you sure you want to delete the file?')
if isSure != True:
return
# Import send2trash on demand, to avoid initialising ctypes for as long as possible
import Default.send2trash as send2trash
我们正在展示一个“确定/取消”的对话框,如果用户没有按下“确定”,那么我们就返回,并且文件不会被删除。
注:
DeleteFolderCommand
中添加相同的代码,以便在删除文件夹时也进行确认。结果:
如用户leesei在他的答案中所说,您可以使用SideBarEnhancements程序包来实现您的目标。该程序包在文件上下文菜单中添加了许多其他功能,如下图所示,但它是一个非常好的选择,因为您只需要安装现有程序包。
编辑Default.sublime-package 内的Side Bar.sublime-menu (参见选项1),然后删除此行(如果您希望还可删除引用删除文件夹的行):
{ "caption": "Delete File", "command": "delete_file", "args": {"files": []} },
虽然sergioFC的答案非常好,但我有点担心修改 Default.sublime-package
,因为 Sublime 更新时它可能会被覆盖,所以修复后每次更新都需要手动重新应用。另一方面,SideBarEnhancements 的功能可能太多了,对于只想在删除文件时获得确认的人来说,这些功能可能并不实用。
或者,您可以创建一个简单的确认对话框,它应该更能抵抗 ST 更新,方法是创建一个文件 (插件)。在 Linux 上,它应该在 ~/.config/sublime-text-3/Packages/User/confirm_delete.py
或者如果您使用的是 Windows/Mac 或者路径不起作用,您可以从顶部菜单中选择:Tools
-> Developer
-> New Plugin
,然后将其保存为 confirm_delete.py
- 感谢harrrrrrry提出的建议。要添加的代码:
from Default.side_bar import *
class DeleteFileCommand(sublime_plugin.WindowCommand):
def run(self, files):
if len(files) == 1:
message = "Delete File %s?" % files[0]
else:
message = "Delete %d Files?" % len(files)
if sublime.ok_cancel_dialog(message, "Delete") != True:
return
# Import send2trash on demand, to avoid initialising ctypes for as long as possible
import Default.send2trash as send2trash
for f in files:
v = self.window.find_open_file(f)
if v != None and not v.close():
return
send2trash.send2trash(f)
def is_visible(self, files):
return len(files) > 0
这段代码基本上是从 Default.sublime-package
的 side_bar.py
中的 DeleteFileCommand
函数复制而来,再加上同一文件中的 DeleteFolderCommand
的确认对话框。因为 Sublime 在原生的删除文件夹操作时已经有了此类对话框。
竟然有一款软件在删除前没有确认对话框,我简直不敢相信。虽然很遗憾但这是事实。这样的软件实在太傻了!
很遗憾,没有办法激活确认功能。通常情况下,删除的文件会被移动到回收站,但正如您所提到的,这仅适用于本地文件。共享网络驱动器上的文件仍将立即删除。这是Windows的“特性” :(
在本地,回收站是Windows资源管理器的一部分--而在网络上,您不会在服务器上使用资源管理器。本地资源管理器不会将文件复制到用户的工作站,只是为了将其放入回收站。
但是,您可以实现Microsoft的Shadow Copy,然后用户可以撤消删除并比较版本。这将是目前为止在网络驱动器上的唯一方法,直到Sublime开发人员决定制作可选的确认对话框。
工具
->开发者
->新建插件
。from Default.side_bar import *
class DeleteFileCommand(sublime_plugin.WindowCommand):
def run(self, files):
if len(files) == 1:
message = "Delete File %s?" % files[0]
else:
message = "Delete %d Files?" % len(files)
if sublime.ok_cancel_dialog(message, "Delete") != True:
return
# Import send2trash on demand, to avoid initialising ctypes for as long as possible
import Default.send2trash as send2trash
for f in files:
v = self.window.find_open_file(f)
if v != None and not v.close():
return
send2trash.send2trash(f)
def is_visible(self, files):
return len(files) > 0
3) 另存为 confirm_delete.py
。
Default.sublime-package
:我在Packages
中将其命名为Default-Backup.sublime-package
,导致ST3的菜单加载了两次。但是使用Default.sublime-package-BACKUP
可以正常工作。) - robbashDefault.sublime-package
现在在哪里吗?$HOME/.config/sublime-text-3/Packages
有一个Default
目录(没有文件),而且是空的。 - alexanderadam/opt/sublime_text/Packages/
。然而,这个答案声称如果Sublime Text被更新,这些更改可能会被覆盖。 - sergioFC