2
(Numlock이 켜져 있을 때) 2라는 숫자 패드 키가 2를 생성 하도록 키보드를 매핑하고 싶지만 KP_2
Shift 또는 Control을 누르면 Down
아래쪽 키와 마찬가지로 동일한 키가 이벤트를 생성하기를 원합니다.
그래서 다음 줄을 추가하여 새 유형을 만들었습니다.
modifiers= Shift+Control+NumLock+LevelThree;
map[Shift+NumLock]= Level1;
preserve[Shift+NumLock]= None;
...
map[Control+NumLock]= Level1;
preserve[Control+NumLock]= None;
따라서 전체 유형은 다음과 같습니다.
type "FOUR_LEVEL_MIXED_KEYPAD_CUST" {
modifiers= Shift+Control+NumLock+LevelThree;
map[Shift+NumLock]= Level1;
preserve[Shift+NumLock]= None;
map[NumLock]= Level2;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[NumLock+LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Shift+NumLock+LevelThree]= Level4;
map[Control+NumLock]= Level1;
preserve[Control+NumLock]= None;
level_name[Level1]= "Base";
level_name[Level2]= "Number";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
KP_2
이를 고려하여 섹션을 변경했습니다 .
key <KP2> {
type= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
symbols[Group1]= [ Down, KP_2, U2193, U21D3 ]
};
( 그룹명이 KP_Down
바뀐 걸 보고 바꿨어요)Down
xkbcomp preserve_none.xkb $DISPLAY
불행하게도 LibreOffice Calc에서 실행 하면 (모두 드롭다운하여 선택했음에도 불구하고 ) Shift + (NumLock) + KP2
와 같은 결과가 생성되고 이를 누르면 기본적으로 아무 일도 일어나지 않으며 움직이지도 않습니다.Shift + Down
preserve[...]=None
Ctrl + KP2
내가 뭘 잘못했는지 알아? 감사해요!
참고: 여기에서 전체 파일을 찾을 수 있습니다.http://paste.debian.net/1063341
답변1
글쎄, 나는 이 답변을 기반으로 한 것을 사용하여 해결책을 찾은 것 같습니다.https://superuser.com/questions/801611/how-to-make-all-applications-Respect-my-modified-xkb-layout/1000320#1000320
그래서 우선 왜 그런지는 모르겠지만 가끔은 효과가 type[Group1]=...
있는데도 왠지 대신 사용해야 할 것 같습니다.type=...
그런 다음 핵심은 몇 가지 새로운 기호 코드를 도입하는 것입니다(이것이 좋은 단어인지 확실하지 않음) osfDown/osfUp/.... 예를 들어 여기서 기호 코드는 키를 누를 osfLeft
때로 해석되어야 한다고 말합니다 <LEFT>
. Shift
키가 해제되었습니다(적어도 이것이 제가 이해한 것입니다):
interpret osfLeft {
repeat= True;
action = RedirectKey(keycode=<LEFT>, clearmodifiers=Shift);
};
수정자를 해제하려면 로 Control
바꾸 거나 둘 다 지우려는 경우에도 가능합니다. 그런 다음 이전 기호 코드를 방금 만든 코드로 바꿔야 합니다 .Shift
Control
Control+Shift
KP_Left
key <KP4> {
type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD",
symbols[Group1]= [ osfLeft, KP_4, U2190, U21D0 ]
};
따라서 KP_Left를 생성하는 대신(그리고 궁극적으로 누른 항목에 따라 관련 항목을 생성하는 대신) 수정자를 Shift/Control
제거합니다 (다시, 에서 구성한 내용에 따라).Shift/Control
osfLeft
따라서 이 단계의 첫 번째 해결 방법은 다음과 같습니다.
# Load with xkbcomp shift_numpad.xkb $DISPLAY
# List modifiers: xmodmap -pm
xkb_keymap {
xkb_keycodes {
include "evdev+aliases(azerty)"
};
xkb_types {
include "complete"
};
xkb_compat {
include "complete"
interpret osfLeft {
repeat True;
action = RedirectKey(keycode=<LEFT>, clearmodifiers=Shift);
};
interpret osfRight {
repeat= True;
action = RedirectKey(keycode=<RGHT>, clearmodifiers=Shift);
};
interpret osfUp {
repeat= True;
action = RedirectKey(keycode=<UP>, clearmodifiers=Shift);
};
interpret osfDown {
repeat= True;
action = RedirectKey(keycode=<DOWN>, clearmodifiers=Shift);
};
};
xkb_symbols {
include "pc+fr(oss)+fr(bepo):2+inet(evdev)+ctrl(swapcaps)"
key <KP8> {
type= "FOUR_LEVEL_MIXED_KEYPAD",
symbols[Group1]= [ osfUp, KP_8, U2191, U21D1 ]
};
key <KP4> {
type= "FOUR_LEVEL_MIXED_KEYPAD",
symbols[Group1]= [ osfLeft, KP_4, U2190, U21D0 ]
};
key <KP5> {
type= "FOUR_LEVEL_MIXED_KEYPAD",
symbols[Group1]= [ osfDown, KP_5, U2194, U21D4 ]
};
key <KP6> {
type= "FOUR_LEVEL_MIXED_KEYPAD",
symbols[Group1]= [ osfRight, KP_6, U2192, U21D2 ]
};
key <KP2> {
type= "FOUR_LEVEL_MIXED_KEYPAD",
symbols[Group1]= [ osfDown, KP_2, U2193, U21D3 ]
};
};
xkb_geometry {
include "pc(pc105)"
};
};
하지만 유형 "FOUR_LEVEL_MIXED_KEYPAD"
에 대해 정의된 것이 없다는 점에 유의 Control
하십시오. 제 경우에는 (예: 선택) Shift+2
과 같아야 하지만 수정자 없이 a를 생성 해야 합니다. 따라서 수정자를 제거 하고 수정자가 이미 있는 경우 수정자를 유지 하려면 업데이트된 정의가 필요합니다 . 그런 다음 레벨 1에도 매핑되는 사용자 정의 유형을 정의해야 합니다.Shift+Down
Control+2
Down
osfLeft
Control
Shift
Ctrl
type "FOUR_LEVEL_MIXED_KEYPAD_CUST" {
modifiers= Shift+NumLock+LevelThree+Control;
map[Shift+NumLock]= Level1;
map[Control+NumLock]= Level1;
map[NumLock]= Level2;
map[Shift]= Level2;
map[Control]= Level2;
map[LevelThree]= Level3;
map[NumLock+LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Shift+NumLock+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Number";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
그것들을 합치면 다음과 같은 결과를 얻습니다.
# Load with xkbcomp shift_numpad.xkb $DISPLAY
# List modifiers: xmodmap -pm
xkb_keymap {
xkb_keycodes {
include "evdev+aliases(azerty)"
};
xkb_types {
include "complete"
type "FOUR_LEVEL_MIXED_KEYPAD_CUST" {
modifiers= Shift+NumLock+LevelThree+Control;
map[Shift+NumLock]= Level1;
map[Control+NumLock]= Level1;
map[NumLock]= Level2;
map[Shift]= Level2;
map[Control]= Level2;
map[LevelThree]= Level3;
map[NumLock+LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Shift+NumLock+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Number";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
};
xkb_compat {
include "complete"
interpret osfLeft {
repeat= True;
action = RedirectKey(keycode=<LEFT>, clearmodifiers=Control);
};
interpret osfRight {
repeat= True;
action = RedirectKey(keycode=<RGHT>, clearmodifiers=Control);
};
interpret osfUp {
repeat= True;
action = RedirectKey(keycode=<UP>, clearmodifiers=Control);
};
interpret osfDown {
repeat= True;
action = RedirectKey(keycode=<DOWN>, clearmodifiers=Control);
};
};
xkb_symbols {
include "pc+fr(oss)+fr(bepo):2+inet(evdev)+ctrl(swapcaps)"
key <KP8> {
type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
symbols[Group1]= [ osfUp, KP_8, U2191, U21D1 ]
};
key <KP4> {
type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
symbols[Group1]= [ osfLeft, KP_4, U2190, U21D0 ]
};
key <KP5> {
type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
symbols[Group1]= [ osfDown, KP_5, U2194, U21D4 ]
};
key <KP6> {
type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
symbols[Group1]= [ osfRight, KP_6, U2192, U21D2 ]
};
key <KP2> {
type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
symbols[Group1]= [ osfDown, KP_2, U2193, U21D3 ]
};
};
xkb_geometry {
include "pc(pc105)"
};
};
참고: Super/LWIN 키를 사용하려는 경우 정확히 동일하지만 Mod4
대신 사용 Shift
하고 다음 사항이 있는지 확인하십시오.
modifier_map Mod4 { <LWIN> };
기호 섹션에서!