Модификатор fn игнорируется для сочетаний клавиш F в Mavericks

Модификатор fn игнорируется для сочетаний клавиш F в Mavericks

Я протестировал это на двух машинах под управлением Mavericks (10.9.4), с внешней клавиатурой и без нее, и во всех случаях поведение было таким, как описано ниже.

ПодСистемные настройки > Клавиатура > Сочетания клавишВ разделе «Mission Control» я включил сочетание клавиш «Показать рабочий стол» и назначил его на F5. Аналогично я назначил «Показать панель инструментов» на F6.

Независимо от того, как настроен параметр «Использовать все клавиши F1, F2 и т. д. как стандартные функциональные клавиши»,фнклавиша игнорируется для этих сочетаний клавиш и действия сочетания клавишвсегдапроисходит, делая невозможным заставить F5 и F6 действовать "нормально" (например, в Terminal.app). Стоит отметить, что "стандартные" сочетания клавиш (например, F3 для Mission Control, F4 для LaunchPad)делатьработать сфнкак и ожидалось: удерживаяфнмодификатор при нажатии этих клавиш «меняет» поведение (в зависимости от того, как установлена ​​опция «Использовать все клавиши F1, F2 и т. д.»).

Я установил «KeyRemap4MacBook» (теперь называетсяКарабин) и включил отладочную регистрацию событий клавиатуры с помощью:

sudo sysctl -w keyremap4macbook.debug=1

F5 безфнключ

Jul 17 09:07:54 KeyboardEventCallback [sending]: eventType 10, flags 0x00000000, key 0x0060, kbdType  46, repeat = 0
Jul 17 09:07:54 KeyboardEventCallback [sending]: eventType 11, flags 0x00000000, key 0x0060, kbdType  46, repeat = 0

F5 сфнключ

Jul 17 09:07:58 KeyboardEventCallback [sending]: eventType 12, flags 0x00800000, key 0x003f, kbdType  46, repeat = 0
Jul 17 09:07:59 KeyboardEventCallback [sending]: eventType 10, flags 0x00800000, key 0x0060, kbdType  46, repeat = 0
Jul 17 09:07:59 KeyboardEventCallback [sending]: eventType 11, flags 0x00800000, key 0x0060, kbdType  46, repeat = 0
Jul 17 09:08:01 KeyboardEventCallback [sending]: eventType 12, flags 0x00000000, key 0x003f, kbdType  46, repeat = 0

И для сравнения...

F1 безфнключ

Jul 17 09:09:11 KeyboardEventCallback [sending]: eventType 10, flags 0x00000000, key 0x0091, kbdType  46, repeat = 0
Jul 17 09:09:11 KeyboardEventCallback [sending]: eventType 11, flags 0x00000000, key 0x0091, kbdType  46, repeat = 0

Ф1 сфнключ

Jul 17 09:09:16 KeyboardEventCallback [sending]: eventType 12, flags 0x00800000, key 0x003f, kbdType  46, repeat = 0
Jul 17 09:09:17 KeyboardEventCallback [sending]: eventType 10, flags 0x00800000, key 0x007a, kbdType  46, repeat = 0
Jul 17 09:09:17 KeyboardEventCallback [sending]: eventType 11, flags 0x00800000, key 0x007a, kbdType  46, repeat = 0
Jul 17 09:09:19 KeyboardEventCallback [sending]: eventType 12, flags 0x00000000, key 0x003f, kbdType  46, repeat = 0

Обратите внимание, что при нажатии F1, когдафнклавиша (код клавиши 0x3F) нажата, код клавиши 0x7A ("F1") вместо 0x91 ("BRIGHTNESS_DOWN"), но для F5 клавиша остается 0x60 ("F5").

Похоже, что то, что обрабатывает префпанель сочетаний клавиш, не имеет возможности включить состояниефнмодификатор.

Итак, вот мой вопрос: есть ли способ назначить сочетания клавиш функциональным клавишам так, чтобы они работали как системные сочетания клавиш по умолчанию и учитывалифнклавиша как переключатель между «нормальным» и «быстрым» режимом работы?

решение1

Спасибо многимпримеры файлов конфигурациив Карабин(ранее известный как KeyRemap4MacBook), мне удалось придумать следующее и добавить его в свой private.xmlфайл, чтобы получить желаемое поведение как на внешней клавиатуре, так и на встроенной клавиатуре MacBook:

<root>
<item>
    <name>F5 to Show Desktop (Fn+F5 is still F5)</name>
    <appendix>Enables F5 (Shift+F5 on laptops) as a Show Desktop shortcut</appendix>

    <identifier>private.f5_to_show_desktop</identifier>

    <autogen>--KeyToKey-- KeyCode::F5, ModifierFlag::FN, KeyCode::F5</autogen>
    <autogen>--KeyToKey-- ConsumerKeyCode::KEYBOARDLIGHT_LOW, ModifierFlag::FN, KeyCode::F5</autogen>
    <autogen>--KeyToKey-- KeyCode::F5, KeyCode::MISSION_CONTROL, ModifierFlag::COMMAND_L, Option::NOREPEAT</autogen>
    <autogen>--KeyToKey-- ConsumerKeyCode::KEYBOARDLIGHT_LOW, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_SHIFT, KeyCode::MISSION_CONTROL, ModifierFlag::COMMAND_L, Option::NOREPEAT</autogen>
</item>
<item>
    <name>F6 to Show Dashboard (Fn+F6 is still F6)</name>
    <appendix>Enables F6 (Shift+F6 on laptops) as a Show Dashboard shortcut</appendix>

    <identifier>private.f6_to_show_dashboard</identifier>

    <autogen>--KeyToKey-- KeyCode::F6, ModifierFlag::FN, KeyCode::F6</autogen>
    <autogen>--KeyToKey-- ConsumerKeyCode::KEYBOARDLIGHT_HIGH, ModifierFlag::FN, KeyCode::F6</autogen>
    <autogen>--KeyToKey-- KeyCode::F6, KeyCode::DASHBOARD, Option::NOREPEAT</autogen>
    <autogen>--KeyToKey-- ConsumerKeyCode::KEYBOARDLIGHT_HIGH, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_SHIFT, KeyCode::DASHBOARD, Option::NOREPEAT</autogen>
</item>
</root>

Обратите внимание, что к файлу можно быстро получить доступ из вкладки «Разное и удаление» окна Karabiner, а на вкладке «Изменить ключ» private.xmlесть кнопка.ReloadXML

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