Modificador fn ignorado para atalhos de teclado da tecla F no Mavericks

Modificador fn ignorado para atalhos de teclado da tecla F no Mavericks

Testei isso em duas máquinas rodando Mavericks (10.9.4), com e sem teclado externo, e em todos os casos o comportamento é conforme descrito abaixo.

SobPreferências do Sistema > Teclado > Atalhosna seção "Mission Control" habilitei o atalho "Show Desktop" e atribuí-o a F5. Da mesma forma, atribuí "Mostrar painel" a F6.

Independentemente de como "Usar todas as teclas F1, F2, etc. como teclas de função padrão" estiver definido, ofna tecla é ignorada para esses atalhos e a ação do atalhosempreocorre, impossibilitando que F5 e F6 atuem "normalmente" (como em Terminal.app). Vale a pena notar que as teclas de atalho "padrão" (por exemplo, F3 para Mission Control, F4 para LaunchPad)fazertrabalhar comfnconforme desejado/esperado: segurando ofnmodificador enquanto pressiona essas teclas "inverte" o comportamento (dependendo de como a opção "Usar todas as teclas F1, F2, etc." está definida).

Eu instalei o "KeyRemap4MacBook" (agora chamadoMosquetão) e habilitou o registro de depuração de eventos do teclado com:

sudo sysctl -w keyremap4macbook.debug=1

F5 semfnchave

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 comfnchave

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

E para comparação...

F1 semfnchave

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

F1 comfnchave

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

Observe que com F1, quando ofnchave (código de chave 0x3F) está inativa, o código de chave é 0x7A ("F1") em vez de 0x91 ("BRIGHTNESS_DOWN"), mas para F5, a chave permanece 0x60 ("F5").

Parece que o que quer que esteja lidando com o pré-painel de atalhos de teclado não tem como incluir o estado dofnmodificador.

Então aqui está minha pergunta: existe alguma maneira de atribuir atalhos de teclado às teclas de função para que funcionem como os atalhos padrão do sistema e respeitem osfnchave como uma alternância entre o comportamento "normal" e "atalho"?

Responder1

Graças a muitoexemplos de arquivos de configuraçãoem Mosquetão(anteriormente conhecido como KeyRemap4MacBook), consegui criar o seguinte e adicioná-lo ao meu private.xmlarquivo para obter o comportamento desejado, tanto em um teclado externo quanto no teclado integrado de um 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>

Observe que o private.xmlarquivo pode ser acessado rapidamente na guia “Diversos e Desinstalar” da janela do Karabiner e há um ReloadXMLbotão na guia “Alterar chave”.

informação relacionada