2009-10-13 49 views
7

我正在尋找一種方法在鍵盤上添加一個「佈局」。我已經在使用使用altgr作爲本地字母的佈局。我想添加的是一個鏡像的右側鍵盤,使用大寫鎖定鍵(http://xkcd.com/mirrorboard.xkb中描述的一個)用更多修飾符重新映射鍵盤

不幸的是ISO_LEVEL3_SHIFT已被本地字母表佔用。 (AFAIK)如果我使用mode_shift來更改羣組,我不能在羣組中使用超過2個級別。有沒有辦法爲altgr和mode_shift創建不同的組?

+0

這個問題基本上是以一種非常不尋常的方式編譯鍵盤映射,需要低級別的黑客。我想過把它放在超級用戶身上,但它不會在那裏得到任何答案。它更接近於編程(是的 - 這基本上是編程xkb),而不僅僅是調整你的設置(這是超級用戶專門研究的)。 – viraptor 2009-10-13 15:09:30

回答

11

對於每個鍵碼定義,最多可以有8個鍵碼。這些組織成對分爲四組。有一組鍵,ISO_Prev_Group,ISO_First_GroupISO_Last_Group,當按下時,通過敲擊keysym組中的鍵來循環鍵盤輸出。這些鍵是你如何獲得多種佈局。

舉個例子,假設ISO_Next_Group已綁定到一個鍵碼,並分配到修改,那麼這樣的定義:

keycode 53 = x X Greek_xi Greek_XI multiply U2297 U24E7 U24CD

按我的標籤「X」鍵盤按鍵上的類型了「X」 。按下ISO_Next_Group鍵後,我會看到「ξ」。再次按下,我會得到「×」。再次按下「ⓧ」。最後,第四次按下它會使事情恢復正常。


有花幾天(因爲Xkb¹具有可怕的文件;終於找到了一個不錯的指南here),你可以創建條目這樣的符號定義文件:

 
    key <SPCE> { 
// Level I  II  III IV 
     [ space, space, U2395, U2592 ], // Group 1 
     [ U2423, emspace, U2420, hairspace ] // Group 2 
    }; 

    key <RALT> { 
     [ Mode_switch, Mode_switch ] 
    }; 

    key <RCTL> { 
     [ ISO_Level3_Shift, ISO_Level3_Shift ] 
    }; 

方括號中單組。通常情況下,第一組是激活的。該組可以暫時遞增1,其中ISO_Group_Shift,又名Mode_switch。在一個組內,所發射的符號被定義爲不斷增加的等級。級別I是一個純粹的按鍵。 Shift爲當前級別增加了一個。 ISO_Level3_Shift將等級設定爲III。

上面的示例映射七個符號空格鍵加上各種移鍵,使得:

空間⟨⟩U + 0020 SPACE
移+空間⟨⟩U + 0020 SPACE
R. Alt +空格鍵⟨␣⟩U + 2423開盒
R.鍵Alt + Shift +空格⟨⟩U + 2003 EM SPACE
R. CTL +空間⟨⎕⟩U + 2395 APL功能符號QUAD
R. CTL + Shift +空格⟨▒⟩U + 2592中等色調
R. Alt + R鍵。 Ctl。+ space⟨␠⟩U + 2420 SYMBOL FOR SPACE
R. Alt + R。 CTL。+ Shift +空格⟨⟩U + 200A HAIR SPACE

還有一個關鍵ISO_Level5_Shift的水平V.所以,你可以有至少六個符號爲一個級別。使用模式切換鍵時,這意味着您可以配置鍵盤輸入大約1,200個不同的符號,但在此時按住這麼多修飾符可能會減少幾個鍵。

P.S.所有命名符號的名稱都存儲在/usr/include/X11/keysymdef.h中。


¹原來, xmodmap(1)是越野車並且已棄用。

+0

只是想知道 - 有沒有辦法讓一些關鍵修改器的方式?這樣它就可以在印刷機上執行ISO_Next_Group,在發佈時執行ISO_Prev_Group? – viraptor 2009-10-14 23:48:35