описание

описание

Я видел несколько сообщений о том, как переназначить клавиши со стрелками в X11 с помощью XKB, но, хотя они в основном работают нормально, ни один из методов (за исключением использования разных групп, что становится проблемой при настройке клавиатуры 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 или правый 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) ]

Связанный контент