Questão modificador fn ignorado por atalhos de teclado de tecla F em Mavericks


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

Sob Preferências do Sistema> Teclado> Atalhos Na seção "Controle da Missão", ativei o atalho "Show Desktop" e o atribuí a F5. Da mesma forma, eu atribuí "Show Dashboard" para F6.

Independentemente de como "Usar todas as teclas F1, F2, etc. como teclas de função padrão" é fn chave é ignorada por esses atalhos e a ação de atalho sempre ocorre, tornando impossível obter F5 e F6 para agir "normalmente" (como no Terminal.app). Vale a pena notar que as teclas de atalho "padrão" (por exemplo, F3 para Controle de Missão, F4 para LaunchPad) Faz trabalhar com fn conforme desejado / esperado: segurando o fn modificador 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 chamado Mosquetão) e habilitado o log de depuração de evento do teclado com:

sudo sysctl -w keyremap4macbook.debug=1

F5 sem fn chave

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 com fn chave

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 sem fn chave

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 com fn chave

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 o fn chave (código de chave 0x3F) está inoperante, o código de chave é 0x7A ("F1") em vez de 0x91 ("BRIGHTNESS_DOWN"), mas para F5, a chave permanece 0x60 ("F5").

Parece que tudo o que está lidando com os atalhos de teclado prefpane não tem uma maneira de incluir o estado do fn modificador.

Então, aqui está a minha pergunta: existe alguma maneira de atribuir atalhos de teclado a teclas de função para que funcionem como atalhos de sistema padrão e honrem o fn tecla como alternar entre o comportamento "normal" e "atalho"?


1


origem




Respostas:


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

Note que o private.xml O arquivo é rapidamente acessível a partir da aba "Misc & Uninstall" da janela do Karabiner, e há um ReloadXML botão na guia "Alterar chave".


0