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