Saúl, parte de este staff, nos hizo el favor de escribir este enunciado porque domina muy bien el tema.
Solución:
Importante: echa un vistazo a la respuesta de iron77. Dice que si modificas Default.sublime-package (opciones 1 y 3) estos cambios pueden anularse si se actualiza el texto sublime.
Opción 1: modificar el archivo side_bar.py
Puede usar la API sublime para mostrar un cuadro de diálogo aceptar / cancelar. El código que está buscando está en un archivo llamado side_bar.py. Este archivo se encuentra dentro del archivo zip Default.sublime-package. En Windows, esto generalmente se encuentra en C: Archivos de programa Sublime Text 3 Packages Default.sublime-package y se puede explorar con programas como WinRar.
Dentro de ese archivo ubique DeleteFileCommand
y agregue estas 3 nuevas líneas, por lo que se cambia de esto:
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
A esto
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
Estamos mostrando un diálogo de aceptar / cancelar y si el usuario no presiona OK luego regresamos y el archivo no se elimina.
Notas:
- Tendrás que agregar el mismo código en clase.
DeleteFolderCommand
para confirmar también al eliminar carpetas. - Es una buena práctica hacer una copia de seguridad de su Default.sublime-package archivo primero en caso de que algo salga mal. EDITAR: use una carpeta diferente para la copia de seguridad o el paquete podría cargarse dos veces causando problemas como lo ha dicho el OP en su comentario.
- Como esto es pitón la sangría del código es extremadamente importante, no reemplace ningún espacio para las pestañas ni agregue ningún espacio adicional o no funcionará (puede verlo en la consola).
Resultado:
Opción 2: use un paquete existente
Como dijo el usuario leesei en su respuesta, puede usar el paquete SideBarEnhancements para lograr su objetivo. Este paquete agrega muchas otras características al menú contextual del archivo, como puede ver en la siguiente imagen, pero es una muy buena opción ya que solo necesita instalar un paquete existente.
Opción 3: eliminar la opción del menú contextual
Editar Side Bar.sublime-menu dentro Default.sublime-package (vea la opción 1) y elimine esta línea (y si desea eliminar también la línea que se refiere a eliminar carpetas):
"caption": "Delete File", "command": "delete_file", "args": "files": [] ,
Si bien las respuestas de SergioFC funcionan muy bien, me preocupa un poco modificar Default.sublime-package
, ya que algún día podría sobrescribirse cuando se actualice Sublime, por lo que la corrección debería volver a aplicarse manualmente después de cada actualización de este tipo. SideBarEnhancements, por otro lado, puede tener demasiadas funciones para alguien que solo quiere la confirmación al eliminar un archivo.
Alternativamente, puede agregar un cuadro de diálogo de confirmación simple que debería ser más resistente a las actualizaciones de ST, creando un archivo (complemento). En Linux debería estar en algún lugar ~/.config/sublime-text-3/Packages/User/confirm_delete.py
, y si está en Windows / Mac o esta ruta no le funciona, simplemente puede elegir en el menú superior: Tools
-> Developer
-> New Plugin
y luego guardar como confirm_delete.py
– gracias a harrrrrrry por esta sugerencia. Código para poner:
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
Este código es básicamente una copia de DeleteFileCommand
función de Default.sublime-package
‘s side_bar.py
combinado con diálogos de confirmación de DeleteFolderCommand
del mismo archivo, ya que Sublime tiene dicho diálogo de forma nativa para carpeta eliminación.
Cuando elijo eliminar haciendo clic derecho en un archivo en la barra lateral, obtengo una confirmación.
Quizás sea SideBarEnhancements. Vale la pena intentarlo.
Te invitamos a asistir nuestro análisis fijando un comentario o puntuándolo te damos las gracias.