<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Eclipse中如何消除快捷鍵定義沖突(keybinding conflict)

        由于Eclipse的易擴(kuò)展性,理論上可以有無數(shù)個Action運(yùn)行在一個RCP 程序中,但是快捷鍵是有限的,尤其是一些常用的,像Ctrl+C,Ctrl+S之類的普通用戶能記得住的就那么幾個,萬一你自定義的Action的快捷鍵和Eclipse默認(rèn)的發(fā)生了沖突怎么辦?比如Eclipse默認(rèn)Ctrl+S是Save的快捷鍵,但是你又自定義了一個SaveAction,希望用戶按下Ctrl+S之后執(zhí)行的是自己的SaveAction的run方法.
         一般給Action綁定快捷鍵的方法是自定義binding和command,然后在action中指定definition id為command的id.如下:
    <extension
               point="org.eclipse.ui.bindings">
            <key
                  commandId="myplugin.actions.save"
                  contextId="org.eclipse.ui.contexts.window"
                  schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
                  sequence="CTRL+S">
            </key>
         </extension>
         <extension
               point="org.eclipse.ui.commands">
            <command
                  id="myplugin.actions.save"
                  name="Save">
            </command>
         </extension>

    這樣的方法一般是不會有沖突的,但是像我們上面提到的情況,如果你自定義一個binding,它的key sequence是Ctrl+S,那就會有問題.由于org.eclipse.ui插件已經(jīng)提供了一個Ctrl+S的快捷鍵,所以系統(tǒng)中會有兩個Ctrl+S,這樣Eclipse會在右下角pop up一個assist dialog,讓你從兩個Action中選擇一個,這樣可能會造成一些用戶使用上的不習(xí)慣.
    解決辦法:
        1.直接改快捷鍵.
          這個最簡單了,比如把你自己的save定義成Alt+S.但是這個方法也是最不好的方法,因為很多用戶并不知道Alt+S在你的程序里面就是save.
        2.修改自定義action的definition id
          我們剛才說過,action的definition id綁定著一個command,而command又對應(yīng)著一個binding,Eclipse通過這樣的方式實(shí)現(xiàn)action和快捷鍵的綁定.我們再來看看Eclipse定義的command和key binding(摘自org.eclipse.ui的plugin.xml):
          <command
                name="%command.save.name"
                description="%command.save.description"
                categoryId="org.eclipse.ui.category.file"
                id="org.eclipse.ui.file.save" />
          <key
                commandId="org.eclipse.ui.file.save"
                sequence="M1+S"
                schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" />
          <key

         Eclipse的Save Action把definition id指定為org.eclipse.ui.file.save,然后它就和上面的command進(jìn)行了綁定,而這個command對應(yīng)的key就是"M1+S"(Ctrl + S),這樣就實(shí)現(xiàn)了快捷鍵綁定.如果我們也把自定義的Save Action的definition id指定為org.eclipse.ui.file.save,是不是就可以達(dá)到目的呢?答案是肯定的.
         Eclipse中的Action存在著一個類似"優(yōu)先級"的概念(具體實(shí)現(xiàn)是通過action handler).越"具體"的action,優(yōu)先級越高.Eclipse的Save Action明顯是一個global的action,(同樣的global action還有copy, cut,undo,redo等等).而我們自定義的action一般是實(shí)現(xiàn)了IWorkbenchWindowActionDelegate接口的,就是說,它是contribute to workbench window的,它是一個workbench action,它的優(yōu)先級就高于任何global action.同理,如果你定義一個editor action或者view action,由于它比workbench還"具體"(workbench可以包含多個editor或view,workbench action對這些editor或view都是有效的;而editor action只對某個具體的editor有效),所以editor action的優(yōu)先級就高于workbench action.這樣,如果自定義的action和eclipse缺省的action都綁定到同一個command,那么eclipse runtim最后會選擇自定義的action來執(zhí)行.
        3.終極解決大法:自定義schema
         Eclipse 有一個default的快捷鍵schema文件:org.eclipse.ui.defaultAcceleratorConfiguration.它存儲著Eclipse所有的快捷鍵.如果你自定義一個自己的schema文件,并把它設(shè)成當(dāng)前使用的schema文件,那么Eclipse就會調(diào)用自定義的schema文件.(新的schema文件可以在org.eclipse.ui.bindings擴(kuò)展點(diǎn)中定義,請注意,在定義新schema的時候由一個parentID屬性,如果你定義了它,新的schema會像類繼承一樣把parent schema里面的key binding全繼承下來.如果不定義,則是一個全新的schema)
        假定我們已經(jīng)有了一個新的schema文件,id是myplugin.schema.然后我們在org.eclipse.ui.bindings下定義一個key:
    <key
                  commandId="myplugin.actions.save"
                  contextId="org.eclipse.ui.contexts.window"
                  schemaId="myplugin.schema"
                  sequence="CTRL+S">
            </key>
    我們已經(jīng)把schemaId換成了myplugin.schema,表示我們把CTRL+S加到了myplugin.schema中,然后把新建的schema文件在product配置文件plugin_customization.ini中設(shè)置成當(dāng)前的key schema文件:
    org.eclipse.ui/KEY_CONFIGURATION_ID=myplugin.schema

    這種方法雖然麻煩了一點(diǎn),但卻可以治標(biāo)又治本.而且由于可以指定parent schema,我們完全可以把org.eclipse.ui.defaultAcceleratorConfiguration作為parent schema,繼承它全部的快捷鍵配置,只定制幾個會產(chǎn)生沖突的快捷鍵即可


         

    posted on 2008-10-14 17:42 小牛小蝦 閱讀(3322) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    <2008年10月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    eclipse

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 青青青免费国产在线视频小草| 国产一级黄片儿免费看| 五月婷婷在线免费观看| 国产亚洲一区二区在线观看| 永久免费无码日韩视频| 免费国产成人高清视频网站| 国产精品亚洲一区二区三区久久| 午夜成年女人毛片免费观看| 亚洲偷自拍另类图片二区| 美女裸身网站免费看免费网站 | 亚洲人午夜射精精品日韩| 色妞www精品视频免费看| 国产美女无遮挡免费网站| 国内成人精品亚洲日本语音| 免费a级毛片18以上观看精品| 美女视频黄a视频全免费网站色| 又粗又大又猛又爽免费视频| 色吊丝性永久免费看码| 亚洲人成影院在线无码按摩店| 七色永久性tv网站免费看| 亚洲色欲www综合网| 成人免费视频软件网站| 羞羞视频网站免费入口| 国产AV无码专区亚洲AV漫画| 国产精品免费福利久久| 亚洲福利视频一区二区三区| 男男AV纯肉无码免费播放无码 | 永久免费av无码网站大全| 亚洲精品无码久久久久APP| www亚洲一级视频com| 在线观看片免费人成视频播放| 亚洲国产精品自在在线观看| 成年人免费的视频| 欧美日韩亚洲精品| 亚洲色精品aⅴ一区区三区| 91精品免费在线观看| 黄色免费网址大全| 亚洲精选在线观看| 看全色黄大色大片免费久久| 中文字幕视频在线免费观看 | 亚洲av午夜国产精品无码中文字|