【コラム】
OS X ハッキング!
103 Cocoaアプリのキーバインドにこだわる(1)
2004/08/16
いよいよアテネ五輪が開幕、今回はメダルをいくつ持ち帰れるか、ハラハラし通しの日々が当分続きそう。iPod miniはシルバーが一番人気だそうだけれど……五輪は是非ともゴールドでお願いしたいところ。がんばれ、日本!!
さて、今回はCocoaアプリにおけるキーバインドについて。CocoaアプリでEmacsのキーバインドの一部を使用できることは、当コラム第17回「TextEditの秘密」で紹介済だが、今度はもう少し深く掘り下げ、そのキーバインドを変更する方法について説明したい。
Cocoaアプリかどうか調べるには
今回紹介する機能はCocoaアプリが対象となるため、最初にバンドル形式のアプリケーションに含まれるバイナリ部分(***.app/Contents/MacOS/@@@の「@@@」)がCocoaフレームワークにリンクしているかどうかを確認する必要がある。otoolコマンドに「-L」オプションを付けて実行すると、対象のバイナリが使用するライブラリ/フレームワークが一覧されるので、その中に「Cocoa.framework」と表示されればOKだ。
より正確に言うと、テキスト編集機能を持つCocoaアプリは、Application Kitに含まれる「NSTextView」というクラスを利用してキー入力などの機能を実現している。Preview.appなどのテキスト編集機能を持たないアプリケーションには縁のない話なので、念のため。
/Applications/Safari.app/Contents/MacOS/Safari:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 9.0.0)
システム標準のキーバインド
NSTextViewでは、Controlなどの特殊キーを押すと「/System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict」(システム標準)、「~/Library/KeyBindings/DefaultKeyBinding.dict」(ユーザ別)の順にキーバインドの情報が検索される。このファイルのどちらかでキーバインドを定義すれば今回の目的を達成できるわけだが、通常は後者を利用すればいいだろう。
システム標準では、Controlキー(記号「^」)と組み合わされたキーバインドとして下表の内容が定義されている。この表を参考に自分好みの設定を~/Library/KeyBindings/DefaultKeyBinding.dictで定義すれば、TextEditやSafariといったNSTextViewを使用するアプリケーションで有効になる、という寸法だ。
Cocoaアプリで使用可能なキーバインド(Ctrlキーを併用するもののみ抜粋)
| キー | 初期値 | 機能 |
|---|---|---|
| ^a | moveToBeginningOfParagraph: | 行頭へ移動 |
| ^b | moveBackward: | 1文字戻る |
| ^d | deleteForward: | カーソル右側の1文字を削除 |
| ^e | moveToEndOfParagraph: | 行末へ移動 |
| ^f | moveForward: | 1文字進む |
| ^h | deleteBackward: | カーソル左側の1文字を削除 |
| ^k | deleteToEndOfParagraph: | 行を削除してバッファに登録 |
| ^l | centerSelectionInVisibleArea: | 再描画 |
| ^n | moveDown: | 1行下へ移動 |
| ^o | insertNewlineIgnoringFieldEditor: | カーソル位置で改行 |
| ^p | moveUp: | 1行上へ移動 |
| ^t | transpose: | カーソル前後の1文字を入れ替える |
| ^y | yank: | バッファ上の文字列をカーソル位置へペースト(ヤンク) |
| ^v | pageDown: | 1ページ分下方を表示 |
Windowsの"手クセ"がついてしまった人は
OS Xだけですべてが完結すればいいが、会社や学校ではWindowsというユーザも少なくないはず。気付かぬうちに、コピー(C-c)やペースト(C-v)といった"Windowsの流儀"がクセになってしまったユーザがいても不思議ではない。というわけで、Windowsで利用されるショートカットのうち代表的なものをキーバインドのサンプルとして定義してみた。以下のリストを~/Library/KeyBindings/DefaultKeyBinding.dictとして保存すれば、以降起動されるCocoaアプリ(NSTextViewを使用するもの)でC-cやC-vが有効になるはずだ。
~/Library/KeyBindings/DefaultKeyBinding.dictのサンプル
{"^c"="copy:";
"^x"="cut:";
"^v"="paste:";
"^z"="undo:";
"^m"="insertNewline:";
}
ヘッドライン
- デル、15.6型ノート「Studio 15」にOPIのネイルカラーオプションを追加[15:37 2/10]デル
- NVIDIA、ノートPC向けに新世代の内蔵/外部GPU切り替え技術「Optimus」[14:45 2/10]自作
- 「ATI Radeon HD 5570」搭載グラフィックスカードが各社より発売に[13:56 2/10]自作
- バッファロー、約5mmしかでっぱらないmicroSDを利用したUSBメモリ[13:37 2/10]周辺機器
- 【レビュー】手袋したままでもOK!? タッチ操作対応の全部入りボードPC - ソニー「VAIO L VPCL129FJ/S」[12:00 2/10]VAIO
- 【レビュー】ゲーム機もPCもコレ1台でOKの27型フルHD液晶 - ベンキュージャパン「M2700HD」[09:00 2/10]周辺機器
- アップル「Aperture 3」発表、プロ向けの性能にiPhotoの容易さを融合[02:28 2/10]アップル
- Appleの「A4」プロセッサとは何か? - エンジニアらの意見[01:54 2/10]アップル
- 医療ソリューション企業Epocrates、iPadは医療現場で人気と報告 - 臨床医2割が購入意向[21:00 2/9]アップル
- 米Apple CEOジョブズ氏がNYで秘密の会合 - 大手新聞社幹部らを訪問[21:00 2/9]アップル









