【コラム】

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:";
    }

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン