Как зарегистрировать слушателя карета в редакторе Eclipse? - PullRequest
4 голосов
/ 19 ноября 2011

Отказ от ответственности

Когда я писал этот вопрос, я ошибался в отношении поведения SelectionService ... SelectionService обычно уведомляет о перемещении курсора, но также не для каждого движения: наличиеВаша IDE быстро мигает, показывая подробную информацию, когда вы перемещаете курсор вверх на 10 строк, чтобы получить то, что вас интересует, и бесполезно, поскольку информация отображается слишком короткое время, чтобы быть полезной, сильно отвлекающей и, возможно, даже опасной дляте с потенциальной эпилепсией.

По этой причине SelectionService реагирует только после того, как курсор оставлен в одном и том же месте достаточно долго, что имеет смысл обновлять представления Eclipse в ответ на новый контекст.

Я также слышал, что несколько лет назад была одна версия Eclipse, в которой было выбрано SelectionService, поэтому я не уверен, опубликовал ли я это, потому что случайно произвел разработку плагинов Eclipse именно в этой версии,или потому, что я не понимал, почему SelectionService работает так, как он работает, но в конце концов использование Eclispe SelectionService - это все, что мне когда-либо было нужно, или я бы порекомендовал другим.

Оригиналвопрос

Я разрабатываю плагин Eclipse, который должен реагировать на текущую позицию курсора в редакторе Eclipse.

Из проведенных мною тестов выясняется, что с помощьюSelectionService сообщает вам, только когда в редакторе делается непустое выделение, а не когда курсор перемещается.

Я нашел один сайт, описывающий , как отслеживать выборки путем регистрации событий мыши и клавиатуры., но это похоже на хак.

Я также видел, как кто-то спрашивал в StackOverflow о alterвстроенный в интерфейс CaretListener для отслеживания перемещения курсора в редакторе Eclipse и описания способа регистрации в средстве просмотра текста редактора (а не в глобальном SelectionService) для получения обновлений перемещения каретки, но они предполагают, что это менее эффективнометод, который лучше заменить на интерфейс CaretListener в более поздних версиях Eclipse.

Последний вариант может быть одним из вариантов, но похоже, что использование CaretListener было бы предпочтительным подходом ... но если это так,как это можно сделать?

1 Ответ

3 голосов
/ 30 ноября 2011

Если вы можете жить без поддержки более старых версий Eclipse (3.4 и ниже), тогда CaretListener определенно подходит. Старые StyledText реализации не отправляют никаких уведомлений о перемещении каретки.

Получите доступ к элементу управления StyledText редактора, как описано в первой ссылке, но вместо добавления слушателей клавиш или мыши добавьте CaretListener.

workbenchWindow.getActivePage().addPartListener(new PartListener() {
    public void partOpened(IWorkbenchPartReference partRef) {
        //Check if this is an editor and its input is what I need
        AbstractTextEditor e =
            (AbstractTextEditor)((IEditorReference) partRef).getEditor(false);
        ((StyledText)e.getAdapter(Control.class)).addCaretListener(l);
    }
});
...