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_Shift.symbols

지금까지의 진행

내 변경 사항은 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_symbols. xkbcomp $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+ Left, Up, Right, Down, Home, PageUp,EndPageDown
  • 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

관련 정보