Ändern der Modifizierertasten über die Befehlszeile

13

Als starker Emacs-Benutzer möchte ich meine Feststelltaste neu zuordnen, um als Strg-Taste zu fungieren. Es gibt ein praktisches Dialogfeld im Tastatureinstellungsfenster, um dies zu tun. Das Problem ist jedoch, dass diese Einstellung verloren geht, nachdem sich jemand bei einem anderen Konto anmeldet, das nicht über diese Voreinstellung verfügt.

Gibt es also eine Möglichkeit, das Gleiche wie im Dialogfeld "Einstellungen" über die Befehlszeile zu tun?

pantulis
quelle
2
Mögliches Duplikat der Aktualisierung von Modifikatortastenzuordnungen über das Standardbefehlstool . Obwohl die andere Frage historisch gesehen neuer ist, hat sie eine bessere (tatsächlich funktionierende) Antwort.
Techraf

Antworten:

7

Durch Ändern der Einstellungen und Ausführen wird defaults -currentHost read -gangezeigt, welche Änderungen gerade geschrieben werden. Ich wollte ein kurzes Bash-Skript schreiben, um es zu automatisieren, aber es sieht so aus, als wäre ich völlig fertig:

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

Das Skript verwendet ein Argument. Wenn es sich um ein Emacs-Argument handelt, werden Befehl und Steuerung vertauscht. Wenn es sich um ein anderes Argument handelt, werden die Standardeinstellungen wiederhergestellt.

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

marklos
quelle
Es scheint hier bei Snow Leopard nicht zu funktionieren, aber es ist eindeutig ein Schritt in die richtige Richtung.
Pantulis
@pith ... was macht die -gFlagge? Das habe ich in der Manpage für nicht gesehen defaults. Außerdem sieht es so aus, als würde es zwei Sätze von Werten austauschen: 4 mit 2 und 10 mit 12, aber es gibt nur zwei Modifikatoren, die sich ändern. Können Sie das näher erläutern oder haben Sie sich nur die Ausgabe angesehen, wissen aber nicht, was sie tatsächlich darstellen? (Zuerst vermutete ich vier Tastencodes - zwei links, zwei rechts -, aber sie scheinen keine Tastencodes zu sein, zumindest nicht so, wie es der Tastaturtreiber gemeldet hat.)
Mark A. Donohoe
Ich mache die Zuordnungen, wie Sie vorschlagen, aber es scheint nicht wirksam zu sein, obwohl es in der Benutzeroberfläche zugeordnet erscheint. Es scheint nur über die Benutzeroberfläche zu funktionieren ... Irgendwelche Ideen?
SimonW
3

Sie können KeyRemap4MacBook mit dem PCKeyBoardHack verwenden . Außerdem können Sie Emacs-Schlüssel in jeder Mac-App verwenden, einschließlich derer, die Cocoa nicht verwenden, wie z. B. MS-Apps.

Matti Pastell
quelle
2

Von "Aktualisieren der Modifizierertastenzuordnungen über das Befehlstool" :

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>

Ändern Sie 1133und 50475zu den von angezeigten Lieferanten- und Produkt-IDs ioreg -n IOHIDKeyboard -r. src 0und dst -1würde deaktivieren caps lock.

defaults -currentHost write -g ändert:

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

Sie müssen sich abmelden und wieder anmelden, um die Änderungen zu übernehmen. Wenn es sich bei den Werten um Zeichenfolgen handelt (wie in der Antwort von @pithyless), werden die Änderungen in den Systemeinstellungen angezeigt, haben jedoch keine Auswirkungen.

Werte der Schlüssel :

-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
Lri
quelle
0

Ich habe ein paar Antworten kombiniert und ein Skript gefunden, das zu funktionieren scheint ( Zuordnung von Feststelltaste zu Steuerung ).

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

Einziges Problem, dass es keinen Effekt zu haben scheint ... :(

Ich werde es aktualisieren, wenn ich es zum Laufen bringe.

SimonW
quelle
0

Ich wollte den rechten Befehl nur mit den rechten Wahltasten tauschen .

Wenn ich den globalen Befehls- und Optionstausch in den Systemeinstellungen ...> Tastatur> Zusatztasten ... einrichte, gibt es im System die folgende Konfiguration (die wie erwartet funktioniert):

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

Aber wenn ich es ändere, um nur die rechte Seite wie unten zu tauschen , funktioniert es nicht:

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

Das liegt daran, dass Werte als Zeichenfolgen und nicht als ganze Zahlen geschrieben werden. Das können Sie sehen mit:

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

Die richtige Methode zum Aktualisieren der Einstellung ist das XML-Format:

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

Am Ende müssen Sie sich abmelden und erneut anmelden.

Virus_7
quelle
Hast du das zum Laufen gebracht, was ich nicht sagen kann? Ist möglicherweise ein Neustart erforderlich?
William
Ah ja. Sie müssen sich abmelden und erneut anmelden.
Virus_7
Ich versuche, diese Frage zu beantworten apple.stackexchange.com/questions/280855/… Können Sie vielleicht chatten? chat.stackexchange.com/rooms/38/ask-different-chat Ich habe versucht, Ihren letzten Befehl auszuführen, und es ändert nichts für mich.
William
Entfernen Sie zunächst Karabiner-Elements und passen Sie den Tastaturcode (1452-591-0) und die Tastencodes (30064771302, 30064771303) an Ihr System an.
Virus_7