설명

설명

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) ]

관련 정보