переопределение ключей macOS в качестве модификаторов

664
jsve

Ситуация

Я использую раскладку клавиатуры под названием 3l (три раскладки), которая является раскладкой клавиатуры. Вот основной слой (поведение, когда не нажимаются клавиши-модификаторы):

normal 3l layout

Теперь, когда я держу нажатой 'обычную клавиатуру ( symв 3 л), я нахожусь в режиме «символов», а остальная клавиатура ведет себя по-другому. Вот изображение этого режима:

symbols layer of 3l

По сути, эта клавиша символов похожа на специальную, Shiftчто позволяет мне получать доступ к специальным символам.

Кроме того, у меня есть слой чисел, который имеет тот же эффект, что и слой символов, и активируется /клавишей, но вместо этого имеет элементы управления курсором и цифровой панелью:

enter image description here


Человек, от которого я забыл свой макет, уже получил макет, работающий в Linux и Windows (используя AutoHotKey). Я пытаюсь портировать его на macOS. До сих пор я создал 3l.keylayoutфайл ( см. Его здесь ), и у меня работают базовые функции.

Что работает

  1. Клавиши в обычном режиме работают нормально.
  2. Если я нажимаю клавишу модификатора символа, первый нажатый символ выводится как правильный символ. Например, если нажать клавишу символа, а затем O, /выводится.
  3. То же самое относится к клавише cur / num для вывода на цифровую панель.

Что не работает

  1. Если я нажимаю и удерживаю клавишу модификатора символа и набираю несколько символов, только первый выводит символ. (То же самое относится и к клавише cur / num.)
  2. Если я нажимаю и отпускаю одну из клавиш-модификаторов, а затем нажимаю другую клавишу, выводится символ / число. Это не должно быть так. Когда я отпускаю клавишу-модификатор, я хочу, чтобы она вернулась в обычный режим (точно так же, как Shiftклавиша).
  3. Клавиши управления курсором не работают надежно во всех приложениях, и у них также есть проблема, не позволяющая повторять клавиши, когда они работают.

Мой вопрос

Есть ли способ для меня получить функциональность, описанную выше, в macOS (Sierra и позже)?

Примечание : Кроме того, я пытался перераспределить 'и /в правильный вариант и право управления с помощью карабина элементов, а затем попытался создать новый keymapв 3l.keylayoutкоторый активируется этими ключами. Это не сработало, однако. Он все испортил, и я попал в постоянную ситуацию с ключом управления / опцией.

1

1 ответ на вопрос

0
jsve

Я смог решить эту проблему с помощью сложных модификаций Karabiner-Elements .

Вот мой полный karabiner.jsonфайл.

Под profiles -> rules -> manipulatorsя добавил два манипулятора. Один за symи один за cur.

Я скопировал symманипулятор ниже:

{ "conditions": [  "name": "sym", "type": "variable_if", "value": 0 }, { "name": "cur", "type": "variable_if", "value": 0 } ], "from": { "key_code": "quote", "modifiers": { "optional": [ "any" ] } }, "to": [ { "set_variable": { "name": "sym", "value": 1 } } ], "to_after_key_up": [ { "set_variable": { "name": "sym", "value": 0 } } ], "type": "basic" } 

Затем я прошел все настройки клавиш, то есть, когда клавиша нажата без модификатора, symмодификатор и curмодификатор.

Это работает без нареканий.