Hatena::Groupvimperator

Vimple Star Sprites RSSフィード

 | 

2009-02-25

feedSomeKeys_2.js ちょっと更新

20:57 | feedSomeKeys_2.js ちょっと更新 - Vimple Star Sprites を含むブックマーク はてなブックマーク - feedSomeKeys_2.js ちょっと更新 - Vimple Star Sprites

先日、といってもちょっと前か、Gmailは動くけど、GoogleReader, GoogleCalendarで動かないぞ、このやろうって声がメーリングリストで上がっていたので対応した。

んで、GoogleのWebApplicationのキーボードショートカットってなんだか統一性が無いことが分かった。

加えた機能

結論から書いてしまうと、-eventオプションを実装して、どのイベント名を投げるかを指定できるようにした。keypress,keydown,keyupを指定できるようになっている(省略時はkeypress)

今までは全てkeypressでやっていたが、以下に示すようにkeydownイベントも必要になったため加えた。

以下余談

Gmailの場合
  • keypressイベントでキーイベントを受け取っている
  • 3つめのインラインフレーム中にイベントを投げてやる必要がある

コマンドにすると

fmap -depth 4 ...
GoogleReaderの場合
  • keypressイベントだが、keydownイベント相当のイベント内容を受け取っている?(少なくともそのように見える)

コマンドにすると

fmap -vkey ...
GoogleCalendarの場合
  • keydownイベントを受け取っている

コマンドにすると

fmap -vkey -event keydown ...

同じGoogleが提供するものなのに、こうまで違うのかというくらいに違う。何故に?

キーイベント

ここで、ちょっとキーボードイベントのおさらいをする。

キーボードイベントでよく使われるのが、keypresskeydownイベントだ。両者はイベントの内容がちょっと異なる。また、キーイベントの内容はkeyCodecharCodeと修飾子によってなりたつ。keyCodeは物理的にどのキーが押されたかで、charCodeは論理的で押されたキーを文字列(ASCII)でどのコードになるかをあらわすと思ってくれて良い。

  • keypress
    • 主にcharCodeに値が入る
      • aなら97といった具合(ASCIIコードで"a"の意)
    • charCodeであらわせないキーの場合はkeyCodeが使用される(例:<F2>)
    • 修飾子のみ(例:Shift)は受け取れない
  • keydown
    • keyCodeに値が入る
      • aなら65
      • Shift + a(A)なら65に加えて修飾子のshifttrueになる(AShiftが押されたよという意味になる)
    • charCodeは常に0
    • 修飾子のみでも受け取れる
GoogleReaderの良く分からん挙動

feedSomeKeys_2.jsには-vkeyオプションが存在し、このオプションでkeyCodeを使用するようにできる。このオプションの有無でkeypressイベントにするかkeydownイベントにするかのスイッチが可能だ。

最初はそう思って作った。しかし、上であげたとおりGoogleReaderが良く分からん挙動を示し、keypressイベントなのにkeydownの様なイベント内容にして送ってやらないといけなかったため、新たなオプションを追加せざる得なかった。

 |