xkb 構成ファイル内の preserve キーワードは何をしますか

xkb 構成ファイル内の preserve キーワードは何をしますか

カスタム xkb キーマップの xkb_types セクションで preserve キーワードが何を行うのかを知りたいです。

既存の設定ファイルの例を次に示します。

type "FOUR_LEVEL_SEMIALPHABETIC" {
    modifiers= Shift+Lock+LevelThree;
    map[Shift]= Level2;
    map[Lock]= Level2;
    map[LevelThree]= Level3;
    map[Shift+LevelThree]= Level4;
    map[Lock+LevelThree]= Level3;
    preserve[Lock+LevelThree]= Lock;
    map[Shift+Lock+LevelThree]= Level4;
    preserve[Shift+Lock+LevelThree]= Lock;
    level_name[Level1]= "Base";
    level_name[Level2]= "Shift";
    level_name[Level3]= "Alt Base";
    level_name[Level4]= "Shift Alt";
};

私は次の 2 つの行に興味があります。

    preserve[Lock+LevelThree]= Lock;
    preserve[Shift+Lock+LevelThree]= Lock;

残念ながら、非常に優れた xkb 設定ガイドがある Archwiki にも、(一般的にあまり情報がない) xkb の公式 Web サイトにも、これに関する情報はないようです。

答え1

XFree86では次のように文書化されている。XKB 構成をさらに強化する方法、新しいレイアウトの定義読者の便宜を図るため、関連する断片をコピーします。

通常、modifiers=<list of modifiers>リストに導入されたすべての修飾子はシフト レベルの計算に使用され、その後破棄されます。これが望ましくない場合もあります。修飾子をシフト レベルの計算に使用したいが破棄したくない場合は、 にリストすることができますpreserve[<combination of modifiers>]=<list of modifiers>。つまり、特定の組み合わせに対して、リストされているすべての修飾子が保持されます。Lock 修飾子が保持されると、結果のシンボルは、シフト レベルの計算に使用されたかどうかに関係なく、内部の大文字化ルーチンに渡されます。

関連情報