asignación de intercambio de las teclas de desplazamiento izquierda y derecha

7

Tengo un problema extraño y muy específico al usar mi teclado USB de terceros con mi MacBook Pro: option + left-shift + right-arrow (que, como saben los programadores de Mac, significa "resaltar la palabra a la derecha del cursor") no funciona . Las razones detrás de esto no están claras, pero sé que no tiene que ver con las preferencias de software de nivel de usuario, ni directamente con un problema de hardware de bajo nivel (consulte mi pregunta original en superusuario para la lógica de solución de problemas completa).

Debo tener en cuenta que se trata de un teclado hecho para Windows: un teclado Thinkpad USB con Trackpoint, de hecho, el motivo es el motivo por el que me gusta tanto y me aferro a él a pesar de sus problemas. Entonces, la clave que estoy asignando a option en las Preferencias del Sistema es de hecho la tecla "Logotipo de Windows".

funciona si uso option + RIGHT-shift + right-arrow pero esta es una posición de mano muy torpe para moverme rápidamente alrededor de mis documentos. Así que me gustaría intentar intercambiar la interpretación de Mac de las teclas de desplazamiento izquierda y derecha . ¿Es esto posible, y si es así, cómo?

Actualización:

A sugerencia de Tetsujin Intenté Karabiner pero parece que el problema está ocurriendo en un nivel inferior. El evento de teclado para la flecha derecha ni siquiera llega a Karabiner si las teclas Windows-logo y (físico) left-shift se mantienen presionadas (y no importa si Windows logo se asigna a otro modificador: el problema se limita a eso combinación de teclas físicas )

En respuesta al comentario de Insomniac Software Esto es lo que dice el Karabiner EventViewer cuando presiono:

Windows-logo + left-shift + left-arrow :

eventType:keyMod          code:0x3a       name:Option_L        flags:Opt                                misc:KeyCode::OPTION_L  characters:    
eventType:keyMod          code:0x38       name:Shift_L         flags:Shift Opt                          misc:KeyCode::SHIFT_L   characters:    
eventType:keyDown         code:0x7b       name:Left            flags:Shift Opt NumPad Fn                misc:KeyCode::CURSOR_LEFT   characters:    
eventType:keyUp           code:0x7b       name:Left            flags:Shift Opt NumPad Fn                misc:KeyCode::CURSOR_LEFT   characters:    
eventType:keyMod          code:0x38       name:Shift_L         flags:Opt                                misc:KeyCode::SHIFT_L   characters:    
eventType:keyMod          code:0x3a       name:Option_L        flags:                                   misc:KeyCode::OPTION_L  characters:    

Windows-logo + left-shift + right-arrow :

eventType:keyMod          code:0x3a       name:Option_L        flags:Opt                                misc:KeyCode::OPTION_L  characters:    
eventType:keyMod          code:0x38       name:Shift_L         flags:Shift Opt                          misc:KeyCode::SHIFT_L   characters:    
eventType:keyMod          code:0x38       name:Shift_L         flags:Opt                                misc:KeyCode::SHIFT_L   characters:    
eventType:keyMod          code:0x3a       name:Option_L        flags:                                   misc:KeyCode::OPTION_L  characters:    

Windows-logo + right-shift + right-arrow :

eventType:keyMod          code:0x3a       name:Option_L        flags:Opt                                misc:KeyCode::OPTION_L  characters:    
eventType:keyMod          code:0x3c       name:Shift_R         flags:Shift Opt                          misc:KeyCode::SHIFT_R   characters:    
eventType:keyDown         code:0x7c       name:Right           flags:Shift Opt NumPad Fn                misc:KeyCode::CURSOR_RIGHT  characters:    
eventType:keyUp           code:0x7c       name:Right           flags:Shift Opt NumPad Fn                misc:KeyCode::CURSOR_RIGHT  characters:    
eventType:keyMod          code:0x3c       name:Shift_R         flags:Opt                                misc:KeyCode::SHIFT_R   characters:    
eventType:keyMod          code:0x3a       name:Option_L        flags:                                   misc:KeyCode::OPTION_L  characters:    

(NB: windows-logo + right-shift + left-arrow también funciona, en caso de que te lo preguntes).

Tenga en cuenta que en el caso específico de windows-logo + left-shift + right-arrow Karabiner ve menos eventos en primer lugar. Veo la misma historia (al menos, por lo que puedo contar) del registro de depuración de Karabiner: menos eventos generados por esa combinación problemática específica. He recortado todo hasta --Debug-- en cada línea, para los mismos tres casos:

# Windows-logo + left-shift + left-arrow
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x800a0022, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x000a0022, key 0x0038, kbdType  40, repeat = 0
UpdateEventFlagsCallback [ caught]: flags 0x002a0022
KeyboardEventCallback [ caught]: eventType 10, flags 0x802a0022, key 0x007b, kbdType  40, repeat = 0
UpdateEventFlagsCallback [sending]: flags 0x002a0022
KeyboardEventCallback [sending]: eventType 10, flags 0x002a0022, key 0x007b, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 11, flags 0x802a0022, key 0x007b, kbdType  40, repeat = 0
UpdateEventFlagsCallback [ caught]: flags 0x000a0022
KeyboardEventCallback [sending]: eventType 11, flags 0x002a0022, key 0x007b, kbdType  40, repeat = 0
UpdateEventFlagsCallback [sending]: flags 0x000a0022
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x80000000, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00000000, key 0x003a, kbdType  40, repeat = 0


# Windows-logo + left-shift + right-arrow
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x800a0022, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x000a0022, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x80000000, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00000000, key 0x003a, kbdType  40, repeat = 0


# Windows-logo + right-shift + right-arrow
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x800a0024, key 0x003c, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x000a0024, key 0x003c, kbdType  40, repeat = 0
UpdateEventFlagsCallback [ caught]: flags 0x002a0024
KeyboardEventCallback [ caught]: eventType 10, flags 0x802a0024, key 0x007c, kbdType  40, repeat = 0
UpdateEventFlagsCallback [sending]: flags 0x002a0024
KeyboardEventCallback [sending]: eventType 10, flags 0x002a0024, key 0x007c, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 11, flags 0x802a0024, key 0x007c, kbdType  40, repeat = 0
UpdateEventFlagsCallback [ caught]: flags 0x000a0024
KeyboardEventCallback [sending]: eventType 11, flags 0x002a0024, key 0x007c, kbdType  40, repeat = 0
UpdateEventFlagsCallback [sending]: flags 0x000a0024
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x003c, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x003c, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x80000000, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00000000, key 0x003a, kbdType  40, repeat = 0
    
pregunta jez 13.12.2014 - 01:21

3 respuestas

1

Desde sus ediciones, parece que el teclado específico que está usando está causando el problema. Desafortunadamente, no conozco ninguna forma de solucionarlo, pero pensé que respondería a la pregunta original de todos modos.

Puede volver a asignar las teclas modificadoras en OS X desde al menos 10.4 a 10.10.4 cambiando un archivo de Lista de propiedades (.plist). El archivo se encuentra dentro de ~/Library/Preferences/ByHost y se llama .GlobalPreferences.[a long identifier].plist , donde varía el identificador largo de cada usuario. (En la Terminal, puede usar la función de completar la pestaña para seleccionar el nombre específico de su archivo).

Estos son los pasos para copiar, convertir, editar y reemplazar .plist:

  1. En Preferencias del sistema > Teclado, haga clic en "Teclas modificadoras" y vuelva a asignar al menos uno de los botones (por ejemplo, Bloqueo de mayúsculas > Control). Esto asegurará que exista la sección correcta en el .plist, y facilitará su búsqueda.
  2. En la Terminal, vaya ao cree un directorio donde realizará el trabajo, luego:

    1. cp ~/Library/Preferences/ByHost/.GlobalPreferences (luego presione Tab para autocompletar el nombre de archivo único)
    2. plutil -convert xml1 -o ./keys-xml.plist ./keys-binary.plist
  3. Abra el archivo XML convertido. (Puede usar open /Applications/TextEdit.app keys-xml.plist para iniciar TextEdit desde la Terminal).

  4. Localice la sección en el archivo llamado " com.apple.keyboard.modifiermapping ...". Debería ver al menos un grupo "dict" dentro de esa sección. En realidad, será una entrada por clave específica que se haya reasignado, por lo que si vuelve a asignar Control a Shift, verá entradas que reasignan LeftControl a LeftShift y RightControl a RightShift.
  5. Modifique la entrada existente usando la tabla a continuación, cambiando el valor de la clave HIDKeyboardModifierMappingSrc a la clave de origen (el botón físico que presionará, y el valor de la clave HIDKeyboardModifierMappingDst a la clave de destino que desea (la clave que desea para tener efecto).
  6. Copie la sección dict completa (de <dict> a </dict> , incluidas las asignaciones de teclas, y pegue una por cada tecla que desee reasignar, cambiando los valores de Src y Dst para cada uno.
  7. Guarda y cierra el archivo. Luego, de vuelta en la Terminal:
    1. plutil -convert binary1 -o ./keys-binary_new.plist keys-xml.plist
    2. cp ./keys-binary_new.plist ~/Library/Preferences/ByHost/.GlobalPreferences (luego Tab para autocompletar)
  8. Cierre la sesión y vuelva a iniciarla para que los cambios surtan efecto.

Estos son los valores clave que se deben utilizar para cada clave modificadora en la asignación Src / Dst:

+-----------------+-----------+
|    Key Name     | Key Value |
+-----------------+-----------+
| None            |        -1 |
| Caps Lock       |         0 |
| Shift (Left)    |         1 |
| Control (Left)  |         2 |
| Option (Left)   |         3 |
| Command (Left)  |         4 |
| Keypad 0        |         5 |
| Help            |         6 |
| Shift (Right)   |         9 |
| Control (Right) |        10 |
| Option (Right)  |        11 |
| Command (Right) |        12 |
| ~~Kernel Panic~~|      ~~16~|
+-----------------+-----------+

NB: El código de clave 16 normalmente no se debe usar.

Fuente: Reescrito desde enlace

    
respondido por el Andy Mayer 21.07.2015 - 21:50
0

Encontré este artículo en mis viajes y parece que podría ser de alguna ayuda.

Remapping Keyboard Keys Mac OS X Mavericks

    
respondido por el Allan 14.04.2015 - 13:35
0

Tuve un problema similar con un teclado DAS que realmente fue creado para mi Mac: la tecla de opción izquierda hizo que se presionara una misteriosa combinación de teclas, en lugar de la opción. Para mí, esto terminó siendo un problema de hardware y tuve que reemplazar el teclado del fabricante.

    
respondido por el raster 23.06.2015 - 18:13

Lea otras preguntas en las etiquetas