7

キーボードにもう 1 つ「レイアウト」を追加する方法を探しています。ローカルのアルファベット文字に altgr を使用するレイアウトを既に使用しています。私が追加したいのは、caps-lock でアクティブ化されるミラー化された右側のキーボードです ( http://xkcd.com/mirrorboard.xkbで説明されているもの) 。

残念ながらISO_LEVEL3_SHIFT、すでに現地のアルファベットに採用されています。(AFAIK)mode_shiftグループを変更するために使用すると、グループ内で 2 つ以上のレベルを使用できなくなります。altgr と の両方に異なるグループを作成する方法はありmode_shiftますか?

4

1 に答える 1

11

キーコード定義ごとに、最大 8 つのキーシムを使用できます。これらは、ペアごとに 4 つのグループに編成されます。ISO_Next_Groupkeysyms 、ISO_Prev_Group、のファミリがあり、これを押すISO_First_GroupISO_Last_Group、keysym グループ間でキーを押すことによって keysym 出力が循環します。これらのキーは、複数のレイアウトを実現する方法です。

例として、 がキーコードにバインドされ、修飾子に割り当てられていると仮定ISO_Next_Groupすると、この定義では次のようになります。

キーコード 53 = x X Greek_xi Greek_XI 乗算 U2297 U24E7 U24CD

「X」というラベルが付いたキーボードのキーを押すと、「x」が入力されます。キーを押した後ISO_Next_Group、「ξ」が表示されます。もう一度押すと「×」になります。もう一度押すと「ⓧ」。最後に、4 回押すと、通常の状態に戻ります。


数日を費やして (Xkb¹ のドキュメントがひどいため、最終的にここで適切なガイドが見つかりました)、次のようなエントリを含むシンボル定義ファイルを作成できます。

    キー <スペース> {
// レベル I II III IV
        [ スペース、スペース、U2395、U2592 ], // グループ 1
        [ U2423, emspace, U2420, hairspace ] // グループ 2
    };

    キー <RALT> {
        [モードスイッチ、モードスイッチ]
    };

    キー <RCTL> {
        [ ISO_Level3_Shift, ISO_Level3_Shift ]
    };

括弧は単一のグループを囲みます。通常、最初のグループがアクティブです。グループはISO_Group_Shift、別名で一時的に 1 つ増やすことができますMode_switch。グループ内で、放出されるシンボルはレベルの増加で定義されます。レベル I はキーを押しただけです。 Shift現在のレベルに 1 を追加します。 ISO_Level3_Shiftレベルを III に設定します。

上記の例では、7 つの記号をスペース バーに加えて、次のようなさまざまなシフト キーにマップしています。

space⟨ ⟩ U+0020 SPACE
Shift+space⟨ ⟩ U+0020 SPACE
R. Alt+space⟨␣⟩ U+2423 OPEN BOX
R. Alt+Shift+space⟨ ⟩ U+2003 EM SPACE
R. Ctl+space⟨⎕⟩ U+2395 APL FUNCTIONAL SYMBOL QUAD
R. Ctl+Shift+space⟨▒⟩ U+2592 MEDIUM SHADE
R. Alt+R. Ctl.+space⟨␩ U+␠ 2420 スペースのシンボル
R. Alt+R. Ctl.+Shift+space⟨ ⟩ U+200A ヘア スペース

レベル VのキーもありISO_Level5_Shiftます。したがって、1 つのグループに少なくとも 6 つのシンボルを含めることができます。モード シフト キーを使用すると、約 1,200 の異なる記号を入力するようにキーボードを構成できることを意味しますが、その時点で非常に多くの修飾子を押し続けると、いくつかのキーが無効になる可能性があります。

PS すべての名前付きシンボルの名前は に保存され/usr/include/X11/keysymdef.hます。


¹ xmodmap (1) にはバグがあり、非推奨であることが判明しました。

于 2009-10-14T12:55:34.003 に答える