アプリケーションのキーボドショートカットを変更する

アプリケーションのキーボドショートカットを変更する方法としては、アプリケーション自体がメニュー/キーボドショートカットのユーザ定義機能を組み込んでいるというケースがあります。
Adobe製品の多く(全てのAdobe製品を知っている訳ではないのですが…)やTextWrangler.appなどがその例でしょう。

1

しかし、アプリケーション自体がメニュー/キーボドショートカットのユーザ定義機能を持っているケースは少ないので、メニュー/キーボドショートカットのユーザ定義機能を持っていないアプリケーションでキーボードショートカットを変更する方法としては、

  • システム環境設定のキーボードから、アプリケーション毎のキーボードショートカットを定義する
  • 対象アプリケーションの初期設定plistファイルを加工する

ということになるでしょう。

■システム環境設定のキーボードから、アプリケーション毎のキーボードショートカットを定義する

2013-11-05 8.43.42

図では、アプリケーションFileZilla.appの「切断(D)」コマンドに「コントロールキー+D」を割り当てているところです。
ショートカットは、定義したいキーのコンビネーションを直接打てば登録されます。
対象アプリケーションで、既に別なショートカットキーが当てられている場合でも、新たな設定が上書きされます。

■初期設定plistファイルを加工する
「キーボドショートカット」や「NSUserKeyEquivalents」などのキーワードで検索してヒットする‘defaults write…’という、ターミナルからコマンドで設定できる方法というのは、対象アプリケーションの初期設定ファイル「xxx.plist」を加工するということになります。
その方法は、

  • ターミナルから、‘defaults write…’というコマンドで設定する
  • plistファイルを編集できるツールで「NSUserKeyEquivalents」を追加する

という方法となります。
最近の傾向として、plistファイルはXML形式のplistファイルではなく、バイナリ形式のバイナリplistと呼ばれる形式の場合が多いので、テキストエディタではバイナリデータを解釈できないため編集はできないと思った方がいいです。例外的に、TextWrangler.appやBBEdit.appはバイナリplistファイルを扱うことができますが、素直に、plistエディタやXcode.appを使った方がいいでしょう。
参考までに、追加するエントリは、XML形式では次のようになります。

<key>NSUserKeyEquivalents</key>
<dict>
<key>変更したいメニュー項目名</key>
<string>キーボードショートカット</string>
</dict>

このとき、モディファイアキーは、
command=”@”
Option=”~”
Control=”^”
SHIFT=”$”
となります。
先ほどのFileZilla.appの例では、

<key>NSUserKeyEquivalents</key>
<dict>
<key>切断(D)</key>
<string>^d</string>
</dict>

となり、plistエディタ(ここではXcode.app)では

2

となります。
因に、これを‘defaults write…’でやれば、

$ defaults write de.filezilla NSUserKeyEquivalents -dict ‘切断(D)’ ‘^d’

となるはずなのですが、’切断(D)’の括弧の部分で何らかのエスケープが必要なようです。

このplistエディタを使う方法や、ターミナルから‘defaults write…’で設定する方法では、あらかじめ対象アプリケーションの初期設定plistファイルがなんという名前のファイルであるのか知っておく必要があることに加えて、もう1つ参照ファイルを編集しなければなりません。
システム環境設定のキーボードからショートカットを追加しているときに、Preferencesフォルダを変更日でソートして観察していると、アプリケーションの初期設定plistファイルと同時に「com.apple.universalaccess.plist」ファイルも連動して書き換えられているのが分かります。
この「com.apple.universalaccess.plist」ファイルのエントリで、ショートカットが変更されたアプリケーションを参照する仕組みとなっているようです。

2013-11-05 8.42.17

図で示すように、「com.apple.universalaccess.plist」ファイル中の「com.apple.custommenu.app」エントリに対象アプリケーションのplistファイル名が必要です。

こうしてみると、Cyberduck.appとFileZilla.appの接続解除(切断)コマンドをコントロールキー+Dで統一しようとして調べ始め、‘defaults write…’で簡単に設定できるようだなと思っていたのですが、結局は、システム環境設定のキーボードから設定した方が確実で早かったりするという、あまり有り難くない落ちでした。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中