【问题标题】:Sublime Text 3: confirm to delete fileSublime Text 3:确认删除文件
【发布时间】:2015-09-01 23:18:00
【问题描述】:

有没有办法确认从树中删除文件(左侧)或从上下文菜单中删除选项?

太容易错过,即rename,而是点击delete file。然后文件就消失了。

我用谷歌搜索,发现它应该被移到垃圾文件夹,但要么不适用于 Win7,要么不适用于使用网络驱动器。结果,这些文件实际上被删除或移动到了我迄今为止未能找到它们的地方。

使用 Sublime Text(构建 3083)

【问题讨论】:

    标签: sublimetext3


    【解决方案1】:

    重要提示:看看iron77 answer。它说如果您修改 Default.sublime-package(选项 1 和 3),如果更新了 sublime 文本,则此更改可能会被覆盖。

    方案一:修改side_bar.py文件

    您可以使用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 类中添加相同的代码,以便在删除文件夹时也进行确认。
    • 最好先备份 Default.sublime-package 文件,以防万一出现问题。编辑:使用不同的文件夹进行备份,否则包可能会加载两次,从而导致问题,正如 OP 在他的评论中所说的那样。
    • 因为这是 python 代码缩进非常重要,不要 替换制表符的任何空格或添加任何额外的空格,否则它不会 工作(你可以看到它控制台)。

    结果:

    选项 2:使用现有包

    正如user leeseihis answer 中所说,您可以使用SideBarEnhancements package 来实现您的目标。如下图所示,该软件包为文件上下文菜单添加了许多其他功能,但它是一个非常好的选择,因为您只需要安装现有的软件包。

    选项 3:从上下文菜单中删除选项

    Default.sublime-package 中编辑 Side Bar.sublime-menu(参见选项 1)并删除此行(如果您还想删除引用到的行删除文件夹):

    { "caption": "Delete File", "command": "delete_file", "args": {"files": []} },
    

    【讨论】:

    • 做得很好!谢谢。 (对于Default.sublime-package 的备份:我在Packages 中将其命名为Default-Backup.sublime-package,并且包被加载了两次,弄乱了ST3 的菜单。不过,与Default.sublime-package-BACKUP 配合得很好。)
    • @robbash 不客气。哦,没想到备份在同一个文件夹中的包被加载两次的问题,我已经在答案中更新了。
    • 有谁知道Default.sublime-package 现在使用 ST3 在哪里? $HOME/.config/sublime-text-3/Packages 有一个Default 目录(没有文件),它是空的。
    • 我现在无法测试它,但认为它在 /opt/sublime_text/Packages/ 上。但是this answer 声称如果更新了崇高文本,则可能会覆盖此更改
    【解决方案2】:

    虽然sergioFC 的答案效果很好,但我有点担心修改Default.sublime-package,因为它可能有一天会在更新 Sublime 时被覆盖,所以每次更新后都需要手动重新应用修复.另一方面,SideBarEnhancements 对于只希望在删除文件时得到确认的人来说可能有太多的功能。

    或者,您可以添加一个简单的确认对话框,该对话框应该更能抵抗 ST 更新,方法是创建一个文件(插件)。在 Linux 上它应该在 ~/.config/sublime-text-3/Packages/User/confirm_delete.py 附近,如果你在 Windows/Mac 上或者这条路径不适合你,你可以简单地从顶部菜单中选择:Tools -> Developer -> @987654328 @ 然后另存为 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-packageside_bar.pyDeleteFileCommand 函数的副本,以及来自同一文件的DeleteFolderCommand 的确认对话框,因为Sublime 本身就有这样的对话框用于文件夹 删除。

    【讨论】:

      【解决方案3】:

      当我通过右键单击侧边栏中的文件选择删除时,我会得到确认。
      也许是SideBarEnhancements。值得一试。

      【讨论】:

      • 你说得对,肯定是 SideBarEnhancements 包造成的。
      • 谢谢!我只是觉得这有点太多了,所以选择了@sergioFC 的第一个解决方案。
      【解决方案4】:

      WTF 删除前没有确认对话框的软件。我无法相信这一点。悲伤但真实。只是愚蠢的软件!

      【讨论】:

        【解决方案5】:

        很遗憾,无法激活确认。通常,已删除的文件会移动到垃圾文件夹,但正如您所提到的,这仅适用于本地文件。共享网络驱动器上的文件仍会立即删除。这是 Windows 的“功能”:(

        在本地,回收站是 Windows 资源管理器的一部分——在网络上,您不与服务器上的资源管理器打交道。本地资源管理器不会将文件复制到用户的工作站只是为了将其放入回收站。

        但是,您可以实现 Microsofts Shadow Copy,然后用户可以取消删除和比较版本。在 sublime 开发人员决定创建一个可选的确认对话框之前,这将是迄今为止网络驱动器的唯一方法。

        【讨论】:

          【解决方案6】:

          根据@iron77 的回答,插件的路径不存在(在我的情况下)。更简单的方法是:

          1) 点击 Sublime Text 顶栏菜单Tools -> Developer -> New Plugin

          2) 粘贴sn-p

          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

          【讨论】:

            猜你喜欢
            • 2015-05-29
            • 2015-02-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-08
            • 1970-01-01
            相关资源
            最近更新 更多