eclipse rcp 插件快捷鍵設置 衝突解決方案

 

快捷鍵的數量是有限的,何況Eclipse預定義了爲數不少的快捷鍵,所以你開發的RCP程序自定義的快捷鍵與Eclipse默認定義出現衝突是尋常情況,這時候如何讓我們自定義的快捷鍵優先被接受?方法有幾種,在此,我向大家介紹一種萬全之策。 

    一般給Action綁定快捷鍵的方法是自定義binding和command。例如我們實現了文件保存的動作代碼,將這個動作與快捷鍵CTRL+S綁定,我們在該應用的plugin.xml文件中添加了以下代碼: 

<extension 
          point="org.eclipse.ui.bindings"> 
        <key 
              commandId="miner.file.save" 
              schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" 
              sequence="CTRL+S"> 
        </key> 
    </extension> 
 
    <extension 
          point="org.eclipse.ui.commands"> 
        <command 
              id="miner.file.save" 
              name="Save"> 
        </command> 
    </extension> 
​​​​​

    一般情況下,如上XML片段綁定的快捷鍵都可以正常使用。但是遇到快捷鍵衝突,就像org.eclipse.ui插件已經提供了一個Ctrl+S的快捷鍵,按下Ctrl+S將不能如我們所願直接激活miner.file.save動作。遇到這種情況,我們可以選擇改用另一個快捷鍵,也可以自定義動作的 commandId,將miner.file.save改成org.eclipse.ui.file.save。因爲在Eclipse默認定義裏,CTRL+S是與org.eclipse.ui.file.save綁定的,我們自定義了org.eclipse.ui.file.save的新實現。以上兩種方法都不甚便利,最理想的解決之道是下面的自定義schema辦法。 
    注意到,在之前定義的bindings用到的schemaId都是 org.eclipse.ui.defaultAcceleratorConfiguration,這個schema存儲了Eclipse用到的所有默認快捷鍵。爲何我們不自定義一個自己的schema文件,並把它設成當前使用的schema文件,那麼Eclipse就會調用自定義的schema文件。且看下面修改後的plugin.xml片段: 

<extension 
          point="org.eclipse.ui.bindings"> 
        <scheme 
            id="miner.accelerator" 
            name="myAccelerator" 
            parentId="org.eclipse.ui.defaultAcceleratorConfiguration"> 
       </scheme> 
 
        <key 
              commandId="miner.file.save" 
              schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" 
              sequence="CTRL+S"> 
        </key> 
    </extension> 
 
    <extension 
          point="org.eclipse.ui.commands"> 
        <command 
              id="miner.file.save" 
              name="Save"> 
        </command> 
    </extension> 
​​

    miner.accelerator是一個新的schema文件,它在org.eclipse.ui.bindings擴展點中定義。請注意,在定義新 schema的時候有一個parentID屬性,如果定義了它,新的schema會像類繼承一樣把parent schema裏面的key binding全繼承下來。如果不定義,則是一個全新的schema。 
    至此是否大功告成?不行,還差重要的一步——讓新建的schema文件生效。這需要plugin配置文件的支持,過程有些複雜,我簡要的介紹三個實現步驟。RCP新手希望更深入的理解,可以從網上搜索RCP product配置方面的知識。 
    1. 新建一個plugin配置文件,遵循習慣,我們將這個文本文件命名爲 plugin_customization.ini; 
    2. 在上述配置文件中加入以下語句: 
        org.eclipse.ui/KEY_CONFIGURATION_ID=miner.accelerator 
    KEY_CONFIGURATION_ID屬性指示你將激活的schema; 
    3. 在plugin.xml中加入product擴展,將這個擴展的preferenceCustomization屬性值賦予plugin_customization.ini。就如以下的XML片段: 

<extension id="product" point="org.eclipse.core.runtime.products"> 
   <product application="miner.application" name="miner"> 
      <property name="preferenceCustomization" value="plugin_customization.ini"> 
      </property> 
   </product> 
</extension> 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章