現在、Eclipseプラグインを作成中です。アクションを実行するには、アクティブなタブのキャレットリスナーを聞く必要があります。Eclipse Editor - SWT StyledText実際のファイルの行番号に対応しないCaretListenerオフセット
public void partOpened(IWorkbenchPartReference partRef) {
AbstractTextEditor e = (AbstractTextEditor) ((IEditorReference) partRef).getEditor(false);
StyledText sText = ((StyledText) e.getAdapter(Control.class));
sText.addCaretListener(new CaretListener() {
@Override
public void caretMoved(CaretEvent event) {
IDocument d = e.getDocumentProvider().getDocument(e.getEditorInput());
...
int line = d.getLineOfOffset(event.caretOffset);
Point p = sText.getLocationAtOffset(event.caretOffset);
}
});
}
このコードを使用して、最新の開いたタブにCaretListenerを追加します。
変数line
は、コードブロックが折りたたまれていない場合にのみ正しいです。 実際には、イベントによって返されたオフセットはStyledTextにリンクされていますが、ファイルの行番号を取得したいと思います。
This pictureは、折りたたまれたテキストの例を示しています。 StyledTextのキャレットオフセットは、6,7、および12の代わりに、6行目、7行目、8行目のようなものを与えます(Eclipseのように)。
StyledTextオフセットを「実ファイル」オフセットに「変換」する方法はありますか?私は、文字列として行を取得し、ファイル内で見つけることができますが、それは悪い考えのように聞こえる。
ありがとうございます!
ありがとうございます! getSourceViewerは "保護されている"ように見えるので、自分のコンテキストではアクセスできません。 提案がある場合、私はStackOverflowで検索します! – mduruisseau
これについて考えると、実際には 'ITextViewer'だけが必要ですが、私は編集者がこれを簡単に利用できるとは思いません。それを必要とするものは、通常、エディタ内から作成され、ビューアをパラメータとして渡します。 –
わかりましたが、私は答えを探しますが、私が今までに見つけたことは、あなたが言っていることと一致しています。もう一度ありがとう;) – mduruisseau