2011-11-19 95 views
4

免责声明如何使用Eclipse编辑器注册插入符号侦听器?

当我写这个问题,我错了有关SelectionService的行为......在SelectionService不正常有关通知光标移动,而不是每一个动作之一:让您的IDE迅速通过显示详细闪烁信息,当您将光标向上滚动10行以获得对感兴趣的内容都无用的信息时,显示的信息太短而无用,对人很分散,甚至对潜在的癫痫患者甚至是危险的。

因为这个原因,SelectionService只在光标留在相同的地方足够长的时间后才响应,以便Eclipse视图响应新的上下文而更新。

我也听说有一个Eclipse版本在几年前,SelectionService被窃听,所以我不确定是否发布了这个消息,是因为我碰巧第一次在该版本中开发Eclipse插件,或者因为我不明白为什么SelectionService的工作方式,但最终,使用Eclispe SelectionService是我所需要的,或者会推荐给其他人。

原来的问题

我正在开发,需要在Eclipse编辑器当前光标所在位置响应一个Eclipse插件。

从我所做的测试看来,使用SelectionService只会告诉您何时在编辑器中进行非空选择,而不是在移动光标时。

我发现一个网站描述how to track selections by registering for mouse and keyboard events,但这似乎有点破解。

我也见过有人在StackOverflow上询问有关alternatives to the CaretListener interface的信息,以跟踪Eclipse编辑器中的光标移动,并描述了如何注册编辑器的文本查看器(而不是全局的SelectionService)以获取光标移动更新,但它们表明这是一种效率较低的方法,可以在更新版本的Eclipse中被CaretListener接口更好地替代。

最后可能是一个选项,但它听起来像使用CaretListener将是首选的方法......但如果它是,它是如何做到的?

回答

3

如果您可以在不支持较旧的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); 
    } 
}); 
相关问题