コマンドラインから修飾キーを変更する


13

Emacsのヘビーユーザーとして、私はCaps LockキーをCtrlキーとして機能するように再マップしたいと思っています。これを行うには、キーボード設定ペインに便利なダイアログがあります。ただし、問題は、この設定が設定されていない別のアカウントに誰かがログインすると、この設定が失われることです。

コマンドラインから設定ペインダイアログと同じことをする方法はありますか?


2
defaultsコマンドツールを使用した更新キーキーマッピングの重複の可能性。他の質問は歴史的に新しいものですが、より良い(実際に機能する)答えがあります。
テクラフ16

回答:


7

設定を変更して実行すると、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つの引数を取り、コマンドとコントロールを交換します。引数がそれ以外の場合、デフォルトを復元します。

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


ここでSnow Leopardを使用してもうまくいかないようですが、明らかに正しい方向への一歩です。
pantulis

@pith ... -gフラグは何をしますか?のmanページでそれを見ませんでしたdefaults。また、これは2つの値セットを交換しているように見えます。4が2と10が12ですが、変更されるのは2つの修飾子のみです。詳しく説明してもらえますか、それとも単に出力を見ただけで、実際に何を表しているのかわかりませんか?(最初は4つのキーコード(左に2つ、右に2つ)が疑われましたが、少なくともキーボードドライバーによって報告されたように、キーコードではないようです。)
Mark A. Donohoe

私はあなたが提案するようにマッピングを行いますが、UIではマッピングされているように見えますが、効果はありません UIを介してのみ行うとうまくいくようです...何かアイデアはありますか?
SimonW


2

「デフォルトのコマンドツールによる修飾キーマッピングの更新」から:

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>

変更113350475によって示さベンダーと製品IDへioreg -n IOHIDKeyboard -rsrc 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

0

いくつかの答えを組み合わせることで、機能するように見えるこのスクリプトを思いつきました(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;
})'

効果がないように見える問題のみ... :(

動作するようになったら更新します。


0

Right CommandRight 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>'

最後に、ログオフして再度ログインする必要があります。


これはうまくいきませんでしたか?多分再起動が必要ですか?
ウィリアム

ああ...はい。ログオフして再度ログオンする必要があります。
Virus_7

この質問に答えようとしています。apple.stackexchange.com/ questions /280855/… たぶんチャットできますか? chat.stackexchange.com/rooms/38/ask-different-chat 最後のコマンドを実行しようとしましたが、何も変わりません。
ウィリアム

まずKarabiner-Elementsを削除し、キーボードコード(1452-591-0)とキーコード(30064771302、30064771303)をシステムに適合させます。
Virus_7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.