2 votos

No se puede volver a asignar el caret y la virgulilla en DefaultKeyBinding.dict

Tengo un archivo extenso de DefaultKeyBinding.Dict que funciona muy bien para mí. Uso Karabiner Elements para cambiar el comportamiento de la tecla "right-alt" para que envíe §, que señala el comienzo de una secuencia de composición, y luego la tabla de asignación de teclas toma el control. Mi DefaultKeyBinding.Dict empieza así:

{"§" = {
  "g" = {
    "h" = ("insertText:", "");
    "," = ("insertText:", "");
    "." = ("insertText:", "");
    "(" = ("insertText:", "");
    "U" = ("insertText:", "");
    …

Estas asignaciones funcionan como se espera. Por ejemplo, right-alt g h produce y right-alt g . produce .

Pero ninguna de mis secuencias que involucra ^ o ~ está funcionando. Sé que estos símbolos tienen un significado especial en la sintaxis de DefaultKeyBinding.Dict, pero tampoco funcionan ninguna de las secuencias de escape para ellos. Por ejemplo, se supone que puedo usar \136 (octal) o \U005E para representar el acento circunflejo ^, pero las asignaciones de teclas que involucran este carácter nunca funcionan. He intentado insertar cada uno de los siguientes en el mismo bloque que las asignaciones anteriores, luego escribiendo right-alt g ^:

    "\U005e" = ("insertText:", "yobgorgle");  // ^
    "\U005E" = ("insertText:", "yobgorgle");  // ^
    "\^" = ("insertText:", "yobgorgle");      // ^
    "\136" = ("insertText:", "yobgorgle");    // ^

    // Estos no se supone que funcionen pero los probé de todas formas
    "\x5e" = ("insertText:", "yobgorgle");    // §g^
    "\0136" = ("insertText:", "yobgorgle");   // §g^

    // Estrategia diferente
    "$6" = ("insertText:", "yobgorgle");      // §g^

Ninguno de estos ha producido yobgorgle; toda la sintaxis anunciada ha producido un símbolo de ^ simple. Si fueran completamente ignorados, producirían §g^ como los últimos tres, así que algo está sucediendo, pero no entiendo qué es.

No entiendo por qué "$6" tampoco funcionó, se supone que debería significar shift-6, donde se encuentra mi símbolo de caret.

La secuencia \033 para la tecla "esc" funciona como se anuncia.

Estoy usando iTerm2 para probar los cambios en la asignación de teclas. No he olvidado que necesito cerrar y volver a abrir la aplicación para que note las nuevas asignaciones de teclas.

¿Qué podría estar faltando?

2voto

Deciare Puntos 9

(Lo siguiente se probó en macOS 13.5.)

El acento circunflejo (^) puede escaparse con \\^.

El carácter de tilde (~) puede escaparse con \\~.

Por ejemplo, con el siguiente contenido de DefaultKeyBinding.dict:

{"§" = {
  "i" = {
    "\\^" = ("insertText:", "î");
  };
};}

Al escribir la secuencia § i ^ se producirá el carácter î.

Por qué otras secuencias de escape no funcionan

En mis pruebas, las secuencias de escape como \136 y \U005E no funcionaron porque primero se tradujeron a ^ antes de ser interpretadas como una combinación de teclas, lo que resultó en un comportamiento idéntico a especificar solo ^.

Tu método alternativo $6 no funcionó porque las combinaciones de teclas distinguen entre mayúsculas y minúsculas (¿Sensibles a mayúsculas?), y no es posible escribir "6" mientras se mantiene presionada la tecla Shift. Puedes verificar este comportamiento intentando crear una combinación de teclas con $b, lo cual no funciona (porque la b minúscula no se puede escribir mientras se mantiene presionada la tecla Shift), en comparación con $B, que sí lo hace.

¿Cuál es el comportamiento sin escapar?

El carácter no escapado ^ significa que se mantiene presionada la tecla Control. Si no especificas nada después del ^, entonces el sistema de texto aceptará cualquier entrada mientras se mantenga presionada la tecla Control.

Por ejemplo, con el siguiente contenido de DefaultKeyBinding.dict:

{"§" = {
  "i" = {
    "^" = ("insertText:", "î");
  };
};}

Al escribir la secuencia § i Ctrl+B se producirá el carácter î. Pero lo mismo ocurrirá con § i Ctrl+Option+W, § i Ctrl+Shift+FlechaIzquierda, u cualquier otra combinación de teclas siempre y cuando se mantenga presionado Ctrl.

Lo mismo ocurre cuando el carácter no escapado ~ se especifica en una combinación de teclas por sí mismo, pero en ese caso es cualquier combinación de teclas con la tecla Opción presionada.

Utilidad integrada de macOS para remapear teclas

Esto no formaba parte de tu pregunta, pero podría interesarte hidutil, descrito en https://developer.apple.com/library/archive/technotes/tn2450/_index.html.

Puedes utilizar el siguiente comando para remapear la tecla de la tecla derecha de Opción a § sin usar ningún software de terceros:

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000E6,"HIDKeyboardModifierMappingDst":0x700000064}]}'

Lo anterior no persistirá después de reiniciar, así que necesitarás una forma de volver a ejecutarlo automáticamente al iniciar. Puedes hacerlo usando un agente launchd. Guarda lo siguiente como ~/Library/LaunchAgents/local.RemapRightOptionToNonUsBackslash.plist:

    Label
    local.RemapRightOptionToNonUsBackslash
    ProgramArguments

        /usr/bin/hidutil
        property
        --set
        {"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000E6,"HIDKeyboardModifierMappingDst":0x700000064}]}

    RunAtLoad

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X