14 votes

Modification des touches de modification à partir de la ligne de commande

En tant que grand utilisateur d'Emacs, j'aime remapper ma touche de verrouillage des majuscules pour qu'elle fonctionne comme la touche Ctrl. Il existe une boîte de dialogue pratique dans le volet des préférences du clavier pour le faire. Mais le problème est que ce paramètre est perdu lorsque quelqu'un se connecte à un autre compte pour lequel cette préférence n'est pas définie.

Existe-t-il un moyen de faire la même chose que le dialogue du volet des préférences à partir de la ligne de commande ?

9voto

pithyless Points 558

Modifier les préférences et courir, defaults -currentHost read -g vous montre les changements en cours d'écriture. J'allais écrire un court bash script pour l'automatiser, mais il semble que j'ai été battu à plate couture :

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

Le script prend un argument, si l'option argument est emacs, alors il échange commande et contrôle, si l'argument est autre chose, il restaure le valeurs par défaut.

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

3voto

Oppositional Points 5966

Vous pouvez utiliser KeyRemap4MacBook avec le PCKeyBoardHack . Il vous permet également d'utiliser les touches Emacs dans n'importe quelle application Mac, y compris celles qui n'utilisent pas Cocoa, comme les applications MS.

2voto

Desde "Mise à jour du mappage des touches de modification via l'outil de commande par défaut" :

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>

Changement 1133 et 50475 aux identifiants du vendeur et du produit indiqués par ioreg -n IOHIDKeyboard -r . src 0 et dst -1 désactiverait caps lock .

defaults -currentHost write -g modifie :

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

Vous devez vous déconnecter et vous reconnecter pour appliquer les changements. Si les valeurs sont des chaînes de caractères (comme dans la réponse de @pithyless), les changements sont affichés dans les Préférences Système mais ils n'ont aucun effet.

Valeurs des clés :

-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

1voto

Virus_7 Points 189

Je voulais échanger Droit de commandement avec La bonne option uniquement les clés.

Lorsque je configure le système global Commande et Option swap dans les Préférences Système... > Clavier > Touches de modification..., il y a la configuration suivante dans le système (qui fonctionne comme prévu) :

$ 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;
    }
)

Mais quand je le modifie, pour échanger seulement Droit comme ci-dessous - cela ne fonctionne pas :

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

C'est parce que les valeurs sont écrites sous forme de chaînes de caractères et non d'entiers. Vous pouvez voir cela en utilisant :

$ 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>

La bonne façon de mettre à jour les paramètres est donc d'utiliser le format 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>'

À la fin, vous devez vous déconnecter et vous reconnecter.

0voto

SztupY Points 327

En combinant quelques réponses, j'ai trouvé ce script qui semble fonctionner ( cartographie Caps-lock pour contrôler ).

$ 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;
})'

Le seul problème est que cela ne semble pas faire d'effet... :(

Je mettrai à jour si je réussis à le faire fonctionner.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X