Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- This code is public domain.
- The original author is Bear Huang (http://bear330.wordpress.com/).
- """
- if False:
- from org.python.pydev.editor import PyEdit #@UnresolvedImport
- cmd = 'command string'
- editor = PyEdit
- assert cmd is not None
- assert editor is not None
- if cmd == 'onCreateActions':
- # from org.eclipse.jface.action import Action
- from org.python.pydev.editor.actions import PyAction
- from org.python.pydev.core.docutils import PySelection
- from java.lang import Runnable
- from org.eclipse.swt.widgets import Display
- from org.eclipse.jface.text import IDocument
- from org.eclipse.jface.text import TextSelection
- from java.io import FileWriter
- import java.lang.Exception
- FORMAT_ACTION_DEFINITION_ID = "org.python.pydev.editor.actions.pyFormatStd"
- FORMAT_ACTION_ID = "org.python.pydev.editor.actions.navigation.pyFormatStd"
- class PythonTidyAction(PyAction):
- def __init__(self, *args, **kws):
- PyAction.__init__(self, *args, **kws)
- def run(self):
- import tempfile
- import os
- try:
- ps = PySelection(editor)
- doc = ps.getDoc()
- startLine = ps.getStartLineIndex()
- p1 = tempfile.mktemp()
- p2 = tempfile.mktemp()
- f1 = FileWriter(p1)
- formatAll = False
- if ps.getTextSelection().getLength() == 0:
- # format all.
- c = doc.get()
- f1.write(c)
- formatAll = True
- else:
- # format selection.
- #c = ps.getSelectedText()
- #f1.write(ps.getSelectedText())
- print "Format selected text is not supported yet."
- f1.write("")
- # A kind of solution is to insert a special comment in
- # front and end of selection text, pythontidy it, and
- # extract text according that comment.
- f1.close()
- os.system('PythonTidy.py "%s" "%s"' % (p1, p2))
- f2 = open(p2, "r")
- result = f2.read()
- f2.close()
- os.remove(p1)
- os.remove(p2)
- if startLine >= doc.getNumberOfLines():
- startLine = doc.getNumberOfLines() - 1
- if formatAll:
- doc.set(result)
- else:
- #doc.replace(doc.getLineOffset(startLine), 0, result)
- pass
- sel = TextSelection(doc, doc.getLineOffset(startLine), 0)
- self.getTextEditor().getSelectionProvider().setSelection(sel)
- except java.lang.Exception, e:
- self.beep(e)
- def bindInInterface():
- act = PythonTidyAction()
- act.setActionDefinitionId(FORMAT_ACTION_DEFINITION_ID)
- act.setId(FORMAT_ACTION_ID)
- try:
- editor.setAction(FORMAT_ACTION_ID, act)
- except:
- pass
- class RunInUi(Runnable):
- '''Helper class that implements a Runnable (just so that we
- can pass it to the Java side). It simply calls some callable.
- '''
- def __init__(self, c):
- self.callable = c
- def run(self):
- self.callable ()
- def runInUi(callable):
- '''
- @param callable: the callable that will be run in the UI
- '''
- Display.getDefault().asyncExec(RunInUi(callable))
- runInUi(bindInInterface)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement