Finalmente encontré una solución decente con Karabiner-Elements . Acabo de descubrir que admite reglas complejas con variables, condiciones y retardos, por lo que he podido personalizar el comportamiento del Enter de mi teclado. He configurado una regla que iniciará el dictado si la pulso dos veces, pero aún puedo utilizar la tecla Enter si sólo la pulso una vez (con un breve retardo.)
Aquí está mi regla JSON:
{
"title": "Double tap keypad_enter to double tap fn (start dictation.) Single tap for keypad_enter after a short delay (250ms.)",
"rules": [
{
"description": "This rule solves a problem with the Microsoft Surface Ergonomic Keyboard. The `Fn` key can't be used to start dictation, since it only toggles an internal state on and off, and it does not actually send any keypress event. This rule allows you to start dictation by double tapping the keypad enter key, which will send Fn twice. If you only press the keypad enter key once, it will send the original enter key after a short delay (250ms).",
"manipulators": [
{
"conditions": [
{
"name": "keypad_enter pressed",
"type": "variable_if",
"value": 1
}
],
"from": {
"key_code": "keypad_enter",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [
{
"key_code": "fn"
}
],
"type": "basic"
},
{
"from": {
"key_code": "keypad_enter",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [
{
"set_variable": {
"name": "keypad_enter pressed",
"value": 1
}
},
{
"key_code": "fn"
}
],
"parameters": {
"basic.to_delayed_action_delay_milliseconds": 250
},
"to_delayed_action": {
"to_if_canceled": [
{
"set_variable": {
"name": "keypad_enter pressed",
"value": 0
}
}
],
"to_if_invoked": [
{
"set_variable": {
"name": "keypad_enter pressed",
"value": 0
}
},
{
"key_code": "keypad_enter"
}
]
},
"type": "basic"
}
]
}
]
}
También he enviado un PR para añadir este ejemplo a su documentación.
Si este PR se fusiona, podrá visitar https://ke-complex-modifications.pqrs.org y haga clic en el botón azul "Importar" para importar el JSON a su aplicación Karabiner-Elements.
Mientras tanto, aquí se explica cómo importar manualmente la regla.
Abra un nuevo archivo en su editor de texto y pegue el JSON anterior. Guarde el archivo en su directorio de inicio: ~/double_tap_keypad_enter_to_double_tap_fn.json
Abra un terminal y ejecute estos comandos:
mkdir -p ~/.config/karabiner/assets/complex_modifications/
mv ~/double_tap_keypad_enter_to_double_tap_fn.json ~/.config/karabiner/assets/complex_modifications/
(El ~/.config
suele estar oculto del Finder y de la ventana "Guardar archivo", por lo que es más fácil utilizar el terminal para este paso).
Ir a la Modificaciones complejas y haga clic en Añadir regla . (No es necesario reiniciar Karabiner-Elements si ya se está ejecutando, debería encontrar el nuevo archivo JSON inmediatamente).
Deberías ver la nueva norma. Haga clic en "Activar".
Por último, asegúrate de que la configuración del teclado es correcta. (Por si has estado probando otras cosas antes de encontrar esta solución).
Abra las Preferencias del Sistema y haga clic en "Teclado".
Asegúrese de que el acceso directo de dictado está configurado correctamente: "Pulse para iniciar el dictado (Pulse dos veces)"
Nota al margen: El Teclado Ergonómico Microsoft Surface en realidad no tiene un Globe key, pero esto es sólo el Fn con un nombre y un icono diferentes.
Ahora haz clic en "Teclas modificadoras":
Debería ver el controlador del teclado virtual Karabiner, y el Globo ( ) debe ajustarse a Globo.
La regla ya está activa, así que abre tu editor de texto y pruébala. Cuando pulses una vez la tecla intro del teclado, deberías ver una nueva línea tras un breve retardo. Cuando la pulses dos veces, debería empezar el dictado.
Por favor, siéntase libre de modificar esta regla y elegir su propia clave, o cambiar toda la lógica. Espero que este ejemplo pueda ayudarle a empezar con sus propias personalizaciones. Asegúrese de que consulte otros ejemplos en la documentación y lea el "documentación "modificación compleja para ver todo lo que puede hacer con Karabiner-Elements.
¡Que aproveche!