Modifica dei tasti modificatori dalla riga di comando


13

Come utente di Emacs, mi piace rimappare il tasto BLOC MAIUSC per farlo funzionare come tasto Ctrl. C'è una comoda finestra di dialogo nel riquadro Preferenze tastiera per farlo. Ma il problema è che questa impostazione si perde dopo che qualcuno accede a un altro account che non ha impostato questa preferenza.

Quindi c'è un modo di fare lo stesso della finestra di dialogo del riquadro delle preferenze dalla riga di comando?


2
Possibile duplicato dell'aggiornamento delle mappature dei tasti modificatori tramite lo strumento di comando predefinito . Sebbene l'altra domanda sia storicamente più recente, ha una risposta migliore (effettivamente funzionante).
techraf

Risposte:


7

Cambiando le preferenze e la corsa, defaults -currentHost read -gti mostra quali cambiamenti vengono scritti. Stavo per scrivere un breve script bash per automatizzarlo, ma sembra che io sia stato battuto sul pugno:

#!/bin/bash                                                                      

mappingplist=com.apple.keyboard.modifiermapping

if [ $1 == "emacs" ]; then
    echo "Switching to emacs modifiers"
    defaults -currentHost write -g $mappingplist '(                              
                {                                                                
            HIDKeyboardModifierMappingDst = 4;                                   
            HIDKeyboardModifierMappingSrc = 2; },                                
                {                                                                
            HIDKeyboardModifierMappingDst = 12;                                  
            HIDKeyboardModifierMappingSrc = 10;                                  
        },                                                                       
                {                                                                
            HIDKeyboardModifierMappingDst = 2;                                   
            HIDKeyboardModifierMappingSrc = 4;                                   
        },                                                                       
                {                                                                
            HIDKeyboardModifierMappingDst = 10;                                  
            HIDKeyboardModifierMappingSrc = 12;                                  
        })'


else
    echo "Switching to default modifiers"
    defaults -currentHost delete -g $mappingplist
fi

Lo script accetta un argomento, se l'argomento è emacs, quindi scambia il comando e il controllo, se l'argomento è qualcos'altro ripristina i valori predefiniti.

http://forums.macrumors.com/showthread.php?t=949280


Non sembra funzionare da me qui con Snow Leopard, ma è chiaramente un passo nella giusta direzione.
pantulis,

@pith ... cosa fa la -gbandiera? Non l'ho visto nella pagina man di defaults. Inoltre, sembra che stia scambiando due set di valori: 4 con 2 e 10 con 12, ma ci sono solo due modificatori che cambiano. Puoi elaborare o hai semplicemente guardato l'output ma non sai cosa rappresentano effettivamente? (All'inizio sospettavo quattro codici chiave - due a sinistra, due a destra - ma non sembrano essere codici chiave, almeno non come riportato dal driver della tastiera.)
Mark A. Donohoe,

Faccio i mapping come suggerisci, ma non sembra avere effetto sebbene nell'interfaccia utente appaia mappato. Farlo solo tramite l'interfaccia utente sembra funzionare ... Qualche idea?
SimonW


2

Da "Aggiornamento dei mapping dei tasti modificatori tramite lo strumento di comando predefinito" :

defaults -currentHost write -g com.apple.keyboard.modifiermapping.1133-50475-0 -array '<dict><key>HIDKeyboardModifierMappingSrc</key><integer>0</integer><key>HIDKeyboardModifierMappingDst</key><integer>2</integer></dict>

Cambiare 1133e 50475agli ID vendor e di prodotto indicate dalla ioreg -n IOHIDKeyboard -r. src 0e dst -1disabiliterebbe caps lock.

defaults -currentHost write -g modifica:

~/Library/Preferences/ByHost/.GlobalPreferences.*.plist

È necessario disconnettersi e riconnettersi per applicare le modifiche. Se i valori sono stringhe (come nella risposta di @pithyless), le modifiche vengono visualizzate nelle Preferenze di Sistema ma non hanno alcun effetto.

Valori delle chiavi :

-1 none
0 caps lock
1 left shift
2 left control
3 left option
4 left command
5 keypad 0
6 help
9 right shift
10 right control
11 right option
12 right command

0

Combinando alcune risposte insieme mi è venuta in mente questa sceneggiatura che sembra funzionare ( mappando Caps-Lock su Control ).

$ keyboard_id = "$(ioreg -n IOHIDKeyboard -r | grep -e VendorID\" -e ProductID | tr -d \"\|[:blank:] | cut -d\= -f2 | tr '\n' -)"
$ defaults -currentHost write -g "com.apple.keyboard.modifiermapping.${keyboard_id}0" '(
{
  HIDKeyboardModifierMappingDst = 2;
  HIDKeyboardModifierMappingSrc = 0;
})'

L'unico problema è che non sembra avere alcun effetto ... :(

Aggiornerò se riesco a farlo funzionare.


0

Volevo scambiare comando destro , con diritto di opzione solo le chiavi.

Quando installo lo scambio globale di comandi e opzioni in Preferenze di Sistema ...> Tastiera> Tasti modificatori ..., c'è la seguente configurazione nel sistema (che funziona come previsto):

$ defaults -currentHost read -g com.apple.keyboard.modifiermapping.1452-591-0
(
        {
        HIDKeyboardModifierMappingDst = 30064771299;
        HIDKeyboardModifierMappingSrc = 30064771298;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771303;
        HIDKeyboardModifierMappingSrc = 30064771302;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771298;
        HIDKeyboardModifierMappingSrc = 30064771299;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771302;
        HIDKeyboardModifierMappingSrc = 30064771303;
    }
)

Ma quando lo modifico, per scambiare solo il lato destro come di seguito - non funziona:

$ defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-591-0 '(
        {
        HIDKeyboardModifierMappingDst = 30064771303;
        HIDKeyboardModifierMappingSrc = 30064771302;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771302;
        HIDKeyboardModifierMappingSrc = 30064771303;
    }
)'

È perché i valori sono scritti come stringhe non come numeri interi. Puoi vederlo usando:

$ plutil -convert xml1 -o - ~/Library/Preferences/ByHost/.GlobalPreferences.*.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.keyboard.modifiermapping.1452-591-0</key>
    <array>
        <dict>
            <key>HIDKeyboardModifierMappingDst</key>
            <string>30064771303</string>
            <key>HIDKeyboardModifierMappingSrc</key>
            <string>30064771302</string>
        </dict>
        <dict>
            <key>HIDKeyboardModifierMappingDst</key>
            <string>30064771302</string>
            <key>HIDKeyboardModifierMappingSrc</key>
            <string>30064771303</string>
        </dict>
    </array>
</dict>
</plist>

Quindi il modo giusto per aggiornare l'impostazione è usare il formato XML:

$ defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-591-0 -array \
'<dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>30064771303</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>30064771302</integer>
</dict>' \
'<dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>30064771302</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>30064771303</integer>
</dict>'

Alla fine, devi disconnetterti e riconnetterti.


Hai capito che non posso dirlo? Forse è necessario un riavvio?
William,

Ah sì. Devi disconnetterti e riconnetterti.
Virus_7,

Sto cercando di rispondere a questa domanda apple.stackexchange.com/questions/280855/… Puoi chattare forse? chat.stackexchange.com/rooms/38/ask-different-chat Ho provato a eseguire il tuo ultimo comando e non cambia nulla per me.
William,

Prima di tutto rimuovi Karabiner-Elements e adatta il codice della tastiera (1452-591-0) e i codici chiave (30064771302, 30064771303) al tuo sistema.
Virus_7,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.