2011-11-19 94 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); 
    } 
}); 
相關問題