mappatura dello swap dei tasti Maiusc sinistro e destro

7

Ho un problema strano e molto specifico quando uso la mia tastiera USB di terze parti con il mio MacBook Pro: option + left-shift + right-arrow (che come i programmatori Mac sapranno significa "evidenzia la parola alla destra del cursore") non funziona . Le ragioni alla base di questo non sono chiare, ma so che non ha a che fare con le preferenze software a livello utente, né direttamente con un problema hardware di basso livello (vedi la mia domanda originale su superutente per la logica di risoluzione dei problemi completa.

Devo notare che è una tastiera fatta per Windows: una tastiera USB Thinkpad con Trackpoint, infatti, il trackpoint è la ragione per cui mi piace così tanto e lo affronterò nonostante i suoi problemi. Quindi il tasto I che ho mappato a option nelle Preferenze di Sistema è in effetti il tasto "Logo Windows".

È che funziona se uso option + RIGHT-shift + right-arrow ma questa è una posizione della mano molto maldestra per spostarmi rapidamente tra i miei documenti. Quindi mi piacerebbe provare a scambiare l'interpretazione del Mac dei tasti Maiusc sinistro e destro . È possibile, e se sì, come?

Aggiornamento:

Su suggerimento di Tetsujin Ho provato il Karabiner ma sembra che il problema stia accadendo a un livello più basso. L'evento della tastiera per la freccia destra non raggiunge mai il Karabiner se i tasti Windows-logo e (physical) left-shift vengono tenuti premuti (e non importa se Windows logo è mappato a un altro modificatore: il problema è bloccato combinazione di tasti fisici specifici).

In risposta al commento di Software Insomniac ecco cosa dice il Karabiner EventViewer quando premo:

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 funziona anche, nel caso ve lo stiate chiedendo).

Si noti che nel caso specifico di windows-logo + left-shift + right-arrow Karabiner vede meno eventi in primo luogo. Vedo la stessa storia (almeno, da quello che posso dire) dal log di debug di Karabiner: meno eventi generati da quella specifica combinazione problematica. Ho tagliato tutto fino a --Debug-- su ogni riga, per gli stessi tre casi:

# 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
    
posta jez 13.12.2014 - 01:21
fonte

3 risposte

1

Dalle tue modifiche, sembra che la specifica tastiera che stai utilizzando causi il problema. Sfortunatamente, non conosco alcun modo per risolverlo, ma ho pensato di rispondere comunque alla domanda originale.

È possibile rimappare i tasti modificatori in OS X da almeno 10.4 a 10.10.4 modificando un file Elenco proprietà (.plist). Il file si trova all'interno di ~/Library/Preferences/ByHost ed è denominato .GlobalPreferences.[a long identifier].plist , in cui l'identificatore lungo di ciascun utente varia. (Nel Terminale, puoi semplicemente usare Tab-completion per ottenere il nome specifico del tuo file.)

Ecco i passaggi per copiare, convertire, modificare e sostituire il .plist:

  1. In Preferenze di Sistema > Tastiera, fai clic su "Modifier Keys" e rimappa almeno uno dei pulsanti (ad esempio Caps Lock > Control). Ciò assicurerà che la sezione corretta esista in .plist e ne faciliti la ricerca.
  2. In Terminale, vai a o crea una directory in cui eseguirai il lavoro, quindi:

    1. cp ~/Library/Preferences/ByHost/.GlobalPreferences (quindi premi Tab per completare automaticamente il nome file univoco)
    2. plutil -convert xml1 -o ./keys-xml.plist ./keys-binary.plist
  3. Apre il file XML convertito. (Puoi usare open /Applications/TextEdit.app keys-xml.plist per avviare TextEdit dal Terminale.)

  4. Trova la sezione nel file chiamato " com.apple.keyboard.modifiermapping ...". Dovresti vedere almeno un gruppo "dict" all'interno di quella sezione. In realtà sarà una voce per chiave specifica che è stata rimappata, quindi se hai rimappato Control to Shift, vedresti le voci che rimappano LeftControl in LeftShift e RightControl in RightShift.
  5. Modifica la voce esistente utilizzando la tabella seguente, modificando il valore della chiave HIDKeyboardModifierMappingSrc con il tasto Origine (il pulsante fisico che verrà premuto e il valore della chiave HIDKeyboardModifierMappingDst sul tasto Destinazione desiderato (la chiave che desideri per avere effetto).
  6. Copia l'intera sezione dict (da <dict> a </dict> , inclusi i mapping dei tasti e incolla uno per chiave che vuoi rimappare, cambiando Src e Dst per ciascuno.
  7. Salva e chiudi il file. Quindi, torna in Terminale:
    1. plutil -convert binary1 -o ./keys-binary_new.plist keys-xml.plist
    2. cp ./keys-binary_new.plist ~/Library/Preferences/ByHost/.GlobalPreferences (quindi Tab to autocomplete)
  8. Esci e rientra per rendere effettive le modifiche.

Ecco i valori chiave da utilizzare per ciascun tasto modificatore nella mappatura 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: il codice chiave 16 in genere non dovrebbe essere utilizzato.

Fonte: Riscritto da link

    
risposta data 21.07.2015 - 21:50
fonte
0

Ho trovato questo articolo nei miei viaggi e sembra che potrebbe essere di aiuto.

Rimappatura delle chiavi della tastiera Mac OS X Mavericks

    
risposta data 14.04.2015 - 13:35
fonte
0

Ho avuto un problema simile con una tastiera DAS che è stata effettivamente realizzata per il mio Mac: il tasto Opzione sinistro ha causato la compressione di una misteriosa combinazione di tasti, anziché Opzione. Per me, questo è diventato un problema hardware e ho dovuto sostituire la tastiera del produttore.

    
risposta data 23.06.2015 - 18:13
fonte

Leggi altre domande sui tag