CAPS_LOCK +矢印をHome、PgUp、PgDown、End in xkbに設定します。

CAPS_LOCK +矢印をHome、PgUp、PgDown、End in xkbに設定します。

CapsLock+矢印キーバインディングを設定しようとしています。xkb

ArchLinux、KDE、Xorgの使用

私が達成したいこと(希望事項)

結局のところ、完璧な解決策は

修飾子なし CapsLock修飾子として
Left Home
Up PageUp
Right End
Down PageDown

押すと、CapsLock通常のロックのようにキーを離したときにのみ機能しますCapsLock

Shiftミックスに追加またはマッピングされたキーを使用するキーバインディングは引き続き機能する必要があります。

さらに、より互換性のために、これらのバインディングは(ステータス、キー)を使用する代わりにキーシムレベルで機能する必要があります。

質問

私はこれが私が望むことを達成すると信じておらず、さらに解析することもできません。

capslock_nav(に追加/usr/share/X11/xkb/symbols

xkb_symbols "lv3-arrow-nav" {
    include "level3(caps_switch)"
    key.type = "THREE_LEVEL";
    key   <UP> {         [              Up, Up, Prior, NoSymbol] };
    key <LEFT> {         [            Left, Left, Home, NoSymbol ] };
    key <RGHT> {         [           Right, Right, End, NoSymbol ] };
    key <DOWN> {         [            Down, Down, Next, NoSymbol ] };
}

私はこれをステートメントに設定して使用して達成しようとしましたが、CapsLock成功しませんでしたISO_Level3_Shiftsymbols

これまでの進行

私の変更はKDEリストに表示され、次のようにSettings > Keyboard > Advancedエントリを追加できます。 evdev.xml

<!-- ... under <optionList> ... -->
<group allowMultipleSelection="true">
      <configItem>
        <name>capslock_nav</name>
        <description>Navigation using CapsLock</description>
      </configItem>
      <option>
        <configItem>
          <name>capslock_nav:lv3-arrow-nav</name>
          <description>Caps Lock Arrow Navigation</description>
        </configItem>
      </option>
    </group>

そしてこれはevdev.lst確かにしようとします

...
  capslock_nav         Navigation using CapsLock
  capslock_nav:lv3-arrow-nav Caps Lock Arrow Navigation
...

これは次にも反映されますsetxkbmap

setxkbmap -print -query
xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+pl+inet(evdev)"     };
        xkb_geometry  { include "pc(pc86)"      };
};
rules:      evdev
model:      pc86
layout:     pl
options:    capslock_nav:lv3-arrow-nav


options私の変更は含まれていますが、私には含まれず、私の変更も言及されませんxkb_symbolsxkbcomp $DISPLAY -

このトピックに関するArchWikiとさまざまなオンライン記事を見てみましたが、少し複雑です。ゆっくり、発展しているようです。

編集:これまでの進捗状況

構成を削除して操作を開始しました。 Archwikiのxkb#caps hjkl

compatこの構成を準備し、対応するファイル(、、symbols types)に分割しました。

partial xkb_types "lv3-arrow-nav" {
    include "complete";
    type "CUST_CAPSLOCK" {
       modifiers= Shift+Lock; 
       map[Shift] = Level2;            //maps shift and no Lock. Shift+Alt goes here, too, because Alt isn't in modifiers.
       map[Lock] = Level3;
       map[Shift+Lock] = Level3;       //maps shift and Lock. Shift+Lock+Alt goes here, too.
       level_name[Level1]= "Base";
       level_name[Level2]= "Shift";
       level_name[Level3]= "Lock";
   };
}

partial xkb_compatibility "lv3-arrow-nav" {
    interpret Caps_Lock {
        action= SetMods(modifiers=Lock);
    };
    augment "complete";
    augment "caps(caps_lock)";
}

partial xkb_symbols "lv3-arrow-nav" {
    include "pc";
    key <LEFT> {
       type= "CUST_CAPSLOCK",
       symbols[Group1]= [               Left,               Left,               Home],
       actions[Group1]= [      NoAction(),      NoAction(),   RedirectKey(keycode=<LEFT>, clearmods=Lock) ]
    };
    key <UP> {
        type= "CUST_CAPSLOCK",
        symbols[Group1]= [               Up,               Up,               Prior],
        actions[Group1]= [      NoAction(),      NoAction(),   RedirectKey(keycode=<UP>, clearmods=Lock) ]
    };
    key <RGHT> {
        type= "CUST_CAPSLOCK",
        symbols[Group1]= [               Right,               Right,               End],
        actions[Group1]= [      NoAction(),      NoAction(),   RedirectKey(keycode=<RGHT>, clearmods=Lock) ]
    };
    key <DOWN> {
        type= "CUST_CAPSLOCK",
        symbols[Group1]= [               Down,               Down,               Next],
        actions[Group1]= [      NoAction(),      NoAction(),   RedirectKey(keycode=<DOWN>, clearmods=Lock) ]
    };
}

を使用して確認しましたが、xkbcompまだ期待どおりに機能しません。

編集2

まあ、少なくともそれは本当です。、この構成により

xkb
├── compat
│  └── capslock_nav
├── rules
│  └── evdev
├── symbols
│  └── capslock_nav
├── types
│  └── capslock_nav
└── xkb_keymap.xkb

アプリケーションの使い方

xkbcomp -I$HOME/xkb/ $HOME/xkb/xkb_keymap.xkb $DISPLAY

少なくとも Caps Lock を無効にしてください...

編集3

定義NoAction()ですべてのタスクを定義してある程度進歩を遂げたようです。symbols

ベストアンサー1

私が知ることができる限り、次のようです。

布材

  • CapsLock+ LeftUpRightDownHome、、PageUpEndPageDown
  • pl既存のレイアウト設定を維持する(KDEのキーボード設定で設定されたレイアウトを引き続き使用できます)

動作しない

  • KDEとのトグル統合keyboard > advanced- トグルがありますが、次のようにsymbolsクエリするときにのみ変更されます。setxkbmap -query
  • CapsLockCapsLockいつものようにラッチを外してください

解決策

以下のように、xkeyboard-configに準拠したフォルダ構造を作成しました(xkb / ** / *セクション)。

$HOME/xkb_mod
├── xkb
│  ├── compat
│  │  └── capslock_nav
│  ├── symbols
│  │  └── capslock_nav
│  └── types
│     └── capslock_nav
└── xkb_keymap.xkb

xkb/-I包含の一部になります

文書内容

(からインスピレーションを受けるhttps://wiki.archlinux.org/title/X_keyboard_extension#Caps_hjkl_as_vimlike_arrow_keys)

compat/capslock_nav

partial xkb_compatibility "caps-arrow-nav" {
    interpret Caps_Lock {
        action= SetMods(modifiers=Lock);
    };
};

symbols/capslock_nav

partial xkb_symbols "caps-arrow-nav" {
    key <LEFT> {
       type= "CUST_CAPSLOCK",
       symbols[Group1]= [               Left,               Left,               Home]
    };
    key <UP> {
        type= "CUST_CAPSLOCK",
        symbols[Group1]= [               Up,               Up,               Prior]
    };
    key <RGHT> {
        type= "CUST_CAPSLOCK",
        symbols[Group1]= [               Right,               Right,               End]
    };
    key <DOWN> {
        type= "CUST_CAPSLOCK",
        symbols[Group1]= [               Down,               Down,               Next]
    };
};

types/capslock_nav

partial xkb_types "caps-arrow-nav" {
    type "CUST_CAPSLOCK" {
       modifiers= Shift+Lock; 
       map[Shift] = Level2;            //maps shift and no Lock. Shift+Alt goes here, too, because Alt isn't in modifiers.
       map[Lock] = Level3;
       map[Shift+Lock] = Level3;       //maps shift and Lock. Shift+Lock+Alt goes here, too.
       level_name[Level1]= "Base";
       level_name[Level2]= "Shift";
       level_name[Level3]= "Lock";
   };
};

その後、既存の設定を照会して設定しました。xkb_keymap.xkb

setxkbmap -query > ~/xkb_mod/xkb_keymap.xkb

+capslock_nav(caps-arrow-nav)以下のすべての項目に手動で含められますinclude

xkb_keymap.xkb

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete+capslock_nav(caps-arrow-nav)" };
    xkb_compat    { include "complete+capslock_nav(caps-arrow-nav)" };
    xkb_symbols   { include "pc+pl+inet(evdev)+capslock_nav(caps-arrow-nav)"    };
    xkb_geometry  { include "pc(pc86)"  };
};

最後に、以下を実行して設定を適用しました。

xkbcomp -I$HOME/xkb_mod/xkb xkb_mod/xkb_keymap.xkb $DISPLAY

おすすめ記事