回答:
設定を変更して実行すると、defaults -currentHost read -g
どのような変更が書き込まれているかがわかります。それを自動化するために短いbashスクリプトを作成するつもりでしたが、パンチに打ちのめされたようです。
#!/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
引数がemacsの場合、スクリプトは1つの引数を取り、コマンドとコントロールを交換します。引数がそれ以外の場合、デフォルトを復元します。
-g
フラグは何をしますか?のmanページでそれを見ませんでしたdefaults
。また、これは2つの値セットを交換しているように見えます。4が2と10が12ですが、変更されるのは2つの修飾子のみです。詳しく説明してもらえますか、それとも単に出力を見ただけで、実際に何を表しているのかわかりませんか?(最初は4つのキーコード(左に2つ、右に2つ)が疑われましたが、少なくともキーボードドライバーによって報告されたように、キーコードではないようです。)
KeyRemap4MacBookをPCKeyBoardHackとともに使用できます。また、MSアプリなどのCocoaを使用していないものを含め、MacアプリでEmacsキーを使用できます。
「デフォルトのコマンドツールによる修飾キーマッピングの更新」から:
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>
変更1133
と50475
によって示さベンダーと製品IDへioreg -n IOHIDKeyboard -r
。src 0
そして、dst -1
無効になりcaps lock。
defaults -currentHost write -g
変更:
~/Library/Preferences/ByHost/.GlobalPreferences.*.plist
変更を適用するには、ログアウトして再度ログインする必要があります。値が文字列の場合(@pithylessによる回答のように)、変更はシステム環境設定に表示されますが、効果はありません。
キーの値:
-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
いくつかの答えを組み合わせることで、機能するように見えるこのスクリプトを思いつきました(Caps-lockを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;
})'
効果がないように見える問題のみ... :(
動作するようになったら更新します。
Right CommandとRight Optionキーのみを交換したかった。
System Preferences ...> Keyboard> Modifier Keys ...でグローバルコマンドおよびオプションスワップをセットアップすると、システムに次の設定があります(予想どおりに動作します)。
$ 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;
}
)
しかし、以下のように右側のみを交換するように変更すると、機能しません:
$ defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-591-0 '(
{
HIDKeyboardModifierMappingDst = 30064771303;
HIDKeyboardModifierMappingSrc = 30064771302;
},
{
HIDKeyboardModifierMappingDst = 30064771302;
HIDKeyboardModifierMappingSrc = 30064771303;
}
)'
値は整数ではなく文字列として書き込まれるためです。あなたはそれを使用してそれを見ることができます:
$ 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>
したがって、設定を更新する正しい方法は、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>'
最後に、ログオフして再度ログインする必要があります。