Modificador fn ignorado para los atajos de teclado de la tecla F en Mavericks

Modificador fn ignorado para los atajos de teclado de la tecla F en Mavericks

Probé esto en dos máquinas que ejecutan Mavericks (10.9.4), con y sin teclado externo, y en todos los casos el comportamiento es el que se describe a continuación.

BajoPreferencias del Sistema > Teclado > Atajosen la sección "Control de misión", habilité el acceso directo "Mostrar escritorio" y lo asigné a F5. De manera similar, asigné "Mostrar panel" a F6.

Independientemente de cómo esté configurado "Usar todas las teclas F1, F2, etc. como teclas de función estándar", elfnLa clave se ignora para estos atajos y la acción de atajo.siempreocurre, lo que hace imposible que F5 y F6 actúen "normalmente" (como en Terminal.app). Vale la pena señalar que las teclas de acceso directo "predeterminadas" (por ejemplo, F3 para Mission Control, F4 para LaunchPad)hacertrabajar confncomo se desea/espera: sosteniendo elfnmodificador al presionar esas teclas "invierte" el comportamiento (dependiendo de cómo esté configurada la opción "Usar todas las teclas F1, F2, etc.").

Instalé "KeyRemap4MacBook" (ahora llamadomosquetón) y habilitó el registro de depuración de eventos del teclado con:

sudo sysctl -w keyremap4macbook.debug=1

F5 sinfnllave

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 confnllave

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

Y para comparar...

F1 sinfnllave

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 confnllave

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 con F1, cuando elfnLa clave (código de clave 0x3F) está inactiva, el código de clave es 0x7A ("F1") en lugar de 0x91 ("BRIGHTNESS_DOWN"), pero para F5, la clave permanece 0x60 ("F5").

Parece que lo que sea que esté manejando los atajos de teclado en el panel previo no tiene una forma de incluir el estado delfnmodificador.

Así que aquí está mi pregunta: ¿hay alguna manera de asignar atajos de teclado a las teclas de función para que funcionen como los atajos predeterminados del sistema y respeten elfn¿Tecla para alternar entre comportamiento "normal" y "atajo"?

Respuesta1

Gracias a muchosarchivos de configuración de ejemploen mosquetón(anteriormente conocido como KeyRemap4MacBook), pude crear lo siguiente y agregarlo a mi private.xmlarchivo para obtener el comportamiento que deseaba, tanto en un teclado externo como en el teclado integrado de una 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>

Tenga en cuenta que private.xmlse puede acceder rápidamente al archivo desde la pestaña "Varios y desinstalar" de la ventana de Karabiner, y hay un ReloadXMLbotón en la pestaña "Cambiar clave".

información relacionada