1

PyDev Jython スクリプトで変更されたテキストの通知を登録するにはどうすればよいですか?

エディターでテキストを分析し、特定の状況下でテキストにコメントを追加する PyDev 用の Jython スクリプトを作成したいと思います。ユーザーが何かを入力するたびに、分析を再度実行する必要があります。

PyDev での Jython スクリプトの概要を読み、スクリプトの例を見ましたが、それらはすべてコマンド キーからトリガーされるようです。PyEdit クラスを調べたところ、IPyEditListener3 の onInputChanged イベントに登録する必要があるようです。

以下のスクリプトを試しましたが、イベント ハンドラが呼び出されないようです。私は何を取りこぼしたか?

if False:
    from org.python.pydev.editor import PyEdit #@UnresolvedImport
    cmd = 'command string'
    editor = PyEdit

#-------------- REQUIRED LOCALS
#interface: String indicating which command will be executed
assert cmd is not None 

#interface: PyEdit object: this is the actual editor that we will act upon
assert editor is not None

print 'command is:', cmd, ' file is:', editor.getEditorFile().getName()
if cmd == 'onCreateActions':
    from org.python.pydev.editor import IPyEditListener #@UnresolvedImport
    from org.python.pydev.editor import IPyEditListener3 #@UnresolvedImport

    class PyEditListener(IPyEditListener, IPyEditListener3):
        def onInputChanged(self, 
                           edit, 
                           oldInput, 
                           newInput, 
                           monitor):
            print 'onInputChanged'

    try:
        editor.addPyeditListener(PyEditListener())
    except Exception, ex:
        print ex

print 'finished.'
4

1 に答える 1

1

onInputChanged は、一部のエディターが 1 つのファイルにバインドされてから別のファイルにバインドされた場合にのみ呼び出す必要があります (ドキュメントの変更時ではありません)。

コマンド「onSetDocument」でドキュメントの変更をリッスンすることで、必要なものを実現できます。

if False:
    from org.python.pydev.editor import PyEdit #@UnresolvedImport
    cmd = 'command string'
    editor = PyEdit

#-------------- REQUIRED LOCALS
#interface: String indicating which command will be executed
assert cmd is not None 

#interface: PyEdit object: this is the actual editor that we will act upon
assert editor is not None

print 'command is:', cmd, ' file is:', editor.getEditorFile().getName()
if cmd == 'onSetDocument':
    from org.eclipse.jface.text import IDocumentListener
    class Listener(IDocumentListener):

        def documentAboutToBeChanged(self, ev):
            print 'documentAboutToBeChanged'

        def documentChanged(self, ev):
            print 'documentChanged'

    doc = editor.getDocument()
    doc.addDocumentListener(Listener())

print 'finished.'

これは、ユーザーが何かを入力するときにメインスレッドで実行されるため、何をしようとしているのかに注意してください(そして、この場合、遅くしたいことは絶対に望んでいません-分析だけの場合現在の行では問題ないはずですが、ドキュメント全体でヒューリスティックを実行すると、処理が遅くなる可能性があります)。

于 2012-06-12T12:15:22.373 に答える