免责声明
[当我写这个问题时,我对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的网站,但这似乎有点hack。
[我还看到有人在StackOverflow上询问有关alternatives to the CaretListener interface的信息,以跟踪Eclipse编辑器中的光标移动,并描述了一种向编辑器的文本查看器(而不是全局SelectionService)注册以获取插入符号移动更新的方法,但是他们建议这是一种效率较低的方法,最好在最新版本的Eclipse中用CaretListener接口代替。
最后一个可能是一个选项,但听起来像使用CaretListener将是首选方法...但是,如果是这样,怎么做?
如果您可以在不支持Eclipse早期版本(3.4及更低版本)的情况下生存,那么CaretListener
绝对是可行的方法。较早的CaretListener
实现不会发送有关插入符号移动的任何通知。
如您的第一个链接中所述,访问编辑器的StyledText
控件,但不要添加键或鼠标侦听器,而要添加StyledText
。
CaretListener