DashboardでEmacsのコマンドタイピング

Screen shot
こちらでは初めまして。スタートアップ研修記の方で記事を書いてたりする新入社員のuchiumiです。
Dashboard上で動く、メタキーの使えるEmacsのコマンドタイピングゲームを作ってみました。
画面上に出てくるEmacsのコマンドを、ひたすら打って覚えよう!というような感じのものです。
遊び方は、解凍後、ダブルクリックでインストールしていただき、「保持」というボタンがあるので、それを選択するとDashboardに表示されるようになります。

Emacsを学んでいくうちに、コマンドのタイピングゲームみたいなのががあったら良いなぁと思い検索してみたところ、素敵なものを発見しましたが、残念ながらcommandキー(メタキー)がうまく使えないようでした。
どうやらブラウザなどのコマンドの方が先に優先されてしまうみたいです。
どうしたらメタキーが使えるか先輩社員の方に相談してみたところ、Dashboard上で動かせば大丈夫なんじゃないかという素晴らしい提案をいただいただきましたので、さっそくwidgetsを作ってみることにしました。

結果は、改善点はまだたくさん有りながらも、メタキーを使用したコマンドのタイピングができるものを作ることができました。

仕様としては、

  • 画面上にコマンドが1つ表示されるので、それを打ちつづける
  • あっていればyesと表示され、そのコマンドは消えて次のコマンドが表示される
  • 間違っていればnoと表示され正解するまでコマンドは消えない
  • shiftキー、controlキー、commandキーのみを押している場合は、違くてもnoとはでない
  • 上ので述べたそれぞれのキーコードと、その他の押されたキーコードを足してあっているかを判断する。

みたいな感じです。

しかし同期の同じPC(Mac OS X 10.5.2)上だとcontrolキー、commandキー、shiftキーのキーコードが取得できないようでした。
キーコード取得は、

document.onkeydown = checkKeycode
function checkKeycode(e) {
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;
   downKey(keycode);
}

というようなコードで取得しています。(グクってコピペしました)
先輩社員にデバック用関数をもらったりしていろいろ試してみた結果、Firefoxではそれぞれ取得できるようでしたが、Dashcodeの方だと取得できないという結果でした。
どうやらキーを押したときに、onkeydownが動いてくれないみたいです。
もしかしたら何かソフトを入れたりしたのを忘れている。という可能性もあるのですが、これといったものが思い浮かばず困っています。
もし何か解決策がありましたら教えていただけると有り難いですm(_ _)m

問題のwidgets

コメント / トラックバック 2 件

#1 Kanasansoft 2009/05/06 15:58

はじめまして。
動作確認はしていませんが、
・documentではなくdocument.bodyにイベントを設定
・イベントの設定にaddEventListenerを使用
等はどうでしょうか。
あと、window.eventの部分はIEの独自機能へ対応する処理のため、Dashboard前提であれば不要です。

#2 uchiumi 2009/05/18 18:27

コメントありがとうございます!
なるほどwindow.event〜の部分はIEを考慮した処理だったのですね。考えもせずに使ってしまっていました;
addEventListenerは知らない知識だったので、調べつついろいろ試してみたいと思います!
助言、ご指摘ありがとうございましたm(_ _)m

コメントする