XKB를 사용하여 X11에서 화살표 키를 다시 매핑하는 방법에 대한 일부 게시물을 본 적이 있지만 대부분 잘 작동하지만 지금까지 어떤 방법도 없습니다(Gnome 키보드 설정으로 관리하기 번거로워지는 다른 그룹을 사용하는 경우 제외). 열쇠 로 Windows.
HJKL 키를 사용하여 탐색할 수 있도록 키보드를 다시 매핑하려고 합니다 ISO_Level3 modifier
.
ISO_Level3에서 직접 화살표 키를 할당하는 것과리디렉션키(아래 코드에서 두 가지 예를 모두 제공합니다).
혼자서도 잘 작동하고(즉, 화살표 키만 사용할 수 있음) 및 CTRL( ALT예: CTRL+ LVL3+ H= CTRL+ LEFT)로도 작동하지만WIN 키와 함께 작동하지 마십시오.
내 기호 파일은 다음과 같습니다
default partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
name[Group1] = "Satan";
include "us"
// middle row
key <AC06> {
symbols = [ h, H, Left ],
actions = [ NoAction(), NoAction(), Redirect(key=<LEFT>) ] };
key <AC07> { [ j, J, Down ] };
key <AC08> { [ k, K, Up ] };
key <AC09> { [ l, L, Right ] };
key <AC10> { [ ISO_Level3_Shift, colon, semicolon, colon ]};
modifier_map Mod5 { ISO_Level3_Shift };
};
답변1
설명
대부분의 경우 나에게 잘 맞는 솔루션을 찾았지만 모든 응용 프로그램이 xkb 입력을 직접 해석하는 것은 아닙니다. 하지만 레벨 3 수정자를 사용하는 것보다 조금 더 복잡했습니다. 제 경우에는 CAPSLOCK
이라는 컨트롤 레이어를 설정하기 위해 매핑했습니다 Overlay1
.
xkb의 내부 동작을 잘 이해하지 못하지만 이 레이어는 다른 수정자의 영향을 받지 않는 것 같습니다. 이를 통해 win
+ CAPS
+는 {h,j,k.l}
창을 이리저리 이동합니다(내 설정에서).
다음은 관련 섹션입니다.내 xkb 파일:
partial modifier_keys xkb_symbols "xy_caps_overlay" {
replace key <CAPS> {
type[Group1] = "TWO_LEVEL",
symbols[Group1] = [ Overlay1_Enable, Overlay1_Enable ],
actions[Group1] = [ SetControls(controls=Overlay1), LockControls(controls=Overlay1) ]
};
// Movement Section
key <LatH> { Overlay1 = <LEFT> };
key <LatJ> { Overlay1 = <DOWN> };
key <LatK> { Overlay1 = <UP> };
key <LatL> { Overlay1 = <RGHT> };
key <TAB> { Overlay1 = <TAB> };
// Editing Section
key <LatQ> { Overlay1= <Esc> };
key <LatZ> { Overlay1 = <UNDO> };
key <UNDO> { [ VoidSymbol ],
actions[Group1]=[ RedirectKey(key=<LatY>,modifiers=Control)]
};
key <LatY> { Overlay1 = <REDO> };
key <REDO> { [ VoidSymbol ],
actions[Group1]=[ RedirectKey(key=<LatZ>,modifiers=Control)]
};
key <LatX> { Overlay1 = <CUT> };
key <LatC> { Overlay1 = <COPY> };
key <LatV> { Overlay1 = <PAST> };
key <LatQ> { Overlay1 = <ESC> };
key <LatU> { Overlay1 = <HOME> };
key <LatI> { Overlay1 = <END> };
key <LatP> { Overlay1 = <PGUP> };
key <AC10> { Overlay1 = <PGDN> };
key <LatD> { Overlay1 = <DELE> };
key <LatB> { Overlay1 = <BKSP> };
key <SPCE> { Overlay1 = <RTRN> };
};
partial
다음과 같이 레이아웃에 이를 포함해야 합니다 .
include "xy(xy_caps_overlay)"
여기서 xy는 이 부분 설정이 기록되는 파일의 이름이고 xy_caps_overlay는 부분 섹션의 실제 이름입니다.
메모
어쩌면 내 파일이 다소 혼란스러울 수도 있습니다. 그러나 때로는 겹치는 목적으로 세 번째 수준 수정자(AltGr 또는 Right Alt)도 사용하므로 오른손만으로 탐색할 수도 있지만 AltGr
+ Win
+를 사용하면 {h j k l}
의도한 대로 작동하지 않습니다.
보너스
(내 파일 아래에는 제가 실험하고 있는 다른 흥미로운 내용이 있지만 귀하의 질문과 직접적인 관련은 없지만 관심이 있으실 수도 있습니다. 수학에서 키보드를 래치 또는 이동하려면 + 또는 키보드를 xy_greek_lvl2
사용하는 방법에 대한 섹션을 참조하십시오 (그리스어 ) 문자.) (약간 지저분하지만 작업이 진행 중입니다)AltGr
,
.
여기에서 발췌 (파일을 옮기는 경우)
key <RTSH> { // Use right shift (with shift) while pressed
symbols[Group1] = [ NoSymbol, NoSymbol ],
actions[Group1] = [ SetMods(modifiers=Shift,clearLocks), LatchGroup(group=2) ]
};
key <AB08> { // use "," for 2nd group (with AltGr) while pressed
symbols[Group1] = [ NoSymbol, NoSymbol, VoidSymbol, VoidSymbol ],
actions[Group1] = [ NoAction(), NoAction(), LatchGroup(group=2) ]