"""
Delete_Current.py - A Jython macro for jEdit that deletes
the current file, **but doesn't not close the current buffer**.

Copyright (C) 2003 Ollie Rutherfurd <oliver@rutherfurd.net>

$Id: Delete_Current_File.py 40 2003-04-14 17:16:57Z oliver $
"""

import java.lang.Exception
from java.lang import Runnable
from javax.swing import SwingUtilities

from org.gjt.sp.jedit.io import VFS, VFSManager
from org.gjt.sp.jedit import Macros


class BufferStatusChecker(Runnable):

    def __init__(self,view):
        self.view = view

    def run(self):
        jEdit.checkBufferStatus(self.view)
        self.view = None


def deleteCurrent(view):

    # don't bother deleting if a new buffer
    if view.getBuffer().isNewFile():
        Macros.error(view, "Can't delete buffer -- it's a new file.")
        return

    try:

        path = view.getBuffer().getPath()
        vfs = VFSManager.getVFSForPath(path)

        # check if vfs for current buffer supports deleting
        if not vfs.getCapabilities() & VFS.DELETE_CAP:
            Macros.error(view, "Error: %s VFS doesn't support deleting." % vfs.getName())
            return

        session = None
        try:
            session = vfs.createVFSSession(path,view)

            if vfs._delete(session, path, view):

                # notify user file has been deleted
                view.getStatus().setMessageAndClear('Deleted: %s' % path)

                # jEdit 4.2pre1 removed Buffer.checkModTime()
                checkModTime = getattr(view.getBuffer(), 'checkModTime', None)
                if checkModTime:
                    # handle api difference when checking the buffer's mod time
                    major,minor,revision = map(int,jEdit.getBuild().split('.')[:-1])
                    if major == 4 and (minor == 1 and revision < 8):
                        checkModTime(view)
                    else:
                        checkModTime(view.getEditPane())
                else:
                    SwingUtilities.invokeLater(BufferStatusChecker(view))

        finally:
            if session:
                vfs._endVFSSession(session, view)

    except (Exception, java.lang.Exception), e:
        Macros.error(view, 'Error deleting: %s\n\nError: %s' % (path, str(e),))


if __name__ in ('__main__','main'):
    deleteCurrent(init.view)

# :indentSize=4:lineSeparator=\r\n:noTabs=true:tabSize=4:

