Modifica dei tasti modificatori dalla riga di comando

13

Come utente di Emacs pesante, mi piace rimappare il mio tasto Caps Lock per funzionare come il tasto Ctrl. Per farlo, c'è una comoda finestra di dialogo nel riquadro delle preferenze della tastiera. Ma il problema è che questa impostazione viene persa dopo che qualcuno si collega a un altro account che non ha questa preferenza impostata.

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

    
posta pantulis 10.12.2010 - 18:30
fonte

5 risposte

6

Modifica delle preferenze e in esecuzione, defaults -currentHost read -g mostra quali modifiche vengono scritte. Stavo per scrivere un breve script bash per automatizzarlo, ma sembra che sia stato picchiato al punch:

#!/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

The script takes one argument, if the argument is emacs, then it swaps command and control, if the argument is anything else it restores the defaults.

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

    
risposta data 10.12.2010 - 19:42
fonte
3

Puoi utilizzare KeyRemap4MacBook con PCKeyBoardHack . Consente inoltre di utilizzare le chiavi di Emacs in qualsiasi app Mac, comprese quelle che non utilizzano Cocoa come le app MS.

    
risposta data 15.12.2010 - 08:41
fonte
1

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

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>

Modifica 1133 e 50475 nel fornitore e ID prodotto mostrati da ioreg -n IOHIDKeyboard -r . src 0 e dst -1 disabilitano caps lock .

defaults -currentHost write -g modifica:

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

Devi uscire e rientrare per applicare le modifiche. Se i valori sono stringhe (come nella risposta di @pithyless), le modifiche sono mostrate in 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
    
risposta data 08.04.2013 - 10:02
fonte
0

Combinando insieme alcune risposte ho trovato questo script che sembra funzionare ( mappare Caps-lock a 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;
})'

Unico problema che non sembra avere alcun effetto ...: (

Aggiornerò se lo faccio funzionare.

    
risposta data 05.08.2014 - 00:01
fonte
0

Volevo scambiare Comando destro con solo Opzione destra .

Quando imposto l'opzione Comando e Opzione globali in Preferenze di Sistema ... > Tastiera > Modifier Keys ..., è presente 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 Destra come sotto: 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 e 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 è utilizzare 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 accedere di nuovo.

    
risposta data 27.03.2017 - 00:39
fonte

Leggi altre domande sui tag