DiamondKey ダウンロード&マニュアル

Mac OS X 10.3(Panther)対応版リリース間近です

1.DiamondKeyとは

 「DiamondKey」はMac OS Xにダイアモンドカーソル機能を追加するユーティリティです。ダイアモンドカーソルとはcontrolキー+E/X/S/Dキーを上下左右カーソルキーと同じように働かせることで,左手だけでカーソル操作をできるようにする機能です。Macユーザーには馴染みの薄いものかもしれませんが,コマンドラインベースのシステムや,テキストエディタなどではダイアモンドカーソル機能を持つものが少なくありません。慣れると非常に便利なこの機能をMac OS Xのあらゆるシーンで利用できるようになればと思い,DiamondKeyは誕生しました。

 なお,DiamondKeyは「iJect」をベースに開発されたカーネルエクステンション(kext)です。カーネルエクステンションという特性上,システムの安定性を損なう危険性があることをご理解の上,自己責任の下でお使いください(DiamondKeyを使ったことによって何らかの被害が生じても作者は一切の責任を負いません)。また,iJectはGPL 2.0の下で公開されたものであり,DiamondKeyもそのライセンス形態に準拠します。複製,再配布,ソースの改変等は自由ですので作者の承諾なくこれを行って構いません。

 

2.DiamondKeyの機能

 DiamondKeyには次のような機能があります。

●ダイアモンドカーソル機能の追加
 DiamondKeyは次のキーコンビネーションをカーソルキーやpage up/page downキーに割り当てます。

controlキー+Eキー

↑キー

controlキー+Xキー

↓キー

controlキー+Sキー

←キー

controlキー+Dキー

→キー

controlキー+Rキー

page upキー

controlキー+Cキー

page downキー

controlキー+Hキー

deleteキー

●カナ/かなキーをcommandキーに変更
 日本語キーボードのスペースキーの右となりにあるカナ/かなキーをcommandキーとして使えるようにします。スペースキーの右側にcommandキーのないiBook/PowerBookなどで便利だと思います。

●英数キーを`/~キーに変更
 日本語キーボードのスペースキーの左となりにある英数キーを`/~キーとして使えるようにします。アップル標準キーボードを使っていた人にとってはお馴染みのキーポジションだと思います。

 

3.DiamondKeyの動作環境

 DiamondKeyはMac OS X 10.0〜10.2で動作します。必要なメモリやハードディスクは極小です。

 

4.DiamondKeyのダウンロード

 DiamondKeyはインストールするだけで機能し,設定画面等はありません。よって上述した機能を個別にオン/オフできないため,3つのプログラムを用意してあります。お好みのプログラムをダウンロードしてください。

●ダイヤモンドカーソル機能のみ
DiamondKey (Normal).sit(48KB)

●ダイヤモンドカーソル機能+カナ/かなキーをcommandキーに変更
DiamondKey (+kana->command).sit(48KB)

●ダイヤモンドカーソル機能+カナ/かなキーをcommandキーに変更+英数キーを`/~キーに変更
DiamondKey (+EISU->`~).sit(48KB)

 これ以外の組み合わせで使いたい人はソースファイルを編集してご自身でプログラムファイルを作成ください。詳しくは下の方に記してあります。

●DiamondKeyソースファイル
DiamondKeySource.sit(12KB)

 

5.DiamondKeyのインストール

 DiamondKeyは次のようにしてインストールします。

(1)コンフリクトの恐れのあるファイルを外す
 DiamondKeyと同等の機能を持つファイル(キーの入れ替えを行うkext)は外しておいてください。「DoubleCommand」「SwapCommandOption」「Kappa」「Tesla」などはDiamondKeyと同じように「iJect」をベースにしているので同時に使うことはできません。各ページの説明を読み,アンインストールしてください。

(2)圧縮ファイルを伸張(解凍)する
 ダウンロードしたDiamondKeyの圧縮ファイルを伸張(解凍)してください。圧縮ファイルはStuffIt形式(.sit)となっているので,Mac OS Xのユーティリティフォルダに入っている「StuffIt Expander」で伸張(解凍)可能です。


圧縮ファイルを伸張(解凍)するとフォルダができます。そのフォルダの中にある「DiamondKey」というフォルダをシステムにインストールすることになります

(3)DiamondKeyフォルダをシステムにコピーする
 圧縮ファイルを伸張(解凍)すると,「DiamondKey (Normal)」や「DiamondKey (+kana->command)」,「DiamondKey (+EISU->`~)」といったフォルダができます。どのフォルダの中にも「DiamondKey」というフォルダがあります。このDiamondKeyフォルダをシステムにコピーします。
 コピー先は/Library/StartupItemsです。起動ディスクを開き,そこにある「Library」(日本語表記だと「ライブラリ」)というフォルダを開き,その中の「StartupItems」というフォルダにDiamondKeyフォルダを入れます。StartupItemsフォルダがない場合は名前を間違えないように作成してください。
 なお,この作業は「管理者」の権限をもつユーザーでなければできません。


最終的に上のような状態になるようにインストールします

(4)再起動する
 最後に再起動をします。ログオフでなく,再起動です。再起動後,DiamondKeyは機能しはじめます。
 Mac OS X 10.2だとインストール直後に次のような警告メッセージが出てきますが,「修復して使用する」を選んでください。


10.2にインストールして最初の一回だけでてくるダイアログです

 

6.DiamondKeyの動作原理と考えられる不都合

 DiamondKeyはカーネルというかなりローレベルの部分で動作します。カーネルがキーボードから情報(キーコードやキーフラグ)を受け取った際,その情報を分析し,必要に応じてカーネルより上のレベルのシステムやアプリケーションに対して違うキーが押されたものとして動作させることができるのです。例えば,controlキー+Eキーは「キーコード:14 キーフラグ:0x40000」という情報を持ちます。DiamondKeyはこの情報を受け取ったとき「キーコード:126 キーフラグ:0x200000」,すなわち↑キーの情報にすげ替えることでアプリケーションは↑キーが押されたものとして動作するというわけです。

 このようにもっともローレベルで動くため,そシステムを不安定にする可能性があり,システムがアップデートされた際に動かなくなる可能性もあります。また,アプリケーションによっては不都合が生じる可能性もあります。例えば,controlキー+Sキーに何らかの機能が割り当てられているアプリケーションの場合,DiamondKeyを入れているとアプリケーションは←キーを押されたと思ってしまうため,ショートカットが利きません。また,commandキー+controlキー+Sキーというのもアプリケーションはcommandキー+←キーが押されたと思ってしまうため,正しく実行できないでしょう。

 

7.DiamondKeyのカスタマイズ

 DiamondKeyはiJect」と同様にGPL 2.0ライセンスに準拠しています。つまり,複製や再配布が自由はのはもちろん,ソースファイルも公開してますので,それを自由に改変して使用/公開することが可能です(ただし,公開する場合はGPL 2.0ライセンスに準拠する必要があります)。

 お好みの設定で使っていただくための参考として以下の情報を提供しますが,この「ソースのカスタムやビルド」についての質問等はご遠慮くださいますようお願いいたします(メールをいただいても返事は期待しないでください)。“分かっている人(分かってくれる人)”のみ,参考くださいませ。

●「ODHIDHack.cpp」の先頭部を編集することで機能のオン/オフが可能
 DiamondKeyは「kextMain.c」と「ODHIDHack.cpp」の2つのソースファイルを持ちます。後者のODHIDHack.cppの先頭部に書かれている#defineや#undefの定義文を編集することで,ダイヤモンドカーソル機能やキー変更の機能のオン/オフをすることができます。作者が提供していない「ダイヤモンドカーソル機能+英数キーを`/~キーに変更」といったものや「ダイヤモンドカーソル機能はなく,カナ/かなキーをcommandキーに変更+英数キーを`/~キーに変更」といったプログラムも作成することが可能です。

●プログラムの名称変更は注意を
 自分でカスタムしたプログラムはオリジナルの名前を付けたいところでしょうが,できるだけやめておいたほうがいいでしょう。Mac OS 9の機能拡張ファイルと違ってkextは起動スクリプトやプロパティリストと連携して動作しますので,ビルドしたkextファイルの名前を変更しただけでは動きません。どうしてもオリジナルの名前にしたい人はプロジェクトから作り替えたほうが早いのですが,その辺りはご自身でお調べ下さい(説明するのが面倒なので:))。

●キーコードを調べるにはOD_DEBUGをオンに
 ODHIDHack.cppの先頭部に書かれている#undef OD_DEBUGを#defineにするとデバッグモードがオンとなります。デバッグモードをオンにするとsystem.logに押されたときのキー情報とアプリケーションに渡すキー情報を見ることができます(通常はどちらも一緒のはずですが,カスタムしたキーを押したときは異なる情報を見ることができるでしょう)。これを使うことでDiamondKeyをカスタムする際にキー情報を調べるほか,各種アプリケーション開発時にカーネルがどういったキーを受け取っているのかを調べるのにも役立てられるでしょう。
 なお,作者がDiamondKey制作のために調べたキーコードを下に記しておきます。良かったら参考にしてくださいませ。

【キーの状態(event type)】

10

キーを押した

11

キーを離した

12

モディファイアキーを押した/離した

【キーフラグ(flags)】

0x0

一般キー

0x10000

capslockキー

0x20000

shiftキー

0x40000

controlキー

0x80000

optionキー

0x100000

commandキー

0x200000

カーソル/テンキー

0x800000

Fnキー

【キーコード(key)】

102

英数キー

104

カナ/かなキー

49

スペースキー

51

deleteキー

126

↑キー

125

↓キー

124

→キー

123

←キー

116

page upキー

121

page downキー

55

commandキー

58

optionキー

59

controlキー

56

shiftキー

57

capslockキー

53

escキー

1

Sキー

2

Dキー

14

Eキー

15

Rキー

7

Xキー

8

Cキー

4

Hキー

50

`/~キー

 

8.DiamondKeyのライセンス,及び作者について

 DiamondKeyはGPL 2.0ライセンスに準拠したフリーソフトウェアです。著作権は作者にありますが,複製,再配布,ソースの改変等は自由です。

 商用/無償に関わらず各種メディア(雑誌/書籍/ホームページなど)への引用/紹介も,これを許諾します。なお,URLを掲載する場合は本ページにお願いします。

 以上の行為について作者への事前確認/事後承諾は不要です。ただ,改変/紹介した旨を後々にでもお知らせいただけるとなんとなくハッピーになれますので,ご一報いただくことについては拒否しません。

 なお,作者は「濱田宏貴(はまだひろたか/Hirotaka Hamada)」です。作者へのコンタクトはhhamada@mac.comまでお願いします。DiamondKeyの感想やコメントなどもこちらにいただければと思います。

 

9.謝辞

 DiamondKeyは「iJect」がなければ誕生しませんでした。iJectの作者であるChristian Starkjohann氏に感謝いたします。

 DiamondKeyを開発する上で「DoubleCommand」「SwapCommandOption」「Kappa」「Tesla」のソースコードを参考にさせていただきました。各プログラムの作者の方々にも感謝の意を表します。

 DiamondKeyを公開する上で作者がお世話になっている「ZDNet Mac」を使わせていただきました(作者が担当させていただいているコラムにDiamondKeyの開発秘話が掲載されています)。ZDnet Macのスタッフ/読者のみなさまにも御礼申し上げます。

 

10.履歴

ver.1.2 -- 2002/09 ファーストリリース。バージョン番号はiJectに合わせた