modificador fn ignorado para atalhos de teclado de tecla F no Mavericks

1

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.

Em Preferências do Sistema > Teclado > Atalhos na seção "Controle da Missão" Eu habilitei o atalho "Mostrar Área de Trabalho" e atribui a ele o 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" é definida, a tecla fn é ignorada para esses atalhos e a ação de atalho sempre ocorre, tornando impossível fazer com que F5 e F6 atuem "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) fazer funcionam com fn como desejado / esperado: segurando o modificador fn enquanto pressiona essas teclas "vira" o comportamento (dependendo de como a opção "Usar todas as teclas F1, F2, etc." está definida).

Eu instalei o "KeyRemap4MacBook" (agora chamado de Karabiner ) e habilitei o log de depuração de evento do teclado com:

sudo sysctl -w keyremap4macbook.debug=1

F5 sem a tecla fn

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 a tecla fn

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 a tecla fn

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 a tecla fn

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 a tecla fn (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 os atalhos de teclado prefpane não tem como incluir o estado do modificador fn .

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

    
por eddyg 17.07.2014 / 15:54

1 resposta

0

Obrigado a muitos exemplos de arquivos de configuração Karabiner (anteriormente conhecido como KeyRemap4MacBook ), consegui 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>

Observe que o arquivo private.xml está acessível rapidamente na guia "Misc & Desinstalar" da janela do Karabiner, e há um botão ReloadXML na guia "Alterar chave".

    
por 18.07.2014 / 17:16