Как зарегистрировать прослушиватель курсора в редакторе Eclipse?

Заявление об ограничении ответственности

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

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

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

Исходный вопрос

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

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

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

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

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


person Theodore Murdock    schedule 19.11.2011    source источник


Ответы (1)


Если вы можете жить без поддержки более старых версий Eclipse (3.4 и ниже), тогда _ 1_ определенно лучший способ. Старые 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);
    }
});
person Martti Käärik    schedule 29.11.2011