Now browsing the archives for the 'FireGestures' category.

Software Design 2009年1月号 : Firefox徹底カスタマイズ術

Software Design 2009年1月号

Software Design 2009年1月号|gihyo.jp … 技術評論社
第2特集
~Greasemonkey+α,Ubiquity,Vimperator,Firemacs,FireGestures~ Firefox徹底カスタマイズ術

TOP

FireGestures キープレスジェスチャの機能割り当て

現在のところ、 FireGestures のキープレスジェスチャは、以下のように割り当てが固定されていた。

  • Shift キーを押しながらマウスジェスチャ: マウスが通過したリンクをタブで開く
  • Ctrl キーを押しながらマウスジェスチャ: マウスが通過したリンク先を保存する

しかし、 AMO のディスカッション Is it possible to harmonize Keypress gestures ? にて、 Firefox の標準動作では、

  • リンク上で Ctrl + クリック: リンクをタブで開く
  • リンク上で Alt + クリック: リンク先を保存する

なので、これに合わせて以下のような割り当てにしたらどうかという提案があった。

  • Ctrl キーを押しながらマウスジェスチャ: マウスが通過したリンクをタブで開く
  • Alt キーを押しながらマウスジェスチャ: マウスが通過したリンク先を保存する

なるほど確かにこれは理にかなっていると思ったが、残念なことに Linux では Alt キーを押しながらの右クリックはアプリケーションのコンテキストメニューを表示するための特別な役割があるようで、リンク上で Alt + クリックや、 Alt キーを押しながらのジェスチャができないことがわかった。

やはり、キープレスジェスチャは Ctrl / Shift キー、ということにするしかなさそうだ。

TOP

FireGestures ボツネタ ~ 複数機能のポップアップ

※このエントリの内容は FireGestures のボツネタ機能に関する説明です。

機能

通常マウスジェスチャでは、ひとつのジェスチャにはひとつの機能しか割り当てることができないが、ひとつのジェスチャに対して複数の機能割り当てを許可し、そのジェスチャを行うとポップアップを表示して実行したい機能を選択できるという機能。

例えば、↑のジェスチャに対して、「新しいウィンドウ」「新しいタブ」の2つの機能を割り当てる。
すると、↑のジェスチャを行うと下図のようなポップアップが表示され、本当に実行したい機能を選択できる。

あまり使わない機能群に対して同一ジェスチャを割り当てておけば、覚えなければならないジェスチャの数も減らせて効果的である。

実装

とりあえず実装してみたところ、小1時間ほどでできた。改修したポイントは以下の5点。

  • 機能のタイプの定義へ、新たにポップアップ型を追加。(現状は標準装備型とユーザスクリプト型の2種類)
  • 設定画面にて、複数機能に対して同一ジェスチャの割り当てを許可する(現状は同一ジェスチャを割り当てようとするとダイアログ表示)。
  • マッピング管理では、同一ジェスチャに対して複数の機能が割り当てられている場合、それらの機能のIDをタブで連結した文字列にて保持する。
  • ユーザが行ったジェスチャに対してポップアップ型機能が割り当てられている場合、ポップアップを表示する(1度目の機能実行)。
    さらにポップアップからメニュー項目を選択すると、そのメニュー項目に割り当てられているコマンドを実行する(2度目の機能実行)。つまり、2段階で目的の機能を実行する形となる。
  • 実際にポップアップを表示する処理は、元々あるホイールジェスチャなどから表示するポップアップの実装を流用。

問題点

「リンクをタブで開く」のようにジェスチャの始点のリンクに対して何かするような機能をポップアップから実行する場合に痛い問題が発生。ジェスチャ開始位置のDOM要素への参照は、ジェスチャ実行開始~終了までの間は保持するものの、ジェスチャに割り当てられた機能を実行後にメモリリーク対策として破棄してしまう。よって、2度目の機能実行(ポップアップのメニュー項目を選択)をした時点では、ジェスチャ始点にあるDOM要素はもはや保持されておらず、リンク先に対する処理が実行できない。

ジェスチャ開始位置のDOM要素への参照を破棄するタイミングを変えることができるように修正しようとしたが、ロジックがだいぶ複雑化しそうなので早々に諦めた。

TOP