マイコミジャーナル

知りたい!を刺激する総合専門サイト


  1. パソコン

  2. アップル
  3. コラム
  4. OS X ハッキング!

【コラム】

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などのテキスト編集機能を持たないアプリケーションには縁のない話なので、念のため。

$ otool -L /Applications/Safari.app/Contents/MacOS/Safari
/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キーを併用するもののみ抜粋)

キー 初期値 機能
^amoveToBeginningOfParagraph:行頭へ移動
^bmoveBackward:1文字戻る
^ddeleteForward:カーソル右側の1文字を削除
^emoveToEndOfParagraph:行末へ移動
^fmoveForward:1文字進む
^hdeleteBackward:カーソル左側の1文字を削除
^kdeleteToEndOfParagraph:行を削除してバッファに登録
^lcenterSelectionInVisibleArea:再描画
^nmoveDown:1行下へ移動
^oinsertNewlineIgnoringFieldEditor:カーソル位置で改行
^pmoveUp:1行上へ移動
^ttranspose:カーソル前後の1文字を入れ替える
^yyank:バッファ上の文字列をカーソル位置へペースト(ヤンク)
^vpageDown: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:";
}

画像で見るニュース(パソコン)

スペシャル

  • Windows 7 大百科
  • パソコン/ビジネスPC メールマガジン創刊のお知らせ

特別企画


注目サイト