Как получить позицию курсора в текстовом редакторе eclipse

Я пытался получить номер строки и номер столбца позиции курсора в текстовом редакторе jface. Я попробовал функцию getCursorPosition(). Но при печати это показывает только "?". Обратите внимание, что мне нужен номер строки и номер столбца в редакторе, а не на экране. Я увидел, что есть функция JTextArea.getCaretPosition. Но я не знаю, как преобразовать текстовый редактор в JTextArea. Кроме того, можно ли прочитать слово, в котором стоит курсор?

Спасибо


person Smitha    schedule 26.07.2011    source источник


Ответы (1)


Из TextEditor вы можете получить документ, поставщика документа и выборку. Это даст вам доступ к текущему смещению курсора.

ITextEditor editor = (ITextEditor) editorPart
        .getAdapter(ITextEditor.class);
IDocumentProvider provider = editor.getDocumentProvider();
IDocument document = provider.getDocument(editorPart
        .getEditorInput());
ITextSelection textSelection = (ITextSelection) editorPart
        .getSite().getSelectionProvider().getSelection();
int offset = textSelection.getOffset();
int lineNumber = document.getLineOfOffset(offset);

IDocument предоставляет другие методы для получения начала строк (вы можете вычислить столбец из этого).

Для получения дополнительной информации см. http://wiki.eclipse.org/The_Official_Eclipse_FAQs#Text_Editors.

person Paul Webster    schedule 26.07.2011
comment
глючит, так как конвертация не проверяется - person Chameleon; 02.03.2013
comment
Имейте в виду, что это не положение фактического курсора, а выбор. Каретка может быть расположена на любом конце выделения. - person Lii; 24.04.2013
comment
Разве я не могу получить позицию, не выбирая часть в редакторе? - person Masud Rahman; 18.06.2014
comment
AFAIK getSelection() возвращает структуру данных, которая действительна, когда курсор находится в редакторе, а также когда есть выбор - person Paul Webster; 23.04.2015
comment
getSelection() предоставляет последнюю позицию выбора. Если вы очистите его и переместите курсор в другое место, вы все равно получите последнюю позицию выбора, которая вообще не связана с курсором. - person Christian; 22.03.2018