コマンドラインからMission Controlショートカットを変更するにはどうすればよいですか?


11

私はこれを長い間理解しようとしてきました。かなり典型的なMac OSプロビジョニングスクリプトがあります。

https://gist.github.com/ryanpcmcquen/b2e608311f286a4ab3e1

私はすべてであることをミッションコントロールのショートカットを変更したいCtrl+ Alt+ ...の代わりにCtrl+ ...。たとえば、デフォルトはCtrl+でUp、Mission Controlをアクティブにします。現在のショートカットが、使用している他のプログラムと競合するため、これをCtrl+ Alt+ に変更したいとUp思います。

これを行う方法は既に知っSystem Preferences > Keyboard > Shortcutsているので、スクリプト可能なコマンドラインソリューションを探しています。

編集:@ user3439894のおかげで、すべてのplistキーを希望どおりに変更するスクリプトを作成しました。唯一の問題は、機能しないことです。:-(

ここに私がこれまでに持っているものがあります:

#!/bin/bash
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 32 "{enabled = 1; value = { parameters = (65535, 126, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 33 "{enabled = 1; value = { parameters = (65535, 125, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 34 "{enabled = 1; value = { parameters = (65535, 126, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 35 "{enabled = 1; value = { parameters = (65535, 125, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 79 "{enabled = 1; value = { parameters = (65535, 123, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 80 "{enabled = 1; value = { parameters = (65535, 123, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 81 "{enabled = 1; value = { parameters = (65535, 124, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 82 "{enabled = 1; value = { parameters = (65535, 124, 3014656); type = standard; }; }"
chown -Rf `whoami` ~/Library/Preferences/com.apple.symbolichotkeys.plist;
defaults read com.apple.symbolichotkeys

これに対する解決策を見つけたことがありますか?
ネイサン

@ネイサン、いや。今はデフォルトのままです。
ryanpcmcquen 2018

同様の問題がありました。たぶん、あなたは私の解決策を試すことができます:apple.stackexchange.com/questions/344494/...
ネイサン

@ネイサン、あなたの解決策は手動の介入を必要とするようです。使用している他のプログラムを変更して別のホットキーを作成する方法を学びました。ハンマースプーンFTW。
ryanpcmcquen 2018

コマンドのこの部分は、type = standard;実際type = 'standard';の引用符に注意する必要があります'standard'。ただし、コマンドラインが適切に形成さ; killall -u $USER cfprefsdれていても、defaults コマンドの最後に追加しても、変更が反映されない場合があります。また、.plistこの使用例でのファイルへの完全なパスは必要ではなく、単に必要です。たとえばdefaults write com.apple.symbolichotkeys AppleSymbolicHotKeys ...、コマンドの残りの部分だけで十分です。
user3439894

回答:


5

これは直接的な回答ではありませんが、ここに提示されている情報が、直接的な回答を得るのに役立つことを願っています。

Mission ControlのデフォルトのキーボードショートカットをControl-上向き矢印からControl-Option-上向き矢印に変更すると、どのファイルがどのように変化するかがわかります。これは、/Users/$USER/Library/Preferences/com.apple.symbolichotkeys.plistファイル内の「32」ディクショナリの「値」ディクショナリおよび「AppleSymbolicHotKeys」ディクショナリの「34」ディクショナリの「パラメータ」配列の「アイテム2番号」です。

ここですdefaults readの表現com.apple.symbolichotkeys.plist、それは、上記で定義状況下で行われた変更に関連するファイル構造。

デフォルトのControl-Up Arrowを使用したMission Control

{
    AppleSymbolicHotKeys =     {
        32 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2359296
                );
                type = standard;
            };
        };
        34 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2490368
                );
                type = standard;
            };
        };
    };
}

ミッションコントロールがControl-Option-Up Arrowに変更されました

{
    AppleSymbolicHotKeys =     {
        32 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2883584
                );
                type = standard;
            };
        };
        34 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    3014656
                );
                type = standard;
            };
        };
    };
}

manページのバグセクションはdefaults言う:

デフォルトは非常に複雑な方法で構成できるため、ユーザーがこのコマンドでデフォルトを入力するのは困難です。

そして、これが可能なdefaults場合でも、ターゲット配列要素にターゲット値を書き込むために使用する非常に複雑なコマンドラインになるため、これは完璧な例です。参考までに... defaults write com.apple.symbolichotkeys ...コマンドを実行する場合は、最初にターゲットファイルをバックアップしてください。

もう1つのオプションは、AppleScriptを使用してシステム設定GUIをナビゲートすることにより設定を変更することです。これも、ここではターゲットではない最上位のオブジェクトを設定する場合と比べて少し複雑になります。自動化された方法が必要な場合はそれを理解しますが、どちらの方法を理解する時間がないので、申し訳ありません。

少なくとも、今どこで何が変化するかがわかっているので、自分でそれを理解するか、このことをもう少し知ることで追加の助けを得ることができます。

これは、com.apple.symbolichotkeys.plistファイルのXcode内のクリップされた画像です。

ここに画像の説明を入力してください

ところで、ファイルシステムの変更をログに記録し、その情報をより人間が読み取り可能な出力に変換してこの情報を提供するサードパーティのユーティリティを使用して、変更をトラップしました。


それは適切なplistファイルを変更しているように見えますが、唯一の問題は、再起動後、ファイルの再読み込み後など、ショートカットが実際には変更されないことです。
ryanpcmcquen 2015

この「ファイルシステムの変更をログに記録し、その情報をより人間が読める形式の出力に変換するサードパーティのユーティリティ」の名前は何ですか?
Allen Bargi、2016年

1
@Allen Bargi、IIRCこれはおそらくfilemon、「Mac OS X Internals-To the Apple's Core」の本のエクストラの一部であり、システムで実行可能ファイルにコンパイルしたソースコード の形式でしたfilemon.c。次に、変更された現在の状態のファイルの違いを、変更の直前に作成されたTime Machineバックアップのファイルと比較しました。ネイティブのfs_usageコマンドを使用することもできます。
user3439894

@ryanpcmcquenリンクが壊れています
charlesreid1

@ charlesreid1、まあ、うまくいきませんでした。
ryanpcmcquen

1

これは私の推奨事項です。このようなカスタマイズを行うには、Karabinerなどのユーティリティを使用してください。

開発者として、私は個人的にそれが魅力的で食欲をそそる問題であると思います、そしてそれは本当にソフトウェア開発者とハッカーだけが本当に感謝することができる舞台裏に潜むmacOSの醜くて暗い側面を示しています...

問題は非常に単純です。デフォルトのキーの組み合わせを自分のバインディングに再マップしたいだけです。

なぜそれがそんなに難しい/複雑なのですか?解決策を見つけて投稿するつもりです...しばらくお待ちください。


ありがとう、あなたが見つけたものを見るのを楽しみにしています。しかし、外部プログラムのダウンロードには、Macの標準インターフェイスを介して設定するのと同じくらい時間がかかるので、組み込みのコマンドラインソリューションを期待しています。
ryanpcmcquen 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.